From b718e3cc4ed1d5e639bbf327382d35b6bd7232ab Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 20 Mar 2005 20:43:46 +0000 Subject: [PATCH] - Add stubs: CM_GetChild, CM_GetChild_Ex, CM_GetParent, CM_GetPaarent_Ex, CM_GetSibling, CM_GetSibling_Ex, CM_Locate_DevNodeA, CM_Locate_DevNodeW, CM_Locate_DevNode_ExA, CM_Locate_DevNode_ExW - Implement: CM_GetVersion, CM_GetVersion_Ex, CM_Connect_MachineA, CM_Connect_MachineW, CM_Disconnect_Machine. - Implement RPC server in umpnpmgr.dll to reply to calls to CM_GetVersion/CM_GetVersion_Ex. svn path=/trunk/; revision=14235 --- reactos/include/idl/pnp.idl | 19 +++ reactos/include/wine/cfgmgr32.h | 37 ++++- reactos/include/wine/setupapi.h | 2 + reactos/lib/setupapi/Makefile.in | 4 +- reactos/lib/setupapi/cfgmgr.c | 198 +++++++++++++++++++++++++-- reactos/lib/setupapi/makefile | 9 ++ reactos/lib/setupapi/rpc.c | 82 +++++++++++ reactos/lib/setupapi/setupapi.spec | 24 ++-- reactos/services/umpnpmgr/makefile | 17 ++- reactos/services/umpnpmgr/umpnpmgr.c | 74 +++++++++- reactos/w32api/include/setupapi.h | 9 ++ 11 files changed, 444 insertions(+), 31 deletions(-) create mode 100644 reactos/include/idl/pnp.idl create mode 100644 reactos/lib/setupapi/rpc.c diff --git a/reactos/include/idl/pnp.idl b/reactos/include/idl/pnp.idl new file mode 100644 index 00000000000..57481d18d9c --- /dev/null +++ b/reactos/include/idl/pnp.idl @@ -0,0 +1,19 @@ +/* + * Plug and Play Manager interface definition + */ + +#define WORD unsigned short + +[ + uuid (809F4e40-A03D-11CE-8F69-08003E30051B), + version(1.0), + pointer_default(unique), + explicit_handle +] +interface pnp +{ +// unsigned long PNP_GetRootDeviceInstance(handle_t BindingHandle, +// [out, string, size_is(Length)] wchar_t *DeviceInstance, +// [in] unsigned long Length); + WORD PNP_GetVersion(handle_t BindingHandle); +} diff --git a/reactos/include/wine/cfgmgr32.h b/reactos/include/wine/cfgmgr32.h index 2c3792e8b29..e29063acb1b 100644 --- a/reactos/include/wine/cfgmgr32.h +++ b/reactos/include/wine/cfgmgr32.h @@ -19,13 +19,29 @@ #ifndef _CFGMGR32_H_ #define _CFGMGR32_H_ +/* cfgmgr32 doesn't use the normal convention, it adds an underscore before A/W */ +#ifdef __WINESRC__ +# define DECL_WINELIB_CFGMGR32_TYPE_AW(type) /* nothing */ +#else /* __WINESRC__ */ +# define DECL_WINELIB_CFGMGR32_TYPE_AW(type) typedef WINELIB_NAME_AW(type##_) type; +#endif /* __WINESRC__ */ + typedef DWORD CONFIGRET; typedef HANDLE HMACHINE; typedef HMACHINE *PHMACHINE; +typedef DWORD DEVINST; +typedef DEVINST *PDEVINST; -#define CR_SUCCESS 0x00000000 -#define CR_INVALID_DATA 0x0000001F -#define CR_ACCESS_DENIED 0x00000033 +typedef CHAR *DEVINSTID_A; +typedef WCHAR *DEVINSTID_W; +DECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID) + + +#define CR_SUCCESS 0x00000000 +#define CR_OUT_OF_MEMORY 0x00000002 +#define CR_INVALID_DATA 0x0000001F +#define CR_INVALID_MACHINENAME 0x0000002F +#define CR_ACCESS_DENIED 0x00000033 CONFIGRET WINAPI CM_Connect_MachineA( PCSTR, PHMACHINE ); @@ -34,6 +50,8 @@ CONFIGRET WINAPI CM_Connect_MachineW( PCWSTR, PHMACHINE ); CONFIGRET WINAPI CM_Disconnect_Machine( HMACHINE ); +CONFIGRET WINAPI CM_Get_Child( PDEVINST, DEVINST, ULONG ); +CONFIGRET WINAPI CM_Get_Child_Ex( PDEVINST, DEVINST, ULONG, HMACHINE ); CONFIGRET WINAPI CM_Get_Device_ID_ListA( PCSTR, PCHAR, ULONG, ULONG ); CONFIGRET WINAPI CM_Get_Device_ID_ListW( PCWSTR, PWCHAR, ULONG, ULONG ); #define CM_Get_Device_ID_List WINELIB_NAME_AW(CM_Get_Device_ID_List) @@ -46,5 +64,18 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW( PULONG, PCWSTR, ULONG ); CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExA( PULONG, PCSTR, ULONG, HMACHINE ); 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_Parent( PDEVINST, DEVINST, ULONG ); +CONFIGRET WINAPI CM_Get_Parent_Ex( PDEVINST, DEVINST, ULONG, HMACHINE ); +CONFIGRET WINAPI CM_Get_Sibling( PDEVINST, DEVINST, ULONG ); +CONFIGRET WINAPI CM_Get_Sibling_Ex( PDEVINST, DEVINST, ULONG, HMACHINE ); +WORD WINAPI CM_Get_Version( VOID ); +WORD WINAPI CM_Get_Version_Ex( HMACHINE ); + +CONFIGRET WINAPI CM_Locate_DevNodeA(PDEVINST, DEVINSTID_A, ULONG); +CONFIGRET WINAPI CM_Locate_DevNodeW(PDEVINST, DEVINSTID_W, ULONG); +#define CM_Locate_DevNode WINELIB_NAME_AW(CM_Locate_DevNode) +CONFIGRET WINAPI CM_Locate_DevNode_ExA(PDEVINST, DEVINSTID_A, ULONG, HMACHINE); +CONFIGRET WINAPI CM_Locate_DevNode_ExW(PDEVINST, DEVINSTID_W, ULONG, HMACHINE); +#define CM_Locate_DevNode_Ex WINELIB_NAME_AW(CM_Locate_DevNode_Ex) #endif /* _CFGMGR32_H_ */ diff --git a/reactos/include/wine/setupapi.h b/reactos/include/wine/setupapi.h index cee5f4c02e6..e5596da7ed6 100644 --- a/reactos/include/wine/setupapi.h +++ b/reactos/include/wine/setupapi.h @@ -666,6 +666,8 @@ DECL_WINELIB_SETUPAPI_TYPE_AW(PFILEPATHS) LONG WINAPI AddTagToGroupOrderList(PCWSTR lpGroupName, DWORD dwUnknown2, DWORD dwUnknown3); +DWORD WINAPI CaptureAndConvertAnsiArg(PCSTR lpSrc, PWSTR *lpDst); +DWORD WINAPI CaptureStringArg(PCWSTR lpSrc, PWSTR *lpDst); BOOL WINAPI DelayedMove(PCWSTR lpExistingFileName, PCWSTR lpNewFileName); BOOL WINAPI DoesUserHavePrivilege(PCWSTR lpPrivilegeName); PWSTR WINAPI DuplicateString(PCWSTR lpSrc); diff --git a/reactos/lib/setupapi/Makefile.in b/reactos/lib/setupapi/Makefile.in index 25606330ebc..6377b2f51ac 100644 --- a/reactos/lib/setupapi/Makefile.in +++ b/reactos/lib/setupapi/Makefile.in @@ -18,7 +18,9 @@ C_SRCS = \ parser.c \ queue.c \ setupcab.c \ - stubs.c + stubs.c \ + rpc.c \ + pnp_c.c C_SRCS16 = \ devinst16.c \ diff --git a/reactos/lib/setupapi/cfgmgr.c b/reactos/lib/setupapi/cfgmgr.c index e5a8831b0c2..777565a8778 100644 --- a/reactos/lib/setupapi/cfgmgr.c +++ b/reactos/lib/setupapi/cfgmgr.c @@ -31,10 +31,19 @@ #include "cfgmgr32.h" #include "setupapi_private.h" +#include "rpc.h" + +#include "pnp.h" + #include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(setupapi); +typedef struct _MACHINE_INFO +{ + RPC_BINDING_HANDLE BindingHandle; +} MACHINE_INFO, *PMACHINE_INFO; + /*********************************************************************** * CM_Connect_MachineA [SETUPAPI.@] @@ -47,14 +56,10 @@ CONFIGRET WINAPI CM_Connect_MachineA(PCSTR UNCServerName, PHMACHINE phMachine) TRACE("%s %p\n", UNCServerName, phMachine); if (UNCServerName == NULL || *UNCServerName == 0) - { return CM_Connect_MachineW(NULL, phMachine); - } if (CaptureAndConvertAnsiArg(UNCServerName, &pServerNameW)) - { return CR_INVALID_DATA; - } ret = CM_Connect_MachineW(pServerNameW, phMachine); @@ -69,8 +74,23 @@ CONFIGRET WINAPI CM_Connect_MachineA(PCSTR UNCServerName, PHMACHINE phMachine) */ CONFIGRET WINAPI CM_Connect_MachineW(PCWSTR UNCServerName, PHMACHINE phMachine) { - FIXME("%s %p\n", debugstr_w(UNCServerName), phMachine); - return CR_ACCESS_DENIED; + PMACHINE_INFO pMachine; + + TRACE("%s %p\n", debugstr_w(UNCServerName), phMachine); + + pMachine = (PMACHINE_INFO)GlobalAlloc(GPTR, sizeof(MACHINE_INFO)); + if (pMachine == NULL) + return CR_OUT_OF_MEMORY; + + if (!PnpBindRpc(UNCServerName, &pMachine->BindingHandle)) + { + GlobalFree(pMachine); + return CR_INVALID_MACHINENAME; + } + + phMachine = (PHMACHINE)pMachine; + + return CR_SUCCESS; } @@ -79,7 +99,41 @@ CONFIGRET WINAPI CM_Connect_MachineW(PCWSTR UNCServerName, PHMACHINE phMachine) */ CONFIGRET WINAPI CM_Disconnect_Machine(HMACHINE hMachine) { - FIXME("%lx\n", hMachine); + PMACHINE_INFO pMachine; + + TRACE("%lx\n", hMachine); + + if (hMachine == NULL) + return CR_SUCCESS; + + pMachine = (PMACHINE_INFO)hMachine; + if (!PnpUnbindRpc(pMachine->BindingHandle)) + return CR_ACCESS_DENIED; + + GlobalFree(pMachine); + + return CR_SUCCESS; +} + + +/*********************************************************************** + * CM_Get_Child [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Child( + PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags) +{ + TRACE("%p %p %lx\n", pdnDevInst, dnDevInst, ulFlags); + return CM_Get_Sibling_Ex(pdnDevInst, dnDevInst, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Child_Ex [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Child_Ex( + PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) +{ + TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine); return CR_SUCCESS; } @@ -154,9 +208,8 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA( CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW( PULONG pulLen, PCWSTR pszFilter, ULONG ulFlags) { - FIXME("%p %s %ld\n", pulLen, debugstr_w(pszFilter), ulFlags); - *pulLen = 2; - return CR_SUCCESS; + TRACE("%p %s %ld\n", pulLen, debugstr_w(pszFilter), ulFlags); + return CM_Get_Device_ID_List_Size_ExW(pulLen, pszFilter, ulFlags, NULL); } @@ -182,3 +235,128 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW( *pulLen = 2; return CR_SUCCESS; } + + +/*********************************************************************** + * CM_Get_Parent [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Parent( + PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags) +{ + TRACE("%p %p %lx\n", pdnDevInst, dnDevInst, ulFlags); + return CM_Get_Sibling_Ex(pdnDevInst, dnDevInst, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Parent_Ex [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Parent_Ex( + PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) +{ + TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine); + return CR_SUCCESS; +} + + +/*********************************************************************** + * CM_Get_Sibling [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Sibling( + PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags) +{ + TRACE("%p %p %lx\n", pdnDevInst, dnDevInst, ulFlags); + return CM_Get_Sibling_Ex(pdnDevInst, dnDevInst, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Get_Sibling_Ex [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Get_Sibling_Ex( + PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) +{ + TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine); + return CR_SUCCESS; +} + + +/*********************************************************************** + * CM_Get_Version [SETUPAPI.@] + */ +WORD WINAPI CM_Get_Version(VOID) +{ + TRACE("\n"); + return CM_Get_Version_Ex(NULL); +} + + +/*********************************************************************** + * CM_Get_Version_Ex [SETUPAPI.@] + */ +WORD WINAPI CM_Get_Version_Ex(HMACHINE hMachine) +{ + RPC_BINDING_HANDLE BindingHandle = NULL; + RPC_STATUS Status; + + FIXME("%lx\n", hMachine); + + if (hMachine != NULL) + { + BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle; + if (BindingHandle == NULL) + return 0; + } + else + { + Status = PnpGetLocalBindingHandle(&BindingHandle); + if (Status != RPC_S_OK) + return 0; + } + + return PNP_GetVersion(BindingHandle); +} + + +/*********************************************************************** + * CM_Locate_DevNodeA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Locate_DevNodeA( + PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, ULONG ulFlags) +{ + FIXME("%p %p %lu\n", pdnDevInst, pDeviceID, ulFlags); + return CR_SUCCESS; +} + + +/*********************************************************************** + * CM_Locate_DevNodeW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Locate_DevNodeW( + PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, ULONG ulFlags) +{ + TRACE("%p %p %lu\n", pdnDevInst, pDeviceID, ulFlags); + return CM_Locate_DevNode_ExW(pdnDevInst, pDeviceID, ulFlags, NULL); +} + + +/*********************************************************************** + * CM_Locate_DevNode_ExA [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Locate_DevNode_ExA( + PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, ULONG ulFlags, HMACHINE hMachine) +{ + FIXME("%p %p %lu %lx\n", pdnDevInst, pDeviceID, ulFlags, hMachine); + return CR_SUCCESS; +} + + +/*********************************************************************** + * CM_Locate_DevNode_ExW [SETUPAPI.@] + */ +CONFIGRET WINAPI CM_Locate_DevNode_ExW( + PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, ULONG ulFlags, HMACHINE hMachine) +{ + FIXME("%p %p %lu %lx\n", pdnDevInst, pDeviceID, ulFlags, hMachine); + return CR_SUCCESS; +} diff --git a/reactos/lib/setupapi/makefile b/reactos/lib/setupapi/makefile index 9ba45e739ba..d1665d6b8a8 100644 --- a/reactos/lib/setupapi/makefile +++ b/reactos/lib/setupapi/makefile @@ -4,6 +4,15 @@ PATH_TO_TOP = ../.. TARGET_TYPE = winedll +TARGET_CLEAN = pnp_c.c pnp.h + include $(PATH_TO_TOP)/rules.mak include $(TOOLS_PATH)/helper.mk + +WIDL_FLAGS = -o \ + -D _X86_ -D MIDL_PASS \ + -I $(PATH_TO_TOP)/w32api/include + +pnp_c.c pnp.h: $(PATH_TO_TOP)/include/idl/pnp.idl + $(WIDL) $(WIDL_FLAGS) -h -H pnp.h -c -C pnp_c.c $(PATH_TO_TOP)/include/idl/pnp.idl diff --git a/reactos/lib/setupapi/rpc.c b/reactos/lib/setupapi/rpc.c new file mode 100644 index 00000000000..cb3b08bc7c0 --- /dev/null +++ b/reactos/lib/setupapi/rpc.c @@ -0,0 +1,82 @@ +/* rpc.c */ + +#include +#include +#include + + +static RPC_BINDING_HANDLE LocalBindingHandle = NULL; + + +RPC_STATUS +PnpBindRpc(LPWSTR pszMachine, + RPC_BINDING_HANDLE* BindingHandle) +{ + PWSTR pszStringBinding = NULL; + RPC_STATUS Status; + + Status = RpcStringBindingComposeW(NULL, + L"ncacn_np", + pszMachine, + L"\\pipe\\umpnpmgr", + NULL, + &pszStringBinding); + if (Status != RPC_S_OK) + return Status; + + Status = RpcBindingFromStringBindingW(pszStringBinding, + BindingHandle); + + RpcStringFreeW(&pszStringBinding); + + return Status; +} + + +RPC_STATUS +PnpUnbindRpc(RPC_BINDING_HANDLE *BindingHandle) +{ + if (BindingHandle != NULL) + { + RpcBindingFree(*BindingHandle); + *BindingHandle = NULL; + } + + return RPC_S_OK; +} + + +RPC_STATUS +PnpGetLocalBindingHandle(RPC_BINDING_HANDLE *BindingHandle) +{ + if (LocalBindingHandle != NULL) + { + BindingHandle = LocalBindingHandle; + return RPC_S_OK; + } + + return PnpBindRpc(NULL, BindingHandle); +} + + +RPC_STATUS +PnpUnbindLocalBindingHandle(VOID) +{ + return PnpUnbindRpc(&LocalBindingHandle); +} + + +void __RPC_FAR * __RPC_USER +midl_user_allocate(size_t len) +{ + return GlobalAlloc(GPTR, len); +} + + +void __RPC_USER +midl_user_free(void __RPC_FAR * ptr) +{ + GlobalFree(ptr); +} + +/* EOF */ diff --git a/reactos/lib/setupapi/setupapi.spec b/reactos/lib/setupapi/setupapi.spec index 64c68bb199a..277bea8a94a 100644 --- a/reactos/lib/setupapi/setupapi.spec +++ b/reactos/lib/setupapi/setupapi.spec @@ -53,8 +53,8 @@ @ stub CM_Free_Res_Des @ stub CM_Free_Res_Des_Ex @ stub CM_Free_Res_Des_Handle -@ stub CM_Get_Child -@ stub CM_Get_Child_Ex +@ stdcall CM_Get_Child(ptr long long) +@ stdcall CM_Get_Child_Ex(ptr long long long) @ stub CM_Get_Class_Key_NameA @ stub CM_Get_Class_Key_NameW @ stub CM_Get_Class_Key_Name_ExA @@ -115,23 +115,23 @@ @ stub CM_Get_Next_Log_Conf_Ex @ stub CM_Get_Next_Res_Des @ stub CM_Get_Next_Res_Des_Ex -@ stub CM_Get_Parent -@ stub CM_Get_Parent_Ex +@ stdcall CM_Get_Parent(ptr long long) +@ stdcall CM_Get_Parent_Ex(ptr long long long) @ stub CM_Get_Res_Des_Data @ stub CM_Get_Res_Des_Data_Ex @ stub CM_Get_Res_Des_Data_Size @ stub CM_Get_Res_Des_Data_Size_Ex -@ stub CM_Get_Sibling -@ stub CM_Get_Sibling_Ex -@ stub CM_Get_Version -@ stub CM_Get_Version_Ex +@ stdcall CM_Get_Sibling(ptr long long) +@ stdcall CM_Get_Sibling_Ex(ptr long long long) +@ stdcall CM_Get_Version() +@ stdcall CM_Get_Version_Ex(long) @ stub CM_Intersect_Range_List @ stub CM_Invert_Range_List @ stub CM_Is_Dock_Station_Present -@ stub CM_Locate_DevNodeA -@ stub CM_Locate_DevNodeW -@ stub CM_Locate_DevNode_ExA -@ stub CM_Locate_DevNode_ExW +@ stdcall CM_Locate_DevNodeA(ptr str long) +@ stdcall CM_Locate_DevNodeW(ptr wstr long) +@ stdcall CM_Locate_DevNode_ExA(ptr str long long) +@ stdcall CM_Locate_DevNode_ExW(ptr wstr long long) @ stub CM_Merge_Range_List @ stub CM_Modify_Res_Des @ stub CM_Modify_Res_Des_Ex diff --git a/reactos/services/umpnpmgr/makefile b/reactos/services/umpnpmgr/makefile index f96bb8bd878..7252a5cc29a 100644 --- a/reactos/services/umpnpmgr/makefile +++ b/reactos/services/umpnpmgr/makefile @@ -12,12 +12,25 @@ TARGET_INSTALLDIR = system32 TARGET_SDKLIBS = ntdll.a kernel32.a advapi32.a rpcrt4.a -TARGET_OBJECTS = umpnpmgr.o +TARGET_OBJECTS = umpnpmgr.o pnp_s.o -TARGET_CFLAGS = -Wall -Werror -D__USE_W32API +TARGET_CFLAGS = -Wall -Werror -D__USE_W32API -DUNICODE -D_UNICODE + +TARGET_CLEAN = pnp_s.c pnp.h + +DEP_OBJECTS = $(TARGET_OBJECTS) include $(PATH_TO_TOP)/rules.mak include $(TOOLS_PATH)/helper.mk +include $(TOOLS_PATH)/depend.mk + +WIDL_FLAGS = \ + -D _X86_ -D MIDL_PASS \ + -I $(PATH_TO_TOP)/w32api/include + +pnp_s.c pnp.h: $(PATH_TO_TOP)/include/idl/pnp.idl + $(WIDL) $(WIDL_FLAGS) -h -H pnp.h -s -S pnp_s.c $(PATH_TO_TOP)/include/idl/pnp.idl + # EOF diff --git a/reactos/services/umpnpmgr/umpnpmgr.c b/reactos/services/umpnpmgr/umpnpmgr.c index b9b5659091b..f22ab5d3422 100644 --- a/reactos/services/umpnpmgr/umpnpmgr.c +++ b/reactos/services/umpnpmgr/umpnpmgr.c @@ -27,9 +27,6 @@ /* INCLUDES *****************************************************************/ -#define UNICODE -#define _UNICODE - #define NTOS_MODE_USER #include #include @@ -41,6 +38,8 @@ #include #include +#include "pnp.h" + #define DBG #define NDEBUG #include @@ -61,6 +60,66 @@ static SERVICE_TABLE_ENTRY ServiceTable[2] = /* FUNCTIONS *****************************************************************/ +static DWORD WINAPI +RpcServerThread(LPVOID lpParameter) +{ + RPC_STATUS Status; + + DPRINT("RpcServerThread() called\n"); + + Status = RpcServerUseProtseqEpW(L"ncacn_np", + 20, + L"\\pipe\\umpnpmgr", + NULL); // Security descriptor + if (Status != RPC_S_OK) + { + DPRINT1("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); + return 0; + } + + Status = RpcServerRegisterIf(pnp_v1_0_s_ifspec, + NULL, + NULL); + if (Status != RPC_S_OK) + { + DPRINT1("RpcServerRegisterIf() failed (Status %lx)\n", Status); + return 0; + } + + Status = RpcServerListen(1, + 20, + FALSE); + if (Status != RPC_S_OK) + { + DPRINT1("RpcServerListen() failed (Status %lx)\n", Status); + return 0; + } + + DPRINT("RpcServerThread() done\n"); + + return 0; +} + + +void __RPC_FAR * __RPC_USER midl_user_allocate(size_t len) +{ + return GlobalAlloc(GPTR, len); +} + + +void __RPC_USER midl_user_free(void __RPC_FAR * ptr) +{ + GlobalFree(ptr); +} + + +//WORD PNP_GetVersion(RPC_BINDING_HANDLE BindingHandle) +WORD PNP_GetVersion(handle_t BindingHandle) +{ + return 0x0400; +} + + static DWORD WINAPI PnpEventThread(LPVOID lpParameter) { @@ -134,6 +193,15 @@ ServiceMain(DWORD argc, LPTSTR *argv) if (hThread != NULL) CloseHandle(hThread); + hThread = CreateThread(NULL, + 0, + RpcServerThread, + NULL, + 0, + &dwThreadId); + if (hThread != NULL) + CloseHandle(hThread); + DPRINT("ServiceMain() done\n"); } diff --git a/reactos/w32api/include/setupapi.h b/reactos/w32api/include/setupapi.h index 2202141f049..90e0cf7adc2 100644 --- a/reactos/w32api/include/setupapi.h +++ b/reactos/w32api/include/setupapi.h @@ -1031,6 +1031,15 @@ typedef SP_BACKUP_QUEUE_PARAMS_A SP_BACKUP_QUEUE_PARAMS, *PSP_BACKUP_QUEUE_PARAMS; #endif /* UNICODE */ + +WINSETUPAPI LONG WINAPI AddTagToGroupOrderList(PCWSTR, DWORD, DWORD); +WINSETUPAPI PWSTR WINAPI DuplicateString(PCWSTR); +WINSETUPAPI BOOL WINAPI IsUserAdmin(VOID); +WINSETUPAPI VOID WINAPI MyFree(PVOID); +WINSETUPAPI PVOID WINAPI MyMalloc(DWORD); +WINSETUPAPI PVOID WINAPI MyRealloc(PVOID, DWORD); +WINSETUPAPI LONG WINAPI QueryRegistryValue(HKEY, PCWSTR, PBYTE*, PDWORD, PDWORD); + WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,PVOID,UINT); WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,PVOID,UINT); WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,UINT,PVOID,UINT);