Форум программистов, компьютерный форум CyberForum.ru

Работа с указателем - C++

Восстановить пароль Регистрация
 
balrak
6 / 6 / 1
Регистрация: 01.04.2012
Сообщений: 81
04.07.2012, 22:02     Работа с указателем #1
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include <ntddk.h>
NTSTATUS PsLookupProcessByProcessId(__in   HANDLE ProcessId,
                                    __out  PEPROCESS *Process);
 
static VOID LoadImageNotifyRoutine( PUNICODE_STRING FullImageName, HANDLE ProcessId, PIMAGE_INFO ImageInfo);
 
NTSTATUS ObOpenObjectByPointer(__in      PVOID Object,
                               __in      ULONG HandleAttributes,
                               __in_opt  PACCESS_STATE PassedAccessState,
                               __in      ACCESS_MASK DesiredAccess,
                               __in_opt  POBJECT_TYPE ObjectType,
                               __in      KPROCESSOR_MODE AccessMode,
                               __out     PHANDLE Handle);
 
 
VOID LoadImageNotifyRoutine( PUNICODE_STRING FullImageName, HANDLE ProcessId, PIMAGE_INFO ImageInfo)
{
    HANDLE hProcess = NULL;
    NTSTATUS status;
    PEPROCESS peProcess;
    PWCHAR path;
    USHORT length;
    
    length = (FullImageName->Length) / 2;
    path = FullImageName->Buffer;
    if (path[length - 1] == 'e' )
    {
        path += 10;
        DbgPrint(path);
        DbgBreakPoint();
        status = PsLookupProcessByProcessId(ProcessId, &peProcess);
        if (status != STATUS_SUCCESS)
            DbgPrint(("Err PsLookupProcessByProcessId\n"));
        DbgPrint("Process ID: %d",ProcessId);
        DbgPrint("Full Name: %wZ",FullImageName);
        
        status = ObOpenObjectByPointer(peProcess, OBJ_KERNEL_HANDLE,
                                        NULL, DELETE, NULL, KernelMode,
                                        &hProcess);
        if(status != STATUS_SUCCESS)
            DbgPrint("ObOpenObjectByPointer error");
        ObfDereferenceObject(peProcess);
        
        status = ZwTerminateProcess(hProcess, STATUS_SUCCESS);
        if(status)
            DbgPrint("ZwTerminateProcess error /n");
        ZwClose(hProcess);
    }
 
}
 
 
VOID UnloadRoutine(IN PDRIVER_OBJECT DriverObject)
{
    PsRemoveLoadImageNotifyRoutine(  LoadImageNotifyRoutine );
    DbgPrint("Unload!\n");
}
 
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,  IN PUNICODE_STRING RegistryPath)
{
    PsSetLoadImageNotifyRoutine( LoadImageNotifyRoutine );
    DriverObject->DriverUnload = UnloadRoutine;
    DbgPrint("Driver loaded");
    
    return STATUS_SUCCESS; 
 
}
правильно я понимаю ?
path = FullImageName->Buffer;
path указывает на адрес в памяти такой как у Buffer
как мне выделить последнее слово(имя файла) ?

path += 10;
DbgPrint(path);
почему выводится только символ r?
спасибо за помошь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2012, 22:02     Работа с указателем
Посмотрите здесь:

C++ Работа с указателем на void *
Работа с указателем на массив в функции (!!!) C++
C++ Работа с указателем.
C++ Цикл с указателем
C++ Переделать функцию c указателем на int, на функцию с указателем на void
C++ Работа с указателем на двумерный массив
В чем разница между указателем и указателем на указатель? C++
C++ Работа с указателем из main в функции

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MikeSoft
Эксперт C++
 Аватар для MikeSoft
3782 / 1766 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
05.07.2012, 16:56     Работа с указателем #2
Цитата Сообщение от balrak Посмотреть сообщение
почему выводится только символ r?
Выводится символ, который хранится по адресу указателя.
Функция DbgPrint поддерживает аргументы параметров форматирования, идентичные printf...
Поэтому, попробуйте явно указать формат: "%s", path
balrak
6 / 6 / 1
Регистрация: 01.04.2012
Сообщений: 81
05.07.2012, 20:30  [ТС]     Работа с указателем #3
MikeSoft, спасибо
а вы не знаете почему система виснет после остановки драйвера?
Yandex
Объявления
05.07.2012, 20:30     Работа с указателем
Ответ Создать тему
Опции темы

Текущее время: 18:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru