NtOpenPrivateNamespace
NTSTATUS __stdcall NtOpenPrivateNamespace(
PVOID *NamespaceHandle,
UINT64 DesiredAccess,
_OBJECT_ATTRIBUTES *ObjectAttributes,
PVOID BoundaryDescriptor){
ACCESS_MASK v4;
KPROCESSOR_MODE AccessMode;
__int64 v7;
NTSTATUS result;
__int64 *CurrentServerSiloGlobals;
_ETHREAD *CurrentThread;
UINT64 v11;
INT64 *v12;
struct _DMA_ADAPTER *v13;
NTSTATUS v14;
unsigned int Attributes;
PVOID P;
void *Handle;
v4 = DesiredAccess;
P = 0i64;
Handle = 0i64;
AccessMode = *((_BYTE *)KeGetCurrentThread() + 562);
Attributes = 0;
if( AccessMode )
{
v7 = 0x7FFFFFFF0000i64;
if( (unsigned __int64)NamespaceHandle < 0x7FFFFFFF0000i64 )
v7 = (__int64)NamespaceHandle;
*(_QWORD *)v7 = *(_QWORD *)v7;
if( ObjectAttributes )
{
if( ((unsigned __int8)ObjectAttributes & 7) != 0 )
ExRaiseDatatypeMisalignment();
Attributes = ObjectAttributes->Attributes;
}
}
else if( ObjectAttributes )
{
Attributes = ObjectAttributes->Attributes;
}
result = ObpCaptureBoundaryDescriptor((__m128i *)BoundaryDescriptor, (CHAR **)&P);
if( result >= 0 )
{
CurrentServerSiloGlobals = PsGetCurrentServerSiloGlobals();
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--*((_WORD *)CurrentThread + 242);
v11 = (UINT64)(CurrentServerSiloGlobals + 90);
ExAcquirePushLockExclusiveEx((UINT64)(CurrentServerSiloGlobals + 90), 0i64);
v12 = ObpLookupNamespaceEntry((INT64)(CurrentServerSiloGlobals + 16), (INT64)P);
ExFreePoolWithTag(P, 0x534E624Fu);
if( v12 && (v13 = (struct _DMA_ADAPTER *)v12[2]) != 0i64 )
{
ObfReferenceObject(v13);
ExReleasePushLockEx(v11, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
v14 = ObOpenObjectByPointer(
v13,
Attributes & (AccessMode != 0 ? 7666 : 73714),
0i64,
v4,
ObpDirectoryObjectType,
AccessMode,
&Handle);
LODWORD(P) = v14;
HalPutDmaAdapter(v13);
*NamespaceHandle = Handle;
return v14;
}
else
{
ExReleasePushLockEx(v11, 0i64);
KeLeaveCriticalRegionThread((__int64)KeGetCurrentThread());
return -1073741766;
}
}
return result;
}Referenced by:
No references.