PipCommitPendingService

NTSTATUS __stdcall PipCommitPendingService(
        WCHAR *ServiceName,
        VOID *hPendingServicesRoot,
        VOID *hPendingService,
        VOID *Context,
        INT64 a5,
        INT64 a6,
        UINT8 a7){
  VOID *v8; 
  VOID *v10; 
  int CachedContextBaseKey; 
  UINT64 v12; 
  INT64 v13; 
  NTSTATUS v14; 
  NTSTATUS v15; 
  INT64 *DesiredAccess; 
  VOID **phkResult; 
  INT64 v19; 
  UINT64 *pRegDisposition; 
  _HANDLE v21[2]; 
  _HANDLE v22[2]; 
  VOID *hKey; 
  VOID *TargetKeyHandle; 
  _HANDLE v25[2]; 
  _HANDLE v26[2]; 
  __int64 v27[2]; 
  INT64 v28; 

  v27[0] = 0i64;
  v8 = hPendingServicesRoot;
  TargetKeyHandle = 0i64;
  hKey = 0i64;
  v28 = 0i64;
  *(_QWORD *)v21 = 0i64;
  *(_QWORD *)v22 = 0i64;
  *(_QWORD *)v25 = 0i64;
  *(_QWORD *)v26 = 0i64;
  if( !hPendingServicesRoot )
  {
    CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(
                             *(&stru_140CF2E80 + 607),
                             PNPCTX_BASE_KEY_TYPE_CONTROLSET,
                             (VOID **)v27);
    if( CachedContextBaseKey < 0 )
      goto LABEL_28;
    LODWORD(DesiredAccess) = 131103;
    CachedContextBaseKey = PnpCtxRegOpenKey(
                             *(&stru_140CF2E80 + 607),
                             (VOID *)v27[0],
                             (WCHAR *)L"Control\\PendingDriverOperations\\Services",
                             0i64,
                             (UINT64)DesiredAccess,
                             (VOID **)v25);
    if( CachedContextBaseKey < 0 )
      goto LABEL_28;
    v8 = *(VOID **)v25;
  }
  if( !hPendingService )
  {
    LODWORD(DesiredAccess) = 131097;
    CachedContextBaseKey = PnpCtxRegOpenKey(
                             *(&stru_140CF2E80 + 607),
                             v8,
                             ServiceName,
                             0i64,
                             (UINT64)DesiredAccess,
                             (VOID **)v26);
    if( CachedContextBaseKey < 0 )
      goto LABEL_28;
    hPendingService = *(VOID **)v26;
  }
  LODWORD(DesiredAccess) = 131103;
  v14 = PnpCtxRegOpenKey(*(&stru_140CF2E80 + 607), v8, (WCHAR *)L"EventLog", 0i64, (UINT64)DesiredAccess, (VOID **)v21);
  CachedContextBaseKey = v14;
  if( v14 == -1073741772 || v14 == -1073741444 || v14 >= 0 )
  {
    LODWORD(DesiredAccess) = 131097;
    v15 = PnpCtxRegOpenKey(
            *(&stru_140CF2E80 + 607),
            *(VOID **)v21,
            ServiceName,
            0i64,
            (UINT64)DesiredAccess,
            (VOID **)v22);
    CachedContextBaseKey = v15;
    if( v15 == -1073741772 || v15 == -1073741444 || v15 >= 0 )
    {
      CachedContextBaseKey = PnpCtxGetCachedContextBaseKey(
                               *(&stru_140CF2E80 + 607),
                               PNPCTX_BASE_KEY_TYPE_SERVICES,
                               (VOID **)&v28);
      if( CachedContextBaseKey >= 0 )
      {
        LODWORD(DesiredAccess) = 131078;
        CachedContextBaseKey = PnpCtxRegCreateKey(
                                 *(&stru_140CF2E80 + 607),
                                 (VOID *)v28,
                                 ServiceName,
                                 0i64,
                                 (UINT64)DesiredAccess,
                                 0i64,
                                 &hKey,
                                 0i64);
        if( CachedContextBaseKey >= 0 )
        {
          if( !*(_QWORD *)v22
            || (LODWORD(DesiredAccess) = 131078,
                CachedContextBaseKey = PnpCtxRegCreateKey(
                                         *(&stru_140CF2E80 + 607),
                                         (VOID *)v28,
                                         (WCHAR *)L"EventLog",
                                         0i64,
                                         (UINT64)DesiredAccess,
                                         0i64,
                                         &TargetKeyHandle,
                                         0i64),
                CachedContextBaseKey >= 0)
            && (!*(_QWORD *)v22
             || (CachedContextBaseKey = PiDevCfgCopyDeviceKeys(*(VOID **)v22, TargetKeyHandle, v12, 0i64),
                 CachedContextBaseKey >= 0)) )
          {
            CachedContextBaseKey = PiDevCfgCopyDeviceKeys(hPendingService, hKey, v12, 0i64);
            if( CachedContextBaseKey >= 0 )
            {
              if( *(_QWORD *)v22 )
              {
                CachedContextBaseKey = PnpCtxRegDeleteTree(*(&stru_140CF2E80 + 607), *(VOID **)v21, ServiceName);
                if( CachedContextBaseKey < 0 )
                  goto LABEL_28;
                DesiredAccess = &v28;
                LODWORD(v28) = 0;
                if( PnpCtxRegEnumKey(v10, *(UINT64 *)v21, 0i64, 0i64) == -2147483622 )
                  PnpCtxRegDeleteKey(*(&stru_140CF2E80 + 607), *(VOID **)v21, 0i64);
              }
              CachedContextBaseKey = PnpCtxRegDeleteTree(*(&stru_140CF2E80 + 607), v8, ServiceName);
              if( CachedContextBaseKey >= 0 )
              {
                LODWORD(v28) = 0;
                DesiredAccess = &v28;
                if( PnpCtxRegEnumKey(v10, (UINT64)v8, 0i64, 0i64) == -2147483622 )
                  PnpCtxRegDeleteKey(*(&stru_140CF2E80 + 607), v8, 0i64);
              }
            }
          }
        }
      }
    }
  }
LABEL_28:
  if( hKey )
    PnpCtxRegCloseKey(
      (HPNPCTX *)v10,
      hKey,
      v12,
      v13,
      (INT64)DesiredAccess,
      (INT64)phkResult,
      v19,
      (INT64)pRegDisposition);
  if( TargetKeyHandle )
    PnpCtxRegCloseKey(
      (HPNPCTX *)v10,
      TargetKeyHandle,
      v12,
      v13,
      (INT64)DesiredAccess,
      (INT64)phkResult,
      v19,
      (INT64)pRegDisposition);
  if( *(_QWORD *)v21 )
    PnpCtxRegCloseKey(
      (HPNPCTX *)v10,
      *(VOID **)v21,
      v12,
      v13,
      (INT64)DesiredAccess,
      (INT64)phkResult,
      v19,
      (INT64)pRegDisposition);
  if( *(_QWORD *)v22 )
    PnpCtxRegCloseKey(
      (HPNPCTX *)v10,
      *(VOID **)v22,
      v12,
      v13,
      (INT64)DesiredAccess,
      (INT64)phkResult,
      v19,
      (INT64)pRegDisposition);
  if( *(_QWORD *)v25 )
    PnpCtxRegCloseKey(
      (HPNPCTX *)v10,
      *(VOID **)v25,
      v12,
      v13,
      (INT64)DesiredAccess,
      (INT64)phkResult,
      v19,
      (INT64)pRegDisposition);
  if( *(_QWORD *)v26 )
    PnpCtxRegCloseKey(
      (HPNPCTX *)v10,
      *(VOID **)v26,
      v12,
      v13,
      (INT64)DesiredAccess,
      (INT64)phkResult,
      v19,
      (INT64)pRegDisposition);
  return CachedContextBaseKey;
}

Referenced by:

No references.