- Implement CM_Get_Global_State/CM_Get_Global_State_Ex.

- All RPC-Calls to umpnpmgr return CONFIGRET.

svn path=/trunk/; revision=16525
This commit is contained in:
Eric Kohl 2005-07-10 11:49:10 +00:00
parent de63015392
commit a5b363cd94
9 changed files with 300 additions and 129 deletions

View file

@ -1,8 +1,9 @@
/* /*
* Plug and Play Manager interface definition * Plug and Play Manager RPC interface definition
*/ */
#define WORD unsigned short #define WORD unsigned short
#define DWORD unsigned long
#define CONFIGRET unsigned long #define CONFIGRET unsigned long
[ [
@ -13,9 +14,14 @@
] ]
interface pnp interface pnp
{ {
// unsigned long PNP_GetRootDeviceInstance(handle_t BindingHandle,
// [out, string, size_is(Length)] wchar_t *DeviceInstance,
// [in] unsigned long Length);
CONFIGRET PNP_GetVersion(handle_t BindingHandle, CONFIGRET PNP_GetVersion(handle_t BindingHandle,
[out] WORD *Version); [out] WORD *Version);
CONFIGRET PNP_GetGlobalState(handle_t BindingHandle,
[out] unsigned long *State,
[in] unsigned long Flags);
// CONFIGRET PNP_GetRootDeviceInstance(handle_t BindingHandle,
// [out, string, size_is(Length)] wchar_t *DeviceInstance,
// [in] DWORD Length);
} }

View file

@ -31,6 +31,7 @@ typedef HANDLE HMACHINE;
typedef HMACHINE *PHMACHINE; typedef HMACHINE *PHMACHINE;
typedef DWORD DEVINST; typedef DWORD DEVINST;
typedef DEVINST *PDEVINST; typedef DEVINST *PDEVINST;
typedef ULONG REGDISPOSITION;
typedef CHAR *DEVINSTID_A; typedef CHAR *DEVINSTID_A;
typedef WCHAR *DEVINSTID_W; typedef WCHAR *DEVINSTID_W;
@ -38,16 +39,37 @@ DECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID)
#define CR_SUCCESS 0x00000000 #define CR_SUCCESS 0x00000000
#define CR_OUT_OF_MEMORY 0x00000002 #define CR_OUT_OF_MEMORY 0x00000002
#define CR_INVALID_POINTER 0x00000003
#define CR_INVALID_FLAG 0x00000004
#define CR_INVALID_DEVNODE 0x00000005
#define CR_INVALID_DEVINST CR_INVALID_DEVNODE
#define CR_NO_SUCH_DEVNODE 0x0000000D
#define CR_NO_SUCH_DEVINST CR_NO_SUCH_DEVNODE
#define CR_FAILURE 0x00000013 #define CR_FAILURE 0x00000013
#define CR_BUFFER_SMALL 0x0000001A #define CR_BUFFER_SMALL 0x0000001A
#define CR_REGISTRY_ERROR 0x0000001D
#define CR_INVALID_DEVICE_ID 0x0000001E
#define CR_INVALID_DATA 0x0000001F #define CR_INVALID_DATA 0x0000001F
#define CR_NO_SUCH_VALUE 0x00000025 #define CR_NO_SUCH_VALUE 0x00000025
#define CR_NO_SUCH_REGISTRY_KEY 0x0000002E
#define CR_INVALID_MACHINENAME 0x0000002F #define CR_INVALID_MACHINENAME 0x0000002F
#define CR_ACCESS_DENIED 0x00000033 #define CR_ACCESS_DENIED 0x00000033
#define MAX_CLASS_NAME_LEN 32 #define MAX_CLASS_NAME_LEN 32
#define MAX_GUID_STRING_LEN 39 #define MAX_GUID_STRING_LEN 39
#define MAX_PROFILE_LEN 80 #define MAX_PROFILE_LEN 80
#define MAX_DEVICE_ID_LEN 200
#define MAX_DEVNODE_ID_LEN MAX_DEVICE_ID_LEN
/* Disposition values for CM_Open_Class_Key[_Ex] */
#define RegDisposition_OpenAlways 0x00000000
#define RegDisposition_OpenExisting 0x00000001
#define RegDisposition_Bits 0x00000001
/* ulFlags for CM_Open_Class_Key[_Ex] */
#define CM_OPEN_CLASS_KEY_INSTALLER 0x00000000
#define CM_OPEN_CLASS_KEY_INTERFACE 0x00000001
#define CM_OPEN_CLASS_KEY_BITS 0x00000001
CONFIGRET WINAPI CM_Connect_MachineA( PCSTR, PHMACHINE ); CONFIGRET WINAPI CM_Connect_MachineA( PCSTR, PHMACHINE );
@ -71,6 +93,8 @@ 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_Global_State( PULONG, ULONG );
CONFIGRET WINAPI CM_Get_Global_State_Ex( PULONG, ULONG, HMACHINE );
CONFIGRET WINAPI CM_Get_Parent( PDEVINST, DEVINST, ULONG ); CONFIGRET WINAPI CM_Get_Parent( PDEVINST, DEVINST, ULONG );
CONFIGRET WINAPI CM_Get_Parent_Ex( PDEVINST, DEVINST, ULONG, HMACHINE ); CONFIGRET WINAPI CM_Get_Parent_Ex( PDEVINST, DEVINST, ULONG, HMACHINE );
CONFIGRET WINAPI CM_Get_Sibling( PDEVINST, DEVINST, ULONG ); CONFIGRET WINAPI CM_Get_Sibling( PDEVINST, DEVINST, ULONG );
@ -85,4 +109,12 @@ CONFIGRET WINAPI CM_Locate_DevNode_ExA(PDEVINST, DEVINSTID_A, ULONG, HMACHINE);
CONFIGRET WINAPI CM_Locate_DevNode_ExW(PDEVINST, DEVINSTID_W, 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) #define CM_Locate_DevNode_Ex WINELIB_NAME_AW(CM_Locate_DevNode_Ex)
CONFIGRET WINAPI CM_Open_Class_KeyA(LPGUID, LPCSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG);
CONFIGRET WINAPI CM_Open_Class_KeyW(LPGUID, LPCWSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG);
#define CM_Open_Class_Key WINELIB_NAME_AW(CM_Open_Class_Key)
CONFIGRET WINAPI CM_Open_Class_Key_ExA(LPGUID, LPCSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG, HMACHINE);
CONFIGRET WINAPI CM_Open_Class_Key_ExW(LPGUID, LPCWSTR, REGSAM, REGDISPOSITION, PHKEY, ULONG, HMACHINE);
#define CM_Open_Class_Key_Ex WINELIB_NAME_AW(CM_Open_Class_Key_Ex)
#endif /* _CFGMGR32_H_ */ #endif /* _CFGMGR32_H_ */

View file

