CmGetDeviceHardwareKeyPath
NTSTATUS __stdcall CmGetDeviceHardwareKeyPath(
HPNPCTX *hPnpCtx,
const WCHAR *DeviceInstanceId,
_CM_KEY_TYPE CmKeyTypeFlags,
UINT64 HardwareProfileId,
UINT8 Create,
WCHAR *BaseKeyPath,
UINT64 BaseKeyLength,
UINT64 *RequiredLength){
__int64 v8;
unsigned __int64 v9;
__int64 v11;
unsigned __int64 v12;
unsigned __int64 v13;
__int64 v14;
unsigned __int64 v15;
UINT64 dwFlags;
if( (CmKeyTypeFlags & 0x200) == 0 )
{
v8 = -1i64;
do
++v8;
while( DeviceInstanceId[v8] );
if( (CmKeyTypeFlags & 0x100) == 0 )
{
v9 = v8 + 49;
if( v9 <= 0xFFFFFFFF )
{
if( RequiredLength )
*(_DWORD *)RequiredLength = v9;
if( (unsigned int)v9 <= (unsigned int)BaseKeyLength )
{
LABEL_9:
LODWORD(dwFlags) = 2048;
return RtlStringCchPrintfExW(
BaseKeyPath,
(unsigned int)BaseKeyLength,
0i64,
0i64,
dwFlags,
(WCHAR *)L"%s\\%s\\%s");
}
return -1073741789;
}
return -1073741675;
}
v13 = v8 + 31;
if( v13 > 0xFFFFFFFF )
return -1073741675;
if( RequiredLength )
*(_DWORD *)RequiredLength = v13;
if( (unsigned int)v13 <= (unsigned int)BaseKeyLength )
{
LODWORD(dwFlags) = 2048;
return RtlStringCchPrintfExW(BaseKeyPath, (unsigned int)BaseKeyLength, 0i64, 0i64, dwFlags, (WCHAR *)L"%s\\%s");
}
return -1073741789;
}
if( !(_DWORD)HardwareProfileId )
{
v11 = -1i64;
do
++v11;
while( DeviceInstanceId[v11] );
v12 = v11 + 82;
if( v12 > 0xFFFFFFFF )
return -1073741675;
if( RequiredLength )
*(_DWORD *)RequiredLength = v12;
if( (unsigned int)v12 <= (unsigned int)BaseKeyLength )
goto LABEL_9;
return -1073741789;
}
if( (_DWORD)HardwareProfileId == -1 )
return -1073741811;
v14 = -1i64;
do
++v14;
while( DeviceInstanceId[v14] );
v15 = v14 + 79;
if( v15 > 0xFFFFFFFF )
return -1073741675;
if( RequiredLength )
*(_DWORD *)RequiredLength = v15;
if( (unsigned int)v15 > (unsigned int)BaseKeyLength )
return -1073741789;
LODWORD(dwFlags) = 2048;
return RtlStringCchPrintfExW(
BaseKeyPath,
(unsigned int)BaseKeyLength,
0i64,
0i64,
dwFlags,
(WCHAR *)L"%s\\%04u\\%s\\%s");
}Referenced by:
CmGetDeviceRegKeyPath