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);
}
'FltGetVolumeFromName'と' FltAttachVolume'は '&MiniSpyData.Filter'ではなく' MiniSpyData.Filter'でなければなりません - これは致命的なエラーの場合です。また一般的なメモとして - あなたが 'FltAttachVolume'と呼ぶものについて? fltmgrは既存のボリュームにフィルタを自動的に添付します – RbMm
ありがとうございました!それは私の間違いです。今すぐ動作します...私はPCを再起動すると、フィルタドライバは添付されません。私はサービスをチェックし、確実に実行しています... – SuperBerry
FltAttachVolume()を呼び出さない限り...しかし、DriverEntryでFltAttachVolume()を呼び出すと、一度サービス負荷がかかりますが、数秒後にブルースクリーンが再び表示されます。私はコードを再度チェックする必要があります...あなたの助けをありがとう – SuperBerry