2016-05-30 19 views
5

Tôi đã viết một trình điều khiển trong Visual Studio 2013. Quá trình xây dựng đã thành công. Sau đó, tôi đã chuẩn bị một chiếc máy tính-traget và sao chép các tập tin trình điều khiển vào nó. Sau đó, tôi đã cài đặt trình điều khiển:Cách khởi động trình điều khiển tự viết

C:\Windows\system32>pnputil -a "E:\driverZeug\KmdfHelloWorldPackage\KmdfHelloWorld.inf" 
Microsoft-PnP-Dienstprogramm 

Verarbeitungsinf.:   KmdfHelloWorld.inf 
Das Treiberpaket wurde erfolgreich hinzugefügt. 
Veröffentlichter Name:   oem42.inf 


Versuche gesamt:    1 
Anzahl erfolgreicher Importe: 1 

Có vẻ như nó đã thành công. Tôi chạy DebugView trên PC nhưng bây giờ tôi không biết làm thế nào để khởi động trình điều khiển, để tôi có thể thấy một đầu ra gỡ lỗi. Tôi có một DbgPrintEx() - Tuyên bố trong mã nguồn của tôi.

Ai đó có thể cho tôi biết cách khởi động trình điều khiển này để tôi có thể xem đầu ra.

Đây là mã nguồn của trình điều khiển:

#include <ntddk.h> 
#include <wdf.h> 
DRIVER_INITIALIZE DriverEntry; 
EVT_WDF_DRIVER_DEVICE_ADD KmdfHelloWorldEvtDeviceAdd; 

NTSTATUS DriverEntry(_In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath) 
{ 
    NTSTATUS status; 
    WDF_DRIVER_CONFIG config; 

    DbgPrintEx(DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: DriverEntry\n"); 
    KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: DriverEntry\n")); 
    WDF_DRIVER_CONFIG_INIT(&config, KmdfHelloWorldEvtDeviceAdd); 
    status = WdfDriverCreate(DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, WDF_NO_HANDLE); 
    return status; 
} 

NTSTATUS KmdfHelloWorldEvtDeviceAdd(_In_ WDFDRIVER Driver, _Inout_ PWDFDEVICE_INIT DeviceInit) 
{ 
    NTSTATUS status; 
    WDFDEVICE hDevice; 
    UNREFERENCED_PARAMETER(Driver); 

    KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n")); 
    status = WdfDeviceCreate(&DeviceInit, WDF_NO_OBJECT_ATTRIBUTES, &hDevice); 
    return status; 
} 

Trả lời

2

Bạn cần phải thực hiện một EXE (testapp) bắt đầu lái xe của bạn nếu cài đặt đã được thực hiện. Bạn có thể sử dụng mã bên dưới trong ứng dụng:

SC_HANDLE schService; 
SC_HANDLE schSCManager; 

schSCManager = OpenSCManager(NULL,     // local machine 
          NULL,     // local database 
          SC_MANAGER_ALL_ACCESS // access required 
          ); 

// Open the handle to the existing service. 
schService = OpenService(SchSCManager, 
         DriverName, //name of the driver 
         SERVICE_ALL_ACCESS 
         ); 

StartService(schService,  // service identifier 
        0,    // number of arguments 
        NULL   // pointer to arguments 
       )); 

Bạn cần thêm mã theo nhu cầu của mình. Thử cái này.

Để biết thêm thông tin, tải xuống trình điều khiển mẫu và ứng dụng thử nghiệm được cung cấp bởi microsoft.

0

Bạn có thể sử dụng công cụ "sc" (điều khiển dịch vụ) có sẵn để khởi động trình điều khiển.

Cú pháp là:

sc start <name> 

Vì vậy, nếu lái xe của bạn đã được cài đặt với cái tên "KmdfHelloWorld" lệnh nên là:

sc start KmdfHelloWorld 
0

Hiện nay, tôi đang viết một GPIO khiển/điều khiển cho Windows 8.1 & Windows 10 và có sự cố tương tự. Cách dễ nhất để khởi động trình điều khiển của bạn là thiết lập và cung cấp máy tính để kiểm tra trình điều khiển và sử dụng Visual Studio để triển khai, cài đặt và khởi động trình điều khiển của bạn trên máy từ xa. Thực hành tốt để viết trình điều khiển của bạn sau đó triển khai và thử nghiệm từ xa (trên máy tính khác hoặc máy ảo chẳng hạn như VirtualBox), vì điều này làm giảm khả năng gây rối máy tính bạn đang viết mã.

Để cung cấp một máy tính, tôi đã sử dụng trang MSDN sau đây: https://msdn.microsoft.com/en-us/library/windows/hardware/dn745909?f=255&MSPPError=-2147217396

Bằng cách chạy các bài kiểm tra đóng gói sẵn, bạn có thể thực sự có VS và Windows báo cáo về tình trạng của người lái xe, có được gỡ lỗi thông tin, và thậm chí thiết lập điểm ngắt. Tin tưởng tôi, cho người mới bắt đầu đây là cách dễ nhất để làm điều này.

Ngoài ra, việc đăng ký và tạo chức năng gọi lại cho trạng thái hoạt động mặc định cũng không gây tổn hại, theo cách đó trình điều khiển của bạn thực sự làm điều gì đó trong khi chạy. Đối với điều này, hãy sử dụng số EVT_WDF_DEVICE_D0_ENTRY xác định như bạn đã làm cho số EVT_WDF_DRIVER_DEVICE_ADD.

Mã hóa hạnh phúc!

Các vấn đề liên quan