+++ /dev/null
-////////////////////////////////////////////////////////////////////
-// 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_lib.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_SYS_SPEC_LIB__H_
-#define _UDF_SYS_SPEC_LIB__H_
-
-typedef struct _UDF_PH_CALL_CONTEXT {
- KEVENT event;
- IO_STATUS_BLOCK IosbToUse;
-} UDF_PH_CALL_CONTEXT, *PUDF_PH_CALL_CONTEXT;
-
-#ifdef _BROWSE_UDF_
-
-// convert UDF timestamp to NT time
-LONGLONG UDFTimeToNT(IN PUDF_TIME_STAMP UdfTime);
-// translate UDF file attributes to NT ones
-ULONG UDFAttributesToNT(IN PDIR_INDEX_ITEM FileDirNdx,
- IN tag* FileEntry);
-// translate NT file attributes to UDF ones
-VOID UDFAttributesToUDF(IN PDIR_INDEX_ITEM FileDirNdx,
- IN tag* FileEntry,
- IN ULONG NTAttr);
-// translate all file information to NT
-NTSTATUS UDFFileDirInfoToNT(IN PVCB Vcb,
- IN PDIR_INDEX_ITEM FileDirNdx,
- OUT PFILE_BOTH_DIR_INFORMATION NTFileInfo);
-// convert NT time to UDF timestamp
-VOID UDFTimeToUDF(IN LONGLONG NtTime,
- OUT PUDF_TIME_STAMP UdfTime);
-// change xxxTime field(s) in (Ext)FileEntry
-VOID UDFSetFileXTime(IN PUDF_FILE_INFO FileInfo,
- IN LONGLONG* CrtTime,
- IN LONGLONG* AccTime,
- IN LONGLONG* AttrTime,
- IN LONGLONG* ChgTime);
-// get xxxTime field(s) in (Ext)FileEntry
-VOID UDFGetFileXTime(IN PUDF_FILE_INFO FileInfo,
- OUT LONGLONG* CrtTime,
- OUT LONGLONG* AccTime,
- OUT LONGLONG* AttrTime,
- OUT LONGLONG* ChgTime);
-//
-#define UDFUpdateAccessTime(Vcb, FileInfo) \
-if(Vcb->CompatFlags & UDF_VCB_IC_UPDATE_ACCESS_TIME) { \
- LONGLONG NtTime; \
- KeQuerySystemTime((PLARGE_INTEGER)&NtTime); \
- UDFSetFileXTime(FileInfo, NULL, &NtTime, NULL, NULL); \
-}
-//
-#define UDFUpdateModifyTime(Vcb, FileInfo) \
-if(Vcb->CompatFlags & UDF_VCB_IC_UPDATE_MODIFY_TIME) { \
- LONGLONG NtTime; \
- ULONG Attr; \
- PDIR_INDEX_ITEM DirNdx; \
- KeQuerySystemTime((PLARGE_INTEGER)&NtTime); \
- UDFSetFileXTime(FileInfo, NULL, &NtTime, NULL, &NtTime); \
- DirNdx = UDFDirIndex(UDFGetDirIndexByFileInfo(FileInfo), (FileInfo)->Index); \
- Attr = UDFAttributesToNT(DirNdx, (FileInfo)->Dloc->FileEntry); \
- if(!(Attr & FILE_ATTRIBUTE_ARCHIVE)) \
- UDFAttributesToUDF(DirNdx, (FileInfo)->Dloc->FileEntry, Attr); \
-}
-//
-#define UDFUpdateAttrTime(Vcb, FileInfo) \
-if(Vcb->CompatFlags & UDF_VCB_IC_UPDATE_ATTR_TIME) { \
- LONGLONG NtTime; \
- KeQuerySystemTime((PLARGE_INTEGER)&NtTime); \
- UDFSetFileXTime(FileInfo, NULL, &NtTime, &NtTime, NULL); \
-}
-//
-#define UDFUpdateCreateTime(Vcb, FileInfo) \
-{ \
- LONGLONG NtTime; \
- KeQuerySystemTime((PLARGE_INTEGER)&NtTime); \
- UDFSetFileXTime(FileInfo, &NtTime, &NtTime, &NtTime, &NtTime); \
-}
-
-void
-__fastcall
-UDFDOSNameOsNative(
- IN OUT PUNICODE_STRING DosName,
- IN PUNICODE_STRING UdfName,
- IN BOOLEAN KeepIntact
- );
-
-VOID UDFNormalizeFileName(IN PUNICODE_STRING FName,
- IN USHORT valueCRC);
-
-NTSTATUS MyAppendUnicodeStringToString_(IN PUNICODE_STRING Str1,
- IN PUNICODE_STRING Str2
-#ifdef UDF_TRACK_UNICODE_STR
- ,IN PCHAR Tag
-#endif
- );
-
-NTSTATUS MyAppendUnicodeToString_(IN PUNICODE_STRING Str1,
- IN PCWSTR Str2
-#ifdef UDF_TRACK_UNICODE_STR
- ,IN PCHAR Tag
-#endif
- );
-
-#ifdef UDF_TRACK_UNICODE_STR
- #define MyAppendUnicodeStringToString(s1,s2) MyAppendUnicodeStringToString_(s1,s2,"AppUStr")
- #define MyAppendUnicodeStringToStringTag(s1,s2,tag) MyAppendUnicodeStringToString_(s1,s2,tag)
- #define MyAppendUnicodeToString(s1,s2) MyAppendUnicodeToString_(s1,s2,"AppStr")
- #define MyAppendUnicodeToStringTag(s1,s2,tag) MyAppendUnicodeToString_(s1,s2,tag)
-#else
- #define MyAppendUnicodeStringToString(s1,s2) MyAppendUnicodeStringToString_(s1,s2)
- #define MyAppendUnicodeStringToStringTag(s1,s2,tag) MyAppendUnicodeStringToString_(s1,s2)
- #define MyAppendUnicodeToString(s1,s2) MyAppendUnicodeToString_(s1,s2)
- #define MyAppendUnicodeToStringTag(s1,s2,tag) MyAppendUnicodeToString_(s1,s2)
-#endif
-
-NTSTATUS MyInitUnicodeString(IN PUNICODE_STRING Str1,
- IN PCWSTR Str2);
-
-NTSTATUS MyCloneUnicodeString(IN PUNICODE_STRING Str1,
- IN PUNICODE_STRING Str2);
-
-/*ULONG MyCompareUnicodeString(PUNICODE_STRING s1,
- PUNICODE_STRING s2,
- BOOLEAN UpCase);*/
-
-/*
-#define UDFAllocFileInfo() \
- ExAllocateFromZone(&(UDFGlobalData.FileInfoZoneHeader))
-*/
-
-#define UDFIsDataCached(Vcb,Lba,BCount) \
- ( WCacheIsInitialized__(&((Vcb)->FastCache)) && \
- (KeGetCurrentIrql() < DISPATCH_LEVEL) && \
- WCacheIsCached__(&((Vcb)->FastCache),Lba, BCount) )
-
-BOOLEAN UDFIsDirInfoCached(IN PVCB Vcb,
- IN PUDF_FILE_INFO DirInfo);
-
-#define UDFGetNTFileId(Vcb, fi, fn) (((fi)->Dloc->FELoc.Mapping[0].extLocation - UDFPartStart(Vcb, -2)) + \
- ((ULONG)(UDFUnicodeCksum((fn)->Buffer, (fn)->Length/sizeof(WCHAR))) << 16) + \
- ((LONGLONG)Vcb<<32) )
-
-#define UnicodeIsPrint(a) RtlIsValidOemCharacter(&(a))
-
-#define UDFSysGetAllocSize(Vcb, Size) ((Size + Vcb->LBlockSize - 1) & ~((LONGLONG)(Vcb->LBlockSize - 1)))
-
-NTSTATUS UDFDoesOSAllowFileToBeTargetForRename__(IN PUDF_FILE_INFO FileInfo);
-#define UDFDoesOSAllowFileToBeTargetForHLink__ UDFDoesOSAllowFileToBeTargetForRename__
-NTSTATUS UDFDoesOSAllowFileToBeUnlinked__(IN PUDF_FILE_INFO FileInfo);
-#define UDFDoesOSAllowFileToBeMoved__ UDFDoesOSAllowFileToBeUnlinked__
-NTSTATUS UDFDoesOSAllowFilePretendDeleted__(IN PUDF_FILE_INFO FileInfo);
-BOOLEAN UDFRemoveOSReferences__(IN PUDF_FILE_INFO FileInfo);
-
-#define UDFIsFSDevObj(DeviceObject) \
- (DeviceObject->DeviceExtension && \
- ( (((PVCB)(DeviceObject->DeviceExtension))->NodeIdentifier.NodeType == \
- UDF_NODE_TYPE_UDFFS_DEVOBJ) || \
- (((PVCB)(DeviceObject->DeviceExtension))->NodeIdentifier.NodeType == \
- UDF_NODE_TYPE_UDFFS_DRVOBJ) \
- ) \
- )
-/*
-extern ULONG MajorVersion;
-extern ULONG MinorVersion;
-extern ULONG BuildNumber;
-
-#define WinVer_Is351 (MajorVersion==0x03 && MinorVersion==51)
-#define WinVer_IsNT (MajorVersion==0x04)
-#define WinVer_Is2k (MajorVersion==0x05 && MinorVersion==0x00)
-#define WinVer_IsXP (MajorVersion==0x05 && MinorVersion==0x01)
-#define WinVer_IsdNET (MajorVersion==0x05 && MinorVersion==0x02)
-*/
-#endif //_BROWSE_UDF_
-
-#endif // _UDF_SYS_SPEC_LIB__H_