Windows驱动
+ -

IRP_MJ_CREATE标识CreateFile句柄FsContext

2022-06-01 9 0

驱动程序可以通过CreateFile打开设备,不过有一种情况我们需要对不同的CreateFile句柄在驱动中标识不同的CONTEXT.
这个CONTEXT可以存储在rpSp->FileObject->FsContext中。
即每个CreateFile实例句柄都在驱动中有惟一对应的MY_CONTEXT

CreateFile

NTSTATUS IrpMajorCreate(PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
{
     PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp);
     ASSERT(irpSp->Parameters.Create.SecurityContext);
    DBGASSERT((irpSp->Parameters.Create.SecurityContext->DesiredAccess & (FILE_READ_DATA|FILE_WRITE_DATA)), 
                      ("Neither FILE_READ_DATA|FILE_WRITE_DATA requested in HidpIrpMajorCreate. DesiredAccess = %xh.", (ULONG)irpSp->Parameters.Create.SecurityContext->DesiredAccess),
                      FALSE)
//irpSp->Parameters.Create.ShareAccess == 0
//irpSp->Parameters.Create.SecurityContext->DesiredAccess & FILE_WRITE_DATA
//irpSp->Parameters.Create.SecurityContext->DesiredAccess & FILE_READ_DATA
//irpSp->Parameters.Create.ShareAccess & FILE_SHARE_READ
//irpSp->Parameters.Create.ShareAccess & FILE_SHARE_WRITE
/
/Attempt to open this device as a directory
//irpSp->Parameters.Create.Options & FILE_DIRECTORY_FILE
  irpSp->FileObject->FsContext = ExAllocatePool(NonPagedPool, sizeof(MY_CONTEXT));

  ...
}

CloseHandle

NTSTATUS IrpMajorClose(PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
{
 PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp);
 irpSp = IoGetCurrentIrpStackLocation( Irp );
 MY_CONTEXT* fileExtension = (MY_CONTEXT*)fileObject->FsContext;
...
ExFreePool( fileExtension );
}

0 篇笔记 写笔记

CreateFile()中的OPEN_ALWAYS和CREATE_ALWAYS之间的差异
任何人都可以解释Windows API的 CreateFile()功能的创建配置OPEN_ALWAYS和CREATE_ALWAYS之间的区别?对我来说,似乎他们只是简单地“创建文件,如果它不存在”。如果文件已经存在,CREATE_ALWAYS也会截断内容。另一方面,OPEN_ALWAYS不会破坏已......
CreateFile打开驱动设备权限不足
记得以前写了一个文件过滤驱动,使用的是minifilter的框架。在创建设备时,很常规的使用IoCreateDevice来创建一个命名的设备对象,然后对这个设备名使用IoCreateSymbolicLink创建其应用层的链接符号名,这样我们在应用层就可以通过CreateFile函数就可以打开这个设备......
Windows内核打开和关闭文件
文件的打开下面的函数用于打开一个文件: NTSTATUS ZwCreateFile( OUT PHANDLE FileHandle, IN ACCESS_MASK DesiredAccess, ......
CreateFile传递参数给驱动
BULKUSB的IRP_MN_CREATE的回调函数如下:NTSTATUSBulkUsb_DispatchCreate( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp )/*++Routine Descr......
文件数据读取内存GetBufferFromFile
使用std::string存储从文件中读取的二进制数。BOOL GetBufferFromFile(TCHAR* pFileName, std::string& strFileStream){ HANDLE hFile = INVALID_HANDLE_VALUE; B......
IRP_MJ_CREATE标识CreateFile句柄FsContext
驱动程序可以通过CreateFile打开设备,不过有一种情况我们需要对不同的CreateFile句柄在驱动中标识不同的CONTEXT.这个CONTEXT可以存储在rpSp->FileObject->FsContext中。即每个CreateFile实例句柄都在驱动中有惟一对应的MY_CON......
作者信息
我爱内核
Windows驱动开发,网站开发
好好学习,天天向上。
取消
感谢您的支持,我会继续努力的!
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

您的支持,是我们前进的动力!