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.