8

Win7DDKのカーネルドライバーの例の1つで遊んでいます。コンパイルを変更して*.sysファイルをビルドできます。INF(デバイスマネージャーまたはdevconを使用)またはサービスコントロールマネージャーを直接使用してインストールすることもできます。ただし、次の変更を行って更新された* .sysファイルを生成すると、この新しいファイルと現在停止しているドライバーの間に競合が発生しているようです(Servcie Control Managerの「stop」や「deleteservice」などを使用してみました)。再起動すると、新しいドライバーをインストールして正常に実行できます。同様に、デバイスマネージャでアンインストールを選択すると、Windowsから再起動するように求められます。

では、どうすればカーネルドライバーへの増分変更を簡単にテストできるでしょうか。ありがとう

4

4 に答える 4

5

Setup API のログを確認することから始めてください: http://msdn.microsoft.com/en-us/library/ff550887%28v=VS.85%29.aspx

devcon が再起動を要求する場合は、DDK のコードを見て、再起動を求めている理由をデバッグし、同様に問題を掘り下げることができます。

于 2011-01-30T23:35:11.467 に答える
4

はい。 sc stop <driver name>ドライバーを停止する必要があります。ドライバーが特定の PnP devnode に関連付けられている場合は、devnode が削除された後にアンロードする必要があります。

于 2011-01-30T18:39:20.380 に答える
3

ドライバーをアンロードできるようにしたい場合は、ドライバーがアンロードされるたびに基本的に実行される関数を設定する必要があります。ほとんどの場合、割り当てられたバッファーと、ライフサイクル中に「生きている」可能性のあるその他のリソースを解放するコードを配置します。ドライバーの コード例を次に示します。

VOID  Unload(IN  PDRIVER_OBJECT  pDriverObject) { 
                 //do whatever you like here
                //this deletes the device
        IoDeleteDevice( pDriverObject->DeviceObject);


    return;
}

NTSTATUS  DriverEntry(IN  PDRIVER_OBJECT  pDriverObject,  IN  PUNICODE_STRING  regPath) { 


    //initialize your driver and the major function array 

//set the unload function 
    pDriverObject->DriverUnload  =  &Unload; 
}
于 2011-02-14T04:11:14.560 に答える