亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? sfilter.c

?? 經(jīng)典的文件透明加解密程序
?? C
?? 第 1 頁 / 共 5 頁
字號:
/*++

Copyright (c) 1989-1993  Microsoft Corporation

Module Name:

	sfilter.c

Abstract:

	This module contains the code that implements the general purpose sample
	file system filter driver.

	As of the Windows XP SP1 IFS Kit version of this sample and later, this
	sample can be built for each build environment released with the IFS Kit
	with no additional modifications.  To provide this capability, additional
	compile-time logic was added -- see the '#if WINVER' locations.  Comments
	tagged with the 'VERSION NOTE' header have also been added as appropriate to
	describe how the logic must change between versions.

	If this sample is built in the Windows XP environment or later, it will run
	on Windows 2000 or later.  This is done by dynamically loading the routines
	that are only available on Windows XP or later and making run-time decisions
	to determine what code to execute.  Comments tagged with 'MULTIVERISON NOTE'
	mark the locations where such logic has been added.

Environment:

	Kernel mode

--*/


//  修復(fù)涉及后視列表的Win2K兼容性
//  Fixes Win2K compatibility regarding lookaside lists.
//

#ifndef _WIN2K_COMPAT_SLIST_USAGE	// Add content(增加內(nèi)容)
#define _WIN2K_COMPAT_SLIST_USAGE	
#endif

#include "ntifs.h"
#include "ntdddisk.h"

//
// 在代碼中開啟這些警告 
// Enable these warnings in the code.
// 

#pragma warning(error:4100)	// Unreferenced formal parameter	未被引用的正式參數(shù)
#pragma warning(error:4101)	// Unreferenced local variable		未被引用的局部參數(shù)

// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // /
// 
//				 Macro and Structure Definitions
// 
// // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // /

// 
// VERSION NOTE:
// 
// 下面的宏在Windows XP及以后OS中的NTIFS.H中被定義,如果我們在Windows 2000環(huán)境下編譯加上這些定義
// The following useful macros are defined in NTIFS.H in Windows XP and later.
// We will define them locally if we are building for the Windows 2000 
// environment.
// 

#if WINVER == 0x0500

//
// 用于測試、設(shè)置、清除標志
// These macros are used to test, set and clear flags respectively
// 

// 打開標志
#ifndef FlagOn
#define FlagOn(_F, _SF)			((_F) & (_SF))
#endif

// 測試標志是否打開
#ifndef BooleanFlagOn
#define BooleanFlagOn(F, SF)	((BOOLEAN) (((F) & (SF)) != 0))
#endif

// 設(shè)置標志
#ifndef SetFlag
#define SetFlag(_F, _SF)		((_F) |= (_SF))
#endif

// 清除標志
#ifndef ClearFlag
#define ClearFlag(_F, _SF)		((_F) &= ~(_SF))
#endif

#define RtlInitEmptyUnicodeString(_ucStr, _buf, _bufSize) \
	((_ucStr)->Buffer = (_buf), \
	 (_ucStr)->Length = 0, \
	 (_ucStr)->MaximumLength = (USHORT)(_bufSize))

#ifndef min
#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif

#ifndef max
#define max(a, b) (((a) > (b)) ? (a) : (b))
#endif

// 
// We want ASSERT defined as an expression, which was fixed after Windows 2000
// 

