Window10驱动简单示例(一)--文件打开读取
来源:互联网 发布:sql联合主键 编辑:程序博客网 时间:2024/06/03 10:26
在驱动,进行一次简单的读文件的操作。
#include <ntddk.h>
#define TestFileNamePath L"\\??\\c:\\1111\\111.txt.csx"
NTSTATUS
FileTest_Read(HANDLE hFile)
{
NTSTATUS status = STATUS_SUCCESS;
LARGE_INTEGERnFileLen = { 0 };
IO_STATUS_BLOCK ioState = { 0 };
PUCHAR pBuffer = NULL;
ULONG FileLen = 0;
FILE_STANDARD_INFORMATION StardInfo = { 0 };
if (ZwQueryInformationFile(hFile, &ioState, &StardInfo, sizeof(StardInfo), FileStandardInformation) == STATUS_SUCCESS)
{
if (StardInfo.EndOfFile.QuadPart == 0)
return status;
nFileLen.QuadPart = StardInfo.EndOfFile.QuadPart;
pBuffer = ExAllocatePool(PagedPool, (SIZE_T)nFileLen.QuadPart);
if (pBuffer == NULL)
{
status = STATUS_INSUFFICIENT_RESOURCES;
}
else
{
PUCHAR pTempBuffer = pBuffer;
FileLen = (ULONG)nFileLen.QuadPart;
nFileLen.QuadPart = 0;
if (STATUS_SUCCESS == (status = ZwReadFile(hFile, NULL, NULL, NULL, &ioState, pTempBuffer, FileLen, &nFileLen, NULL)))
{
ASSERT(FileLen == ioState.Information);
KdPrint(("[FileTest_Read] ZwReadBuf=%s!\n", pBuffer));
}
else
{
status = ioState.Status;
}
ExFreePool(pBuffer);
}
}
else
{
status = ioState.Status;
}
return status;
}
HANDLE FileTest_Open()
{
HANDLE file_handle = NULL;
NTSTATUS status;
OBJECT_ATTRIBUTES object_attributes;
UNICODE_STRING ufile_name;
IO_STATUS_BLOCK io_status;
RtlInitUnicodeString(&ufile_name, TestFileNamePath);//初始化文件名
InitializeObjectAttributes(
&object_attributes,
&ufile_name,
OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
NULL,
NULL);
status = ZwCreateFile(
&file_handle,
GENERIC_READ | GENERIC_WRITE,
&object_attributes,
&io_status,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ,
FILE_OPEN_IF,
FILE_NON_DIRECTORY_FILE |
FILE_RANDOM_ACCESS |
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0);
if (!NT_SUCCESS(status))
{
KdPrint(("[FileTest_Open] ZwCreateFile failed!\n"));
status = io_status.Status;
}
else
{
KdPrint(("[FileTest_Open] ZwCreateFile successful!\n"));
status = STATUS_SUCCESS;
}
return file_handle;
}
VOID
DriverUnload(
IN PDRIVER_OBJECT driverObject
)
{
UNREFERENCED_PARAMETER(driverObject);
KdPrint(("[DriverUnload] successful!\n"));
return;
}
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT driverObject,
IN PUNICODE_STRING registryPath
)
{
NTSTATUS status = STATUS_SUCCESS;
HANDLE hFile;
UNREFERENCED_PARAMETER(registryPath);
hFile = FileTest_Open();
if (hFile)
{
if (STATUS_SUCCESS != FileTest_Read(hFile) )
{
KdPrint(("[DriverEntry] FileTest_Read error!!\n"));
}
ZwClose(hFile);
}
driverObject->DriverUnload = DriverUnload;
KdPrint(("[DriverEntry] successful!\n"));
return status;
}
阅读全文
0 0
- Window10驱动简单示例(一)--文件打开读取
- [C++]文件打开读取示例代码
- js读取xml文件 简单示例
- JavaScript读取XML文件的简单示例
- 打开miracast简单示例
- window10 pl2303驱动解决
- 注册表文件修改打开程序的简单示例
- VC++ 读取二进制文件以及写入文件简单示例:
- Python——Pylab简单读取wav文件示例
- VC++ 读取二进制文件以及写入文件简单示例:
- PHP 文件打开/读取/读取
- PHP 文件打开-读取-读取
- java文件读取示例
- 读取xls文件示例
- 读取xls文件示例
- Python 读取文件示例
- 读取properties文件示例
- Perl打开读取文件
- maven安装报 java.lang.UnsupportedClassVersionError
- Hyperledger Fabric SDK 示例fabric-samples-《balance-transfer》之二《创建Channel》
- Eclipse安装Activiti插件
- Android GPS 定位的实现(1)
- Coursera-Deep Learning Specialization 课程之(二):Improving Deep Neural Networks: -weak2编程作业
- Window10驱动简单示例(一)--文件打开读取
- Python 之旅.00
- 目标检测之LibPaBOD(a LIBrary for PArt-Based Object Detection in C++)
- javaBean简介和使用
- swiper autoheight选项卡嵌套出现空白问题
- learning R with swirl- Matrices and Data Frames(矩阵和数据帧)
- Java线程
- opencv生成点阵汉字图
- GO语言学习二(基础)