Windows简单驱动编程(二):内核中文件创建和写入

驱动中对文件的创建和写入,涉及对象的创建和初始化。

有个坑:原以为下面这三行代码可以方便自己调试,能够自动区分调试状态和非调试状态,结果被坑了一下,如果直接加载驱动,会蓝屏。调试模式下不蓝。。所以,如果不调试的话得注掉。

#if DBG:
    _asm int 3;
#endif // DBG:

驱动关于文件的简单创建和写入代码如下:

#include 

void Unload(PDRIVER_OBJECT driver)
{
	DbgPrint("unload driver success.....\n");
}

NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{

//#if DBG:
//	_asm int 3;
//#endif // DBG:
	DbgPrint("load driver success.....\n");
	HANDLE hFile = NULL;
	IO_STATUS_BLOCK ioStatus;
	NTSTATUS ntStatus;

	//创建对象
	OBJECT_ATTRIBUTES oa;
	UNICODE_STRING file_path;
	RtlInitUnicodeString(&file_path, L"\\??\\c:\\test.log");
	//初始化对象
	InitializeObjectAttributes(&oa, &file_path, OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, NULL, NULL);

	//创建文件
	ntStatus = ZwCreateFile(
		&hFile,
		GENERIC_READ | GENERIC_WRITE,
		&oa, 
		&ioStatus,
		NULL,
		FILE_ATTRIBUTE_NORMAL,
		FILE_SHARE_READ,
		FILE_OPEN_IF,
		FILE_NON_DIRECTORY_FILE|FILE_RANDOM_ACCESS|FILE_SYNCHRONOUS_IO_NONALERT,
		NULL,
		0);

	//写文件
	ntStatus = ZwWriteFile(
		hFile,
		NULL,
		NULL,
		NULL,
		&ioStatus,
		file_path.Buffer,
		file_path.Length,
		NULL,
		NULL
	);
	ZwClose(hFile);
	DbgPrint("create file success.....\n");
	driver->DriverUnload = Unload;
	return STATUS_SUCCESS;

}

 

你可能感兴趣的:(Windows内核)