CmGetDeviceSoftwareKey

NTSTATUS __stdcall CmGetDeviceSoftwareKey(
        HPNPCTX *hPnpCtx,
        const WCHAR *DeviceInstanceId,
        WCHAR *SoftwareKeyPath,
        UINT64 SoftwareKeyPathLength,
        INT64 Create){
  int DeviceRegProp; 
  INT64 v9; 
  _ETHREAD *CurrentThread; 
  NTSTATUS v12; 
  UINT64 v13; 
  UINT8 v14; 
  UINT64 v15; 
  __int64 v16; 
  VOID *v17; 
  VOID **CmRegPropType; 
  UINT64 *CmRegPropTypea; 
  UINT64 *CmRegPropTypeb; 
  UINT64 *CmRegPropTypec; 
  UINT64 *PropertyBuffer; 
  UINT64 *PropertySize; 
  UINT64 Flags; 
  UINT64 Flagsa; 
  UINT64 Flagsb; 
  WCHAR *Flagsc; 
  UINT64 v28; 
  VOID *BaseKeyHandle; 
  VOID *InstanceKeyHandle; 
  _UNICODE_STRING DestinationString; 
  WCHAR InstanceKeyPath[12]; 
  UINT8 v33[76]; 
  __int16 v34; 

  v28 = 88i64;
  LODWORD(Flags) = 0;
  BaseKeyHandle = 0i64;
  InstanceKeyHandle = 0i64;
  DestinationString = 0i64;
  DeviceRegProp = CmGetDeviceRegProp(
                    hPnpCtx,
                    DeviceInstanceId,
                    0i64,
                    10i64,
                    (UINT64 *)((char *)&v28 + 4),
                    (UINT8 *)SoftwareKeyPath,
                    &v28,
                    Flags);
  if( DeviceRegProp == -1073741275 )
  {
    if( (_BYTE)Create == 1 )
    {
      CurrentThread = (_ETHREAD *)KeGetCurrentThread();
      --CurrentThread->Tcb.KernelApcDisable;
      ExAcquireResourceExclusiveLite(*((_QWORD *)hPnpCtx + 30), 1, v9);
      LODWORD(Flagsa) = 0;
      v28 = 88i64;
      DeviceRegProp = CmGetDeviceRegProp(
                        hPnpCtx,
                        DeviceInstanceId,
                        0i64,
                        10i64,
                        (UINT64 *)((char *)&v28 + 4),
                        (UINT8 *)SoftwareKeyPath,
                        &v28,
                        Flagsa);
      if( DeviceRegProp == -1073741275 )
      {
        LODWORD(Flagsb) = 0;
        v28 = 78i64;
        v12 = CmGetDeviceRegProp(hPnpCtx, DeviceInstanceId, 0i64, 9i64, (UINT64 *)((char *)&v28 + 4), v33, &v28, Flagsb);
        DeviceRegProp = v12;
        if( v12 == -1073741275 )
        {
          DeviceRegProp = -1073741772;
        }
        else if( v12 >= 0 )
        {
          LOBYTE(PropertyBuffer) = 0;
          LODWORD(CmRegPropType) = 131103;
          v34 = 0;
          DeviceRegProp = CmOpenInstallerClassRegKey(hPnpCtx, (WCHAR *)v33, v13, v14, CmRegPropType, PropertyBuffer);
          if( DeviceRegProp >= 0 )
          {
            DeviceRegProp = CmCreateOrdinalInstanceKey(
                              hPnpCtx,
                              BaseKeyHandle,
                              InstanceKeyPath,
                              v15,
                              (UINT64)CmRegPropTypea,
                              &InstanceKeyHandle);
            if( DeviceRegProp >= 0 )
            {
              Flagsc = InstanceKeyPath;
              PropertySize = (UINT64 *)v33;
              LODWORD(CmRegPropTypeb) = 2048;
              DeviceRegProp = RtlStringCchPrintfExW(
                                SoftwareKeyPath,
                                0x2Cui64,
                                0i64,
                                0i64,
                                (UINT64)CmRegPropTypeb,
                                (WCHAR *)L"%s\\%s");
              if( DeviceRegProp >= 0 )
              {
                DeviceRegProp = RtlInitUnicodeStringEx(&DestinationString, SoftwareKeyPath);
                if( DeviceRegProp >= 0 )
                {
                  LODWORD(Flagsc) = 0;
                  LODWORD(PropertySize) = DestinationString.MaximumLength;
                  LODWORD(CmRegPropTypec) = 1;
                  DeviceRegProp = CmSetDeviceRegProp(
                                    hPnpCtx,
                                    (WCHAR *)DeviceInstanceId,
                                    0i64,
                                    CM_REG_PROP_DRIVER,
                                    (UINT64)CmRegPropTypec,
                                    (UINT8 *)DestinationString.Buffer,
                                    (UINT64)PropertySize,
                                    (UINT64)Flagsc);
                  if( DeviceRegProp < 0 )
                  {
                    v16 = *((_QWORD *)hPnpCtx + 28);
                    if( v16 )
                      v17 = *(VOID **)(v16 + 8);
                    else
                      v17 = 0i64;
                    RegRtlDeleteKeyTransacted(BaseKeyHandle, InstanceKeyPath, v17);
                  }
                }
              }
            }
          }
        }
      }
      ExReleaseResourceLite(*((PERESOURCE *)hPnpCtx + 30));
      KeLeaveCriticalRegion();
      if( InstanceKeyHandle )
        ZwClose((_HANDLE)InstanceKeyHandle);
    }
    else
    {
      DeviceRegProp = -1073741772;
    }
  }
  if( BaseKeyHandle )
    ZwClose((_HANDLE)BaseKeyHandle);
  return DeviceRegProp;
}

Referenced by:

CmGetDeviceSoftwareKeyPath