mirror of
https://github.com/reactos/reactos.git
synced 2024-11-19 13:33:42 +00:00
155 lines
5.6 KiB
C
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_
|