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