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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 重入問題創建shadow device object.txt

?? 文件系統驅動開發的文檔資料(IFS DDK)
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
版主,你好像誤解了那個人提出的問題.不光是要將IRP發送到特定的FSD棧里的某一層.而是要在我自己的Filter中Create 文件,而又不重入我的Filter,“老外”的做法是起一個“標志性”的名字,然后在Filter中區分那些文件是我的Filiter要打開的,那些是一般程序要打開的,但是么,這實在不明智。有一種好方法,就是自己建立IRP請求,然后下傳。其中用到了一些構建自己的IRP,以及FileObject的方法。 
下面是創建避免重入的關鍵代碼,用該代碼可以直接構建并下傳打開文件的IRP。不過,這只是測試版的代碼,如果哪位大俠發現這里的Bug,希望與我聯系(li-gen@x263.net),謝謝。另外感謝Smith, Joel 的指導。 

NTSTATUS FsSimpleOpen(PUNICODE_STRING pstrName, ACCESS_MASK DesiredAccess, PDEVICE_OBJECT pVolume, PDEVICE_OBJECT pRealDevice, PFILE_OBJECT pParent, PFILE_OBJECT *ppFile) 

{ 
PIRP pIrp = NULL; 
PIO_STACK_LOCATION pStack; 
KEVENT event; 
IO_STATUS_BLOCK stat; 
NTSTATUS ntRet; 
PFILE_OBJECT pFile = NULL; 
OBJECT_ATTRIBUTES oa; 
ACCESS_STATE AccessState; 
HANDLE hFile = NULL; 
IO_SECURITY_CONTEXT ctx; 
ULONG *pAuxData = ExAllocatePool(NonPagedPool, 1024); 

if (pAuxData == NULL) 
{ 
ntRet = STATUS_INSUFFICIENT_RESOURCES; 
CLEANUP(); 
} 

ASSERT(pVolume != NULL); 
ASSERT(pRealDevice != NULL); 
ASSERT(ppFile != NULL); 
ASSERT(pstrName != NULL); 

memset(pAuxData, 0, 1024); 

//initialize an event and an IRP to send to the fsd 
KeInitializeEvent(&event, SynchronizationEvent, FALSE); 
pIrp = IoAllocateIrp(pVolume->StackSize, FALSE); 
IF_OUTOFMEMORY_CLEANUP(pIrp, &ntRet); 

InitializeObjectAttributes(&oa, 
NULL, 
OBJ_CASE_INSENSITIVE, 
NULL, 
NULL); 

//create a file object for the irp 
ntRet = ObCreateObject(KernelMode, 
*IoFileObjectType, 
&oa, 
KernelMode, 
0, 
sizeof(FILE_OBJECT), 
0, 
0, 
&pFile); 

IF_FAIL_CLEANUP(ntRet); 

//initialize the file object 
RtlZeroMemory(pFile, sizeof(FILE_OBJECT)); 
pFile->Type = IO_TYPE_FILE; 
pFile->Size = sizeof(FILE_OBJECT); 
pFile->DeviceObject = pRealDevice; 
pFile->Flags = FO_SYNCHRONOUS_IO; 
pFile->RelatedFileObject = pParent; 

//initialize embedded synch objects 
KeInitializeEvent(&pFile->Lock, SynchronizationEvent, FALSE); 
KeInitializeEvent(&pFile->Event, NotificationEvent, FALSE); 

//copy the file name into the buffer 
pFile->FileName.Buffer = ExAllocatePool(NonPagedPool, pstrName->MaximumLength); 
if (pFile->FileName.Buffer == NULL) 
{ 
ntRet = STATUS_INSUFFICIENT_RESOURCES; 
CLEANUP(); 
} 

pFile->FileName.MaximumLength = pstrName->MaximumLength; 
pFile->FileName.Length = pstrName->Length; 
RtlCopyMemory(pFile->FileName.Buffer, pstrName->Buffer, pstrName->Length); 

//setup the irp 
pIrp->UserEvent = &event; 
pIrp->UserIosb = &stat; 
pIrp->Tail.Overlay.Thread = KeGetCurrentThread(); 
pIrp->Tail.Overlay.OriginalFileObject = pFile; 
pIrp->RequestorMode = KernelMode; 
pIrp->Flags |= (IRP_CREATE_OPERATION | IRP_SYNCHRONOUS_API); 
pIrp->MdlAddress = NULL; 
pIrp->PendingReturned = FALSE; 
pIrp->Cancel = FALSE; 
pIrp->CancelRoutine = NULL; 
pIrp->Tail.Overlay.AuxiliaryBuffer = NULL; 

//Set up the I/O stack location. 
pStack = IoGetNextIrpStackLocation(pIrp); 
pStack->MajorFunction = IRP_MJ_CREATE; 
pStack->DeviceObject = pVolume; 
pStack->FileObject = pFile; 

//create an access state for the sd 
ntRet = SeCreateAccessState(&AccessState, pAuxData, DesiredAccess, IoGetFileObjectGenericMapping()); 
IF_FAIL_CLEANUP(ntRet); 

//fill out the create\'s security context 
ctx.AccessState = &AccessState; 
ctx.DesiredAccess = DesiredAccess; 
ctx.SecurityQos = NULL; 
ctx.FullCreateOptions = 0; 

//fill out the the create parameter 
pStack->Parameters.Create.SecurityContext = &ctx; 
pStack->Parameters.Create.Options = FILE_OPEN << 24; 
pStack->Parameters.Create.FileAttributes = FILE_ATTRIBUTE_NORMAL; 
pStack->Parameters.Create.ShareAccess = FILE_SHARE_READ | FILE_SHARE_WRITE; 
pStack->Parameters.Create.EaLength = 0; 

//set the completion routine (that will free the irp) 
IoSetCompletionRoutine(pIrp, FsDefaultComplete, 0, TRUE, TRUE, TRUE); 

//Send it to the FSD 
ntRet = IoCallDriver(pVolume, pIrp); 
pIrp = NULL; 

if (ntRet == STATUS_PENDING) 
{ 
//wait for the io to complete 
KeWaitForSingleObject(&event, Executive, KernelMode, TRUE, 0); 
ntRet = stat.Status; 
} 

CLEANUP: 

SAFE_FREE_POOL(pAuxData); 

if (!NT_SUCCESS(ntRet)) 
{ 
if (pIrp != NULL) 
{ 
IoFreeIrp(pIrp); 
} 
if (pFile) 
{ 
SAFE_FREE_POOL(pFile->FileName.Buffer); 
pFile->DeviceObject = NULL; 
ObDereferenceObject(pFile); 
} 
} 
else 
{ 
FsReferenceDeviceAndVpb(pFile); 

//set the out param 
*ppFile = pFile; 
} 
return ntRet; 
} 

