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