#ifdef ASSERT
#undef ASSERT
#if DBG
#define ASSERT(exp) \
	((!(exp)) ? \
		(RtlAssert(#exp, __FILE__, __LINE__, NULL),FALSE) : \
		TRUE)
#else
#define ASSERT(exp) ((void) 0)
#endif
#endif		

#define ExFreePoolWithTag(a, b) ExFreePool((a))

#endif /* WINVER == 0x0500 */

#ifndef Add2Ptr
#define Add2Ptr(P,I) ((PVOID)((PUCHAR)(P) + (I)))
#endif

// 
// 在堆棧上的局部名字的緩沖尺寸
// Buffer size for local names on the stack
// 

#define MAX_DEVNAME_LENGTH				64

// Add content(增加內(nèi)容)******

// 限制的最大路徑長度 + 系統(tǒng)加密信息目錄
#define MAX_PATH						512			

// 加密位尺寸,設(shè)置加密位共128*8個位,即128字節(jié)
#define ENCRYPT_BIT_SIZE				(128 * 8)

#define SF_ENCRYPT_POSTFIX				L".$encrypt$"
#define SF_ENCRYPT_POSTFIX_LENGTH		10

// 規(guī)則文件的文件名
#define RULE_FILE_NAME					L"\\SystemRoot\\xefs.dat"

#if DBG
#define DEBUG_VOLUME					L'D'	// L'G'
#endif

/*
typedef struct _FILE_OBJECT {
    CSHORT Type;
    CSHORT Size;
    PDEVICE_OBJECT DeviceObject;
    PVPB Vpb;
    PVOID FsContext;
    PVOID FsContext2;
    PSECTION_OBJECT_POINTERS SectionObjectPointer;
    PVOID PrivateCacheMap;
    NTSTATUS FinalStatus;
    struct _FILE_OBJECT *RelatedFileObject;
    BOOLEAN LockOperation;
    BOOLEAN DeletePending;
    BOOLEAN ReadAccess;
    BOOLEAN WriteAccess;
    BOOLEAN DeleteAccess;
    BOOLEAN SharedRead;
    BOOLEAN SharedWrite;
    BOOLEAN SharedDelete;
    ULONG Flags;
    UNICODE_STRING FileName;
    LARGE_INTEGER CurrentByteOffset;
    ULONG Waiters;
    ULONG Busy;
    PVOID LastLock;
    KEVENT Lock;
    KEVENT Event;
    PIO_COMPLETION_CONTEXT CompletionContext;
} FILE_OBJECT;
typedef struct _FILE_OBJECT *PFILE_OBJECT; // ntndis
*/

typedef struct _FILE_CONTEXT_HDR
{
	PVOID FsContext;
} FILE_CONTEXT_HDR, *PFILE_CONTEXT_HDR;

typedef struct _FILE_CONTEXT
{
	FILE_CONTEXT_HDR;

	ULONG	RefCount;
	BOOLEAN DecryptOnRead;		// 是否讀時解密
	BOOLEAN EncryptOnWrite;		// 是否寫時加密
	BOOLEAN EncryptFlagExist;	// 如果加密標志存在,那么文件被加密,if encrypt flag file exists, then the file is encrypted
	BOOLEAN NeedEncrypt;		// 需要加密
	BOOLEAN DeleteOnClose;
	KEVENT Event;
	WCHAR Name[MAX_PATH];		// 轉(zhuǎn)換成字節(jié)數(shù),// 表明從最終形成'\??\i:\System Encrypt Information\System Volume Information'的文件中讀入的加密位的字節(jié)長度
	UCHAR EncryptExtData[ENCRYPT_BIT_SIZE / sizeof(UCHAR)];
} FILE_CONTEXT, *PFILE_CONTEXT;
// Add content(增加內(nèi)容)******

// 
// Device extension definition for our driver.  Note that the same extension
// is used for the following types of device objects:
//	- File system device object we attach to
//	- Mounted volume device objects we attach to
// 
//  我們驅(qū)動的設(shè)備擴展。注意相同的擴展用于下面類型的設(shè)備對象
//      - 我們附著的文件系統(tǒng)設(shè)備對象
//      - 我們附著的被安裝的卷設(shè)備對象

typedef struct _SFILTER_DEVICE_EXTENSION
{
	// 
	// Pointer to the file system device object we are attached to
	// 
	PDEVICE_OBJECT AttachedToDeviceObject;

	// 
	// Pointer to the real (disk) device object that is associated with
	// the file system device object we are attached to
	// 
	PDEVICE_OBJECT StorageStackDeviceObject;

	// 
	// Name for this device.  If attached to a Volume Device Object it is the
	// name of the physical disk drive.  If attached to a Control Device
	// Object it is the name of the Control Device Object.
	// 
	UNICODE_STRING DeviceName;

	// 
	// Buffer used to hold the above unicode strings
	// 
	WCHAR DeviceNameBuffer[MAX_DEVNAME_LENGTH];	

	WCHAR DriveLetter;	// Add content(增加內(nèi)容)

	RTL_GENERIC_TABLE FsCtxTable;	// Add content(增加內(nèi)容)
	FAST_MUTEX FsCtxTableMutex;		// Add content(增加內(nèi)容)
} SFILTER_DEVICE_EXTENSION, *PSFILTER_DEVICE_EXTENSION;

// 
// 這個結(jié)構(gòu)含有我們需要為FSCTRLs傳遞到完成處理的信息
// This structure contains the information we need to pass to the completion
// processing for FSCTRLs.
// 
typedef struct _FSCTRL_COMPLETION_CONTEXT
{
	// 
	// The workitem that will be initialized with our context and 
	// worker routine if this completion processing needs to be completed
	// in a worker thread.
	// 如果這個完成處理需要在一個工作線程中完成,用我們的上下文和工作例程初始化的workitem
	// 
	WORK_QUEUE_ITEM WorkItem;

	// 
	// The device object to which this device is currently directed.
	// 
	PDEVICE_OBJECT DeviceObject;

	// 
	// The IRP for this FSCTRL operation.
	// 這個FSCTRL操作的IRP
	// 
	PIRP Irp;

	// 
	// For mount operations, the new device object that we have allocated
	// and partially initialized that we will attach to the mounted volume
	// if the mount is successful.
	// 對于卷安裝操作,我們已經(jīng)分配且部分初始化的我們將附著到被成功安裝的卷的新設(shè)備對象
	// 
	PDEVICE_OBJECT NewDeviceObject;
} FSCTRL_COMPLETION_CONTEXT, *PFSCTRL_COMPLETION_CONTEXT;

typedef struct _POST_CREATE_WORKER_CONTEXT		// Add content(增加內(nèi)容)
{
	WORK_QUEUE_ITEM WorkItem;
	KEVENT Event;
	PDEVICE_OBJECT DeviceObject;
	PFILE_OBJECT FileObject;
	PFILE_CONTEXT FileContext;
	BOOLEAN NewElement;
} POST_CREATE_WORKER_CONTEXT, *PPOST_CREATE_WORKER_CONTEXT;

typedef struct _READ_WRITE_COMPLETION_CONTEXT	// Add content(增加內(nèi)容)
{
	PMDL OldMdl;
	PVOID OldUserBuffer;
	PVOID OldSystemBuffer;

	PMDL MdlForUserBuffer;
	
	PVOID OldBuffer;
	PVOID MyBuffer;
	ULONG Length;
} READ_WRITE_COMPLETION_CONTEXT, *PREAD_WRITE_COMPLETION_CONTEXT;

typedef struct _POST_SET_INFORMATION_WORKER_CONTEXT	// Add content(增加內(nèi)容)
{
	WORK_QUEUE_ITEM WorkItem;
	KEVENT Event;
	PDEVICE_OBJECT DeviceObject;
	PFILE_OBJECT FileObject;
	PFILE_CONTEXT FileContext;
	PWCHAR FileName;
	PWCHAR TargetFileName;
 } POST_SET_INFORMATION_WORKER_CONTEXT, *PPOST_SET_INFORMATION_WORKER_CONTEXT;

#define POLICY_NONE			0x0			// Add content(增加內(nèi)容)
#define POLICY_ENCRYPT		0x1
#define POLICY_END			0xFFFFFFFF

typedef struct _RULE		// Add content(增加內(nèi)容)
{
	ULONG Policy;				// 規(guī)則策略碼
	WCHAR Pattern[MAX_PATH];	// 匹配規(guī)則,可以含有通配符 * ?
} RULE, *PRULE;

// 
// Macro to test if this is my device object
// 用于測試是否我們設(shè)備對象的宏
// 
#define IS_MY_DEVICE_OBJECT(_devObj) \
	(((_devObj) != NULL) && \
	 ((_devObj)->DriverObject == gSFilterDriverObject) && \
	  ((_devObj)->DeviceExtension != NULL))

// 
// Macro to test if this is my control device object
// 用于測試是否我們的控制設(shè)備對象的宏
// 
#define IS_MY_CONTROL_DEVICE_OBJECT(_devObj) \
	(((_devObj) == gSFilterControlDeviceObject) ? \
			(ASSERT(((_devObj)->DriverObject == gSFilterDriverObject) && \
					((_devObj)->DeviceExtension == NULL)), TRUE) : \
			FALSE)

// 
// Macro to test for device types we want to attach to
// 測試我們想附著到的設(shè)備類型的宏
// 
#define IS_DESIRED_DEVICE_TYPE(_type) \
	(((_type) == FILE_DEVICE_DISK_FILE_SYSTEM) || \
	 ((_type) == FILE_DEVICE_CD_ROM_FILE_SYSTEM) || \
	 ((_type) == FILE_DEVICE_NETWORK_FILE_SYSTEM))

// 
// Macro to test if FAST_IO_DISPATCH handling routine is valid
// 測試是否FAST_IO_DISPATCH處理例程有效的宏
// 
#define VALID_FAST_IO_DISPATCH_HANDLER(_FastIoDispatchPtr, _FieldName) \
	(((_FastIoDispatchPtr) != NULL) && \
	 (((_FastIoDispatchPtr)->SizeOfFastIoDispatch) >= \
			(FIELD_OFFSET(FAST_IO_DISPATCH, _FieldName) + sizeof(void *))) && \
	 ((_FastIoDispatchPtr)->_FieldName != NULL))


#if WINVER >= 0x0501
// 
// MULTIVERSION NOTE:
// 
// If built in the Windows XP environment or later, we will dynamically import
// the function pointers for routines that were not supported on Windows 2000
// so that we can build a driver that will run, with modified logic, on 
// Windows 2000 or later.
// 
// Below are the prototypes for the function pointers that we need to 
// dynamically import because not all OS versions support these routines.
// 
// 動態(tài)輸入函數(shù)的原型的函數(shù)指針

typedef
NTSTATUS
(* PSF_REGISTER_FILE_SYSTEM_FILTER_CALLBACKS)(
	IN PDRIVER_OBJECT DriverObject,
	IN PFS_FILTER_CALLBACKS Callbacks
	);

typedef
NTSTATUS
(* PSF_ENUMERATE_DEVICE_OBJECT_LIST)(
	IN PDRIVER_OBJECT DriverObject,
	IN PDEVICE_OBJECT *DeviceObjectList,
	IN ULONG DeviceObjectListSize,
	OUT PULONG ActualNumberDeviceObjects
	);

typedef
NTSTATUS
(* PSF_ATTACH_DEVICE_TO_DEVICE_STACK_SAFE)(
	IN PDEVICE_OBJECT SourceDevice,
	IN PDEVICE_OBJECT TargetDevice,
	OUT PDEVICE_OBJECT *AttachedToDeviceObject
	);

typedef	
PDEVICE_OBJECT
(* PSF_GET_LOWER_DEVICE_OBJECT)(
	IN PDEVICE_OBJECT DeviceObject
	);

typedef
PDEVICE_OBJECT
(* PSF_GET_DEVICE_ATTACHMENT_BASE_REF)(
	IN PDEVICE_OBJECT DeviceObject
	);

typedef
NTSTATUS
(* PSF_GET_DISK_DEVICE_OBJECT)(
	IN PDEVICE_OBJECT FileSystemDeviceObject,
	OUT PDEVICE_OBJECT *DiskDeviceObject
	);

typedef
PDEVICE_OBJECT
(* PSF_GET_ATTACHED_DEVICE_REFERENCE)(
	IN PDEVICE_OBJECT DeviceObject
	);

typedef
NTSTATUS
(* PSF_GET_VERSION)(
	IN OUT PRTL_OSVERSIONINFOW VersionInformation
	);

typedef struct _SF_DYNAMIC_FUNCTION_POINTERS
{
	// 
	// The following routines should all be available on Windows XP (5.1) and later.
	// 下面這些例程應(yīng)該在Windows XP (5.1)及以后的操作系統(tǒng)可用
	// 
	PSF_REGISTER_FILE_SYSTEM_FILTER_CALLBACKS RegisterFileSystemFilterCallbacks;
	PSF_ATTACH_DEVICE_TO_DEVICE_STACK_SAFE AttachDeviceToDeviceStackSafe;
	PSF_ENUMERATE_DEVICE_OBJECT_LIST EnumerateDeviceObjectList;
	PSF_GET_LOWER_DEVICE_OBJECT GetLowerDeviceObject;
	PSF_GET_DEVICE_ATTACHMENT_BASE_REF GetDeviceAttachmentBaseRef;
	PSF_GET_DISK_DEVICE_OBJECT GetDiskDeviceObject;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩中文一区| 成人视屏免费看| 欧美日韩精品一区二区在线播放| 亚洲免费观看高清完整版在线| 成人精品在线视频观看| 国产精品久久久久久户外露出| 大桥未久av一区二区三区中文| 国产精品―色哟哟| 99久久精品国产麻豆演员表| 亚洲综合一区二区精品导航| 欧美精品在欧美一区二区少妇| 日本aⅴ免费视频一区二区三区| 日韩免费视频一区| 国精品**一区二区三区在线蜜桃| 中文字幕av在线一区二区三区| 99久久精品99国产精品| 亚洲综合久久久久| 日韩三级免费观看| 成人一级视频在线观看| 亚洲精品免费一二三区| 日韩三级免费观看| 9i看片成人免费高清| 亚洲韩国精品一区| 337p日本欧洲亚洲大胆精品| kk眼镜猥琐国模调教系列一区二区| 亚洲黄色免费网站| 2024国产精品视频| 色婷婷综合五月| 狠狠久久亚洲欧美| 亚洲色大成网站www久久九九| 欧美精选在线播放| 国产成人超碰人人澡人人澡| 夜夜操天天操亚洲| 久久夜色精品一区| 欧美日韩另类国产亚洲欧美一级| 精品在线你懂的| 伊人一区二区三区| 久久综合色8888| 欧美日韩国产天堂| 成人精品国产一区二区4080| 日本视频在线一区| 亚洲人成人一区二区在线观看| 欧美成人女星排名| 欧美亚洲动漫另类| www.综合网.com| 精彩视频一区二区三区| 亚洲成人在线免费| 亚洲欧美在线观看| 久久精品亚洲精品国产欧美kt∨| 欧美日韩卡一卡二| 在线中文字幕一区| 91在线视频观看| 国产精品亚洲第一 | 亚洲国产成人av网| 国产三级一区二区三区| 717成人午夜免费福利电影| 99久久综合99久久综合网站| 日本aⅴ精品一区二区三区| 亚洲婷婷综合久久一本伊一区| 久久久久国产精品人| 日韩一区二区精品| 欧美人牲a欧美精品| 欧美优质美女网站| 91老司机福利 在线| www.亚洲精品| 白白色 亚洲乱淫| 成人动漫一区二区在线| 国产精品一区一区三区| 久久av老司机精品网站导航| 日韩av高清在线观看| 午夜成人免费视频| 亚洲成av人片在线观看无码| 一区二区三区在线免费| 亚洲欧美另类小说视频| 亚洲狠狠丁香婷婷综合久久久| 一区二区三区在线视频免费| 一区二区三区欧美| 亚洲第四色夜色| 日韩国产一区二| 美女一区二区视频| 蓝色福利精品导航| 国产中文一区二区三区| 国产成人精品亚洲日本在线桃色| 国产91在线观看| youjizz国产精品| 在线区一区二视频| 欧美日韩另类国产亚洲欧美一级| 欧美日本乱大交xxxxx| 欧美一区二区三区色| 日韩免费看网站| 欧美国产精品一区| 亚洲欧美日本在线| 无码av中文一区二区三区桃花岛| 天堂在线亚洲视频| 麻豆成人免费电影| 粉嫩久久99精品久久久久久夜| 99久久精品国产网站| 在线亚洲人成电影网站色www| 欧美日韩免费电影| 久久综合色综合88| 亚洲美腿欧美偷拍| 全部av―极品视觉盛宴亚洲| 国产精品白丝jk黑袜喷水| 91视频在线看| 欧美日韩一区精品| xnxx国产精品| 亚洲另类一区二区| 美腿丝袜亚洲综合| 99热精品国产| 欧美一区二区美女| 国产精品女同一区二区三区| 一区二区视频在线看| 久久99精品久久久久久国产越南 | 欧美日韩中文国产| 精品国产一区二区三区久久久蜜月 | 亚洲福中文字幕伊人影院| 免费观看一级欧美片| 国产激情一区二区三区四区| 91传媒视频在线播放| 精品三级在线看| 亚洲最大成人综合| 久久精品国产一区二区三区免费看 | 国产日韩影视精品| 午夜视频在线观看一区二区三区| 九九久久精品视频| 欧美怡红院视频| 国产精品你懂的在线欣赏| 性做久久久久久久免费看| 国产夫妻精品视频| 在线综合+亚洲+欧美中文字幕| 国产精品久久影院| 国产中文字幕精品| 欧美α欧美αv大片| 亚洲日本在线a| 国产一区二区伦理片| 欧美日韩国产一区| 亚洲三级免费观看| 国产精品1024| 精品国产乱码久久久久久牛牛| 亚洲一区二区视频在线| 91在线一区二区| 国产欧美一区二区精品忘忧草| 日本欧美大码aⅴ在线播放| 色婷婷久久综合| 国产精品福利电影一区二区三区四区| 日韩电影在线免费| 欧美午夜精品久久久久久孕妇 | 国产精品一区在线观看你懂的| 欧美日本乱大交xxxxx| 亚洲精品免费一二三区| av电影天堂一区二区在线| 久久先锋影音av鲁色资源网| 日本va欧美va欧美va精品| 欧美日韩在线播放三区| 亚洲精品亚洲人成人网在线播放| 大尺度一区二区| 国产亚洲精品中文字幕| 国产精品系列在线观看| 久久久国产综合精品女国产盗摄| 国产日韩精品一区二区浪潮av| 亚洲精品国产一区二区精华液| 国产成人夜色高潮福利影视| 精品福利视频一区二区三区| 日韩av网站在线观看| 精品视频在线看| 亚洲自拍偷拍图区| 在线精品视频免费观看| 亚洲精品欧美激情| 欧洲一区在线观看| 亚洲精品成人精品456| 色又黄又爽网站www久久| 亚洲免费观看高清| 在线精品视频一区二区| 亚洲综合激情网| 7777精品伊人久久久大香线蕉超级流畅| 亚洲一区在线观看视频| 欧美亚洲国产一卡| 日本欧美一区二区三区乱码| 日韩欧美在线网站| 国内精品国产成人国产三级粉色| ww久久中文字幕| 成人免费视频免费观看| 亚洲精品乱码久久久久久日本蜜臀| 97精品视频在线观看自产线路二| 亚洲欧美另类小说| 7777精品伊人久久久大香线蕉经典版下载 | 国产日韩欧美高清| eeuss鲁片一区二区三区在线观看| 中文字幕av一区二区三区高 | 国产精品久久久爽爽爽麻豆色哟哟| 成人激情电影免费在线观看| 国产精品乱码妇女bbbb| 97久久精品人人做人人爽| 亚洲第一电影网| 精品国产污污免费网站入口 | 国产欧美精品一区| 日本黄色一区二区| 三级一区在线视频先锋| 国产亚洲一区二区三区在线观看| 成人av动漫在线|