PiCMOpenDeviceKey
NTSTATUS __stdcall PiCMOpenDeviceKey(
VOID *IoctlInputBuffer,
UINT64 IoctlInputBufferSize,
VOID *IoctlOutputBuffer,
UINT64 IoctlOutputBufferSize,
UINT64 *BytesUsed){
unsigned int v5;
UINT64 *v6;
char PreviousMode;
NTSTATUS v9;
WCHAR *v10;
NTSTATUS v11;
unsigned int v12;
UINT64 v13;
NTSTATUS v14;
VOID **DesiredAccess;
VOID **DeviceKey;
INT64 v18;
PVOID SourceHandle;
VOID *Handle;
_CMAPI_DEVICE_KEY_TYPE CmapiKeyType[4];
UINT64 v22[2];
UINT64 HardwareProfileId[2];
UINT64 *PnpRtlKeyType;
Handle = 0i64;
SourceHandle = 0i64;
v5 = IoctlOutputBufferSize;
v6 = PnpRtlKeyType;
LODWORD(PnpRtlKeyType) = 0;
*(_OWORD *)CmapiKeyType = 0i64;
*(_DWORD *)v6 = 0;
*(_OWORD *)v22 = 0i64;
*(_OWORD *)HardwareProfileId = 0i64;
PreviousMode = KeGetCurrentThread()->PreviousMode;
v9 = PiCMCaptureRegistryInputData(IoctlInputBuffer, IoctlInputBufferSize, (int)BytesUsed, (__int64)CmapiKeyType);
if( v9 < 0 )
goto LABEL_14;
v10 = (WCHAR *)v22[0];
if( v22[0] && CmapiKeyType[2] == 1 && IoctlOutputBuffer && v5 >= 0x10 )
{
v11 = PiCMConvertDeviceKeyType(CmapiKeyType[1], (_CM_KEY_TYPE *)&PnpRtlKeyType);
if( v11 >= 0 )
{
v12 = HIDWORD(v22[1]);
LODWORD(DesiredAccess) = HIDWORD(v22[1]);
v11 = CmOpenDeviceRegKey(
*(&stru_140CF2E80 + 607),
v10,
(_CM_KEY_TYPE)PnpRtlKeyType,
HIDWORD(HardwareProfileId[0]),
(UINT64)DesiredAccess,
0,
&SourceHandle,
0i64);
if( v11 != -1073741772 )
goto LABEL_8;
if( LODWORD(HardwareProfileId[0]) == 1 )
{
if( PiAuDoesClientHaveAccess(2ui64) )
{
LODWORD(DesiredAccess) = v12;
v11 = CmOpenDeviceRegKey(
*(&stru_140CF2E80 + 607),
v10,
(_CM_KEY_TYPE)PnpRtlKeyType,
HIDWORD(HardwareProfileId[0]),
(UINT64)DesiredAccess,
1u,
&SourceHandle,
0i64);
LABEL_8:
if( v11 >= 0 )
{
DesiredAccess = &Handle;
PiCMDuplicateRegistryHandle(SourceHandle, v13, (UINT64 *)v12, PreviousMode);
v11 = v14;
}
goto LABEL_10;
}
v11 = -1073741790;
}
}
}
else
{
v11 = -1073741811;
}
LABEL_10:
LODWORD(DesiredAccess) = v5;
v9 = PiCMReturnHandleResultData(
(unsigned int)v11,
Handle,
LODWORD(HardwareProfileId[1]),
IoctlOutputBuffer,
(UINT64)DesiredAccess,
v6,
(INT64)DeviceKey,
v18);
if( SourceHandle )
ZwClose((_HANDLE)SourceHandle);
if( v9 < 0 || v11 < 0 )
{
if( Handle )
ObCloseHandle(Handle, PreviousMode);
}
LABEL_14:
PiCMReleaseRegistryInputData((__int64)CmapiKeyType);
return v9;
}Referenced by:
PiCMHandleIoctl