qileilove

          blog已經(jīng)轉移至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 閱讀(210) 評論(0)  編輯  收藏


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


          網(wǎng)站導航:
           
          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 彭山县| 建阳市| 慈溪市| 勐海县| 英吉沙县| 昌黎县| 墨江| 南丰县| 武胜县| 唐山市| 二连浩特市| 尼勒克县| 文山县| 醴陵市| 个旧市| 华宁县| 育儿| 林芝县| 绥棱县| 长海县| 七台河市| 舒城县| 泾川县| 合水县| 儋州市| 吉安市| 香港 | 仙游县| 榆树市| 柳林县| 西吉县| 龙山县| 霍州市| 吴堡县| 铁力市| 天柱县| 新河县| 北流市| 凤山县| 藁城市| 定州市|