?? queryinformation.cpp
字號:
/********************************************************************
created: 2003/08/10
created: 10:8:2003 9:48
filename: g:\temp\FsTPM\FsTPM\FsTPM\QUERYINFORMATION.cpp
file path: g:\temp\FsTPM\FsTPM\FsTPM
file base: QUERYINFORMATION
file ext: cpp
author: Supermi
purpose:
*********************************************************************/
#include "FsTPM.h"
NTSTATUS
FsTPMQueryInformationRoutine(
PDEVICE_OBJECT pHookDevice,
IN PIRP pIrp
)
{
//
// 獲得當(dāng)前堆棧,以及下一個處理IRP的堆棧
//
PIO_STACK_LOCATION pCurrentIrpStack = IoGetCurrentIrpStackLocation(pIrp);
PIO_STACK_LOCATION pNextIrpStack = IoGetNextIrpStackLocation(pIrp);
//
// 指向我定義的擴展結(jié)構(gòu),該結(jié)構(gòu)中包括了我所需要的關(guān)于下層文件系統(tǒng)的信息
//
PHOOK_EXTENSION pHookExt=(PHOOK_EXTENSION)pHookDevice->DeviceExtension;
PFILE_OBJECT pFileObject=pCurrentIrpStack->FileObject;
PDEVICE_OBJECT pNextLowerDevice=pHookExt->Vcb.NextLowerDevice;
if (pHookExt->Type==GUIINTERFACE)
{
pIrp->IoStatus.Information = 0;
pIrp->IoStatus.Status = STATUS_SUCCESS;
IoCompleteRequest( pIrp, IO_NO_INCREMENT );
return STATUS_SUCCESS;
}
WCHAR USName[256];
UNICODE_STRING UniSource;
RtlInitUnicodeString(&UniSource,USName);
UniSource.MaximumLength=512;
NTSTATUS ntStatus=GetFileFullNameByQuery(&UniSource,pHookExt,pFileObject);
if (!NT_SUCCESS(ntStatus))
{
FsTPM_DbgPrint(("Get file name by Query Failed In IRP_MJ_QUERY_INFORMATION: "));
ErrorString(ntStatus);
return ntStatus;
}
UpperWordW(UniSource.Buffer);
FsTPM_DbgPrint(("IRP_QUERYINFO: %S\n",UniSource.Buffer));
IoSkipCurrentIrpStackLocation(pIrp);
ntStatus=IoCallDriver( pNextLowerDevice, pIrp );
return ntStatus;
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -