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.