PiCMUnregisterDeviceInterface
INT64 __stdcall PiCMUnregisterDeviceInterface(
PVOID IoctlInputBuffer,
UINT64 IoctlInputBufferSize,
PVOID IoctlOutputBuffer,
UINT64 IoctlOutputBufferSize,
UINT64 *BytesUsed){
UINT64 *v5;
unsigned int v6;
int v8;
int ObjectProperty;
char v10;
_ETHREAD *CurrentThread;
int v13;
ULONG v14;
INT64 v15[2];
__int128 v16;
UINT64 ExpectedOutputSize;
UINT64 *v18;
v5 = v18;
v13 = 0;
v14 = 0;
v6 = IoctlOutputBufferSize;
ExpectedOutputSize = 0i64;
*(_DWORD *)v18 = 0;
*(_OWORD *)v15 = 0i64;
LOBYTE(v18) = 0;
v16 = 0i64;
v8 = PiCMCaptureObjectInputData((UINT64)IoctlInputBuffer, IoctlInputBufferSize, (unsigned int)BytesUsed, (INT64)v15);
if( v8 >= 0 )
{
if( PiAuDoesClientHaveAccess(2ui64) )
{
if( (_QWORD)v16 && *(INT64 *)((char *)v15 + 4) == 0x400000000i64 && !HIDWORD(v16) && IoctlOutputBuffer && v6 >= 8 )
{
ObjectProperty = PnpGetObjectProperty(
PiPnpRtlCtx,
v16,
3i64,
0i64,
0i64,
(__int64)&DEVPKEY_DeviceInterface_Enabled,
&v13,
(unsigned __int64)&v18,
1,
&v14,
0);
if( ObjectProperty >= 0 )
{
if( v13 == 17 && v14 == 1 )
{
v10 = (char)v18;
}
else
{
v10 = 0;
LOBYTE(v18) = 0;
}
if( v10 == -1 )
ObjectProperty = -1073740024;
if( ObjectProperty >= 0 )
{
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
ExAcquireResourceExclusiveLite(&PnpRegistryDeviceResource, 1u);
ObjectProperty = CmDeleteDeviceInterface(PiPnpRtlCtx, (const WCHAR *)v16, 0);
ExReleaseResourceLite(&PnpRegistryDeviceResource);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
}
}
}
else
{
ObjectProperty = -1073741811;
}
}
else
{
ObjectProperty = -1073741790;
}
v8 = PiCMReturnBasicResultData(
(unsigned int)ObjectProperty,
(unsigned int)ExpectedOutputSize,
IoctlOutputBuffer,
v6,
v5);
}
PiCMReleaseObjectInputData((INT64)v15);
return(unsigned int)v8;
}Referenced by:
No references.