IoCreateFileEx
NTSTATUS __stdcall IoCreateFileEx(
VOID **FileHandle,
UINT64 DesiredAccess,
_OBJECT_ATTRIBUTES *ObjectAttributes,
_IO_STATUS_BLOCK *IoStatusBlock,
_LARGE_INTEGER *AllocationSize,
UINT64 FileAttributes,
UINT64 ShareAccess,
UINT64 Disposition,
UINT64 CreateOptions,
VOID *EaBuffer,
UINT64 EaLength,
_CREATE_FILE_TYPE CreateFileType,
VOID *InternalParameters,
UINT64 Options,
_IO_DRIVER_CREATE_CONTEXT *DriverContext){
unsigned int v17;
unsigned int v18;
_ECP_LIST *ExtraCreateParameter;
unsigned int v21;
NTSTATUS result;
int v23;
UINT64 v24;
UINT64 v25;
UINT64 v26;
UINT64 v27;
UINT64 v28;
UINT64 v29;
UINT64 InternalFlags;
v17 = ((unsigned int)Options >> 10) & 2;
v18 = DesiredAccess;
if( !DriverContext )
{
LABEL_11:
LODWORD(InternalFlags) = v17;
LODWORD(v29) = Options | 0x100;
LODWORD(v28) = EaLength;
LODWORD(v27) = CreateOptions;
LODWORD(v26) = Disposition;
LODWORD(v25) = ShareAccess;
LODWORD(v24) = FileAttributes;
return IopCreateFile(
FileHandle,
v18,
ObjectAttributes,
IoStatusBlock,
AllocationSize,
v24,
v25,
v26,
v27,
EaBuffer,
v28,
CreateFileType,
InternalParameters,
v29,
InternalFlags,
DriverContext);
}
ExtraCreateParameter = DriverContext->ExtraCreateParameter;
v21 = v17 | 1;
if( !DriverContext->DeviceObjectHint )
v21 = ((unsigned int)Options >> 10) & 2;
if( !ExtraCreateParameter
|| (result = FsRtlpPrepareExtraCreateParametersForCreate(ExtraCreateParameter), result >= 0) )
{
v23 = v21 | 4;
if( !DriverContext->TxnParameters )
v23 = v21;
v17 = v23;
if( DriverContext->Size >= 0x28u && DriverContext->SiloContext != (_EJOB *)1 )
v17 = v23 | 0x40;
goto LABEL_11;
}
return result;
}Referenced by:
IoCreateFileSpecifyDeviceObjectHint
IopOpenLinkOrRenameTarget
NtCreateUserProcess