免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

驱动文件操作

  1. #include "ntddk.h"

  2. #define PAGEDCODE code_seg("PAGE")
  3. #define LOCKEDCODE code_seg()
  4. #define INITCODE code_seg("INIT")

  5. #define PAGEDDATA data_seg("PAGE")
  6. #define LOCKEDDATA data_seg()
  7. #define INITDATA data_seg("INIT")


  8. #pragma PAGEDCODE
  9. NTSTATUS MyCreateFile()
  10. {
  11.         NTSTATUS Status;
  12.         HANDLE hFile;
  13.         UNICODE_STRING usFileName;
  14.         OBJECT_ATTRIBUTES FileObjAttr;
  15.         IO_STATUS_BLOCK IoStatusBlock;

  16.         RtlInitUnicodeString(&usFileName, L"\\??\\c:\\1.txt");

  17.         memset(&FileObjAttr, 0, sizeof(OBJECT_ATTRIBUTES));

  18.         InitializeObjectAttributes(&FileObjAttr, &usFileName, OBJ_CASE_INSENSITIVE, NULL, NULL);

  19.         Status = ZwCreateFile(&hFile, GENERIC_ALL, &FileObjAttr, &IoStatusBlock, NULL, FILE_ATTRIBUTE_NORMAL,
  20.                 FILE_SHARE_READ,  FILE_OPEN_IF, FILE_NON_DIRECTORY_FILE | FILE_SYNCHRONOUS_IO_NONALERT, NULL, 0);
  21.        
  22.         if (!NT_SUCCESS(Status))
  23.         {
  24.                 return Status;
  25.         }

  26.         KdPrint(("create file succcess!"));

  27.         ZwClose(hFile);

  28.         return Status;
  29. }


  30. #pragma PAGEDCODE
  31. NTSTATUS MyOpenFile()
  32. {
  33.         NTSTATUS Status;
  34.         HANDLE hFile;
  35.         UNICODE_STRING usFileName;
  36.         OBJECT_ATTRIBUTES FileObjAttr;
  37.         IO_STATUS_BLOCK IoStatusBlock;

  38.         FILE_BASIC_INFORMATION fbi;

  39.         LARGE_INTEGER number;

  40.         PCHAR pBuffer = (PCHAR)ExAllocatePool(PagedPool, 20);

  41.         RtlInitUnicodeString(&usFileName, L"\\??\\c:\\1.txt");

  42.         memset(&FileObjAttr, 0, sizeof(OBJECT_ATTRIBUTES));

  43.         InitializeObjectAttributes(&FileObjAttr, &usFileName, OBJ_CASE_INSENSITIVE, NULL, NULL);

  44.         Status = ZwOpenFile(&hFile, GENERIC_ALL, &FileObjAttr, &IoStatusBlock, FILE_SHARE_READ, FILE_NON_DIRECTORY_FILE);

  45.         if (!NT_SUCCESS(Status))
  46.         {
  47.                 KdPrint(("open file faild! status:0x%X", Status));
  48.                 return Status;
  49.         }

  50.         KdPrint(("open file succcess!"));

  51.         Status = ZwQueryInformationFile(hFile, &IoStatusBlock, &fbi,
  52.                 sizeof(FILE_BASIC_INFORMATION), FileBasicInformation);

  53.         if (!NT_SUCCESS(Status))
  54.         {
  55.                 KdPrint(("Error code: 0x%X",Status));
  56.                 ZwClose(hFile);
  57.                 return Status;
  58.         }

  59.         //fbi.FileAttributes |= FILE_ATTRIBUTE_READONLY;

  60.         Status = ZwSetInformationFile(hFile, &IoStatusBlock, &fbi,
  61.                 sizeof(FILE_BASIC_INFORMATION), FileBasicInformation);

  62.         if (!NT_SUCCESS(Status))
  63.         {
  64.                 KdPrint(("Error code: 0x%X",Status));
  65.                 ZwClose(hFile);
  66.                 return Status;
  67.         }

  68.         number.QuadPart = 0;
  69.         Status = ZwReadFile(hFile, NULL, NULL, NULL, &IoStatusBlock, pBuffer, 8, &number, NULL);

  70.         if (!NT_SUCCESS(Status))
  71.         {
  72.                 KdPrint(("Error code: 0x%X",Status));
  73.                 ExFreePool(pBuffer);
  74.                 ZwClose(hFile);
  75.                 return Status;
  76.         }

  77.         KdPrint(("%s", pBuffer));

  78.         RtlCopyMemory(pBuffer, "12345678901234567890", 20);

  79.         Status = ZwWriteFile(hFile, NULL, NULL, NULL, &IoStatusBlock, pBuffer, 20, &number, NULL);

  80.         if (!NT_SUCCESS(Status))
  81.         {
  82.                 KdPrint(("Error code: 0x%X",Status));
  83.                 ExFreePool(pBuffer);
  84.                 ZwClose(hFile);
  85.                 return Status;
  86.         }

  87.         ExFreePool(pBuffer);
  88.         ZwClose(hFile);

  89.         return Status;
  90. }


  91. #pragma PAGEDCODE
  92. VOID MyDriverUnload(IN PDRIVER_OBJECT pDriverObject)
  93. {

  94.         KdPrint(("DriverEntry unLoading...\n"));

  95. }



  96. #pragma INITCODE
  97. NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING RegistryPath)
  98. {
  99.         NTSTATUS status = STATUS_SUCCESS;

  100.         MyCreateFile();       

  101.         pDriverObject->DriverUnload = MyDriverUnload;
  102.         return status;
  103. }
复制代码

返回列表