Implement CM_Add_Empty_Log_Conf[_Ex] and add PNP_AddEmptyLogConf stub.

svn path=/trunk/; revision=22949
This commit is contained in:
Eric Kohl 2006-07-08 21:37:32 +00:00
parent b9ed9b1450
commit 42c3759b94
7 changed files with 164 additions and 4 deletions

View file

@ -1245,6 +1245,26 @@ PNP_HwProfFlags(handle_t BindingHandle,
}
/* Function 42 */
CONFIGRET
PNP_AddEmptyLogConf(handle_t BindingHandle,
wchar_t *DeviceInstance,
ULONG ulPriority,
ULONG *ulLogConfTag,
ULONG ulFlags)
{
CONFIGRET ret = CR_SUCCESS;
DPRINT1("PNP_AddEmptyLogConf() called\n");
*ulLogConfTag = 0; /* FIXME */
DPRINT1("PNP_AddEmptyLogConf() done (returns %lx)\n", ret);
return ret;
}
/* Function 58 */
CONFIGRET
PNP_RunDetection(handle_t BindingHandle,

View file

@ -25,8 +25,8 @@ CMP_Report_LogOn@4=SETUPAPI.CMP_Report_LogOn
;CMP_UnregisterNotification
;CMP_WaitNoPendingInstallEvents
;CMP_WaitServices
;CM_Add_Empty_Log_Conf@16=SETUPAPI.CM_Add_Empty_Log_Conf
;CM_Add_Empty_Log_Conf_Ex@20=SETUPAPI.CM_Add_Empty_Log_Conf_Ex
CM_Add_Empty_Log_Conf@16=SETUPAPI.CM_Add_Empty_Log_Conf
CM_Add_Empty_Log_Conf_Ex@20=SETUPAPI.CM_Add_Empty_Log_Conf_Ex
CM_Add_IDA@12=SETUPAPI.CM_Add_IDA
CM_Add_IDW@12=SETUPAPI.CM_Add_IDW
CM_Add_ID_ExA@16=SETUPAPI.CM_Add_ID_ExA

View file

@ -46,6 +46,17 @@ typedef struct _MACHINE_INFO
} MACHINE_INFO, *PMACHINE_INFO;
typedef struct _LOG_CONF_INFO
{
ULONG ulMagic;
DEVINST dnDevInst;
ULONG ulFlags;
ULONG ulTag;
} LOG_CONF_INFO, *PLOG_CONF_INFO;
#define LOG_CONF_MAGIC 0x464E434C /* "LCNF" */
static BOOL GuidToString(LPGUID Guid, LPWSTR String)
{
LPWSTR lpString;
@ -122,6 +133,96 @@ CONFIGRET WINAPI CMP_Report_LogOn(
}
/***********************************************************************
* CM_Add_Empty_Log_Conf [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Add_Empty_Log_Conf(
PLOG_CONF plcLogConf, DEVINST dnDevInst, PRIORITY Priority,
ULONG ulFlags)
{
TRACE("%p %p %lu %lx\n", plcLogConf, dnDevInst, Priority, ulFlags);
return CM_Add_Empty_Log_Conf_Ex(plcLogConf, dnDevInst, Priority,
ulFlags, NULL);
}
/***********************************************************************
* CM_Add_Empty_Log_Conf_Ex [SETUPAPI.@]
*/
CONFIGRET WINAPI CM_Add_Empty_Log_Conf_Ex(
PLOG_CONF plcLogConf, DEVINST dnDevInst, PRIORITY Priority,
ULONG ulFlags, HMACHINE hMachine)
{
RPC_BINDING_HANDLE BindingHandle = NULL;
HSTRING_TABLE StringTable = NULL;
ULONG ulLogConfTag = 0;
LPWSTR lpDevInst;
PLOG_CONF_INFO pLogConfInfo;
CONFIGRET ret = CR_SUCCESS;
FIXME("%p %p %lu %lx %p\n",
plcLogConf, dnDevInst, Priority, ulFlags, hMachine);
if (!IsUserAdmin())
return CR_ACCESS_DENIED;
if (plcLogConf == NULL)
return CR_INVALID_POINTER;
if (dnDevInst == 0)
return CR_INVALID_DEVINST;
if (Priority > 0xFFFF)
return CR_INVALID_PRIORITY;
if (ulFlags & ~(LOG_CONF_BITS | PRIORITY_BIT))
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;
}
lpDevInst = StringTableStringFromId(StringTable, dnDevInst);
if (lpDevInst == NULL)
return CR_INVALID_DEVNODE;
ret = PNP_AddEmptyLogConf(BindingHandle, lpDevInst, Priority, &ulLogConfTag, ulFlags);
if (ret == CR_SUCCESS)
{
pLogConfInfo = HeapAlloc(GetProcessHeap(), 0, sizeof(LOG_CONF_INFO));
if (pLogConfInfo == NULL)
{
ret = CR_OUT_OF_MEMORY;
}
else
{
pLogConfInfo->ulMagic = LOG_CONF_MAGIC;
pLogConfInfo->dnDevInst = dnDevInst;
pLogConfInfo->ulFlags = ulFlags;
pLogConfInfo->ulTag = ulLogConfTag;
*plcLogConf = (LOG_CONF)pLogConfInfo;
ret = CR_SUCCESS;
}
}
return ret;
}
/***********************************************************************
* CM_Add_IDA [SETUPAPI.@]
*/

