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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
balrak
6 / 6 / 1
Регистрация: 01.04.2012
Сообщений: 81
#1

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

04.07.2012, 22:02. Просмотров 646. Ответов 2
Метки нет (Все метки)

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++):

Работа с указателем. - C++
Доброе время суток. При чтении из файла вроде все нормально, но когда я пытаюсь вручную установить указатель, в нужную позицию, и считать...

Работа с указателем - C++
Есть такой указатель: char *s=&quot;n1=1&amp;n2=2&amp;name=test&amp;sername=test2&quot;; Нужно выделить с этой стоки значение name, то есть &quot;test&quot; и...

Работа с константным указателем - C++
Ребят, добрый всем вечер!!! Помогите пожалуйста разобраться с задачей. есть константный указатель на строку LPCSTR FileName =...

Работа с указателем на void * - C++
Добрый всем день. Помогите пожалуйста вот по какому вопросу. Имеется некая функция: void* str_replace( const char str ) { ...

Работа с указателем на функцию - C++
Пытаюсь сделать указатель, принимающий строку и возвращающий вектор интов, не получается с присвоением результата из указателя в переменную...

В чем разница между указателем и указателем на указатель? - C++
int x, *p, *q; x=10; p=&amp;x; q=p; cout&lt;&lt;*q; int x, *p, **q; x=10; p=&amp;x; q=&amp;p;

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MikeSoft
Эксперт С++
3793 / 1775 / 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, спасибо
а вы не знаете почему система виснет после остановки драйвера?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.07.2012, 20:30
Привет! Вот еще темы с ответами:

Работа с указателем на массив в функции (!!!) - C++
Я написал программу по сортировке строк из файла, который на жёстком, прога отлично работает, может показаться абсурдом, но я не понял вот...

Работа с указателем из main в функции - C++
Всем доброе утро.) Делал задание по односвязным спискам и столкнулся с проблемкой. Передаю конец списка по указателю в функция и...

Работа с указателем на двумерный массив - C++
Добрый день. Изучая тему указатели, столкнулся с проблемой - никак не могу понять как работать с указателем на двумерный массив. Поиск...

Медленнее ли индексация массива, чем работа с указателем? - C++
Преподаватель донимает меня, что я использую индексацию для работы с массивами, вместо того, чтобы использовать смещение и разъименовывание...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru