mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
[SETUPAPI][PSDK] Implement SetupDiGetCustomDevicePropertyW
This commit is contained in:
parent
1e06829961
commit
d44ed03b6c
3 changed files with 82 additions and 1 deletions
|
@ -6150,3 +6150,83 @@ SetupDiRestartDevices(
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SetupDiGetCustomDevicePropertyW (SETUPAPI.@)
|
||||||
|
*/
|
||||||
|
BOOL
|
||||||
|
WINAPI
|
||||||
|
SetupDiGetCustomDevicePropertyW(
|
||||||
|
IN HDEVINFO DeviceInfoSet,
|
||||||
|
IN PSP_DEVINFO_DATA DeviceInfoData,
|
||||||
|
IN PCWSTR CustomPropertyName,
|
||||||
|
IN DWORD Flags,
|
||||||
|
OUT PDWORD PropertyRegDataType OPTIONAL,
|
||||||
|
OUT PBYTE PropertyBuffer,
|
||||||
|
IN DWORD PropertyBufferSize,
|
||||||
|
OUT PDWORD RequiredSize OPTIONAL)
|
||||||
|
{
|
||||||
|
struct DeviceInfoSet *set = (struct DeviceInfoSet *)DeviceInfoSet;
|
||||||
|
struct DeviceInfo *deviceInfo;
|
||||||
|
DWORD ConfigFlags = 0, PropertySize;
|
||||||
|
CONFIGRET cr;
|
||||||
|
|
||||||
|
TRACE("%s(%p %p %s 0x%lx %p %p %lu %p)\n", __FUNCTION__, DeviceInfoSet, DeviceInfoData,
|
||||||
|
debugstr_w(CustomPropertyName), Flags, PropertyRegDataType, PropertyBuffer, PropertyBufferSize, RequiredSize);
|
||||||
|
|
||||||
|
if (!DeviceInfoSet || DeviceInfoSet == INVALID_HANDLE_VALUE)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_INVALID_HANDLE);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (set->magic != SETUP_DEVICE_INFO_SET_MAGIC)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_INVALID_HANDLE);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (!DeviceInfoData || DeviceInfoData->cbSize != sizeof(SP_DEVINFO_DATA)
|
||||||
|
|| !DeviceInfoData->Reserved)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (Flags & ~DICUSTOMDEVPROP_MERGE_MULTISZ)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_INVALID_FLAGS);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
deviceInfo = (struct DeviceInfo *)DeviceInfoData->Reserved;
|
||||||
|
if (deviceInfo->set != set)
|
||||||
|
{
|
||||||
|
SetLastError(ERROR_INVALID_PARAMETER);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Flags & DICUSTOMDEVPROP_MERGE_MULTISZ)
|
||||||
|
{
|
||||||
|
ConfigFlags |= CM_CUSTOMDEVPROP_MERGE_MULTISZ;
|
||||||
|
}
|
||||||
|
|
||||||
|
PropertySize = PropertyBufferSize;
|
||||||
|
cr = CM_Get_DevInst_Custom_Property_ExW(deviceInfo->dnDevInst,
|
||||||
|
CustomPropertyName,
|
||||||
|
PropertyRegDataType,
|
||||||
|
PropertyBuffer,
|
||||||
|
&PropertySize,
|
||||||
|
ConfigFlags,
|
||||||
|
set->hMachine);
|
||||||
|
if ((cr == CR_SUCCESS) || (cr == CR_BUFFER_SMALL))
|
||||||
|
{
|
||||||
|
if (RequiredSize)
|
||||||
|
*RequiredSize = PropertySize;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cr != CR_SUCCESS)
|
||||||
|
{
|
||||||
|
SetLastError(GetErrorCodeFromCrCode(cr));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
|
@ -316,7 +316,7 @@
|
||||||
@ stdcall SetupDiGetClassRegistryPropertyA(ptr long ptr ptr long ptr str ptr)
|
@ stdcall SetupDiGetClassRegistryPropertyA(ptr long ptr ptr long ptr str ptr)
|
||||||
@ stdcall SetupDiGetClassRegistryPropertyW(ptr long ptr ptr long ptr wstr ptr)
|
@ stdcall SetupDiGetClassRegistryPropertyW(ptr long ptr ptr long ptr wstr ptr)
|
||||||
@ stub SetupDiGetCustomDevicePropertyA
|
@ stub SetupDiGetCustomDevicePropertyA
|
||||||
@ stub SetupDiGetCustomDevicePropertyW
|
@ stdcall SetupDiGetCustomDevicePropertyW(ptr ptr wstr long ptr ptr long ptr)
|
||||||
@ stdcall SetupDiGetDeviceInfoListClass(ptr ptr)
|
@ stdcall SetupDiGetDeviceInfoListClass(ptr ptr)
|
||||||
@ stdcall SetupDiGetDeviceInfoListDetailA(ptr ptr)
|
@ stdcall SetupDiGetDeviceInfoListDetailA(ptr ptr)
|
||||||
@ stdcall SetupDiGetDeviceInfoListDetailW(ptr ptr)
|
@ stdcall SetupDiGetDeviceInfoListDetailW(ptr ptr)
|
||||||
|
|
|
@ -117,6 +117,7 @@ extern "C" {
|
||||||
#define DICS_START 4
|
#define DICS_START 4
|
||||||
#define DICS_FLAG_CONFIGGENERAL 4
|
#define DICS_FLAG_CONFIGGENERAL 4
|
||||||
#define DICS_STOP 5
|
#define DICS_STOP 5
|
||||||
|
#define DICUSTOMDEVPROP_MERGE_MULTISZ 0x00000001
|
||||||
#define DIF_SELECTDEVICE 1
|
#define DIF_SELECTDEVICE 1
|
||||||
#define DIF_INSTALLDEVICE 2
|
#define DIF_INSTALLDEVICE 2
|
||||||
#define DIF_ASSIGNRESOURCES 3
|
#define DIF_ASSIGNRESOURCES 3
|
||||||
|
|
Loading…
Reference in a new issue