@ -32,6 +32,7 @@
#include "setupapi_private.h" #include "setupapi_private.h"
#include "rpc.h" #include "rpc.h"
#include "rpc_private.h"
#include "pnp_c.h" #include "pnp_c.h"
@ -139,14 +140,29 @@ static CONFIGRET GetCmCodeFromErrorCode(DWORD ErrorCode)
{ {
switch (ErrorCode) switch (ErrorCode)
{ {
case ERROR_SUCCESS: return CR_SUCCESS; case ERROR_SUCCESS:
case ERROR_ACCESS_DENIED: return CR_ACCESS_DENIED; return CR_SUCCESS;
case ERROR_INSUFFICIENT_BUFFER: return CR_BUFFER_SMALL;
case ERROR_INVALID_DATA: return CR_INVALID_DATA; case ERROR_ACCESS_DENIED:
case ERROR_INVALID_PARAMETER: return CR_INVALID_DATA; return CR_ACCESS_DENIED;
case ERROR_NO_MORE_ITEMS: return CR_NO_SUCH_VALUE;
case ERROR_NO_SYSTEM_RESOURCES: return CR_OUT_OF_MEMORY; case ERROR_INSUFFICIENT_BUFFER:
default: return CR_FAILURE; return CR_BUFFER_SMALL;
case ERROR_INVALID_DATA:
return CR_INVALID_DATA;
case ERROR_INVALID_PARAMETER:
return CR_INVALID_DATA;
case ERROR_NO_MORE_ITEMS:
return CR_NO_SUCH_VALUE;
case ERROR_NO_SYSTEM_RESOURCES:
return CR_OUT_OF_MEMORY;
default:
return CR_FAILURE;
} }
} }
@ -218,7 +234,7 @@ CONFIGRET WINAPI CM_Get_Child(
CONFIGRET WINAPI CM_Get_Child_Ex( CONFIGRET WINAPI CM_Get_Child_Ex(
PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
{ {
TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine); FIXME("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
return CR_SUCCESS; return CR_SUCCESS;
} }
@ -229,9 +245,9 @@ CONFIGRET WINAPI CM_Get_Child_Ex(
CONFIGRET WINAPI CM_Get_Device_ID_ListA( CONFIGRET WINAPI CM_Get_Device_ID_ListA(
PCSTR pszFilter, PCHAR Buffer, ULONG BufferLen, ULONG ulFlags ) PCSTR pszFilter, PCHAR Buffer, ULONG BufferLen, ULONG ulFlags )
{ {
FIXME("%p %p %ld %ld\n", pszFilter, Buffer, BufferLen, ulFlags); TRACE("%p %p %ld %ld\n", pszFilter, Buffer, BufferLen, ulFlags);
memset(Buffer,0,2); return CM_Get_Device_ID_List_ExA(pszFilter, Buffer, BufferLen,
return CR_SUCCESS; ulFlags, NULL);
} }
@ -281,9 +297,8 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_ExW(
CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA( CONFIGRET WINAPI CM_Get_Device_ID_List_SizeA(
PULONG pulLen, PCSTR pszFilter, ULONG ulFlags) PULONG pulLen, PCSTR pszFilter, ULONG ulFlags)
{ {
FIXME("%p %s %ld\n", pulLen, pszFilter, ulFlags); TRACE("%p %s %ld\n", pulLen, pszFilter, ulFlags);
*pulLen = 2; return CM_Get_Device_ID_List_Size_ExA(pulLen, pszFilter, ulFlags, NULL);
return CR_SUCCESS;
} }
@ -322,6 +337,51 @@ CONFIGRET WINAPI CM_Get_Device_ID_List_Size_ExW(
} }
/***********************************************************************
* CM_Get_Global_State [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Global_State(
PULONG pulState, ULONG ulFlags)
{
TRACE("%p %lx\n", pulState, ulFlags);
return CM_Get_Global_State_Ex(pulState, ulFlags, NULL);
}
/***********************************************************************
* CM_Get_Global_State_Ex [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Get_Global_State_Ex(
PULONG pulState, ULONG ulFlags, HMACHINE hMachine)
{
RPC_BINDING_HANDLE BindingHandle = NULL;
RPC_STATUS Status;
TRACE("%p %lx %lx\n", pulState, ulFlags, hMachine);
if (pulState == NULL)
return CR_INVALID_POINTER;
if (ulFlags != 0)
return CR_INVALID_FLAG;
if (hMachine != NULL)
{
BindingHandle = ((PMACHINE_INFO)hMachine)->BindingHandle;
if (BindingHandle == NULL)
return CR_FAILURE;
}
else
{
Status = PnpGetLocalBindingHandle(&BindingHandle);
if (Status != RPC_S_OK)
return CR_FAILURE;
}
return PNP_GetGlobalState(BindingHandle, pulState, ulFlags);
}
/*********************************************************************** /***********************************************************************
* CM_Get_Parent [SETUPAPI.@] * CM_Get_Parent [SETUPAPI.@]
*/ */
@ -339,7 +399,7 @@ CONFIGRET WINAPI CM_Get_Parent(
CONFIGRET WINAPI CM_Get_Parent_Ex( CONFIGRET WINAPI CM_Get_Parent_Ex(
PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
{ {
TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine); FIXME("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
return CR_SUCCESS; return CR_SUCCESS;
} }
@ -361,7 +421,7 @@ CONFIGRET WINAPI CM_Get_Sibling(
CONFIGRET WINAPI CM_Get_Sibling_Ex( CONFIGRET WINAPI CM_Get_Sibling_Ex(
PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine) PDEVINST pdnDevInst, DEVINST dnDevInst, ULONG ulFlags, HMACHINE hMachine)
{ {
TRACE("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine); FIXME("%p %lx %lx %lx\n", pdnDevInst, dnDevInst, ulFlags, hMachine);
return CR_SUCCESS; return CR_SUCCESS;
} }
@ -385,7 +445,7 @@ WORD WINAPI CM_Get_Version_Ex(HMACHINE hMachine)
RPC_STATUS Status; RPC_STATUS Status;
WORD Version = 0; WORD Version = 0;
FIXME("%lx\n", hMachine); TRACE("%lx\n", hMachine);
if (hMachine != NULL) if (hMachine != NULL)
{ {
@ -413,8 +473,8 @@ WORD WINAPI CM_Get_Version_Ex(HMACHINE hMachine)
CONFIGRET WINAPI CM_Locate_DevNodeA( CONFIGRET WINAPI CM_Locate_DevNodeA(
PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, ULONG ulFlags) PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, ULONG ulFlags)
{ {
FIXME("%p %p %lu\n", pdnDevInst, pDeviceID, ulFlags); TRACE("%p %s %lu\n", pdnDevInst, pDeviceID, ulFlags);
return CR_SUCCESS; return CM_Locate_DevNode_ExA(pdnDevInst, pDeviceID, ulFlags, NULL);
} }
@ -424,7 +484,7 @@ CONFIGRET WINAPI CM_Locate_DevNodeA(
CONFIGRET WINAPI CM_Locate_DevNodeW( CONFIGRET WINAPI CM_Locate_DevNodeW(
PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, ULONG ulFlags) PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, ULONG ulFlags)
{ {
TRACE("%p %p %lu\n", pdnDevInst, pDeviceID, ulFlags); TRACE("%p %s %lu\n", pdnDevInst, debugstr_w(pDeviceID), ulFlags);
return CM_Locate_DevNode_ExW(pdnDevInst, pDeviceID, ulFlags, NULL); return CM_Locate_DevNode_ExW(pdnDevInst, pDeviceID, ulFlags, NULL);
} }
@ -435,8 +495,23 @@ CONFIGRET WINAPI CM_Locate_DevNodeW(
CONFIGRET WINAPI CM_Locate_DevNode_ExA( CONFIGRET WINAPI CM_Locate_DevNode_ExA(
PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, ULONG ulFlags, HMACHINE hMachine) PDEVINST pdnDevInst, DEVINSTID_A pDeviceID, ULONG ulFlags, HMACHINE hMachine)
{ {
FIXME("%p %p %lu %lx\n", pdnDevInst, pDeviceID, ulFlags, hMachine); DEVINSTID_W pDevIdW = NULL;
return CR_SUCCESS; CONFIGRET rc = CR_SUCCESS;
TRACE("%p %s %lu %lx\n", pdnDevInst, pDeviceID, ulFlags, hMachine);
if (pDeviceID != NULL)
{
if (CaptureAndConvertAnsiArg(pDeviceID, &pDevIdW))
return CR_INVALID_DEVICE_ID;
}
rc = CM_Locate_DevNode_ExW(pdnDevInst, pDevIdW, ulFlags, hMachine);
if (pDevIdW != NULL)
MyFree(pDevIdW);
return rc;
} }
@ -446,6 +521,6 @@ CONFIGRET WINAPI CM_Locate_DevNode_ExA(
CONFIGRET WINAPI CM_Locate_DevNode_ExW( CONFIGRET WINAPI CM_Locate_DevNode_ExW(
PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, ULONG ulFlags, HMACHINE hMachine) PDEVINST pdnDevInst, DEVINSTID_W pDeviceID, ULONG ulFlags, HMACHINE hMachine)
{ {
FIXME("%p %p %lu %lx\n", pdnDevInst, pDeviceID, ulFlags, hMachine); FIXME("%p %s %lu %lx\n", pdnDevInst, debugstr_w(pDeviceID), ulFlags, hMachine);
return CR_SUCCESS; return CR_SUCCESS;
} }

View file

@ -1,15 +1,34 @@
/* rpc.c */ /*
* RPC support routines
*
* Copyright 2005 Eric Kohl
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include <windows.h> #include <windows.h>
#include <rpc.h> #include <rpc.h>
#include <rpcdce.h> #include <rpcdce.h>
#include "rpc_private.h"
static RPC_BINDING_HANDLE LocalBindingHandle = NULL; static RPC_BINDING_HANDLE LocalBindingHandle = NULL;
RPC_STATUS RPC_STATUS
PnpBindRpc(LPWSTR pszMachine, PnpBindRpc(LPCWSTR pszMachine,
RPC_BINDING_HANDLE* BindingHandle) RPC_BINDING_HANDLE* BindingHandle)
{ {
PWSTR pszStringBinding = NULL; PWSTR pszStringBinding = NULL;
@ -17,7 +36,7 @@ PnpBindRpc(LPWSTR pszMachine,
Status = RpcStringBindingComposeW(NULL, Status = RpcStringBindingComposeW(NULL,
L"ncacn_np", L"ncacn_np",
pszMachine, (LPWSTR)pszMachine,
L"\\pipe\\umpnpmgr", L"\\pipe\\umpnpmgr",
NULL, NULL,
&pszStringBinding); &pszStringBinding);

View file

@ -0,0 +1,29 @@
/*
* Copyright 2005 Eric Kohl
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifndef __RPC_PRIVATE_H
#define __RPC_PRIVATE_H
RPC_STATUS PnpBindRpc(LPCWSTR pszMachine,
RPC_BINDING_HANDLE* BindingHandle);
RPC_STATUS PnpUnbindRpc(RPC_BINDING_HANDLE *BindingHandle);
RPC_STATUS PnpGetLocalBindingHandle(RPC_BINDING_HANDLE *BindingHandle);
RPC_STATUS PnpUnbindLocalHandles(VOID);
#endif /* __RPC_PRIVATE_H */

View file

@ -99,8 +99,8 @@
@ stub CM_Get_Device_Interface_List_Size_ExW @ stub CM_Get_Device_Interface_List_Size_ExW
@ stub CM_Get_First_Log_Conf @ stub CM_Get_First_Log_Conf
@ stub CM_Get_First_Log_Conf_Ex @ stub CM_Get_First_Log_Conf_Ex
@ stub CM_Get_Global_State @ stdcall CM_Get_Global_State(ptr long)
@ stub CM_Get_Global_State_Ex @ stdcall CM_Get_Global_State_Ex(ptr long long)
@ stub CM_Get_HW_Prof_FlagsA @ stub CM_Get_HW_Prof_FlagsA
@ stub CM_Get_HW_Prof_FlagsW @ stub CM_Get_HW_Prof_FlagsW
@ stub CM_Get_HW_Prof_Flags_ExA @ stub CM_Get_HW_Prof_Flags_ExA

View file

@ -107,12 +107,22 @@ void __RPC_USER midl_user_free(void __RPC_FAR * ptr)
} }
//WORD PNP_GetVersion(RPC_BINDING_HANDLE BindingHandle) //CONFIRET PNP_GetVersion(RPC_BINDING_HANDLE BindingHandle,
// WORD *Version)
unsigned long PNP_GetVersion(handle_t BindingHandle, unsigned long PNP_GetVersion(handle_t BindingHandle,
unsigned short *Version) unsigned short *Version)
{ {
*Version = 0x0400; *Version = 0x0400;
return 0; return 0; /* CR_SUCCESS */
}
unsigned long PNP_GetGlobalState(handle_t BindingHandle,
unsigned long *State,
unsigned long Flags)
{
*State = 5;
return 0; /* CR_SUCCESS */
} }