Сборка решения скомпилирована без ошибок, но файл .sys не создан.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Сборка решения скомпилирована без ошибок, но файл .sys не создан.

Сообщение Anonymous »

В настоящее время я работаю над драйвером мини-фильтра файловой системы в Windows. Я настроил свою среду разработки со следующим:
Инструменты разработки:
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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»