Forward CM_Create_DevNode[_Ex]A/W to umpnpmgr.
Modified: trunk/reactos/include/idl/pnp.idl
Modified: trunk/reactos/include/wine/cfgmgr32.h
Modified: trunk/reactos/lib/cfgmgr32/cfgmgr32.def
Modified: trunk/reactos/lib/setupapi/cfgmgr.c
Modified: trunk/reactos/lib/setupapi/setupapi.spec
Modified: trunk/reactos/services/umpnpmgr/umpnpmgr.c
Modified: trunk/reactos/w32api/include/ddk/cfgmgr32.h
_____
Modified: trunk/reactos/include/idl/pnp.idl
--- trunk/reactos/include/idl/pnp.idl 2006-01-22 14:08:06 UTC (rev
20977)
+++ trunk/reactos/include/idl/pnp.idl 2006-01-22 14:33:04 UTC (rev
20978)
@@ -16,163 +16,170 @@
]
interface pnp
{
- /* Function 0 */
-// CONFIGRET PNP_Unknown0(handle_t BindingHandle);
+ /* Function 0 */
+// CONFIGRET PNP_Unknown0(handle_t BindingHandle);
- /* Function 1 */
-// CONFIGRET PNP_Unknown1(handle_t BindingHandle);
+ /* Function 1 */
+// CONFIGRET PNP_Unknown1(handle_t BindingHandle);
- /* Function 2 */
- CONFIGRET PNP_GetVersion(handle_t BindingHandle,
- [out] WORD *Version);
+ /* Function 2 */
+ CONFIGRET PNP_GetVersion(handle_t BindingHandle,
+ [out] WORD *Version);
- /* Function 3 */
- CONFIGRET PNP_GetGlobalState(handle_t BindingHandle,
- [out] unsigned long *State,
- [in] unsigned long Flags);
+ /* Function 3 */
+ CONFIGRET PNP_GetGlobalState(handle_t BindingHandle,
+ [out] unsigned long *State,
+ [in] unsigned long Flags);
- /* Function 4 */
- CONFIGRET PNP_InitDetection(handle_t BindingHandle);
+ /* Function 4 */
+ CONFIGRET PNP_InitDetection(handle_t BindingHandle);
- /* Function 5 */
- CONFIGRET PNP_ReportLogOn(handle_t BindingHandle,
- [in] BOOL Admin,
- [in] DWORD ProcessId);
+ /* Function 5 */
+ CONFIGRET PNP_ReportLogOn(handle_t BindingHandle,
+ [in] BOOL Admin,
+ [in] DWORD ProcessId);
- /* Function 6 */
- CONFIGRET PNP_ValidateDeviceInstance(handle_t BindingHandle,
- [in, string] wchar_t
*DeviceInstance,
- [in] DWORD Flags);
+ /* Function 6 */
+ CONFIGRET PNP_ValidateDeviceInstance(handle_t BindingHandle,
+ [in, string] wchar_t
*DeviceInstance,
+ [in] DWORD Flags);
- /* Function 7 */
- CONFIGRET PNP_GetRootDeviceInstance(handle_t BindingHandle,
- [out, string, size_is(Length)]
wchar_t *DeviceInstance,
- [in] DWORD Length);
+ /* Function 7 */
+ CONFIGRET PNP_GetRootDeviceInstance(handle_t BindingHandle,
+ [out, string, size_is(Length)]
wchar_t *DeviceInstance,
+ [in] DWORD Length);
- /* Function 8 */
- 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);
+ /* Function 8 */
+ 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);
- /* Function 9 */
- cpp_quote("#define PNP_BRANCH_ENUM 1")
- cpp_quote("#define PNP_BRANCH_CLASS 2")
- CONFIGRET PNP_EnumerateSubKeys(handle_t BindingHandle,
- [in] unsigned long Branch,
- [in] unsigned long Index,
- [out, string, size_is(Length)] wchar_t
*Buffer,
- [in] unsigned long Length,
- [out] unsigned long *RequiredLength,
- [in] DWORD Flags);
+ /* Function 9 */
+ cpp_quote("#define PNP_BRANCH_ENUM 1")
+ cpp_quote("#define PNP_BRANCH_CLASS 2")
+ CONFIGRET PNP_EnumerateSubKeys(handle_t BindingHandle,
+ [in] unsigned long Branch,
+ [in] unsigned long Index,
+ [out, string, size_is(Length)]
wchar_t *Buffer,
+ [in] unsigned long Length,
+ [out] unsigned long *RequiredLength,
+ [in] DWORD Flags);
- /* Function 10 */
-// CONFIGRET PNP_GetDeviceList(handle_t BindingHandle,
-// [in, unique, string] wchar_t *Filter,
-// [out, string, size_is(*Length)]
unsigned char *Buffer
-// [in, out] unsigned long *Length,
-// [in] DWORD Flags);
+ /* Function 10 */
+// CONFIGRET PNP_GetDeviceList(handle_t BindingHandle,
+// [in, unique, string] wchar_t *Filter,
+// [out, string, size_is(*Length)]
unsigned char *Buffer
+// [in, out] unsigned long *Length,
+// [in] DWORD Flags);
- /* Function 11 */
- CONFIGRET PNP_GetDeviceListSize(handle_t BindingHandle,
- [in, unique, string] wchar_t *Filter,
- [out] unsigned long *Length,
- [in] DWORD Flags);
+ /* Function 11 */
+ CONFIGRET PNP_GetDeviceListSize(handle_t BindingHandle,
+ [in, unique, string] wchar_t
*Filter,
+ [out] unsigned long *Length,
+ [in] DWORD Flags);
- /* Function 12 */
- CONFIGRET PNP_GetDepth(handle_t BindingHandle,
- [in, string] wchar_t *DeviceInstance,
- [out] unsigned long *Depth,
- [in] DWORD Flags);
+ /* Function 12 */
+ CONFIGRET PNP_GetDepth(handle_t BindingHandle,
+ [in, string] wchar_t *DeviceInstance,
+ [out] unsigned long *Depth,
+ [in] DWORD Flags);
- /* Function 13 */
- CONFIGRET PNP_GetDeviceRegProp(handle_t BindingHandle,
- [in, string] wchar_t *DeviceInstance,
- [in] unsigned long Property,
- [in, out] unsigned long *DataType,
- [out, size_is(*TransferLen)] char
*Buffer,
- [in, out] unsigned long *TransferLen,
- [in, out] unsigned long *Length,
- [in] DWORD Flags);
+ /* Function 13 */
+ CONFIGRET PNP_GetDeviceRegProp(handle_t BindingHandle,
+ [in, string] wchar_t
*DeviceInstance,
+ [in] unsigned long Property,
+ [in, out] unsigned long *DataType,
+ [out, size_is(*TransferLen)] char
*Buffer,
+ [in, out] unsigned long
*TransferLen,
+ [in, out] unsigned long *Length,
+ [in] DWORD Flags);
- /* Function 14 */
- CONFIGRET PNP_SetDeviceRegProp(handle_t BindingHandle,
- [in, string] wchar_t *DeviceId,
- [in] unsigned long Property,
- [in] unsigned long DataType,
- [in, size_is(Length)] char *Buffer,
- [in] unsigned long Length,
- [in] unsigned long Flags);
+ /* Function 14 */
+ CONFIGRET PNP_SetDeviceRegProp(handle_t BindingHandle,
+ [in, string] wchar_t *DeviceId,
+ [in] unsigned long Property,
+ [in] unsigned long DataType,
+ [in, size_is(Length)] char *Buffer,
+ [in] unsigned long Length,
+ [in] unsigned long Flags);
- /* Function 15 */
- CONFIGRET PNP_GetClassInstance(handle_t BindingHandle,
- [in, string] wchar_t *DeviceId,
- [out, string, size_is(Length)] wchar_t
*Buffer,
- [in] unsigned long Length);
+ /* Function 15 */
+ CONFIGRET PNP_GetClassInstance(handle_t BindingHandle,
+ [in, string] wchar_t *DeviceId,
+ [out, string, size_is(Length)]
wchar_t *Buffer,
+ [in] unsigned long Length);
- /* Function 16 */
- CONFIGRET PNP_CreateKey(handle_t BindingHandle,
- [in, string] wchar_t *SubKey,
- [in] unsigned long DesiredAccess,
- [in] unsigned long Flags);
+ /* Function 16 */
+ CONFIGRET PNP_CreateKey(handle_t BindingHandle,
+ [in, string] wchar_t *SubKey,
+ [in] unsigned long DesiredAccess,
+ [in] unsigned long Flags);
- /* Function 17 */
- CONFIGRET PNP_DeleteRegistryKey(handle_t BindingHandle,
- [in, string] wchar_t *DeviceId,
- [in, string] wchar_t *ParentKey,
- [in, string] wchar_t *ChildKey,
- [in] unsigned long Flags);
+ /* Function 17 */
+ CONFIGRET PNP_DeleteRegistryKey(handle_t BindingHandle,
+ [in, string] wchar_t *DeviceId,
+ [in, string] wchar_t *ParentKey,
+ [in, string] wchar_t *ChildKey,
+ [in] unsigned long Flags);
- /* Function 19 */
- CONFIGRET PNP_GetClassName(handle_t BindingHandle,
- [in, string] wchar_t *ClassGuid,
- [out, string, size_is(*Length)] wchar_t
*Buffer,
- [in, out] unsigned long *Length,
- [in] unsigned long Flags);
-
- /* Function 20 */
- CONFIGRET PNP_DeleteClassKey(handle_t BindingHandle,
+ /* Function 19 */
+ CONFIGRET PNP_GetClassName(handle_t BindingHandle,
[in, string] wchar_t *ClassGuid,
+ [out, string, size_is(*Length)] wchar_t
*Buffer,
+ [in, out] unsigned long *Length,
[in] unsigned long Flags);
- /* Function 29 */
- CONFIGRET PNP_DeviceInstanceAction(handle_t BindingHandle,
- [in] unsigned long MajorAction,
- [in] unsigned long MinorAction,
- [in, unique, string] wchar_t
*DeviceInstance1,
- [in, unique, string] wchar_t
*DeviceInstance2);
+ /* Function 20 */
+ CONFIGRET PNP_DeleteClassKey(handle_t BindingHandle,
+ [in, string] wchar_t *ClassGuid,
+ [in] unsigned long Flags);
- /* Function 30 */
- CONFIGRET PNP_GetDeviceStatus(handle_t BindingHandle,
- [in, string] wchar_t *DeviceInstance,
- [out] unsigned long *Status,
- [out] unsigned long *Problem,
- [in] DWORD Flags);
+ /* Function 28 */
+ CONFIGRET PNP_CreateDevInst(handle_t BindingHandle,
+ [in, out, string, size_is(Length)]
wchar_t *DeviceId,
+ [in, string] wchar_t *ParentDeviceId,
+ [in] unsigned long Length,
+ [in] unsigned long Flags);
- /* Function 31 */
- CONFIGRET PNP_SetDeviceProblem(handle_t BindingHandle,
- [in, string] wchar_t *DeviceInstance,
- [in] unsigned long Problem,
- [in] DWORD Flags);
+ /* Function 29 */
+ CONFIGRET PNP_DeviceInstanceAction(handle_t BindingHandle,
+ [in] unsigned long MajorAction,
+ [in] unsigned long MinorAction,
+ [in, unique, string] wchar_t
*DeviceInstance1,
+ [in, unique, string] wchar_t
*DeviceInstance2);
- /* Function 33 */
- CONFIGRET PNP_UninstallDevInst(handle_t BindingHandle,
- [in, string] wchar_t *DeviceInstance,
- [in] DWORD Flags);
+ /* Function 30 */
+ CONFIGRET PNP_GetDeviceStatus(handle_t BindingHandle,
+ [in, string] wchar_t *DeviceInstance,
+ [out] unsigned long *Status,
+ [out] unsigned long *Problem,
+ [in] DWORD Flags);
- /* Function 38 */
- CONFIGRET PNP_IsDockStationPresent(handle_t BindingHandle,
- [out]PBOOL Present);
+ /* Function 31 */
+ CONFIGRET PNP_SetDeviceProblem(handle_t BindingHandle,
+ [in, string] wchar_t
*DeviceInstance,
+ [in] unsigned long Problem,
+ [in] DWORD Flags);
- /* Function 39 */
- CONFIGRET PNP_RequestEjectPC(handle_t BindingHandle);
+ /* Function 33 */
+ CONFIGRET PNP_UninstallDevInst(handle_t BindingHandle,
+ [in, string] wchar_t
*DeviceInstance,
+ [in] DWORD Flags);
- /* Function 58 */
- CONFIGRET PNP_RunDetection(handle_t BindingHandle,
- [in] unsigned long Flags);
+ /* Function 38 */
+ CONFIGRET PNP_IsDockStationPresent(handle_t BindingHandle,
+ [out]PBOOL Present);
+
+ /* Function 39 */
+ CONFIGRET PNP_RequestEjectPC(handle_t BindingHandle);
+
+ /* Function 58 */
+ CONFIGRET PNP_RunDetection(handle_t BindingHandle,
+ [in] unsigned long Flags);
}
_____
Modified: trunk/reactos/include/wine/cfgmgr32.h
--- trunk/reactos/include/wine/cfgmgr32.h 2006-01-22 14:08:06 UTC
(rev 20977)
+++ trunk/reactos/include/wine/cfgmgr32.h 2006-01-22 14:33:04 UTC
(rev 20978)
@@ -163,6 +163,22 @@
#define CM_SETUP_DEVINST_RESET CM_SETUP_DEVNODE_RESET
#define CM_SETUP_BITS 0x00000007
+/* ulFlags for CM_Create_DevNode[_Ex]A/W */
+#define CM_CREATE_DEVNODE_NORMAL 0x00000000
+#define CM_CREATE_DEVNODE_NO_WAIT_INSTALL 0x00000001
+#define CM_CREATE_DEVNODE_PHANTOM 0x00000002
+#define CM_CREATE_DEVNODE_GENERATE_ID 0x00000004
+#define CM_CREATE_DEVNODE_DO_NOT_INSTALL 0x00000008
+#define CM_CREATE_DEVNODE_BITS 0x0000000F
+
+#define CM_CREATE_DEVINST_NORMAL CM_CREATE_DEVNODE_NORMAL
+#define CM_CREATE_DEVINST_NO_WAIT_INSTALL
CM_CREATE_DEVNODE_NO_WAIT_INSTALL
+#define CM_CREATE_DEVINST_PHANTOM CM_CREATE_DEVNODE_PHANTOM
+#define CM_CREATE_DEVINST_GENERATE_ID CM_CREATE_DEVNODE_GENERATE_ID
+#define CM_CREATE_DEVINST_DO_NOT_INSTALL
CM_CREATE_DEVNODE_DO_NOT_INSTALL
+#define CM_CREATE_DEVINST_BITS CM_CREATE_DEVNODE_BITS
+
+
#define CMP_MAGIC 0x01234567
@@ -172,6 +188,12 @@
CONFIGRET WINAPI CM_Connect_MachineA( PCSTR, PHMACHINE );
CONFIGRET WINAPI CM_Connect_MachineW( PCWSTR, PHMACHINE );
#define CM_Connect_Machine WINELIB_NAME_AW(CM_Connect_Machine)
+CONFIGRET WINAPI CM_Create_DevNodeA( PDEVINST, DEVINSTID_A, DEVINST,
ULONG );
+CONFIGRET WINAPI CM_Create_DevNodeW( PDEVINST, DEVINSTID_W, DEVINST,
ULONG );
+#define CM_Create_DevNode WINELIB_NAME_AW(CM_Create_DevNode)
+CONFIGRET WINAPI CM_Create_DevNode_ExA( PDEVINST, DEVINSTID_A, DEVINST,
ULONG, HANDLE );
+CONFIGRET WINAPI CM_Create_DevNode_ExW( PDEVINST, DEVINSTID_W, DEVINST,
ULONG, HANDLE );
+#define CM_Create_DevNode_Ex WINELIB_NAME_AW(CM_Create_DevNode_Ex)
CONFIGRET WINAPI CM_Delete_Class_Key( LPGUID, ULONG );
CONFIGRET WINAPI CM_Delete_Class_Key_Ex( LPGUID, ULONG, HANDLE );
CONFIGRET WINAPI CM_Disable_DevNode( DEVINST, ULONG );
_____
Modified: trunk/reactos/lib/cfgmgr32/cfgmgr32.def
--- trunk/reactos/lib/cfgmgr32/cfgmgr32.def 2006-01-22 14:08:06 UTC
(rev 20977)
+++ trunk/reactos/lib/cfgmgr32/cfgmgr32.def 2006-01-22 14:33:04 UTC
(rev 20978)
@@ -36,10 +36,10 @@
;CM_Add_Res_Des_Ex
CM_Connect_MachineA(a)8=SETUPAPI.CM_Connect_MachineA
CM_Connect_MachineW(a)8=SETUPAPI.CM_Connect_MachineW
-;CM_Create_DevNodeA
-;CM_Create_DevNodeW
-;CM_Create_DevNode_ExA
-;CM_Create_DevNode_ExW
+CM_Create_DevNodeA(a)16=SETUPAPI.CM_Create_DevNodeA
+CM_Create_DevNodeW(a)16=SETUPAPI.CM_Create_DevNodeW
+CM_Create_DevNode_ExA(a)20=SETUPAPI.CM_Create_DevNode_ExA
+CM_Create_DevNode_ExW(a)20=SETUPAPI.CM_Create_DevNode_ExW
;CM_Create_Range_List
CM_Delete_Class_Key(a)8=SETUPAPI.CM_Delete_Class_Key
CM_Delete_Class_Key_Ex(a)12=SETUPAPI.CM_Delete_Class_Key_Ex
@@ -48,12 +48,12 @@
;CM_Delete_Range
;CM_Detect_Resource_Conflict
;CM_Detect_Resource_Conflict_Ex
-;CM_Disable_DevNode
-;CM_Disable_DevNode_Ex
+CM_Disable_DevNode(a)8=SETUPAPI.CM_Disable_DevNode
+CM_Disable_DevNode_Ex(a)12=SETUPAPI.CM_Disable_DevNode_Ex
CM_Disconnect_Machine(a)4=SETUPAPI.CM_Disconnect_Machine
;CM_Dup_Range_List
-;CM_Enable_DevNode
-;CM_Enable_DevNode_Ex
+CM_Enable_DevNode(a)8=SETUPAPI.CM_Enable_DevNode
+CM_Enable_DevNode_Ex(a)12=SETUPAPI.CM_Enable_DevNode_Ex
CM_Enumerate_Classes(a)12=SETUPAPI.CM_Enumerate_Classes
CM_Enumerate_Classes_Ex(a)16=SETUPAPI.CM_Enumerate_Classes_Ex
CM_Enumerate_EnumeratorsA(a)16=SETUPAPI.CM_Enumerate_EnumeratorsA
@@ -143,8 +143,8 @@
CM_Get_Version_Ex(a)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_Is_Dock_Station_Present(a)4=SETUPAPI.CM_Is_Dock_Station_Present
+CM_Is_Dock_Station_Present_Ex(a)8=SETUPAPI.CM_Is_Dock_Station_Present_Ex
CM_Locate_DevNodeA(a)12=SETUPAPI.CM_Locate_DevNodeA
CM_Locate_DevNodeW(a)12=SETUPAPI.CM_Locate_DevNodeW
CM_Locate_DevNode_ExA(a)16=SETUPAPI.CM_Locate_DevNode_ExA
@@ -181,11 +181,12 @@
;CM_Remove_Unmarked_Children_Ex
;CM_Request_Device_EjectA
;CM_Request_Device_EjectW
-;CM_Request_Eject_PC
+CM_Request_Eject_PC(a)0=SETUPAPI.CM_Request_Eject_PC
+CM_Request_Eject_PC_Ex(a)4=SETUPAPI.CM_Request_Eject_PC_Ex
;CM_Reset_Children_Marks
;CM_Reset_Children_Marks_Ex
-;CM_Run_Detection
-;CM_Run_Detection_Ex
+CM_Run_Detection(a)4=SETUPAPI.CM_Run_Detection
+CM_Run_Detection_Ex(a)8=SETUPAPI.CM_Run_Detection_Ex
CM_Set_DevNode_Problem(a)12=SETUPAPI.CM_Set_DevNode_Problem
CM_Set_DevNode_Problem_Ex(a)16=SETUPAPI.CM_Set_DevNode_Problem_Ex
CM_Set_DevNode_Registry_PropertyA(a)20=SETUPAPI.CM_Set_DevNode_Registry_Pr
opertyA
_____
Modified: trunk/reactos/lib/setupapi/cfgmgr.c
--- trunk/reactos/lib/setupapi/cfgmgr.c 2006-01-22 14:08:06 UTC (rev
20977)
+++ trunk/reactos/lib/setupapi/cfgmgr.c 2006-01-22 14:33:04 UTC (rev
20978)
@@ -2,7 +2,7 @@
* Configuration manager functions
*
* Copyright 2000 James Hatheway
- * Copyright 2005 Eric Kohl
+ * Copyright 2005, 2006 Eric Kohl
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -185,6 +185,125 @@
/***********************************************************************
+ * CM_Create_DevNodeA [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Create_DevNodeA(
+ PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, DEVINST dnParent,
+ ULONG ulFlags)
+{
+ TRACE("%p %s %p %lx\n",
+ pdnDevInst, debugstr_a(pDeviceID), dnParent, ulFlags);
+ return CM_Create_DevNode_ExA(pdnDevInst, pDeviceID, dnParent,
+ ulFlags, NULL);
+}
+
+
+/**********************************************************************
*
+ * CM_Create_DevNodeW [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Create_DevNodeW(
+ PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, DEVINST dnParent,
+ ULONG ulFlags)
+{
+ TRACE("%p %s %p %lx\n",
+ pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags);
+ return CM_Create_DevNode_ExW(pdnDevInst, pDeviceID, dnParent,
+ ulFlags, NULL);
+}
+
+
+/**********************************************************************
*
+ * CM_Create_DevNode_ExA [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Create_DevNode_ExA(
+ PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, DEVINST dnParent,
+ ULONG ulFlags, HANDLE hMachine)
+{
+ DEVINSTID_W pDeviceIDW;
+ CONFIGRET ret;
+
+ TRACE("%p %s %p %lx %p\n",
+ pdnDevInst, debugstr_a(pDeviceID), dnParent, ulFlags,
hMachine);
+
+ if (CaptureAndConvertAnsiArg(pDeviceID, &pDeviceIDW))
+ return CR_INVALID_DATA;
+
+ ret = CM_Create_DevNode_ExW(pdnDevInst, pDeviceIDW, dnParent,
ulFlags,
+ hMachine);
+
+ MyFree(pDeviceIDW);
+
+ return ret;
+}
+
+
+/**********************************************************************
*
+ * CM_Create_DevNode_ExW [SETUPAPI.@]
+ */
+CONFIGRET WINAPI CM_Create_DevNode_ExW(
+ PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, DEVINST dnParent,
+ ULONG ulFlags, HANDLE hMachine)
+{
+ RPC_BINDING_HANDLE BindingHandle = NULL;
+ HSTRING_TABLE StringTable = NULL;
+ LPWSTR lpParentDevInst;
+ CONFIGRET ret = CR_SUCCESS;
+
+ FIXME("%p %s %p %lx %p\n",
+ pdnDevInst, debugstr_w(pDeviceID), dnParent, ulFlags,
hMachine);
+
+ if (!IsUserAdmin())
+ return CR_ACCESS_DENIED;
+
+ if (pdnDevInst == NULL)
+ return CR_INVALID_POINTER;
+
+ if (pDeviceID == NULL || wcslen(pDeviceID) == 0)
+ return CR_INVALID_DEVICE_ID;
+
+ if (dnParent == 0)
+ return CR_INVALID_DEVNODE;
+
+ if (ulFlags & ~CM_CREATE_DEVNODE_BITS)
+ return CR_INVALID_FLAG;
+
+ 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;
+ }
+
+ lpParentDevInst = StringTableStringFromId(StringTable, dnParent);
+ if (lpParentDevInst == NULL)
+ return CR_INVALID_DEVNODE;
+
+ ret = PNP_CreateDevInst(BindingHandle,
+ pDeviceID,
+ lpParentDevInst,
+ MAX_DEVICE_ID_LEN,
+ ulFlags);
+ if (ret == CR_SUCCESS)
+ {
+ *pdnDevInst = StringTableAddString(StringTable, pDeviceID, 1);
+ if (*pdnDevInst == 0)
+ ret = CR_NO_SUCH_DEVNODE;
+ }
+
+ return ret;
+}
+
+
+/**********************************************************************
*
* CM_Delete_Class_Key [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Delete_Class_Key(
_____
Modified: trunk/reactos/lib/setupapi/setupapi.spec
--- trunk/reactos/lib/setupapi/setupapi.spec 2006-01-22 14:08:06 UTC
(rev 20977)
+++ trunk/reactos/lib/setupapi/setupapi.spec 2006-01-22 14:33:04 UTC
(rev 20978)
@@ -20,10 +20,10 @@
@ stub CM_Add_Res_Des_Ex
@ stdcall CM_Connect_MachineA(str ptr)
@ stdcall CM_Connect_MachineW(wstr ptr)
-@ stub CM_Create_DevNodeA
-@ stub CM_Create_DevNodeW
-@ stub CM_Create_DevNode_ExA
-@ stub CM_Create_DevNode_ExW
+@ stdcall CM_Create_DevNodeA(ptr str long long)
+@ stdcall CM_Create_DevNodeW(ptr wstr long long)
+@ stdcall CM_Create_DevNode_ExA(ptr str long long long)
+@ stdcall CM_Create_DevNode_ExW(ptr wstr long long long)
@ stub CM_Create_Range_List
@ stdcall CM_Delete_Class_Key(ptr long)
@ stdcall CM_Delete_Class_Key_Ex(ptr long long)
_____
Modified: trunk/reactos/services/umpnpmgr/umpnpmgr.c
--- trunk/reactos/services/umpnpmgr/umpnpmgr.c 2006-01-22 14:08:06 UTC
(rev 20977)
+++ trunk/reactos/services/umpnpmgr/umpnpmgr.c 2006-01-22 14:33:04 UTC
(rev 20978)
@@ -893,6 +893,24 @@
}
+/* Function 28 */
+CONFIGRET
+PNP_CreateDevInst(handle_t BindingHandle,
+ wchar_t *DeviceId, /* [in, out, string,
size_is(Length)] */
+ wchar_t *ParentDeviceId, /* [in, string] */
+ unsigned long Length, /* [in] */
+ unsigned long Flags) /* [in] */
+{
+ CONFIGRET ret = CR_CALL_NOT_IMPLEMENTED;
+
+ DPRINT1("PNP_CreateDevInst() called\n");
+
+ DPRINT1("PNP_CreateDevInst() done (returns %lx)\n", ret);
+
+ return ret;
+}
+
+
/* Function 29 */
CONFIGRET
PNP_DeviceInstanceAction(handle_t BindingHandle,
_____
Modified: trunk/reactos/w32api/include/ddk/cfgmgr32.h
--- trunk/reactos/w32api/include/ddk/cfgmgr32.h 2006-01-22 14:08:06 UTC
(rev 20977)
+++ trunk/reactos/w32api/include/ddk/cfgmgr32.h 2006-01-22 14:33:04 UTC
(rev 20978)
@@ -736,8 +736,75 @@
#define CM_Connect_Machine CM_Connect_MachineA
#endif /* UNICODE */
-/* FIXME: Obsolete CM_Create_DevNode */
-/* FIXME: Obsolete CM_Create_DevNodeEx */
+/* Flags for CM_Create_DevNode[_Ex].ulFlags constants */
+#define CM_CREATE_DEVNODE_NORMAL 0x00000000
+#define CM_CREATE_DEVNODE_NO_WAIT_INSTALL 0x00000001
+#define CM_CREATE_DEVNODE_PHANTOM 0x00000002
+#define CM_CREATE_DEVNODE_GENERATE_ID 0x00000004
+#define CM_CREATE_DEVNODE_DO_NOT_INSTALL 0x00000008
+#define CM_CREATE_DEVNODE_BITS 0x0000000F
+
+#define CM_CREATE_DEVINST_NORMAL CM_CREATE_DEVNODE_NORMAL
+#define CM_CREATE_DEVINST_NO_WAIT_INSTALL
CM_CREATE_DEVNODE_NO_WAIT_INSTALL
+#define CM_CREATE_DEVINST_PHANTOM CM_CREATE_DEVNODE_PHANTOM
+#define CM_CREATE_DEVINST_GENERATE_ID CM_CREATE_DEVNODE_GENERATE_ID
+#define CM_CREATE_DEVINST_DO_NOT_INSTALL
CM_CREATE_DEVNODE_DO_NOT_INSTALL
+#define CM_CREATE_DEVINST_BITS CM_CREATE_DEVNODE_BITS
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNodeA(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_A pDeviceID,
+ IN DEVINST dnParent,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNodeW(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_W pDeviceID,
+ IN DEVINST dnParent,
+ IN ULONG ulFlags);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNode_ExA(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_A pDeviceID,
+ IN DEVINST dnParent,
+ IN ULONG ulFlags,
+ IN HANDLE hMachine);
+
+CMAPI
+CONFIGRET
+WINAPI
+CM_Create_DevNode_ExW(
+ OUT PDEVINST pdnDevInst,
+ IN DEVINSTID_W pDeviceID,
+ IN DEVINST dnParent,
+ IN ULONG ulFlags,
+ IN HANDLE hMachine);
+
+#define CM_Create_DevInstW CM_Create_DevNodeW
+#define CM_Create_DevInstA CM_Create_DevNodeA
+#define CM_Create_DevInst_ExW CM_Create_DevNode_ExW
+#define CM_Create_DevInst_ExA CM_Create_DevNode_ExA
+#ifdef UNICODE
+#define CM_Create_DevNode CM_Create_DevNodeW
+#define CM_Create_DevInst CM_Create_DevNodeW
+#define CM_Create_DevNode_Ex CM_Create_DevNode_ExW
+#define CM_Create_DevInst_Ex CM_Create_DevInst_ExW
+#else
+#define CM_Create_DevNode CM_Create_DevNodeA
+#define CM_Create_DevInst CM_Create_DevNodeA
+#define CM_Create_DevNode_Ex CM_Create_DevNode_ExA
+#define CM_Create_DevInst_Ex CM_Create_DevNode_ExA
+#endif /* UNICODE */
+
/* FIXME: Obsolete CM_Create_Range_List */
/* Flags for CM_Delete_Class_Key.ulFlags constants */