VOID FsReferenceDeviceAndVpb(PFILE_OBJECT pFile) 
{ 
NTSTATUS ntRet; 

ASSERT(pFile->Vpb != NULL ? pFile->DeviceObject->Vpb != NULL : 
pFile->DeviceObject->Vpb == NULL); 

//Increment RealDevice\'s reference count. 
InterlockedIncrement(&pFile->DeviceObject->ReferenceCount); 

//Increment Vpb\'s reference count, if one exists. 
if (pFile->Vpb) 
{ 
ASSERT((pFile->Vpb->Flags & VPB_MOUNTED) && !(pFile->Vpb->Flags & VPB_LOCKED)); 
InterlockedIncrement(&pFile->Vpb->ReferenceCount); 
} 
} 


我可不想要錢。我還是學生嘛,但是么,我覺得有技術就因該提供。 
希望 版主 多提意見。但是如果有哪位未經我同意,把本程序投稿到相管雜志或是本站的資料文章區,來騙取個人利益,我一定饒不了他。

=====================================


BOOLEAN 
HookDrive( 
IN PDRIVER_OBJECT DriverObject, 
IN WCHAR DriveLetter 
) 
{ 
IO_STATUS_BLOCK IoStatus; 
HANDLE FileHandle; 
OBJECT_ATTRIBUTES ObjectAttributes; 
PDEVICE_OBJECT FileSysDevice; 
PDEVICE_OBJECT DeviceObject; 
PDEVICE_OBJECT ShadowDeviceObject; 
UNICODE_STRING ShadowDeviceName; 
WCHAR ShadowDeviceNameBuffer[] = L"\\Device\\FDFilterShadowA"; 
UNICODE_STRING FileName; 
WCHAR FileNameBuffer[] = L"\\DosDevices\\A:\\"; 
NTSTATUS Status; 
PFILE_OBJECT FileObject; 
PDEVICE_EXTENSION Pdx; 
PDEVICE_EXTENSION ShadowPdx; 

// 
// Replace the drive letter 
// 
FileNameBuffer[12] = DriveLetter; 
ShadowDeviceNameBuffer[22] = DriveLetter; 

// 
// We have to figure out what device to hook - first open the volume's 
// root directory 
// 
RtlInitUnicodeString(&FileName, FileNameBuffer); 
InitializeObjectAttributes(&ObjectAttributes, &FileName, OBJ_CASE_INSENSITIVE, NULL, NULL); 
Status = ZwCreateFile(&FileHandle, SYNCHRONIZE | FILE_ANY_ACCESS, 
&ObjectAttributes, &IoStatus, NULL, 0, 
FILE_SHARE_READ | FILE_SHARE_WRITE, 
FILE_OPEN, FILE_SYNCHRONOUS_IO_NONALERT | FILE_DIRECTORY_FILE, 
NULL, 0); 
if (!NT_SUCCESS(Status)) 
{ 
KdPrint(("fdfilter.sys: Could not open drive: %x\n", Status)); 
return FALSE; 
} 

KdPrint(("fdfilter.sys: opened the root directory!!! handle: %x\n", FileHandle)); 

// 
// Got the file handle, so now look-up the file-object it refers to 
// 
Status = ObReferenceObjectByHandle(FileHandle, FILE_READ_DATA, NULL, KernelMode, &FileObject, NULL); 
if (!NT_SUCCESS(Status)) 
{ 
KdPrint(("fdfilter.sys: Could not get fileobject from handle\n")); 
ZwClose(FileHandle); 
return FALSE; 
} 

// 
// Next, find out what device is associated with the file object by getting its related 
// device object 
// 
FileSysDevice = IoGetRelatedDeviceObject(FileObject); 
if (!FileSysDevice) 
{ 
KdPrint(("fdfilter.sys: Could not get related device object\n")); 
ObDereferenceObject(FileObject); 
ZwClose(FileHandle); 
return FALSE; 
} 

// 
// Create a shadow device object 
// 
RtlInitUnicodeString(&ShadowDeviceName, ShadowDeviceNameBuffer); 
Status = IoCreateDevice(DriverObject, 
sizeof(DEVICE_EXTENSION), 
&ShadowDeviceName, 
FileSysDevice->DeviceType, 
0, 
FALSE, 
&ShadowDeviceObject); 
if (!NT_SUCCESS(Status)) 
{ 
KdPrint(("fdfilter.sys: failed to create associated device\n")); 
ObDereferenceObject(FileObject); 
ZwClose(FileHandle); 
return FALSE; 
} 
ShadowDeviceObject->StackSize = FileSysDevice->StackSize; 

// 
// The file system's device hasn't been hooked already, so make a hooking device 
// object that will be attached to it. 
// 
Status = IoCreateDevice(DriverObject, 
sizeof(DEVICE_EXTENSION), 
NULL, 
FileSysDevice->DeviceType, 
0, 
FALSE, 
&DeviceObject); 
if (!NT_SUCCESS(Status)) 
{ 
KdPrint(("fdfilter.sys: failed to create associated device\n")); 
ObDereferenceObject(FileObject); 
ZwClose(FileHandle); 
IoDeleteDevice(ShadowDeviceObject); 
return FALSE; 
} 

// 
// Setup the device extensions. The drive letter and file system object are stored 
// in the extension. 
// 
ShadowPdx = ShadowDeviceObject->DeviceExtension; 
ShadowPdx->Type = SHADOW; 
ShadowPdx->FsDeviceObject = NULL; 
ShadowPdx->AttachToDeviceObject = NULL; 
ShadowPdx->BuddyDeviceObject = DeviceObject; 

Pdx = DeviceObject->DeviceExtension; 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人综合婷婷国产精品久久| 亚洲第一搞黄网站| 精品国产精品一区二区夜夜嗨| 欧美日本国产一区| 欧美日韩国产高清一区二区三区 | 激情综合网天天干| 日韩二区三区在线观看| 秋霞午夜av一区二区三区| 另类小说视频一区二区| 老汉av免费一区二区三区| 久88久久88久久久| 国产超碰在线一区| 日本福利一区二区| 欧美日韩精品系列| 91精品国产高清一区二区三区| 日韩无一区二区| 国产精品无遮挡| 亚洲欧美日本韩国| 日韩**一区毛片| 国产传媒一区在线| 色婷婷综合五月| 日韩免费看网站| 中文字幕不卡的av| 亚洲一区日韩精品中文字幕| 久久精品国产第一区二区三区| 国产美女视频一区| 欧美亚洲综合久久| 精品国产乱码91久久久久久网站| 1024成人网| 免费成人美女在线观看| www.久久精品| 欧美精品tushy高清| 国产精品视频第一区| 亚洲自拍偷拍综合| 国内精品嫩模私拍在线| 91国偷自产一区二区开放时间 | 国产精品一区二区三区乱码 | 国产一区二区三区蝌蚪| 一本色道久久综合亚洲aⅴ蜜桃| 欧美一区二区三区成人| 日韩码欧中文字| 国产一区二区看久久| 欧美性受xxxx黑人xyx性爽| 久久久国产一区二区三区四区小说 | 国产成+人+日韩+欧美+亚洲| 欧美日韩中文字幕一区| 欧美极品aⅴ影院| 日韩和的一区二区| 色综合天天狠狠| 欧美高清在线精品一区| 久久精品国产亚洲a| 在线观看视频一区二区欧美日韩| 国产午夜精品一区二区 | 亚洲视频一区在线观看| 狠狠色综合日日| 欧美日本在线视频| 亚洲综合男人的天堂| 国产成人精品免费一区二区| 91精品国产综合久久蜜臀| 一区二区三区四区激情| 99视频在线精品| 国产精品女上位| 黄色资源网久久资源365| 日韩一区二区三区四区| 五月婷婷另类国产| 欧美浪妇xxxx高跟鞋交| 一区二区三区成人| 色婷婷久久久亚洲一区二区三区| 最新中文字幕一区二区三区 | 日本精品视频一区二区三区| 亚洲欧洲av一区二区三区久久| 国产一区二区在线视频| 精品91自产拍在线观看一区| 日本女人一区二区三区| 日韩欧美一区电影| 国产伦理精品不卡| 国产亚洲精久久久久久| 国产精品亚洲人在线观看| 久久精品一区四区| 懂色av一区二区在线播放| 国产精品传媒在线| 91首页免费视频| 亚洲国产精品久久人人爱| 欧美电影一区二区| 久久国产精品一区二区| 久久美女艺术照精彩视频福利播放| 激情小说亚洲一区| 欧美激情在线一区二区三区| 93久久精品日日躁夜夜躁欧美| 亚洲免费av在线| 6080亚洲精品一区二区| 九一九一国产精品| 中文字幕+乱码+中文字幕一区| 不卡视频一二三| 亚洲影院久久精品| 精品欧美一区二区久久| 成人深夜视频在线观看| 亚洲国产精品一区二区www| 91精品国产福利| 成人性生交大合| 亚洲成a天堂v人片| 久久综合久久久久88| 99re视频这里只有精品| 日韩国产精品91| 国产亚洲女人久久久久毛片| 日本高清不卡一区| 国产麻豆91精品| 亚洲与欧洲av电影| 国产亚洲成aⅴ人片在线观看| 99久久国产免费看| 免费av网站大全久久| 中文字幕亚洲电影| 91精品久久久久久久91蜜桃| av一区二区三区| 日韩成人午夜精品| 亚洲视频1区2区| 久久综合九色综合欧美就去吻| 在线日韩一区二区| 福利91精品一区二区三区| 午夜精品一区二区三区三上悠亚| 国产免费成人在线视频| 日韩无一区二区| 欧美午夜片在线看| 成人av在线资源网| 国产综合一区二区| 日韩电影免费在线| 一区二区三区精品视频| 国产午夜精品一区二区| 日韩一区二区在线观看| 在线观看一区二区视频| www.亚洲色图| 国产精品538一区二区在线| 三级一区在线视频先锋| 亚洲一区在线观看免费 | 欧美日韩免费不卡视频一区二区三区| 国产成人在线免费观看| 久久精品免费观看| 日韩高清一区在线| 亚洲成人资源网| 亚洲自拍偷拍麻豆| 亚洲精品第1页| 亚洲伦理在线精品| 亚洲色图欧美在线| 亚洲日本在线天堂| 国产精品久久久久一区二区三区| 精品免费99久久| 亚洲精品在线网站| 91精品啪在线观看国产60岁| 51午夜精品国产| 欧美精品日韩一本| 欧美高清你懂得| 欧美精品亚洲一区二区在线播放| 在线观看免费亚洲| 欧美日韩在线三级| 91精品久久久久久久久99蜜臂| 这里只有精品视频在线观看| 欧美日韩视频在线观看一区二区三区 | 一区二区国产视频| 亚洲一区二区在线视频| 亚洲国产精品一区二区久久恐怖片| 亚洲色图色小说| 亚洲高清中文字幕| 免费成人在线观看视频| 黑人巨大精品欧美一区| 国产精品18久久久久久久久久久久 | ...中文天堂在线一区| 亚洲免费观看高清| 污片在线观看一区二区| 国内精品伊人久久久久av影院 | 国产精品羞羞答答xxdd| 成人午夜在线视频| 在线观看免费成人| 欧美成人官网二区| 欧美韩日一区二区三区| 一区二区三区欧美激情| 午夜视频一区二区| 国产一区二区伦理片| 色婷婷久久一区二区三区麻豆| 欧美日本免费一区二区三区| 亚洲精品一区在线观看| 亚洲国产成人午夜在线一区| 亚洲444eee在线观看| 精品写真视频在线观看| 91浏览器入口在线观看| 欧美一级二级三级乱码| 亚洲国产精品高清| 亚洲成人黄色影院| 国产成人免费视频网站| 91福利国产精品| 久久久国产精品午夜一区ai换脸| 亚洲一区二区三区三| 国产99精品视频| 欧美卡1卡2卡| 综合久久给合久久狠狠狠97色| 日本在线播放一区二区三区| www.色精品| 精品99999| 偷拍亚洲欧洲综合| 91色视频在线| 国产欧美日韩精品一区|