qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          驅(qū)動程序測試問題

          為什么我的測試程序測試不成功?
            測試程序的CreateFile的返回值-1, GetLastError 錯(cuò)誤碼是123(文件名、目錄名或卷標(biāo)語法不正確。)
            我的驅(qū)動程序加載后用winObj是可以查看到FirstDevice的 ,測試程序運(yùn)行時(shí)就是失敗 ???
            代碼:
            驅(qū)動程序:
          #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)站導(dǎo)航:
           
          <2014年1月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627282930311
          2345678

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 隆尧县| 庆元县| 威宁| 洪江市| 鄄城县| 运城市| 兴城市| 雅江县| 滨州市| 碌曲县| 多伦县| 济南市| 龙门县| 化州市| 达日县| 临夏县| 拉萨市| 甘南县| 伊金霍洛旗| 丹凤县| 车致| 英吉沙县| 嘉善县| 太原市| 凤庆县| 溆浦县| 和平区| 平远县| 澜沧| 高要市| 景宁| 蕲春县| 旬阳县| 宝山区| 康定县| 昌宁县| 鄂托克前旗| 仪陇县| 和政县| 平乡县| 溧水县|