注意:1.缓冲区一定要有大小!!!

· 2.遇到函数返回值为NTSTATUS类型的函数执行错误时,可以 查询对应的返回值对应得错误情况

  1. #include <ntddk.h>
  2. VOID UnloadDriver(PDRIVER_OBJECT pDriver)
  3. {
  4. DbgPrint("卸载成功\n");
  5. }
  6. NTSTATUS DriverEntry(PDRIVER_OBJECT pDriver, PUNICODE_STRING pRegPath)
  7. {
  8. UNICODE_STRING file_name = RTL_CONSTANT_STRING(L"\\??\\d:\\test.txt");
  9. NTSTATUS status = NULL;
  10. IO_STATUS_BLOCK block;
  11. OBJECT_ATTRIBUTES file;
  12. HANDLE file_handle = NULL;
  13. PWCHAR pWch = ExAllocatePool(NonPagedPool, sizeof(WCHAR)* 10);
  14. LARGE_INTEGER offset = {0};
  15. InitializeObjectAttributes(
  16. &file,
  17. &file_name,
  18. OBJ_CASE_INSENSITIVE |OBJ_KERNEL_HANDLE,
  19. NULL,
  20. NULL);
  21. status = ZwCreateFile(&file_handle,
  22. GENERIC_READ | GENERIC_WRITE,
  23. &file,
  24. &block,
  25. NULL,
  26. FILE_ATTRIBUTE_NORMAL,
  27. FILE_SHARE_READ | FILE_SHARE_WRITE,
  28. FILE_OPEN_IF,
  29. FILE_SYNCHRONOUS_IO_NONALERT | FILE_NON_DIRECTORY_FILE | FILE_RANDOM_ACCESS,
  30. NULL,
  31. 0);
  32. if (!NT_SUCCESS(status))
  33. {
  34. DbgPrint("打开文件失败");
  35. return STATUS_SUCCESS;
  36. }
  37. status = ZwReadFile(file_handle,
  38. NULL,
  39. NULL,
  40. NULL,
  41. &block,
  42. pWch,
  43. sizeof(WCHAR)* 10,
  44. &offset,
  45. NULL
  46. );
  47. if (!NT_SUCCESS(status))
  48. {
  49. DbgPrint("读取文件失败\n");
  50. return STATUS_SUCCESS;
  51. }
  52. DbgPrint("%s", pWch);
  53. ZwClose(file_handle);
  54. DbgPrint("驱动加载成功\n");
  55. pDriver->DriverUnload = UnloadDriver;
  56. }