CmGetDeviceInstanceKeyPath
NTSTATUS __stdcall CmGetDeviceInstanceKeyPath(
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;
__int64 v13;
unsigned __int64 v14;
UINT64 dwFlags;
if( (CmKeyTypeFlags & 0x200) == 0 )
{
v8 = -1i64;
do
++v8;
while( DeviceInstanceId[v8] );
v9 = v8 + 31;
if( v9 <= 0xFFFFFFFF )
{
if( RequiredLength )
*(_DWORD *)RequiredLength = v9;
if( (unsigned int)v9 <= (unsigned int)BaseKeyLength )
{
LODWORD(dwFlags) = 2048;
return RtlStringCchPrintfExW(BaseKeyPath, (unsigned int)BaseKeyLength, 0i64, 0i64, dwFlags, (WCHAR *)L"%s\\%s");
}
return -1073741789;
}
return -1073741675;
}
if( !(_DWORD)HardwareProfileId )
{
v11 = -1i64;
do
++v11;
while( DeviceInstanceId[v11] );
v12 = v11 + 82;
if( v12 <= 0xFFFFFFFF )
{
if( RequiredLength )
*(_DWORD *)RequiredLength = v12;
if( (unsigned int)v12 <= (unsigned int)BaseKeyLength )
{
LODWORD(dwFlags) = 2048;
return RtlStringCchPrintfExW(
BaseKeyPath,
(unsigned int)BaseKeyLength,
0i64,
0i64,
dwFlags,
(WCHAR *)L"%s\\%s\\%s");
}
return -1073741789;
}
return -1073741675;
}
if( (_DWORD)HardwareProfileId == -1 )
return -1073741811;
v13 = -1i64;
do
++v13;
while( DeviceInstanceId[v13] );
v14 = v13 + 79;
if( v14 > 0xFFFFFFFF )
return -1073741675;
if( RequiredLength )
*(_DWORD *)RequiredLength = v14;
if( (unsigned int)v14 > (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