mirror of
https://github.com/reactos/reactos.git
synced 2025-06-16 23:58:30 +00:00
- 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
This commit is contained in:
parent
a0da8855ea
commit
b718e3cc4e
11 changed files with 444 additions and 31 deletions
19
reactos/include/idl/pnp.idl
Normal file
19
reactos/include/idl/pnp.idl
Normal file
|
@ -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);
|
||||||
|
}
|
|
@ -19,12 +19,28 @@
|
||||||
#ifndef _CFGMGR32_H_
|
#ifndef _CFGMGR32_H_
|
||||||
#define _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 DWORD CONFIGRET;
|
||||||
typedef HANDLE HMACHINE;
|
typedef HANDLE HMACHINE;
|
||||||
typedef HMACHINE *PHMACHINE;
|
typedef HMACHINE *PHMACHINE;
|
||||||
|
typedef DWORD DEVINST;
|
||||||
|
typedef DEVINST *PDEVINST;
|
||||||
|
|
||||||
|
typedef CHAR *DEVINSTID_A;
|
||||||
|
typedef WCHAR *DEVINSTID_W;
|
||||||
|
DECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID)
|
||||||
|
|
||||||
|
|
||||||
#define CR_SUCCESS 0x00000000
|
#define CR_SUCCESS 0x00000000
|
||||||
|
#define CR_OUT_OF_MEMORY 0x00000002
|
||||||
#define CR_INVALID_DATA 0x0000001F
|
#define CR_INVALID_DATA 0x0000001F
|
||||||
|
#define CR_INVALID_MACHINENAME 0x0000002F
|
||||||
#define CR_ACCESS_DENIED 0x00000033
|
#define CR_ACCESS_DENIED 0x00000033
|
||||||
|
|
||||||
|
|
||||||
|
@ -34,6 +50,8 @@ CONFIGRET WINAPI CM_Connect_MachineW( PCWSTR, PHMACHINE );
|
||||||
|
|
||||||
CONFIGRET WINAPI CM_Disconnect_Machine( HMACHINE );
|
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_ListA( PCSTR, PCHAR, ULONG, ULONG );
|
||||||
CONFIGRET WINAPI CM_Get_Device_ID_ListW( PCWSTR, PWCHAR, 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)
|
#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_ExA( PULONG, PCSTR, ULONG, HMACHINE );
|
||||||
CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW( PULONG, PCWSTR, 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)
|
#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_ */
|
#endif /* _CFGMGR32_H_ */
|
||||||
|
|
|
@ -666,6 +666,8 @@ DECL_WINELIB_SETUPAPI_TYPE_AW(PFILEPATHS)
|
||||||
|
|
||||||
|
|
||||||
LONG WINAPI AddTagToGroupOrderList(PCWSTR lpGroupName, DWORD dwUnknown2, DWORD dwUnknown3);
|
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 DelayedMove(PCWSTR lpExistingFileName, PCWSTR lpNewFileName);
|
||||||
BOOL WINAPI DoesUserHavePrivilege(PCWSTR lpPrivilegeName);
|
BOOL WINAPI DoesUserHavePrivilege(PCWSTR lpPrivilegeName);
|
||||||
PWSTR WINAPI DuplicateString(PCWSTR lpSrc);
|
PWSTR WINAPI DuplicateString(PCWSTR lpSrc);
|
||||||
|
|
|
@ -18,7 +18,9 @@ C_SRCS = \
|
||||||
parser.c \
|
parser.c \
|
||||||
queue.c \
|
queue.c \
|
||||||
setupcab.c \
|
setupcab.c \
|
||||||
stubs.c
|
stubs.c \
|
||||||
|
rpc.c \
|
||||||
|
pnp_c.c
|
||||||
|
|
||||||
C_SRCS16 = \
|
C_SRCS16 = \
|
||||||
devinst16.c \
|
devinst16.c \
|
||||||
|
|
|
@ -31,10 +31,19 @@
|
||||||
#include "cfgmgr32.h"
|
#include "cfgmgr32.h"
|
||||||
#include "setupapi_private.h"
|
#include "setupapi_private.h"
|
||||||
|
|
||||||
|
#include "rpc.h"
|
||||||
|
|
||||||
|
#include "pnp.h"
|
||||||
|
|
||||||
#include "wine/debug.h"
|
#include "wine/debug.h"
|
||||||
|
|
||||||
WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
|
WINE_DEFAULT_DEBUG_CHANNEL(setupapi);
|
||||||
|
|
||||||
|
typedef struct _MACHINE_INFO
|
||||||
|
{
|
||||||
|
RPC_BINDING_HANDLE BindingHandle;
|
||||||
|
} MACHINE_INFO, *PMACHINE_INFO;
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* CM_Connect_MachineA [SETUPAPI.@]
|
* CM_Connect_MachineA [SETUPAPI.@]
|
||||||
|
@ -47,14 +56,10 @@ CONFIGRET WINAPI CM_Connect_MachineA(PCSTR UNCServerName, PHMACHINE phMachine)
|
||||||
TRACE("%s %p\n", UNCServerName, phMachine);
|
TRACE("%s %p\n", UNCServerName, phMachine);
|
||||||
|
|
||||||
if (UNCServerName == NULL || *UNCServerName == 0)
|
if (UNCServerName == NULL || *UNCServerName == 0)
|
||||||
{
|
|
||||||
return CM_Connect_MachineW(NULL, phMachine);
|
return CM_Connect_MachineW(NULL, phMachine);
|
||||||
}
|
|
||||||
|
|
||||||
if (CaptureAndConvertAnsiArg(UNCServerName, &pServerNameW))
|
if (CaptureAndConvertAnsiArg(UNCServerName, &pServerNameW))
|
||||||
{
|
|
||||||
return CR_INVALID_DATA;
|
return CR_INVALID_DATA;
|
||||||
}
|
|
||||||
|
|
||||||
ret = CM_Connect_MachineW(pServerNameW, phMachine);
|
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)
|
CONFIGRET WINAPI CM_Connect_MachineW(PCWSTR UNCServerName, PHMACHINE phMachine)
|
||||||
{
|
{
|
||||||
FIXME("%s %p\n", debugstr_w(UNCServerName), phMachine);
|
PMACHINE_INFO pMachine;
|
||||||
return CR_ACCESS_DENIED;
|
|
||||||
|
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)
|
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;
|
return CR_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,9 +208,8 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA(
|
||||||
CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW(
|
CONFIGRET WINAPI CM_Get_Device_ID_List_SizeW(
|
||||||
PULONG pulLen, PCWSTR pszFilter, ULONG ulFlags)
|
PULONG pulLen, PCWSTR pszFilter, ULONG ulFlags)
|
||||||
{
|
{
|
||||||
FIXME("%p %s %ld\n", pulLen, debugstr_w(pszFilter), ulFlags);
|
TRACE("%p %s %ld\n", pulLen, debugstr_w(pszFilter), ulFlags);
|
||||||
*pulLen = 2;
|
return CM_Get_Device_ID_List_Size_ExW(pulLen, pszFilter, ulFlags, NULL);
|
||||||
return CR_SUCCESS;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -182,3 +235,128 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW(
|
||||||
*pulLen = 2;
|
*pulLen = 2;
|
||||||
return CR_SUCCESS;
|
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;
|
||||||
|
}
|
||||||
|
|
|
@ -4,6 +4,15 @@ PATH_TO_TOP = ../..
|
||||||
|
|
||||||
TARGET_TYPE = winedll
|
TARGET_TYPE = winedll
|
||||||
|
|
||||||
|
TARGET_CLEAN = pnp_c.c pnp.h
|
||||||
|
|
||||||
include $(PATH_TO_TOP)/rules.mak
|
include $(PATH_TO_TOP)/rules.mak
|
||||||
|
|
||||||
include $(TOOLS_PATH)/helper.mk
|
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
|
||||||
|
|
82
reactos/lib/setupapi/rpc.c
Normal file
82
reactos/lib/setupapi/rpc.c
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
/* rpc.c */
|
||||||
|
|
||||||
|
#include <windows.h>
|
||||||
|
#include <rpc.h>
|
||||||
|
#include <rpcdce.h>
|
||||||
|
|
||||||
|
|
||||||
|
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 */
|
|
@ -53,8 +53,8 @@
|
||||||
@ stub CM_Free_Res_Des
|
@ stub CM_Free_Res_Des
|
||||||
@ stub CM_Free_Res_Des_Ex
|
@ stub CM_Free_Res_Des_Ex
|
||||||
@ stub CM_Free_Res_Des_Handle
|
@ stub CM_Free_Res_Des_Handle
|
||||||
@ stub CM_Get_Child
|
@ stdcall CM_Get_Child(ptr long long)
|
||||||
@ stub CM_Get_Child_Ex
|
@ stdcall CM_Get_Child_Ex(ptr long long long)
|
||||||
@ stub CM_Get_Class_Key_NameA
|
@ stub CM_Get_Class_Key_NameA
|
||||||
@ stub CM_Get_Class_Key_NameW
|
@ stub CM_Get_Class_Key_NameW
|
||||||
@ stub CM_Get_Class_Key_Name_ExA
|
@ stub CM_Get_Class_Key_Name_ExA
|
||||||
|
@ -115,23 +115,23 @@
|
||||||
@ stub CM_Get_Next_Log_Conf_Ex
|
@ stub CM_Get_Next_Log_Conf_Ex
|
||||||
@ stub CM_Get_Next_Res_Des
|
@ stub CM_Get_Next_Res_Des
|
||||||
@ stub CM_Get_Next_Res_Des_Ex
|
@ stub CM_Get_Next_Res_Des_Ex
|
||||||
@ stub CM_Get_Parent
|
@ stdcall CM_Get_Parent(ptr long long)
|
||||||
@ stub CM_Get_Parent_Ex
|
@ stdcall CM_Get_Parent_Ex(ptr long long long)
|
||||||
@ stub CM_Get_Res_Des_Data
|
@ stub CM_Get_Res_Des_Data
|
||||||
@ stub CM_Get_Res_Des_Data_Ex
|
@ stub CM_Get_Res_Des_Data_Ex
|
||||||
@ stub CM_Get_Res_Des_Data_Size
|
@ stub CM_Get_Res_Des_Data_Size
|
||||||
@ stub CM_Get_Res_Des_Data_Size_Ex
|
@ stub CM_Get_Res_Des_Data_Size_Ex
|
||||||
@ stub CM_Get_Sibling
|
@ stdcall CM_Get_Sibling(ptr long long)
|
||||||
@ stub CM_Get_Sibling_Ex
|
@ stdcall CM_Get_Sibling_Ex(ptr long long long)
|
||||||
@ stub CM_Get_Version
|
@ stdcall CM_Get_Version()
|
||||||
@ stub CM_Get_Version_Ex
|
@ stdcall CM_Get_Version_Ex(long)
|
||||||
@ stub CM_Intersect_Range_List
|
@ stub CM_Intersect_Range_List
|
||||||
@ stub CM_Invert_Range_List
|
@ stub CM_Invert_Range_List
|
||||||
@ stub CM_Is_Dock_Station_Present
|
@ stub CM_Is_Dock_Station_Present
|
||||||
@ stub CM_Locate_DevNodeA
|
@ stdcall CM_Locate_DevNodeA(ptr str long)
|
||||||
@ stub CM_Locate_DevNodeW
|
@ stdcall CM_Locate_DevNodeW(ptr wstr long)
|
||||||
@ stub CM_Locate_DevNode_ExA
|
@ stdcall CM_Locate_DevNode_ExA(ptr str long long)
|
||||||
@ stub CM_Locate_DevNode_ExW
|
@ stdcall CM_Locate_DevNode_ExW(ptr wstr long long)
|
||||||
@ stub CM_Merge_Range_List
|
@ stub CM_Merge_Range_List
|
||||||
@ stub CM_Modify_Res_Des
|
@ stub CM_Modify_Res_Des
|
||||||
@ stub CM_Modify_Res_Des_Ex
|
@ stub CM_Modify_Res_Des_Ex
|
||||||
|
|
|
@ -12,12 +12,25 @@ TARGET_INSTALLDIR = system32
|
||||||
|
|
||||||
TARGET_SDKLIBS = ntdll.a kernel32.a advapi32.a rpcrt4.a
|
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 $(PATH_TO_TOP)/rules.mak
|
||||||
|
|
||||||
include $(TOOLS_PATH)/helper.mk
|
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
|
# EOF
|
||||||
|
|
|
@ -27,9 +27,6 @@
|
||||||
|
|
||||||
/* INCLUDES *****************************************************************/
|
/* INCLUDES *****************************************************************/
|
||||||
|
|
||||||
#define UNICODE
|
|
||||||
#define _UNICODE
|
|
||||||
|
|
||||||
#define NTOS_MODE_USER
|
#define NTOS_MODE_USER
|
||||||
#include <ntos.h>
|
#include <ntos.h>
|
||||||
#include <ntos/ntpnp.h>
|
#include <ntos/ntpnp.h>
|
||||||
|
@ -41,6 +38,8 @@
|
||||||
#include <rpc.h>
|
#include <rpc.h>
|
||||||
#include <rpcdce.h>
|
#include <rpcdce.h>
|
||||||
|
|
||||||
|
#include "pnp.h"
|
||||||
|
|
||||||
#define DBG
|
#define DBG
|
||||||
#define NDEBUG
|
#define NDEBUG
|
||||||
#include <debug.h>
|
#include <debug.h>
|
||||||
|
@ -61,6 +60,66 @@ static SERVICE_TABLE_ENTRY ServiceTable[2] =
|
||||||
|
|
||||||
/* FUNCTIONS *****************************************************************/
|
/* 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
|
static DWORD WINAPI
|
||||||
PnpEventThread(LPVOID lpParameter)
|
PnpEventThread(LPVOID lpParameter)
|
||||||
{
|
{
|
||||||
|
@ -134,6 +193,15 @@ ServiceMain(DWORD argc, LPTSTR *argv)
|
||||||
if (hThread != NULL)
|
if (hThread != NULL)
|
||||||
CloseHandle(hThread);
|
CloseHandle(hThread);
|
||||||
|
|
||||||
|
hThread = CreateThread(NULL,
|
||||||
|
0,
|
||||||
|
RpcServerThread,
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
&dwThreadId);
|
||||||
|
if (hThread != NULL)
|
||||||
|
CloseHandle(hThread);
|
||||||
|
|
||||||
DPRINT("ServiceMain() done\n");
|
DPRINT("ServiceMain() done\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1031,6 +1031,15 @@ typedef SP_BACKUP_QUEUE_PARAMS_A SP_BACKUP_QUEUE_PARAMS,
|
||||||
*PSP_BACKUP_QUEUE_PARAMS;
|
*PSP_BACKUP_QUEUE_PARAMS;
|
||||||
#endif /* UNICODE */
|
#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 SetupAddInstallSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,PVOID,UINT);
|
||||||
WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,PVOID,UINT);
|
WINSETUPAPI BOOL WINAPI SetupAddInstallSectionToDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,PVOID,UINT);
|
||||||
WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,UINT,PVOID,UINT);
|
WINSETUPAPI BOOL WINAPI SetupAddSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,UINT,PVOID,UINT);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue