reactos/drivers/filesystems/udfs/env_spec.h
2019-04-02 10:53:23 +02:00

155 lines
5.6 KiB
C

////////////////////////////////////////////////////////////////////
// Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine
// All rights reserved
// This file was released under the GPLv2 on June 2015.
////////////////////////////////////////////////////////////////////
/*************************************************************************
*
* File: sys_spec.h
*
* Module: UDF File System Driver (Kernel mode execution only)
*
* Description:
* The main include file for the UDF file system driver.
*
* Author: Alter
*
*************************************************************************/
#ifndef _UDF_ENV_SPEC_H_
#define _UDF_ENV_SPEC_H_
extern NTSTATUS NTAPI UDFPhReadSynchronous(
PDEVICE_OBJECT DeviceObject,
PVOID Buffer,
SIZE_T Length,
LONGLONG Offset,
PSIZE_T ReadBytes,
ULONG Flags);
extern NTSTATUS NTAPI UDFPhWriteSynchronous(
PDEVICE_OBJECT DeviceObject, // the physical device object
PVOID Buffer,
SIZE_T Length,
LONGLONG Offset,
PSIZE_T WrittenBytes,
ULONG Flags);
/*
extern NTSTATUS UDFPhWriteVerifySynchronous(
PDEVICE_OBJECT DeviceObject, // the physical device object
PVOID Buffer,
SIZE_T Length,
LONGLONG Offset,
PSIZE_T WrittenBytes,
ULONG Flags);
*/
#define UDFPhWriteVerifySynchronous UDFPhWriteSynchronous
extern NTSTATUS NTAPI
UDFTSendIOCTL(
IN ULONG IoControlCode,
IN PVCB Vcb,
IN PVOID InputBuffer ,
IN ULONG InputBufferLength,
OUT PVOID OutputBuffer ,
IN ULONG OutputBufferLength,
IN BOOLEAN OverrideVerify,
OUT PIO_STATUS_BLOCK Iosb OPTIONAL
);
extern NTSTATUS NTAPI UDFPhSendIOCTL(
IN ULONG IoControlCode,
IN PDEVICE_OBJECT DeviceObject,
IN PVOID InputBuffer ,
IN ULONG InputBufferLength,
OUT PVOID OutputBuffer ,
IN ULONG OutputBufferLength,
IN BOOLEAN OverrideVerify,
OUT PIO_STATUS_BLOCK Iosb OPTIONAL);
/*
// This routine performs low-level write (asynchronously if possible)
extern NTSTATUS UDFTWriteAsync(
IN PVOID _Vcb,
IN PVOID Buffer, // Target buffer
IN ULONG Length,
IN ULONG LBA,
OUT PULONG WrittenBytes,
IN BOOLEAN FreeBuffer);
extern VOID UDFBGWrite(
IN PVOID Context);
*/
/*#define UDFNotifyFullReportChange(V,FI,E,A) \
FsRtlNotifyFullReportChange( (V)->NotifyIRPMutex, &((V)->NextNotifyIRP), \
((FI)->ParentFile) ? (PSTRING)&((FI)->Fcb->FCBName->ObjectName) : (PSTRING)&(UDFGlobalData.UnicodeStrRoot), \
((FI)->ParentFile) ? ((FI)->ParentFile->Fcb->FCBName->ObjectName.Length + sizeof(WCHAR)) : 0, \
NULL,NULL, \
E, A, \
NULL);*/
#ifdef UDF_DBG
VOID UDFNotifyFullReportChange(PVCB V,
PUDF_FILE_INFO FI,
ULONG E,
ULONG A);
VOID UDFNotifyVolumeEvent(IN PFILE_OBJECT FileObject,
IN ULONG EventCode);
#else // UDF_DBG
__inline VOID UDFNotifyFullReportChange(
PVCB V,
PUDF_FILE_INFO FI,
ULONG E,
ULONG A
)
{
FsRtlNotifyFullReportChange( (V)->NotifyIRPMutex, &((V)->NextNotifyIRP),
(PSTRING)&((FI)->Fcb->FCBName->ObjectName),
((FI)->ParentFile) ? ((FI)->ParentFile->Fcb->FCBName->ObjectName.Length + sizeof(WCHAR)) : 0,
NULL,NULL,
E, A,
NULL);
}
#define UDFNotifyVolumeEvent(FileObject, EventCode) \
{/*if(FsRtlNotifyVolumeEvent) FsRtlNotifyVolumeEvent(FileObject, EventCode)*/;}
#endif // UDF_DBG
#define CollectStatistics(VCB, Field) { \
((VCB)->Statistics[KeGetCurrentProcessorNumber()].Common.##Field) ++; \
}
#define CollectStatisticsEx(VCB, Field, a) { \
((VCB)->Statistics[KeGetCurrentProcessorNumber()].Common.##Field) += (ULONG)a; \
}
#define CollectStatistics2(VCB, Field) { \
((VCB)->Statistics[KeGetCurrentProcessorNumber()].Fat.##Field) ++; \
}
#define CollectStatistics2Ex(VCB, Field, a) { \
((VCB)->Statistics[KeGetCurrentProcessorNumber()].Fat.##Field) += a; \
}
NTSTATUS NTAPI UDFAsyncCompletionRoutine(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Contxt);
NTSTATUS NTAPI UDFSyncCompletionRoutine(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Contxt);
NTSTATUS NTAPI UDFSyncCompletionRoutine2(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,
IN PVOID Contxt);
#define UDFGetDevType(DevObj) (DevObj->DeviceType)
#define OSGetCurrentThread() PsGetCurrentThread()
#define GetCurrentPID() HandleToUlong(PsGetCurrentProcessId())
#endif // _UDF_ENV_SPEC_H_