2017-12-21 23 views
0

ドライバサービスの起動中にボリュームを接続しようとしましたが、「」があります。 (FltStartFilteringは呼び出されていません)。 "とすぐに私はブルースクリーンを持っています。私はすでにをFltStartFilteringと呼んでいますが、なぜうまくいかなかったのか分かりません。"FltStartFilteringが呼び出されていません" DriverEntryにボリュームを接続しようとしたときのエラー

status = FltRegisterFilter(DriverObject, 
     &FilterRegistration, 
     &MiniSpyData.Filter); 

    if (!NT_SUCCESS(status)) { 

     leave; 
    } 




    status = FltBuildDefaultSecurityDescriptor(&sd, 
     FLT_PORT_ALL_ACCESS); 

    if (!NT_SUCCESS(status)) { 
     leave; 
    } 

    RtlInitUnicodeString(&uniString, WOODY_PORT_NAME); 

    InitializeObjectAttributes(&oa, 
     &uniString, 
     OBJ_KERNEL_HANDLE | OBJ_CASE_INSENSITIVE, 
     NULL, 
     sd); 

    status = FltCreateCommunicationPort(MiniSpyData.Filter, 
     &MiniSpyData.ServerPort, 
     &oa, 
     NULL, 
     SpyConnect, 
     SpyDisconnect, 
     SpyMessage, 
     1); 

    FltFreeSecurityDescriptor(sd); 



    if (!NT_SUCCESS(status)) { 
     leave; 
    } 

    // 
    // We are now ready to start filtering 
    // 

    status = FltStartFiltering(MiniSpyData.Filter); 

    if (!NT_SUCCESS(status)) { 

     FltUnregisterFilter(MiniSpyData.Filter); 
    } 
    else { 
    //Here is what I want to attach 
     RtlInitUnicodeString(&uniString, L"\\Device\\HarddiskVolume1"); 
     PFLT_VOLUME vol; 
     FltGetVolumeFromName(&MiniSpyData.Filter, &uniString, &vol); 
     status = FltAttachVolume(&MiniSpyData.Filter, vol, NULL, NULL); 
    } 
+0

'FltGetVolumeFromName'と' FltAttachVolume'は '&MiniSpyData.Filter'ではなく' MiniSpyData.Filter'でなければなりません - これは致命的なエラーの場合です。また一般的なメモとして - あなたが 'FltAttachVolume'と呼ぶものについて? fltmgrは既存のボリュームにフィルタを自動的に添付します – RbMm

+0

ありがとうございました!それは私の間違いです。今すぐ動作します...私はPCを再起動すると、フィルタドライバは添付されません。私はサービスをチェックし、確実に実行しています... – SuperBerry

+0

FltAttachVolume()を呼び出さない限り...しかし、DriverEntryでFltAttachVolume()を呼び出すと、一度サービス負荷がかかりますが、数秒後にブルースクリーンが再び表示されます。私はコードを再度チェックする必要があります...あなたの助けをありがとう – SuperBerry

答えて

0
RtlInitUnicodeString(&uniString, L"\\Device\\HarddiskVolume1"); 
PFLT_VOLUME vol; 
FltGetVolumeFromName(&MiniSpyData.Filter, &uniString, &vol); 
status = FltAttachVolume(&MiniSpyData.Filter, vol, NULL, NULL); 

上の部分だけでだけでなく間違って必要とされていません:以下

は私のコードがあります。 私に説明してみましょう:あなたはそれをPFLT_FILTERを与えている最初のパラメータとして、私はあなたのコードで表示されるものと

  1. FltGetVolumeFromNameは日常
  2. * PFLT_FILTERを取る手動に接続する必要はありません。インスタンスコンテキスト登録フラグにFLTFL_INSTANCE_SETUP_MANUAL_ATTACHMENTを設定しないかぎり、自動的にインスタンスコンテキストにアタッチされ呼び出されるため、詳細はthisを参照してください。
  3. ボリュームがまだ存在しない可能性があり、潜在的なBSODが存在しない可能性があるため、ブート時にこの処理を実行したくない場合があります。

幸運。

関連する問題