View file

@ -9,8 +9,8 @@
@ stub CMP_UnregisterNotification
@ stub CMP_WaitNoPendingInstallEvents
@ stub CMP_WaitServicesAvailable
@ stub CM_Add_Empty_Log_Conf
@ stub CM_Add_Empty_Log_Conf_Ex
@ stdcall CM_Add_Empty_Log_Conf(ptr ptr long long)
@ stdcall CM_Add_Empty_Log_Conf_Ex(ptr ptr long long ptr)
@ stdcall CM_Add_IDA(ptr str long)
@ stdcall CM_Add_IDW(ptr wstr long)
@ stdcall CM_Add_ID_ExA(ptr str long ptr)

View file

@ -619,6 +619,15 @@ CMP_Report_LogOn(
/* FIXME: Missing CMP_WaitServicesAvailable */
/* CM_Add_Empty_Log_Conf.ulFlags constants */
#define BASIC_LOG_CONF 0x00000000
#define FILTERED_LOG_CONF 0x00000001
#define ALLOC_LOG_CONF 0x00000002
#define BOOT_LOG_CONF 0x00000003
#define FORCED_LOG_CONF 0x00000004
#define OVERRIDE_LOG_CONF 0x00000005
#define NUM_LOG_CONF 0x00000006
#define LOG_CONF_BITS 0x00000007
#define PRIORITY_EQUAL_FIRST 0x00000008
#define PRIORITY_EQUAL_LAST 0x00000000
#define PRIORITY_BIT 0x00000008

View file

@ -4,6 +4,7 @@
#define WORD unsigned short
#define DWORD unsigned long
#define ULONG unsigned long
#define CONFIGRET unsigned long
#define BOOL unsigned long
#define PBOOL unsigned long *
@ -197,6 +198,13 @@ interface pnp
[in, out] unsigned long *Value,
[in] DWORD Flags);
/* Function 42 */
CONFIGRET PNP_AddEmptyLogConf(handle_t BindingHandle,
[in, string] wchar_t *DeviceInstance,
[in] ULONG ulPriority,
[out] ULONG *ulLogConfTag,
[in] ULONG ulFlags);
/* Function 58 */
CONFIGRET PNP_RunDetection(handle_t BindingHandle,
[in] unsigned long Flags);

View file

@ -34,6 +34,11 @@ typedef DEVINST *PDEVINST;
typedef DWORD DEVNODE;
typedef DEVNODE *PDEVNODE;
typedef ULONG REGDISPOSITION;
typedef DWORD_PTR LOG_CONF;
typedef LOG_CONF *PLOG_CONF;
typedef ULONG PRIORITY;
typedef PRIORITY *PPRIORITY;
typedef CHAR *DEVINSTID_A;
typedef WCHAR *DEVINSTID_W;
@ -53,6 +58,7 @@ DECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID)
#define CR_INVALID_DEVICE_ID 0x0000001E
#define CR_INVALID_DATA 0x0000001F
#define CR_NO_SUCH_VALUE 0x00000025
#define CR_INVALID_PRIORITY 0x00000027
#define CR_NO_SUCH_REGISTRY_KEY 0x0000002E
#define CR_INVALID_MACHINENAME 0x0000002F
#define CR_ACCESS_DENIED 0x00000033
@ -189,12 +195,28 @@ DECL_WINELIB_CFGMGR32_TYPE_AW(DEVINSTID)
#define CM_SET_HW_PROF_FLAGS_UI_NOT_OK 0x00000001
#define CM_SET_HW_PROF_FLAGS_BITS 0x00000001
/* ulFlags for Log_Conf functions */
#define BASIC_LOG_CONF 0x00000000
#define FILTERED_LOG_CONF 0x00000001
#define ALLOC_LOG_CONF 0x00000002
#define BOOT_LOG_CONF 0x00000003
#define FORCED_LOG_CONF 0x00000004
#define OVERRIDE_LOG_CONF 0x00000005
#define NUM_LOG_CONF 0x00000006
#define LOG_CONF_BITS 0x00000007
#define PRIORITY_EQUAL_FIRST 0x00000008
#define PRIORITY_EQUAL_LAST 0x00000000
#define PRIORITY_BIT 0x00000008
#define CMP_MAGIC 0x01234567
CONFIGRET WINAPI CMP_Init_Detection( DWORD );
CONFIGRET WINAPI CMP_Report_LogOn( DWORD, DWORD );
CONFIGRET WINAPI CM_Add_Empty_Log_Conf( PLOG_CONF, DEVINST, PRIORITY, ULONG );
CONFIGRET WINAPI CM_Add_Empty_Log_Conf_Ex( PLOG_CONF, DEVINST, PRIORITY, ULONG, HMACHINE );
CONFIGRET WINAPI CM_Add_IDA( DEVINST, PSTR, ULONG );
CONFIGRET WINAPI CM_Add_IDW( DEVINST, PWSTR, ULONG );
#define CM_Add_ID WINELIB_NAME_AW(CM_Add_ID)