PiCMDeleteClassKey
NTSTATUS __stdcall PiCMDeleteClassKey(
VOID *IoctlInputBuffer,
UINT64 IoctlInputBufferSize,
VOID *IoctlOutputBuffer,
UINT64 IoctlOutputBufferSize,
UINT64 *BytesUsed){
UINT64 *v5;
unsigned int v6;
int v8;
NTSTATUS v9;
INT64 v11;
_CMAPI_INPUT_OBJECT_DATA ObjectData[4];
WCHAR *ClassGuid[2];
UINT64 ExpectedOutputSize;
HPNPOPCTX *hPnpOpCtx;
v5 = (UINT64 *)hPnpOpCtx;
hPnpOpCtx = 0i64;
v6 = IoctlOutputBufferSize;
ExpectedOutputSize = 0i64;
*(_DWORD *)v5 = 0;
*(_OWORD *)ObjectData = 0i64;
*(_OWORD *)ClassGuid = 0i64;
v8 = PiCMCaptureObjectInputData(
IoctlInputBuffer,
IoctlInputBufferSize,
(_CMAPI_INPUT_OBJECT_DATA *)(unsigned int)BytesUsed);
if( v8 >= 0 )
{
if( PiAuDoesClientHaveAccess(2ui64) )
{
if( ClassGuid[0]
&& !HIDWORD(ClassGuid[1])
&& IoctlOutputBuffer
&& v6 >= 8
&& (unsigned int)(ObjectData[2] - 2) <= 1
&& (unsigned int)(ObjectData[1] - 1) <= 1 )
{
v9 = PiPnpRtlBeginOperation(&hPnpOpCtx);
if( v9 >= 0 )
{
if( ObjectData[2] == 3 )
v9 = CmDeleteInterfaceClass(*(&stru_140CF2E80 + 607), ClassGuid[0], 0i64);
else
v9 = CmDeleteInstallerClass(*(&stru_140CF2E80 + 607), ClassGuid[0], 0i64);
}
}
else
{
v9 = -1073741811;
}
}
else
{
v9 = -1073741790;
}
v8 = PiCMReturnBasicResultData(
(unsigned int)v9,
(unsigned int)ExpectedOutputSize,
IoctlOutputBuffer,
v6,
v5,
v11,
*(INT64 *)ObjectData,
*(INT64 *)&ObjectData[2]);
}
PiCMReleaseObjectInputData(ObjectData);
if( hPnpOpCtx )
PiPnpRtlEndOperation(hPnpOpCtx);
return v8;
}Referenced by:
PiCMHandleIoctl