ExpWnfCaptureScopeInstanceId
NTSTATUS __stdcall ExpWnfCaptureScopeInstanceId(
_WNF_DATA_SCOPE DataScope,
VOID *ScopeInstanceId,
VOID *PreviousMode,
VOID **CapturedScopeInstanceId,
VOID **CapturedScopeData){
VOID **v5;
VOID *v6;
__int32 v8;
UINT64 v9;
VOID *SessionById;
int v11;
__int32 v12;
__int64 v13;
UINT64 Tag;
v5 = CapturedScopeInstanceId;
LOBYTE(CapturedScopeInstanceId) = (_BYTE)PreviousMode;
v6 = ScopeInstanceId;
if( !ScopeInstanceId )
{
*v5 = 0i64;
return 0;
}
if( DataScope == WnfDataScopeSystem )
return -1073741811;
v8 = DataScope - 1;
if( v8 )
{
v12 = v8 - 1;
if( !v12 )
{
LOBYTE(ScopeInstanceId) = (_BYTE)PreviousMode;
v11 = SeCaptureSid(v6, (INT64)ScopeInstanceId, (CHAR)PreviousMode, (INT64)CapturedScopeInstanceId);
if( v11 >= 0 )
*v5 = *CapturedScopeData;
return v11;
}
if( v12 == 1 )
{
LODWORD(Tag) = 543583831;
v11 = ObpReferenceObjectByHandleWithTag(
ScopeInstanceId,
0i64,
(_OBJECT_TYPE *)PsProcessType,
(CHAR)PreviousMode,
Tag,
CapturedScopeData,
0i64,
0i64);
if( v11 >= 0 )
*v5 = CapturedScopeData;
return v11;
}
return -1073741811;
}
if( (_BYTE)PreviousMode )
{
v13 = 0x7FFFFFFF0000i64;
if( (unsigned __int64)ScopeInstanceId < 0x7FFFFFFF0000i64 )
v13 = (__int64)ScopeInstanceId;
v9 = *(unsigned int *)v13;
}
else
{
v9 = *(unsigned int *)ScopeInstanceId;
}
*((_DWORD *)CapturedScopeData + 2) = v9;
SessionById = MmGetSessionById(v9);
*CapturedScopeData = SessionById;
if( !SessionById )
return -1073741811;
*v5 = CapturedScopeData + 1;
return 0;
}Referenced by:
ExpNtDeleteWnfStateData
ExpNtUpdateWnfStateData
NtQueryWnfStateData
NtQueryWnfStateNameInformation