EtwpDelayCreate

NTSTATUS __stdcall EtwpDelayCreate(
        PVOID *FileHandle,
        _UNICODE_STRING *FileName,
        UINT8 *Append,
        UINT8 NoIntermediate,
        UINT8 RealTime,
        UINT8 CreateDirectoryTree){
  wchar_t *Buffer; 
  NTSTATUS v10; 
  WCHAR *v11; 
  int v12; 
  NTSTATUS v13; 
  __int16 *i; 
  __int16 v16; 
  UINT8 v17; 
  UINT64 Appenda; 
  UINT64 Appendb; 
  WCHAR *DirFileName; 
  _IO_STATUS_BLOCK IoStatus; 
  UINT64 v22; 

  Buffer = FileName->Buffer;
  IoStatus = 0i64;
  DirFileName = 0i64;
  LODWORD(v22) = 0;
  v10 = EtwpCreateNtFileName(Buffer, &DirFileName, &v22);
  v11 = DirFileName;
  v12 = v10;
  if( v10 >= 0 )
  {
    LODWORD(Appenda) = *Append;
    v13 = EtwpCreateDirectoryFile(DirFileName, 0, NoIntermediate, RealTime, FileHandle, &IoStatus, Appenda);
    v12 = v13;
    if( CreateDirectoryTree == 1 && v13 == -1073741766 && (_DWORD)v22 == 24 )
    {
      for( i = (__int16 *)(v11 + 12); ; ++i )
      {
        v16 = *i;
        if( *i == 92 )
          break;
        if( !v16 )
          goto LABEL_22;
      }
      while( v16 )
      {
        v16 = *++i;
        if( *i == 92 )
        {
          v17 = RealTime;
          LODWORD(Appendb) = *Append;
          *i = 0;
          v12 = EtwpCreateDirectoryFile(v11, 1u, NoIntermediate, v17, 0i64, &IoStatus, Appendb);
          if( v12 < 0 )
            goto LABEL_3;
          *i = 92;
          v16 = 92;
        }
      }
LABEL_22:
      LODWORD(Appendb) = *Append;
      v12 = EtwpCreateDirectoryFile(v11, 0, NoIntermediate, RealTime, FileHandle, &IoStatus, Appendb);
    }
  }
LABEL_3:
  if( v11 )
    ExFreePoolWithTag(v11, 0);
  if( v12 >= 0 && *Append == 1 && IoStatus.Information == 2 )
    *Append = 0;
  return v12;
}

Referenced by:

EtwpCreateLogFile
EtwpRealtimeCreateLogfile
EtwpSavePersistedLogger