PiCreateDriverDataDirectoryRoot
NTSTATUS __stdcall PiCreateDriverDataDirectoryRoot(){
CHAR *v0;
int StateRootPath;
unsigned int v2;
NTSTATUS v3;
UINT64 FileAttributes;
UINT64 ShareAccess;
UINT64 CreateDisposition;
UINT64 CreateOptions;
UINT64 v9;
_UNICODE_STRING LinkTarget;
_UNICODE_STRING DestinationString;
_IO_STATUS_BLOCK IoStatusBlock;
_OBJECT_ATTRIBUTES ObjectAttributes;
CHAR *v14;
VOID *FileHandle;
VOID *LinkHandle;
_LARGE_INTEGER Interval;
FileHandle = 0i64;
LinkHandle = 0i64;
Interval.QuadPart = -1000000i64;
v0 = 0i64;
*(_QWORD *)&LinkTarget.Length = 0i64;
LinkTarget.Buffer = 0i64;
IoStatusBlock = 0i64;
v14 = 0i64;
DestinationString = 0i64;
memset(&ObjectAttributes, 0, sizeof(ObjectAttributes));
StateRootPath = PiGetStateRootPath(L"DriverData");
if( StateRootPath >= 0 )
{
StateRootPath = PiAuGetDriverDataDirectorySecurityObject(&v14);
if( StateRootPath < 0 )
{
v0 = v14;
}
else
{
ObjectAttributes.RootDirectory = 0i64;
v0 = v14;
ObjectAttributes.SecurityQualityOfService = 0i64;
ObjectAttributes.SecurityDescriptor = v14;
v2 = 0;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 576;
ObjectAttributes.ObjectName = &LinkTarget;
do
{
LODWORD(v9) = 0;
LODWORD(CreateOptions) = 33;
LODWORD(CreateDisposition) = 3;
LODWORD(ShareAccess) = 3;
LODWORD(FileAttributes) = 128;
v3 = ZwCreateFile(
&FileHandle,
0x100001ui64,
&ObjectAttributes,
&IoStatusBlock,
0i64,
FileAttributes,
ShareAccess,
CreateDisposition,
CreateOptions,
0i64,
v9);
StateRootPath = v3;
if( v3 != -1073741810 && (unsigned int)(v3 + 2147483632) > 1 && v3 != -1073741766 )
break;
KeDelayExecutionThread(0, 0, &Interval);
++v2;
}
while( v2 < 0x32 );
if( StateRootPath >= 0 )
{
RtlInitUnicodeString(&DestinationString, L"\\DriverData");
ObjectAttributes.RootDirectory = 0i64;
ObjectAttributes.SecurityQualityOfService = 0i64;
ObjectAttributes.ObjectName = &DestinationString;
ObjectAttributes.SecurityDescriptor = (void *)SePublicDefaultUnrestrictedSd;
ObjectAttributes.Length = 48;
ObjectAttributes.Attributes = 80;
StateRootPath = ZwCreateSymbolicLinkObject(&LinkHandle, 983041, &ObjectAttributes, &LinkTarget);
}
}
}
RtlFreeAnsiString(&LinkTarget);
if( FileHandle )
ZwClose((_HANDLE)FileHandle);
if( LinkHandle )
ZwClose((_HANDLE)LinkHandle);
if( v0 )
ExFreePoolWithTag(v0, 0);
return StateRootPath;
}Referenced by:
IopInitializeBootDrivers