qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          驅動程序測試問題

          為什么我的測試程序測試不成功?
            測試程序的CreateFile的返回值-1, GetLastError 錯誤碼是123(文件名、目錄名或卷標語法不正確。)
            我的驅動程序加載后用winObj是可以查看到FirstDevice的 ,測試程序運行時就是失敗 ???
            代碼:
            驅動程序:
          #include "ntddk.h"
          NTSTATUS CreateDevice(PDRIVER_OBJECT pDriverObject);
          NTSTATUS CreateComplateRoutine(PDEVICE_OBJECT pDeviceObj, PIRP pIrp);
          NTSTATUS ReadComplateRoutine(PDEVICE_OBJECT pDeviceObj, PIRP pIrp);
          NTSTATUS WriteComplateRoutine(PDEVICE_OBJECT pDeviceObj, PIRP pIrp);
          NTSTATUS CloseComplateRoutine(PDEVICE_OBJECT pDeviceObj, PIRP pIrp);
          VOID MyDriverUnoad(PDRIVER_OBJECT pDriverObject);
          NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject,PUNICODE_STRING pRegistryPath)
          {
          NTSTATUS status;
          status = CreateDevice(pDriverObject);
          KdPrint(("CreateDevice."));
          if (!NT_SUCCESS(status))
          {
          KdPrint(("Create device faild."));
          }
          else
          {
          KdPrint(("Create device success."));
          KdPrint(("%wZ", pRegistryPath));
          }
          pDriverObject->MajorFunction[IRP_MJ_CREATE] = CreateComplateRoutine;
          pDriverObject->MajorFunction[IRP_MJ_READ] = ReadComplateRoutine;
          pDriverObject->MajorFunction[IRP_MJ_WRITE] = WriteComplateRoutine;
          pDriverObject->MajorFunction[IRP_MJ_CLOSE] = CloseComplateRoutine;
          pDriverObject->DriverUnload = MyDriverUnoad;
          return STATUS_SUCCESS;
          }
          NTSTATUS CreateDevice(PDRIVER_OBJECT pDriverObject)
          {
          NTSTATUS status;
          PDEVICE_OBJECT pDevObj;
          UNICODE_STRING usDevName;
          UNICODE_STRING usSymName;
          RtlInitUnicodeString(&usDevName, L"\\Device\\FirstDevice");
          RtlInitUnicodeString(&usSymName, L"\\??\\FirstDevice");;
          status = IoCreateDevice(pDriverObject,
          0,
          &usDevName,
          FILE_DEVICE_UNKNOWN,
          0,
          TRUE,
          &pDevObj);
          pDevObj->Flags |= DO_BUFFERED_IO;
          if (!NT_SUCCESS(status))
          {
          KdPrint(("IoCreateDevice faild."));
          return status;
          }
          status = IoCreateSymbolicLink(&usSymName, &usDevName);
          if (!NT_SUCCESS(status))
          {
          KdPrint(("IoCreateSymbolicLink faild."));
          IoDeleteDevice(pDevObj);
          return status;
          }
          return STATUS_SUCCESS;
          }
          NTSTATUS CreateComplateRoutine (PDEVICE_OBJECT pDeviceObj, PIRP pIrp)
          {
          NTSTATUS status;
          status = STATUS_SUCCESS;
          KdPrint(("Create"));
          pIrp->IoStatus.Status = status;
          pIrp->IoStatus.Information = 0;
          IoCompleteRequest(pIrp, IO_NO_INCREMENT);
          return status;
          }
          NTSTATUS ReadComplateRoutine (PDEVICE_OBJECT pDeviceObj, PIRP pIrp)
          {
          NTSTATUS status;
          status = STATUS_SUCCESS;
          return status;
          }
          NTSTATUS WriteComplateRoutine (PDEVICE_OBJECT pDeviceObj, PIRP pIrp)
          {
          NTSTATUS status;
          status = STATUS_SUCCESS;
          return status;
          }
          NTSTATUS CloseComplateRoutine (PDEVICE_OBJECT pDeviceObj, PIRP pIrp)
          {
          NTSTATUS status;
          status = STATUS_SUCCESS;
          return status;
          }
          VOID MyDriverUnoad(PDRIVER_OBJECT pDriverObject)
          {
          UNICODE_STRING usSymName;
          RtlInitUnicodeString(&usSymName, L"\\??\\FirstDevice");
          if (pDriverObject->DeviceObject != NULL)
          {
          IoDeleteSymbolicLink(&usSymName);
          IoDeleteDevice(pDriverObject->DeviceObject);
          KdPrint(("Delete device success!"));
          }
          }
           測試程序:
            代碼:
          void CTestMyFirstDriverDlg::OnBnClickedButton1()
          {
          // TODO: Add your control notification handler code here
          HANDLE hFile = CreateFile(L"\\??\\FirstDevice",
          FILE_ALL_ACCESS,
          FILE_SHARE_READ,
          NULL,
          OPEN_EXISTING,
          FILE_ATTRIBUTE_NORMAL,NULL);
          if (hFile == INVALID_HANDLE_VALUE)
          {
          int err = GetLastError();
          MessageBox(L"Create File error!");
          }
          CloseHandle(hFile);
          return;
          }

          posted on 2014-01-24 16:13 順其自然EVO 閱讀(212) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 鲁甸县| 额济纳旗| 攀枝花市| 徐闻县| 上犹县| 湖南省| 濮阳县| 那坡县| 康保县| 海门市| 壤塘县| 宕昌县| 漠河县| 镇坪县| 巴里| 田林县| 西和县| 财经| 嘉义县| 丹阳市| 辽中县| 长治市| 互助| 中宁县| 宁远县| 沾化县| 木兰县| 布尔津县| 彭水| 通江县| 涡阳县| 教育| 木兰县| 崇义县| 中江县| 呼伦贝尔市| 綦江县| 夏津县| 兰考县| 天全县| 封开县|