mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 10:04:49 +00:00
- Implement CM_Get_Depth[_Ex] and CM_Get_DevNode_Status[_Ex].
- Add dummy code for CM_Get_Child_Ex, CM_Get_Parent_Ex and CM_Get_Sibling_Ex. WIDL doesn't support this yet. svn path=/trunk/; revision=16645
This commit is contained in:
parent
4e94521b41
commit
5b843df690
6 changed files with 467 additions and 24 deletions
|
@ -24,4 +24,29 @@ interface pnp
|
|||
CONFIGRET PNP_ValidateDeviceInstance(handle_t BindingHandle,
|
||||
[in, string] wchar_t *DeviceInstance,
|
||||
[in] DWORD Flags);
|
||||
|
||||
CONFIGRET PNP_GetRootDeviceInstance(handle_t BindingHandle,
|
||||
[out, string, size_is(Length)] wchar_t *DeviceInstance,
|
||||
[in] DWORD Length);
|
||||
|
||||
// cpp_quote("#define PNP_DEVICE_PARENT 1")
|
||||
// cpp_quote("#define PNP_DEVICE_CHILD 2")
|
||||
// cpp_quote("#define PNP_DEVICE_SIBLING 3")
|
||||
// CONFIGRET PNP_GetRelatedDeviceInstance(handle_t BindingHandle,
|
||||
// [in] DWORD Relationship,
|
||||
// [in, string] wchar_t *DeviceId,
|
||||
// [out, string, size_is(Length)] wchar_t *RelatedDeviceId,
|
||||
// [in] DWORD Length,
|
||||
// [in] DWORD Flags);
|
||||
|
||||
CONFIGRET PNP_GetDepth(handle_t BindingHandle,
|
||||
[in, string] wchar_t *DeviceInstance,
|
||||
[out] unsigned long *Depth,
|
||||
[in] DWORD Flags);
|
||||
|
||||
CONFIGRET PNP_GetDeviceStatus(handle_t BindingHandle,
|
||||
[in, string] wchar_t *DeviceInstance,
|
||||
[out] unsigned long *Status,
|
||||
[out] unsigned long *Problem,
|
||||
[in] DWORD Flags);
|
||||
}
|
||||
|
|
|
@ -81,6 +81,8 @@ CONFIGRET WINAPI CM_Enumerate_Classes( ULONG, LPGUID, ULONG );
|
|||
CONFIGRET WINAPI CM_Enumerate_Classes_Ex( ULONG, LPGUID, ULONG, HMACHINE );
|
||||
CONFIGRET WINAPI CM_Get_Child( PDEVINST, DEVINST, ULONG );
|
||||
CONFIGRET WINAPI CM_Get_Child_Ex( PDEVINST, DEVINST, ULONG, HMACHINE );
|
||||
CONFIGRET WINAPI CM_Get_Depth( PULONG, DEVINST, ULONG );
|
||||
CONFIGRET WINAPI CM_Get_Depth_Ex( PULONG, DEVINST, ULONG, HMACHINE );
|
||||
CONFIGRET WINAPI CM_Get_Device_IDA( DEVINST, PCHAR, ULONG, ULONG );
|
||||
CONFIGRET WINAPI CM_Get_Device_IDW( DEVINST, PWCHAR, ULONG, ULONG );
|
||||
#define CM_Get_Device_ID WINELIB_NAME_AW(CM_Get_Device_ID)
|
||||
|
@ -101,6 +103,8 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW( PULONG, PCWSTR, ULONG, HMACHINE
|
|||
#define CM_Get_Device_ID_List_Size_Ex WINELIB_NAME_AW(CM_Get_Device_ID_List_Size_Ex)
|
||||
CONFIGRET WINAPI CM_Get_Device_ID_Size( PULONG, DEVINST, ULONG );
|
||||
CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex( PULONG, DEVINST, ULONG, HMACHINE );
|
||||
CONFIGRET WINAPI CM_Get_DevNode_Status( PULONG, PULONG, DEVINST, ULONG );
|
||||
CONFIGRET WINAPI CM_Get_DevNode_Status_Ex( PULONG, PULONG, DEVINST, ULONG, HMACHINE );
|
||||
CONFIGRET WINAPI CM_Get_Global_State( PULONG, ULONG );
|
||||
CONFIGRET WINAPI CM_Get_Global_State_Ex( PULONG, ULONG, HMACHINE );
|
||||
CONFIGRET WINAPI CM_Get_Parent( PDEVINST, DEVINST, ULONG );
|
||||
|
|
|
@ -79,18 +79,18 @@ CM_Get_Child_Ex@16=SETUPAPI.CM_Get_ChildEx
|
|||
;CM_Get_Class_NameW
|
||||
;CM_Get_Class_Name_ExA
|
||||
;CM_Get_Class_Name_ExW
|
||||
;CM_Get_Depth
|
||||
;CM_Get_Depth_Ex
|
||||
CM_Get_Depth@12=SETUPAPI.CM_Get_Depth
|
||||
CM_Get_Depth_Ex@16=SETUPAPI.CM_Get_Depth_Ex
|
||||
CM_Get_DevNode_Registry_PropertyA@24=SETUPAPI.CM_Get_DevNode_Registry_PropertyA
|
||||
CM_Get_DevNode_Registry_PropertyW@24=SETUPAPI.CM_Get_DevNode_Registry_PropertyW
|
||||
CM_Get_DevNode_Registry_Property_ExA@28=SETUPAPI.CM_Get_DevNode_Registry_Property_ExA
|
||||
CM_Get_DevNode_Registry_Property_ExW@28=SETUPAPI.CM_Get_DevNode_Registry_Property_ExW
|
||||
;CM_Get_DevNode_Status
|
||||
;CM_Get_DevNode_Status_Ex
|
||||
;CM_Get_Device_IDA
|
||||
;CM_Get_Device_IDW
|
||||
;CM_Get_Device_ID_ExA
|
||||
;CM_Get_Device_ID_ExW
|
||||
CM_Get_DevNode_Status@16=SETUPAPI.CM_Get_DevNode_Status
|
||||
CM_Get_DevNode_Status_Ex@20=SETUPAPI.CM_Get_DevNode_Status_Ex
|
||||
CM_Get_Device_IDA@16=SETUPAPI.CM_Get_Device_IDA
|
||||
CM_Get_Device_IDW@16=SETUPAPI.CM_Get_Device_IDW
|
||||
CM_Get_Device_ID_ExA@20=SETUPAPI.CM_Get_Device_ID_ExA
|
||||
CM_Get_Device_ID_ExW@20=SETUPAPI.CM_Get_Device_ID_ExW
|
||||
CM_Get_Device_ID_ListA@16=SETUPAPI.CM_Get_Device_ID_ListA
|
||||
CM_Get_Device_ID_ListW@16=SETUPAPI.CM_Get_Device_ID_ListW
|
||||
CM_Get_Device_ID_List_ExA@20=SETUPAPI.CM_Get_Device_ID_List_ExA
|
||||
|
@ -99,8 +99,8 @@ CM_Get_Device_ID_List_SizeA@12=SETUPAPI.CM_Get_Device_ID_List_SizeA
|
|||
CM_Get_Device_ID_List_SizeW@12=SETUPAPI.CM_Get_Device_ID_List_SizeW
|
||||
CM_Get_Device_ID_List_Size_ExA@16=SETUPAPI.CM_Get_Device_ID_List_Size_ExA
|
||||
CM_Get_Device_ID_List_Size_ExW@16=SETUPAPI.CM_Get_Device_ID_List_Size_ExA
|
||||
;CM_Get_Device_ID_Size
|
||||
;CM_Get_Device_ID_Size_Ex
|
||||
CM_Get_Device_ID_Size@12=SETUPAPI.CM_Get_Device_ID_Size
|
||||
CM_Get_Device_ID_Size_Ex@16=SETUPAPI.CM_Get_Device_ID_Size_Ex
|
||||
;CM_Get_Device_Interface_AliasA
|
||||
;CM_Get_Device_Interface_AliasW
|
||||
;CM_Get_Device_Interface_Alias_ExA
|
||||
|
@ -115,8 +115,8 @@ CM_Get_Device_ID_List_Size_ExW@16=SETUPAPI.CM_Get_Device_ID_List_Size_ExA
|
|||
;CM_Get_Device_Interface_List_Size_ExW
|
||||
;CM_Get_First_Log_Conf
|
||||
;CM_Get_First_Log_Conf_Ex
|
||||
;CM_Get_Global_State
|
||||
;CM_Get_Global_State_Ex
|
||||
CM_Get_Global_State@8=SETUPAPI.CM_Get_Global_State
|
||||
CM_Get_Global_State_Ex@12=SETUPAPI.CM_Get_Global_State_Ex
|
||||
;CM_Get_HW_Prof_FlagsA
|
||||
;CM_Get_HW_Prof_FlagsW
|
||||
;CM_Get_HW_Prof_Flags_ExA
|
||||
|
@ -144,6 +144,7 @@ CM_Get_Version_Ex@4=SETUPAPI.CM_Get_Version_Ex
|
|||
;CM_Intersect_Range_List
|
||||
;CM_Invert_Range_List
|
||||
;CM_Is_Dock_Station_Present
|
||||
;CM_Is_Dock_Station_Present_Ex
|
||||
CM_Locate_DevNodeA@12=SETUPAPI.CM_Locate_DevNodeA
|
||||
CM_Locate_DevNodeW@12=SETUPAPI.CM_Locate_DevNodeW
|
||||
CM_Locate_DevNode_ExA@16=SETUPAPI.CM_Locate_DevNode_ExA
|
||||
|
|
|
@ -251,11 +251,123 @@ CONFIGRET WINAPI CM_Get_Child(
|
|||
CONFIGRET WINAPI CM_Get_Child_Ex(
|
||||
PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
|
||||
{
|
||||
#if 0
|
||||
WCHAR szRelatedDevInst[MAX_DEVICE_ID_LEN];
|
||||
RPC_BINDING_HANDLE BindingHandle = NULL;
|
||||
HSTRING_TABLE StringTable = NULL;
|
||||
LPWSTR lpDevInst;
|
||||
DWORD dwIndex;
|
||||
CONFIGRET ret;
|
||||
|
||||
TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
|
||||
|
||||
if (pdnDevInst == NULL)
|
||||
return CR_INVALID_POINTER;
|
||||
|
||||
if (dnDevInst == 0)
|
||||
return CR_INVALID_DEVINST;
|
||||
|
||||
if (ulFlags != 0)
|
||||
return CR_INVALID_FLAG;
|
||||
|
||||
*pdnDevInst = -1;
|
||||
|
||||
if (hMachine != NULL)
|
||||
{
|
||||
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
|
||||
if (BindingHandle == NULL)
|
||||
return CR_FAILURE;
|
||||
|
||||
StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
|
||||
if (StringTable == 0)
|
||||
return CR_FAILURE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
||||
lpDevInst = StringTableStringFromId(StringTable, dnDevInst);
|
||||
if (lpDevInst == NULL)
|
||||
return CR_INVALID_DEVNODE;
|
||||
|
||||
ret = PNP_GetRelatedDeviceInstance(BindingHandle,
|
||||
PNP_DEVICE_CHILD,
|
||||
lpDevInst,
|
||||
szRelatedDevInst,
|
||||
MAX_DEVICE_ID_LEN,
|
||||
0);
|
||||
if (ret != CR_SUCCESS)
|
||||
return ret;
|
||||
|
||||
TRACE("szRelatedDevInst: %s\n", debugstr_w(szRelatedDevInst));
|
||||
|
||||
dwIndex = StringTableAddString(StringTable, szRelatedDevInst, 1);
|
||||
if (dwIndex == -1)
|
||||
return CR_FAILURE;
|
||||
|
||||
*pdnDevInst = dwIndex;
|
||||
|
||||
return CR_SUCCESS;
|
||||
#endif
|
||||
FIXME("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CM_Get_Depth [SETUPAPI.@]
|
||||
*/
|
||||
CONFIGRET WINAPI CM_Get_Depth(
|
||||
PULONG pulDepth, DEVINST dnDevInst, ULONG ulFlags)
|
||||
{
|
||||
TRACE("%p %lx %lx\n",
|
||||
pulDepth, dnDevInst, ulFlags);
|
||||
return CM_Get_Depth_Ex(pulDepth, dnDevInst, ulFlags, NULL);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CM_Get_Depth_Ex [SETUPAPI.@]
|
||||
*/
|
||||
CONFIGRET WINAPI CM_Get_Depth_Ex(
|
||||
PULONG pulDepth, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
|
||||
{
|
||||
RPC_BINDING_HANDLE BindingHandle = NULL;
|
||||
HSTRING_TABLE StringTable = NULL;
|
||||
LPWSTR lpDevInst;
|
||||
|
||||
TRACE("%p %lx %lx %lx\n",
|
||||
pulDepth, dnDevInst, ulFlags, hMachine);
|
||||
|
||||
if (hMachine != NULL)
|
||||
{
|
||||
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
|
||||
if (BindingHandle == NULL)
|
||||
return CR_FAILURE;
|
||||
|
||||
StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
|
||||
if (StringTable == 0)
|
||||
return CR_FAILURE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
||||
lpDevInst = StringTableStringFromId(StringTable, dnDevInst);
|
||||
if (lpDevInst == NULL)
|
||||
return CR_INVALID_DEVNODE;
|
||||
|
||||
return PNP_GetDepth(BindingHandle,
|
||||
lpDevInst,
|
||||
pulDepth,
|
||||
ulFlags);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CM_Get_Device_IDA [SETUPAPI.@]
|
||||
*/
|
||||
|
@ -322,9 +434,7 @@ CONFIGRET WINAPI CM_Get_Device_ID_ExW(
|
|||
dnDevInst,
|
||||
Buffer,
|
||||
&BufferLen))
|
||||
{
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
||||
return CR_SUCCESS;
|
||||
}
|
||||
|
@ -434,7 +544,7 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW(
|
|||
CONFIGRET WINAPI CM_Get_Device_ID_Size(
|
||||
PULONG pulLen, DEVINST dnDevInst, ULONG ulFlags)
|
||||
{
|
||||
TRACE("%p %p %lx\n", pulLen, dnDevInst, ulFlags);
|
||||
TRACE("%p %lx %lx\n", pulLen, dnDevInst, ulFlags);
|
||||
return CM_Get_Device_ID_Size_Ex(pulLen, dnDevInst, ulFlags, NULL);
|
||||
}
|
||||
|
||||
|
@ -448,7 +558,7 @@ CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex(
|
|||
HSTRING_TABLE StringTable = NULL;
|
||||
LPWSTR DeviceId;
|
||||
|
||||
TRACE("%p %p %lx %lx\n", pulLen, dnDevInst, ulFlags, hMachine);
|
||||
TRACE("%p %lx %lx %lx\n", pulLen, dnDevInst, ulFlags, hMachine);
|
||||
|
||||
if (hMachine != NULL)
|
||||
{
|
||||
|
@ -475,6 +585,63 @@ CONFIGRET WINAPI CM_Get_Device_ID_Size_Ex(
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CM_Get_DevNode_Status [SETUPAPI.@]
|
||||
*/
|
||||
CONFIGRET WINAPI CM_Get_DevNode_Status(
|
||||
PULONG pulStatus, PULONG pulProblemNumber, DEVINST dnDevInst,
|
||||
ULONG ulFlags)
|
||||
{
|
||||
TRACE("%p %p %lx %lx\n",
|
||||
pulStatus, pulProblemNumber, dnDevInst, ulFlags);
|
||||
return CM_Get_DevNode_Status_Ex(pulStatus, pulProblemNumber, dnDevInst,
|
||||
ulFlags, NULL);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CM_Get_DevNode_Status_Ex [SETUPAPI.@]
|
||||
*/
|
||||
CONFIGRET WINAPI
|
||||
CM_Get_DevNode_Status_Ex(
|
||||
PULONG pulStatus, PULONG pulProblemNumber, DEVINST dnDevInst,
|
||||
ULONG ulFlags, HMACHINE hMachine)
|
||||
{
|
||||
RPC_BINDING_HANDLE BindingHandle = NULL;
|
||||
HSTRING_TABLE StringTable = NULL;
|
||||
LPWSTR lpDevInst;
|
||||
|
||||
TRACE("%p %p %lx %lx %lx\n",
|
||||
pulStatus, pulProblemNumber, dnDevInst, ulFlags, hMachine);
|
||||
|
||||
if (hMachine != NULL)
|
||||
{
|
||||
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
|
||||
if (BindingHandle == NULL)
|
||||
return CR_FAILURE;
|
||||
|
||||
StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
|
||||
if (StringTable == 0)
|
||||
return CR_FAILURE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
||||
lpDevInst = StringTableStringFromId(StringTable, dnDevInst);
|
||||
if (lpDevInst == NULL)
|
||||
return CR_INVALID_DEVNODE;
|
||||
|
||||
return PNP_GetDeviceStatus(BindingHandle,
|
||||
lpDevInst,
|
||||
pulStatus,
|
||||
pulProblemNumber,
|
||||
ulFlags);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* CM_Get_Global_State [SETUPAPI.@]
|
||||
*/
|
||||
|
@ -535,6 +702,66 @@ CONFIGRET WINAPI CM_Get_Parent(
|
|||
CONFIGRET WINAPI CM_Get_Parent_Ex(
|
||||
PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
|
||||
{
|
||||
#if 0
|
||||
WCHAR szRelatedDevInst[MAX_DEVICE_ID_LEN];
|
||||
RPC_BINDING_HANDLE BindingHandle = NULL;
|
||||
HSTRING_TABLE StringTable = NULL;
|
||||
LPWSTR lpDevInst;
|
||||
DWORD dwIndex;
|
||||
CONFIGRET ret;
|
||||
|
||||
TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
|
||||
|
||||
if (pdnDevInst == NULL)
|
||||
return CR_INVALID_POINTER;
|
||||
|
||||
if (dnDevInst == 0)
|
||||
return CR_INVALID_DEVINST;
|
||||
|
||||
if (ulFlags != 0)
|
||||
return CR_INVALID_FLAG;
|
||||
|
||||
*pdnDevInst = -1;
|
||||
|
||||
if (hMachine != NULL)
|
||||
{
|
||||
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
|
||||
if (BindingHandle == NULL)
|
||||
return CR_FAILURE;
|
||||
|
||||
StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
|
||||
if (StringTable == 0)
|
||||
return CR_FAILURE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
||||
lpDevInst = StringTableStringFromId(StringTable, dnDevInst);
|
||||
if (lpDevInst == NULL)
|
||||
return CR_INVALID_DEVNODE;
|
||||
|
||||
ret = PNP_GetRelatedDeviceInstance(BindingHandle,
|
||||
PNP_DEVICE_PARENT,
|
||||
lpDevInst,
|
||||
szRelatedDevInst,
|
||||
MAX_DEVICE_ID_LEN,
|
||||
0);
|
||||
if (ret != CR_SUCCESS)
|
||||
return ret;
|
||||
|
||||
TRACE("szRelatedDevInst: %s\n", debugstr_w(szRelatedDevInst));
|
||||
|
||||
dwIndex = StringTableAddString(StringTable, szRelatedDevInst, 1);
|
||||
if (dwIndex == -1)
|
||||
return CR_FAILURE;
|
||||
|
||||
*pdnDevInst = dwIndex;
|
||||
|
||||
return CR_SUCCESS;
|
||||
#endif
|
||||
FIXME("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
@ -557,6 +784,66 @@ CONFIGRET WINAPI CM_Get_Sibling(
|
|||
CONFIGRET WINAPI CM_Get_Sibling_Ex(
|
||||
PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
|
||||
{
|
||||
#if 0
|
||||
WCHAR szRelatedDevInst[MAX_DEVICE_ID_LEN];
|
||||
RPC_BINDING_HANDLE BindingHandle = NULL;
|
||||
HSTRING_TABLE StringTable = NULL;
|
||||
LPWSTR lpDevInst;
|
||||
DWORD dwIndex;
|
||||
CONFIGRET ret;
|
||||
|
||||
TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
|
||||
|
||||
if (pdnDevInst == NULL)
|
||||
return CR_INVALID_POINTER;
|
||||
|
||||
if (dnDevInst == 0)
|
||||
return CR_INVALID_DEVINST;
|
||||
|
||||
if (ulFlags != 0)
|
||||
return CR_INVALID_FLAG;
|
||||
|
||||
*pdnDevInst = -1;
|
||||
|
||||
if (hMachine != NULL)
|
||||
{
|
||||
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
|
||||
if (BindingHandle == NULL)
|
||||
return CR_FAILURE;
|
||||
|
||||
StringTable = ((PMACHINE_INFO)hMachine)->StringTable;
|
||||
if (StringTable == 0)
|
||||
return CR_FAILURE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (!PnpGetLocalHandles(&BindingHandle, &StringTable))
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
||||
lpDevInst = StringTableStringFromId(StringTable, dnDevInst);
|
||||
if (lpDevInst == NULL)
|
||||
return CR_INVALID_DEVNODE;
|
||||
|
||||
ret = PNP_GetRelatedDeviceInstance(BindingHandle,
|
||||
PNP_DEVICE_SIBLING,
|
||||
lpDevInst,
|
||||
szRelatedDevInst,
|
||||
MAX_DEVICE_ID_LEN,
|
||||
0);
|
||||
if (ret != CR_SUCCESS)
|
||||
return ret;
|
||||
|
||||
TRACE("szRelatedDevInst: %s\n", debugstr_w(szRelatedDevInst));
|
||||
|
||||
dwIndex = StringTableAddString(StringTable, szRelatedDevInst, 1);
|
||||
if (dwIndex == -1)
|
||||
return CR_FAILURE;
|
||||
|
||||
*pdnDevInst = dwIndex;
|
||||
|
||||
return CR_SUCCESS;
|
||||
#endif
|
||||
FIXME("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
|
||||
return CR_FAILURE;
|
||||
}
|
||||
|
@ -678,15 +965,20 @@ CONFIGRET WINAPI CM_Locate_DevNode_ExW(
|
|||
return CR_FAILURE;
|
||||
}
|
||||
|
||||
if (pDeviceID != NULL && wcslen(pDeviceID) != 0)
|
||||
if (pDeviceID != NULL && lstrlenW(pDeviceID) != 0)
|
||||
{
|
||||
lstrcpyW(DeviceIdBuffer, pDeviceID);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Get the root device ID */
|
||||
lstrcpyW(DeviceIdBuffer, L"HTREE\\ROOT\\0");
|
||||
rc = PNP_GetRootDeviceInstance(BindingHandle,
|
||||
DeviceIdBuffer,
|
||||
MAX_DEVICE_ID_LEN);
|
||||
if (rc != CR_SUCCESS)
|
||||
return CR_FAILURE;
|
||||
}
|
||||
TRACE("DeviceIdBuffer: %s\n", debugstr_w(DeviceIdBuffer));
|
||||
|
||||
/* Validate the device ID */
|
||||
rc = PNP_ValidateDeviceInstance(BindingHandle,
|
||||
|
|
|
@ -63,14 +63,14 @@
|
|||
@ stub CM_Get_Class_NameW
|
||||
@ stub CM_Get_Class_Name_ExA
|
||||
@ stub CM_Get_Class_Name_ExW
|
||||
@ stub CM_Get_Depth
|
||||
@ stub CM_Get_Depth_Ex
|
||||
@ stdcall CM_Get_Depth(ptr long long)
|
||||
@ stdcall CM_Get_Depth_Ex(ptr long long long)
|
||||
@ stub CM_Get_DevNode_Registry_PropertyA
|
||||
@ stub CM_Get_DevNode_Registry_PropertyW
|
||||
@ stub CM_Get_DevNode_Registry_Property_ExA
|
||||
@ stub CM_Get_DevNode_Registry_Property_ExW
|
||||
@ stub CM_Get_DevNode_Status
|
||||
@ stub CM_Get_DevNode_Status_Ex
|
||||
@ stdcall CM_Get_DevNode_Status(ptr ptr long long)
|
||||
@ stdcall CM_Get_DevNode_Status_Ex(ptr ptr long long long)
|
||||
@ stdcall CM_Get_Device_IDA(long str long long)
|
||||
@ stdcall CM_Get_Device_IDW(long wstr long long)
|
||||
@ stdcall CM_Get_Device_ID_ExA(long str long long long)
|
||||
|
|
|
@ -52,6 +52,7 @@ static SERVICE_TABLE_ENTRY ServiceTable[2] =
|
|||
{NULL, NULL}
|
||||
};
|
||||
|
||||
static WCHAR szRootDeviceId[] = L"HTREE\\ROOT\\0";
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
|
@ -176,6 +177,126 @@ Done:
|
|||
}
|
||||
|
||||
|
||||
CONFIGRET
|
||||
PNP_GetRootDeviceInstance(handle_t BindingHandle,
|
||||
wchar_t *DeviceInstance,
|
||||
unsigned long Length)
|
||||
{
|
||||
CONFIGRET ret = CR_SUCCESS;
|
||||
|
||||
DPRINT("PNP_GetRootDeviceInstance() called\n");
|
||||
|
||||
if (Length < lstrlenW(szRootDeviceId) + 1)
|
||||
{
|
||||
ret = CR_BUFFER_SMALL;
|
||||
goto Done;
|
||||
}
|
||||
|
||||
lstrcpyW(DeviceInstance,
|
||||
szRootDeviceId);
|
||||
|
||||
Done:
|
||||
DPRINT("PNP_GetRootDeviceInstance() done (returns %lx)\n", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
CONFIGRET
|
||||
PNP_GetRelatedDeviceInstance(handle_t BindingHandle,
|
||||
unsigned long Relationship,
|
||||
wchar_t *DeviceId,
|
||||
wchar_t *RelatedDeviceId,
|
||||
unsigned long Length,
|
||||
unsigned long Flags)
|
||||
{
|
||||
CONFIGRET ret = CR_SUCCESS;
|
||||
|
||||
DPRINT1("PNP_GetRelatedDeviceInstance() called\n");
|
||||
DPRINT1(" Relationship %ld\n", Relationship);
|
||||
DPRINT1(" DeviceId %S\n", DeviceId);
|
||||
|
||||
lstrcpyW(RelatedDeviceId,
|
||||
szRootDeviceId);
|
||||
|
||||
//Done:
|
||||
DPRINT1("PNP_GetRelatedDeviceInstance() done (returns %lx)\n", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
CONFIGRET
|
||||
PNP_GetDepth(handle_t BindingHandle,
|
||||
wchar_t *DeviceInstance,
|
||||
unsigned long *Depth,
|
||||
DWORD Flags)
|
||||
{
|
||||
PLUGPLAY_CONTROL_DEPTH_DATA PlugPlayData;
|
||||
CONFIGRET ret = CR_SUCCESS;
|
||||
NTSTATUS Status;
|
||||
|
||||
DPRINT1("PNP_GetDepth() called\n");
|
||||
|
||||
RtlInitUnicodeString(&PlugPlayData.DeviceInstance,
|
||||
DeviceInstance);
|
||||
|
||||
Status = NtPlugPlayControl(PlugPlayControlGetDeviceDepth,
|
||||
(PVOID)&PlugPlayData,
|
||||
sizeof(PLUGPLAY_CONTROL_DEPTH_DATA));
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
*Depth = PlugPlayData.Depth;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = CR_FAILURE; /* FIXME */
|
||||
}
|
||||
|
||||
DPRINT1("PNP_GetDepth() done (returns %lx)\n", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
CONFIGRET
|
||||
PNP_GetDeviceStatus(handle_t BindingHandle,
|
||||
wchar_t *DeviceInstance,
|
||||
unsigned long *pStatus,
|
||||
unsigned long *pProblem,
|
||||
DWORD Flags)
|
||||
{
|
||||
PLUGPLAY_CONTROL_STATUS_DATA PlugPlayData;
|
||||
CONFIGRET ret = CR_SUCCESS;
|
||||
NTSTATUS Status;
|
||||
|
||||
DPRINT1("PNP_GetDeviceStatus() called\n");
|
||||
|
||||
RtlInitUnicodeString(&PlugPlayData.DeviceInstance,
|
||||
DeviceInstance);
|
||||
PlugPlayData.Operation = 0; /* Get status */
|
||||
|
||||
Status = NtPlugPlayControl(PlugPlayControlDeviceStatus,
|
||||
(PVOID)&PlugPlayData,
|
||||
sizeof(PLUGPLAY_CONTROL_STATUS_DATA));
|
||||
if (NT_SUCCESS(Status))
|
||||
{
|
||||
*pStatus = PlugPlayData.DeviceStatus;
|
||||
*pProblem = PlugPlayData.DeviceProblem;
|
||||
}
|
||||
else
|
||||
{
|
||||
ret = CR_FAILURE; /* FIXME */
|
||||
}
|
||||
|
||||
DPRINT1("PNP_GetDeviceStatus() done (returns %lx)\n", ret);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
static DWORD WINAPI
|
||||
PnpEventThread(LPVOID lpParameter)
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue