Здравствуйте, у меня возникла не большая проблема. Написал драйвер который перехватывает NtCreateProcessEx (перехваченная функция HfCreateProcessEx, оригинальная функция DfCreateProcessEx) Получаю имя запускаемой программы (\Device\HarddiskVolume1\WINDOWS\system32\calc.exe), после чего пытаюсь открыть файл через NtOpenFile, но результатом всегда является [0xC000003B] STATUS_OBJECT_PATH_SYNTAX_BAD. Помогите пожалуйста, и если не сложно то объясните как аллоцировать память для переменных (для строки с именем файла) ото я никак не могу этого понять. Вот код: Код (Text): NTSTATUS UfOpenFile( OUT PHANDLE FileHandle, OUT PIO_STATUS_BLOCK IoStatusBlock, IN PUNICODE_STRING ObjectName, IN ACCESS_MASK DesiredAccess, IN ULONG ShareAccess, IN ULONG OpenOptions ){ OBJECT_ATTRIBUTES ObjectAttributes; InitializeObjectAttributes( &ObjectAttributes, ObjectName, /*OBJ_EXCLUSIVE*/OBJ_KERNEL_HANDLE, NULL, NULL ); return ZwOpenFile( FileHandle, DesiredAccess, &ObjectAttributes, IoStatusBlock, ShareAccess, OpenOptions ); } NTSTATUS HfCreateProcessEx( OUT PHANDLE ProcessHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL, IN HANDLE InheritFromProcessHandle, IN BOOLEAN InheritHandles, IN HANDLE SectionHandle OPTIONAL, IN HANDLE DebugPort OPTIONAL, IN HANDLE ExceptionPort OPTIONAL, IN HANDLE Unknown ){ NTSTATUS retn = 0, status = 0; char ImageFileNameBuffer[ (sizeof(USHORT)+sizeof(USHORT)+(sizeof(WCHAR)*MAX_PATH)) ]; PUNICODE_STRING ImageFileName = (PUNICODE_STRING)ImageFileNameBuffer; ULONG ReturnLength; HANDLE FileHandle; IO_STATUS_BLOCK FileIOStatusBlock; __try{ retn = DfCreateProcessEx( ProcessHandle, DesiredAccess, ObjectAttributes, InheritFromProcessHandle, InheritHandles, SectionHandle, DebugPort, ExceptionPort, Unknown ); if( NT_SUCCESS(retn) ){ status = UfQueryProcessFileName( *ProcessHandle, ImageFileNameBuffer, &ReturnLength ); if( NT_SUCCESS( status ) ){ DPRINT( "HfCreateProcessEx: [%d][%d]ImageFileName = \"%wZ\"\n", ReturnLength, ImageFileName->Length, ImageFileName ); status = UfOpenFile( &FileHandle, &FileIOStatusBlock, ImageFileName, FILE_READ_ATTRIBUTES, FILE_SHARE_READ, FILE_RANDOM_ACCESS ); if( NT_SUCCESS( status ) ){ DPRINT( "UfOpenFile: Success\n" ); }else{ DPRINT( "UfOpenFile: faiture! code: [%08X]\n", status ); } DPRINT( "HfCreateProcessEx: UfOpenFile return: %08X\n", status ); DPRINT( "HfCreateProcessEx: [%d][%d]ImageFileName = \"%wZ\"\n", ReturnLength, ImageFileName->Length, ImageFileName ); }else{ DPRINT( "HfCreateProcessEx: UfQueryProcessFileName failture! code: [%08X]\n", status ); } ZwTerminateProcess( *ProcessHandle, STATUS_ACCESS_DENIED ); }else{ DPRINT( "HfCreateProcessEx: DfCreateProcessEx failture! code: [%08X]\n", retn ); } }__except( EXCEPTION_EXECUTE_HANDLER ){ return STATUS_INVALID_PARAMETER; } return STATUS_ACCESS_DENIED; } Результат выполнения программы: (Syser) DriverEntry: Called HfCreateProcessEx: [108][98]ImageFileName = "\Device\HarddiskVolume1\WINDOWS\system32\calc.exe" UfOpenFile: faiture! code: [C000003B] HfCreateProcessEx: UfOpenFile return: C000003B HfCreateProcessEx: [108][98]ImageFileName = "??bo?????? >