PiCMUnregisterDeviceInterface
NTSTATUS __stdcall PiCMUnregisterDeviceInterface(
VOID *IoctlInputBuffer,
UINT64 IoctlInputBufferSize,
VOID *IoctlOutputBuffer,
UINT64 IoctlOutputBufferSize,
UINT64 *BytesUsed){
UINT64 *v5;
unsigned int v6;
int v8;
NTSTATUS ObjectProperty;
INT64 v10;
char v11;
_ETHREAD *CurrentThread;
UINT64 v13;
UINT64 *BytesUseda;
INT64 a6;
INT64 a7;
INT64 a8;
INT64 a9;
INT64 v20;
_CMAPI_INPUT_OBJECT_DATA v21[4];
INT64 v22[2];
UINT64 ExpectedOutputSize;
INT64 v24;
v5 = (UINT64 *)v24;
v20 = 0i64;
v6 = IoctlOutputBufferSize;
ExpectedOutputSize = 0i64;
*(_DWORD *)v24 = 0;
*(_OWORD *)v21 = 0i64;
LOBYTE(v24) = 0;
*(_OWORD *)v22 = 0i64;
v8 = PiCMCaptureObjectInputData(
IoctlInputBuffer,
IoctlInputBufferSize,
(_CMAPI_INPUT_OBJECT_DATA *)(unsigned int)BytesUsed);
if( v8 >= 0 )
{
if( PiAuDoesClientHaveAccess(2ui64) )
{
if( v22[0]
&& !v21[1]
&& __PAIR64__(v21[2], 0) == (HIDWORD(v22[1]) | 0x400000000i64)
&& IoctlOutputBuffer
&& v6 >= 8 )
{
LODWORD(a9) = 1;
ObjectProperty = PnpGetObjectProperty(
*(&stru_140CF2E80 + 1214),
v22[0],
3i64,
0i64,
0i64,
(INT64)&DEVPKEY_DeviceInterface_Enabled,
(INT64)&v20,
(INT64)&v24);
if( ObjectProperty >= 0 )
{
if( v20 == 0x100000011i64 )
{
v11 = v24;
}
else
{
v11 = 0;
LOBYTE(v24) = 0;
}
if( v11 == -1 )
ObjectProperty = -1073740024;
if( ObjectProperty >= 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquireResourceExclusiveLite((UINT64)&PnpReplaceEvent + 6688, 1, v10);
ObjectProperty = CmDeleteDeviceInterface(
*(&stru_140CF2E80 + 607),
(WCHAR *)v22[0],
0i64,
v13,
(UINT64)BytesUseda,
a6,
a7,
a8,
a9);
ExReleaseResourceLite((PERESOURCE)((char *)&PnpReplaceEvent + 6688));
KeLeaveCriticalRegionThread(KeGetCurrentThread());
}
}
}
else
{
ObjectProperty = -1073741811;
}
}
else
{
ObjectProperty = -1073741790;
}
v8 = PiCMReturnBasicResultData(
(unsigned int)ObjectProperty,
(unsigned int)ExpectedOutputSize,
IoctlOutputBuffer,
v6,
v5,
a6,
a7,
a8);
}
PiCMReleaseObjectInputData(v21);
return v8;
}Referenced by:
PiCMHandleIoctl