ObpCreateDosDevicesDirectory
INT64 __stdcall ObpCreateDosDevicesDirectory(_EJOB *Silo, PVOID RootHandle){
void *v2;
void *v3;
INT64 result;
int v7;
WCHAR v8;
UINT64 Flags;
char DaclDefaulted[8];
void *SymbolicLinkHandle;
HANDLE Handle;
struct _OBJECT_ATTRIBUTES ObjectAttributes;
PACL Dacl;
__int128 SecurityDescriptor[2];
__int64 v16;
struct _UNICODE_STRING DestinationString;
unsigned __int8 DaclPresent;
Handle = 0i64;
memset(SecurityDescriptor, 0, sizeof(SecurityDescriptor));
v16 = 0i64;
v3 = v2;
*(&ObjectAttributes.Length + 1) = 0;
*(&ObjectAttributes.Attributes + 1) = 0;
SymbolicLinkHandle = 0i64;
DestinationString = 0i64;
if( PsIsHostSilo(Silo) && v3 )
return 3221225485i64;
result = ObpGetDosDevicesProtection(SecurityDescriptor);
if( (int)result >= 0 )
{
ObjectAttributes.Length = 48;
ObjectAttributes.ObjectName = (_UNICODE_STRING *)&ObpGlobalDirectoryName;
ObjectAttributes.RootDirectory = RootHandle;
ObjectAttributes.SecurityDescriptor = SecurityDescriptor;
ObjectAttributes.Attributes = 528;
ObjectAttributes.SecurityQualityOfService = 0i64;
LODWORD(Flags) = 0;
v7 = ZwCreateDirectoryObjectEx(&Handle, 0xF000Fui64, &ObjectAttributes, v3, Flags);
if( v7 < 0 )
{
Handle = 0i64;
}
else
{
v7 = ObpSetSiloDeviceMap(Silo, Handle);
if( v7 >= 0 )
{
RtlInitUnicodeString(&DestinationString, &word_1407CF120, v8);
ObjectAttributes.RootDirectory = Handle;
ObjectAttributes.Length = 48;
ObjectAttributes.ObjectName = (_UNICODE_STRING *)&ObpGlobalRootNameString;
ObjectAttributes.Attributes = 528;
ObjectAttributes.SecurityDescriptor = SecurityDescriptor;
ObjectAttributes.SecurityQualityOfService = 0i64;
v7 = ZwCreateSymbolicLinkObject(&SymbolicLinkHandle, 0xF0001ui64, &ObjectAttributes, &DestinationString);
if( v7 >= 0 )
{
ZwClose(SymbolicLinkHandle);
ObjectAttributes.RootDirectory = Handle;
ObjectAttributes.Length = 48;
ObjectAttributes.ObjectName = (_UNICODE_STRING *)&ObpGlobalNameString;
ObjectAttributes.Attributes = 528;
ObjectAttributes.SecurityDescriptor = SecurityDescriptor;
ObjectAttributes.SecurityQualityOfService = 0i64;
v7 = ZwCreateSymbolicLinkObject(
&SymbolicLinkHandle,
0xF0001ui64,
&ObjectAttributes,
(UNICODE_STRING *)&ObpGlobalDosDevicesShortName);
if( v7 >= 0 )
{
ZwClose(SymbolicLinkHandle);
ObjectAttributes.Length = 48;
ObjectAttributes.ObjectName = (_UNICODE_STRING *)&ObpDosDevicesNameString;
ObjectAttributes.RootDirectory = RootHandle;
ObjectAttributes.SecurityDescriptor = SecurityDescriptor;
ObjectAttributes.Attributes = 528;
ObjectAttributes.SecurityQualityOfService = 0i64;
v7 = ZwCreateSymbolicLinkObject(
&SymbolicLinkHandle,
0xF0001ui64,
&ObjectAttributes,
(UNICODE_STRING *)&ObpDosDevicesShortNameRootString);
if( v7 >= 0 )
ZwClose(SymbolicLinkHandle);
}
}
}
}
DaclPresent = 0;
Dacl = 0i64;
RtlGetDaclSecurityDescriptor(SecurityDescriptor, &DaclPresent, &Dacl, (UINT8 *)DaclDefaulted);
ExFreePoolWithTag(Dacl, 0x6C636144u);
if( Handle )
ZwClose(Handle);
return(unsigned int)v7;
}
return result;
}Referenced by:
ObpInitializeRootNamespace