Инструменты разработки:
Visual Studio (последняя версия)
Набор драйверов Windows (WDK)
Windows SDK
Подробности настройки:
Я настроил пути Include и Lib в свойствах проекта так, чтобы они указывали на каталоги WDK.
Мой проект строится без ошибки.
Однако, несмотря на успешную сборку, файл .sys не создается в выходном каталоге. Ниже приведен код, который я использую:
Код: Выделить всё
C Code :- Код: Выделить всё
PFLT_FILTER FilterHandle = NULL;
NTSTATUS MiniUnload(FLT_FILTER_UNLOAD_FLAGS Flags);
FLT_POSTOP_CALLBACK_STATUS MiniPostCreate(
PFLT_CALLBACK_DATA Data,
PCFLT_RELATED_OBJECTS FltObjects,
PVOID* CompletionContext,
FLT_POST_OPERATION_FLAGS Flags
);
FLT_PREOP_CALLBACK_STATUS MiniPreCreate(
PFLT_CALLBACK_DATA Data,
PCFLT_RELATED_OBJECTS FltObjects,
PVOID* CompletionContext
);
FLT_PREOP_CALLBACK_STATUS MiniPreWrite(
PFLT_CALLBACK_DATA Data,
PCFLT_RELATED_OBJECTS FltObjects,
PVOID* CompletionContext
);
// Callback array
const FLT_OPERATION_REGISTRATION Callbacks[] = {
{IRP_MJ_CREATE, 0, MiniPreCreate, MiniPostCreate},
{IRP_MJ_WRITE, 0, MiniPreWrite, NULL},
{IRP_MJ_OPERATION_END}
};
// Filter registration structure
const FLT_REGISTRATION FilterRegistration = {
sizeof(FLT_REGISTRATION), // Size
FLT_REGISTRATION_VERSION, // Version
0, // Flags
NULL, // Context
Callbacks, // Operation callbacks
MiniUnload, // Unload callback
NULL, // Instance setup callback
NULL, // Instance query teardown callback
NULL, // Instance teardown start callback
NULL, // Instance teardown complete callback
NULL, // Generate file name callback
NULL, // Normalize name component callback
NULL, // Normalize context cleanup callback
NULL // Transaction callbacks
};
NTSTATUS MiniUnload(FLT_FILTER_UNLOAD_FLAGS Flags)
{
KdPrint(("Driver unloaded \r\n"));
FltUnregisterFilter(FilterHandle);
return STATUS_SUCCESS;
}
FLT_POSTOP_CALLBACK_STATUS MiniPostCreate(
PFLT_CALLBACK_DATA Data,
PCFLT_RELATED_OBJECTS FltObjects,
PVOID* CompletionContext,
FLT_POST_OPERATION_FLAGS Flags
)
{
KdPrint(("Post create is running \r\n"));
return FLT_POSTOP_FINISHED_PROCESSING;
}
FLT_PREOP_CALLBACK_STATUS MiniPreCreate(
PFLT_CALLBACK_DATA Data,
PCFLT_RELATED_OBJECTS FltObjects,
PVOID* CompletionContext
)
{
PFLT_FILE_NAME_INFORMATION FileNameInfo;
NTSTATUS status;
WCHAR Name[200] = { 0 };
status = FltGetFileNameInformation(
Data,
FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT,
&FileNameInfo
);
if (NT_SUCCESS(status)) {
status = FltParseFileNameInformation(FileNameInfo);
if (NT_SUCCESS(status)) {
if (FileNameInfo->Name.MaximumLength < 260) {
RtlCopyMemory(Name, FileNameInfo->Name.Buffer, FileNameInfo->Name.MaximumLength);
KdPrint(("Create file: %ws \r\n", Name));
}
}
FltReleaseFileNameInformation(FileNameInfo);
}
return FLT_PREOP_SUCCESS_WITH_CALLBACK;
}
FLT_PREOP_CALLBACK_STATUS MiniPreWrite(
PFLT_CALLBACK_DATA Data,
PCFLT_RELATED_OBJECTS FltObjects,
PVOID* CompletionContext
)
{
PFLT_FILE_NAME_INFORMATION FileNameInfo;
NTSTATUS status;
WCHAR Name[200] = { 0 };
status = FltGetFileNameInformation(
Data,
FLT_FILE_NAME_NORMALIZED | FLT_FILE_NAME_QUERY_DEFAULT,
&FileNameInfo
);
if (NT_SUCCESS(status)) {
status = FltParseFileNameInformation(FileNameInfo);
if (NT_SUCCESS(status)) {
if (FileNameInfo->Name.MaximumLength < 260) {
RtlCopyMemory(Name, FileNameInfo->Name.Buffer, FileNameInfo->Name.MaximumLength);
_wcsupr(Name);
if (wcsstr(Name, L"OPENME.TXT") != NULL) {
KdPrint(("Write file: %ws blocked \r\n", Name));
Data->IoStatus.Status = STATUS_INVALID_PARAMETER;
Data->IoStatus.Information = 0;
FltReleaseFileNameInformation(FileNameInfo);
return FLT_PREOP_COMPLETE;
}
KdPrint(("Create file: %ws \r\n", Name));
}
}
FltReleaseFileNameInformation(FileNameInfo);
}
return FLT_PREOP_SUCCESS_NO_CALLBACK;
}
NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
{
NTSTATUS status;
status = FltRegisterFilter(DriverObject, &FilterRegistration, &FilterHandle);
if (NT_SUCCESS(status)) {
status = FltStartFiltering(FilterHandle);
if (!NT_SUCCESS(status)) {
FltUnregisterFilter(FilterHandle);
}
}
return status;
}
Код: Выделить всё
INF fileКод: Выделить всё
[Version]
Signature = "$Windows NT$"
Class = "ActivityMonitor"
ClassGuid = {b86dff51-a31e-4bac-b3cf-e8cfe75c9fc2}
Provider = "HelloWorld Corporation"
DriverVer =
CatalogFile = HelloWorld.cat
[DestinationDirs]
DefaultDestDir = 12
MiniFilter.DriverFiles = 12 ; %windir%\system32\drivers
[DefaultInstall]
OptionDesc = %ServiceDescription%
CopyFiles = MiniFilter.DriverFiles
[DefaultInstall.Services]
AddService = %ServiceName%,,MiniFilter.Service
[DefaultUninstall]
DelFiles = MiniFilter.DriverFiles
[DefaultUninstall.Services]
DelService = %ServiceName%,0x200
[MiniFilter.Service]
DisplayName = "HelloWorld Service"
Description = "HelloWorld Mini-Filter Driver"
ServiceBinary = %12%\HelloWorld.sys
Dependencies = "FltMgr"
ServiceType = 2
StartType = 3
ErrorControl = 1
LoadOrderGroup = "FSFilter Activity Monitor"
AddReg = MiniFilter.AddRegistry
[MiniFilter.AddRegistry]
HKR,,"DebugFlags",0x00010001,0x0
HKR,,"SupportedFeatures",0x00010001,0x3
HKR,"Instances","DefaultInstance",0x00000000,%DefaultInstance%
HKR,"Instances\"%Instance1.Name%,"Altitude",0x00000000,%Instance1.Altitude%
HKR,"Instances\"%Instance1.Name%,"Flags",0x00010001,%Instance1.Flags%
[MiniFilter.DriverFiles]
HelloWorld.sys
[SourceDisksFiles]
HelloWorld.sys = 1,,
[SourceDisksNames]
1 = %DiskId1%,,,
[Strings]
ManufacturerName = "HelloWorld Corporation"
ServiceDescription = "HelloWorld Mini-Filter Driver"
ServiceName = "HelloWorld"
DriverName = "HelloWorld"
DiskId1 = "HelloWorld Device Installation Disk"
DefaultInstance = "HelloWorld Instance"
Instance1.Name = "HelloWorld Instance"
Instance1.Altitude = "371000"
Instance1.Flags = 0x0
- Убедился, что тип драйвера выбран в свойствах проекта в разделе «Свойства конфигурации» > «Драйвер». Настройки.
- Проверено, что в качестве целевой платформы выбран «Рабочий стол» в разделе «Свойства конфигурации» > «Общие».
Несмотря на то, что сборка завершается без ошибок, файл .sys не отображается в Папка $(OutDir). Я подозреваю, что это может быть проблема с конфигурацией или недосмотр в настройке проекта.
В чем может быть причина этой проблемы и как я могу гарантировать создание файла .sys?
п>
Подробнее здесь: https://stackoverflow.com/questions/793 ... le-created
Мобильная версия