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

Driver мониторинга - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ссылка на неразрешенный внешний символ http://www.cyberforum.ru/cpp-beginners/thread612434.html
#include <stdio.h> #include <stdlib.h> #include <conio.h> #define n 5 void InKeyboard(int a) {int i,j; printf("Vvedite elementi matritci A\n"); for (i=0;i<n;i++) for (j=0;j<n;j++)
C++ Проблаем с освобождением памяти Работаю в Visual Studio C++ Express написал вот такой простой код: int main(){ char *n; n=new char; n="Text"; delete n; return 0; } http://www.cyberforum.ru/cpp-beginners/thread612414.html
Внешний интерфейс C++
Здравствуйте, помогите написать программу с использованием внешнего интерфейса для программы: Все четные элементы целочисленного массива К(п) поместить в массив L(n), а нечетные — в массив М(п). Подсчитать количество тех и других. #include <iostream.h> #include <iomanip.h> #include <conio.h> main() { int n,ch,nech; system("chcp 1251"); system("cls");
C++ Собрать проект Seman под Windows 7
Доброго времени всем! Эксперты, помогите пожалуйста собрать проект Seman (http://sourceforge.net/scm/?type=svn&group_id=242864) под windows 7 или очертить главные шаги? Занимаюсь компьютерной лингвистикой и хочу проверить фозможности проекта в научных целях. Я сам не я C/C++ прграммист и от того пршу вашей помощи (сам конечно налегаю на доки). На данный момент скачал Bison установил,...
C++ Поиск в map и friend функция http://www.cyberforum.ru/cpp-beginners/thread612399.html
Есть класс Phone, унаследованный от ATC и TelephoneService, в классе Phone необходимо сделать функцию, которая позволяет вывести по номеру телефона название города, насколько я понимаю необходимо сделать map массив, в который будут заносится ключ(idCity) и значение(nameCity),а затем будет выполнятся поиск по ключу, который берется из 5-ти первых цифр номера абонента (numberSubscriber), также...
C++ оператор for c++ вывести все целые числа из диапазона от А до В (А<=B), оканчивающиеся на X или Y условие понятно какое но выводит все числа из диапазона, условие не затрагивается никак, не могу понять что исправить вот код #include<iostream.h> int main() { int a,b,x,y; cout<<"vvod a b"<<endl; cin>>a>>b; cout<<"vvod x y"<<endl; cin>>x>>y; if (a%10==x || b%10==y) for(int i=a; i<=b; i++) подробнее

Показать сообщение отдельно
balrak
6 / 6 / 1
Регистрация: 01.04.2012
Сообщений: 81
23.06.2012, 20:03     Driver мониторинга
помогите разобраться с драйвером


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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
#include "ntddk.h"
 
struct SYS_SERVICE_TABLE { 
    void **ServiceTable; 
    unsigned long CounterTable; 
    unsigned long ServiceLimit; 
    void **ArgumentsTable; 
}; 
 
 
 
const WCHAR devicename[]=L"\\Device\\Protector";
const WCHAR devicelink[]=L"\\DosDevices\\PROTECTOR";
 
 
KEVENT event; 
 
 
 
ULONG Index,RealCallee;
char* output;
extern struct SYS_SERVICE_TABLE* KeServiceDescriptorTable; 
 
 
//this function decides whether we should allow NtCreateSection() call to be successfull
ULONG __stdcall check(PULONG arg)
{
 
    HANDLE hand = 0 ;PFILE_OBJECT file = 0; POBJECT_HANDLE_INFORMATION info; ULONG a; char* buff;
    ANSI_STRING str; LARGE_INTEGER li; li.QuadPart = -10000;
 
//check the flags. If PAGE_EXECUTE access to the section is not requested,
//it does not make sense to be bothered about it    
if((arg[4]&0xf0)==0)return 1;
if((arg[5]&0x01000000)==0)return 1;
 
 
//get the file name via the file handle
hand = (HANDLE)arg[6];
ObReferenceObjectByHandle(hand, 0, 0, KernelMode, &file, &info);
if(!file)return 1;
RtlUnicodeStringToAnsiString(&str, &file->FileName, 1);
 
a = str.Length; 
buff = str.Buffer;
while(1)
{
    if(buff[a] == '.'){a++; break;}
    a--;
}
ObDereferenceObject(file);
 
//if it is not executable, it does not make sense to be bothered about it
//return 1
if(_stricmp(&buff[a], "exe")){RtlFreeAnsiString(&str); return 1;}
 
//now we are going to ask user's opinion. Write file name to the buffer, and wait until
//the user indicates the response (1 as a first DWORD means we can proceed)
 
//synchronize access to the buffer
KeWaitForSingleObject(&event, Executive, KernelMode, 0, 0);
 
 
// set first 2 DWORD of a buffer to zero, copy the string into the buffer, and loop
//until the user sets first DWORD to 1. The value of the second DWORD indicates user's 
//response
strcpy(&output[8], buff);
RtlFreeAnsiString(&str);
 
 
 
a = 1;
memmove(&output[0], &a, 4);
while(1)
{
KeDelayExecutionThread(KernelMode, 0, &li);
memmove(&a, &output[0], 4);
if(!a)break;
}
memmove(&a, &output[4], 4);
KeSetEvent(&event, 0, 0);
 
return a;
}
 
 
//just saves execution contect and calls check() 
_declspec(naked) Proxy()
{
 
_asm{
 
//save execution contect and calls check() -the rest depends upon the value check() returns
// if it is 1, proceed to the actual callee. Otherwise,return STATUS_ACCESS_DENIED
pushfd
pushad
mov ebx, esp
add ebx, 40
push ebx
call check
cmp eax, 1
jne block
 
//proceed to the actual callee
popad
popfd
jmp RealCallee
 
//return STATUS_ACCESS_DENIED
block:popad
mov ebx, dword ptr[esp+8]
mov dword ptr[ebx],0
mov eax, 0xC0000022L
popfd
ret 32
 
}
}
 
 
NTSTATUS DrvDispatch(IN PDEVICE_OBJECT device,IN PIRP Irp)
 
{
    UCHAR* buff = 0; ULONG a,base;
 
 
 
PIO_STACK_LOCATION loc = IoGetCurrentIrpStackLocation(Irp);
 
if(loc->Parameters.DeviceIoControl.IoControlCode == 1000)
{
buff = (UCHAR*)Irp->AssociatedIrp.SystemBuffer;
 
 
// hook service dispatch table
memmove(&Index, buff, 4);
a= 4 * Index + (ULONG)KeServiceDescriptorTable->ServiceTable;
base=(ULONG)MmMapIoSpace(MmGetPhysicalAddress((void*)a), 4, 0);
a = (ULONG)&Proxy;
 
_asm
{
mov eax, base
mov ebx, dword ptr[eax]
mov RealCallee, ebx
mov ebx, a
mov dword ptr[eax], ebx
}
 
MmUnmapIoSpace(base, 4);
 
memmove(&a, &buff[4], 4);
output=(char*)MmMapIoSpace(MmGetPhysicalAddress((void*)a), 256, 0);
}
 
 
 
Irp->IoStatus.Status = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return 0;
}
 
 
 
// nothing special
NTSTATUS DrvCreateClose(IN PDEVICE_OBJECT device, IN PIRP Irp)
 
{
    
Irp->IoStatus.Information = 0;
Irp->IoStatus.Status = 0;
IoCompleteRequest(Irp, IO_NO_INCREMENT);
return 0;
 
}
 
 
 
// nothing special -just a cleanup
void DrvUnload(IN PDRIVER_OBJECT driver)
{
UNICODE_STRING devlink;
ULONG a,base;
 
//unhook dispatch table
a = 4 * Index + (ULONG)KeServiceDescriptorTable->ServiceTable;
base = (ULONG)MmMapIoSpace(MmGetPhysicalAddress((void*)a), 4, 0);
 
_asm
{
mov eax, base
mov ebx, RealCallee
mov dword ptr[eax], ebx
}
 
MmUnmapIoSpace(base, 4);
MmUnmapIoSpace(output, 256);
 
RtlInitUnicodeString(&devlink, devicelink);
IoDeleteSymbolicLink(&devlink);
IoDeleteDevice(driver->DeviceObject);
}
 
 
//DriverEntry just creates our device - nothing special here
NTSTATUS DriverEntry(IN PDRIVER_OBJECT driver, IN PUNICODE_STRING path)
{
 
PDEVICE_OBJECT devobject = 0;
 
UNICODE_STRING devlink, devname;
 
ULONG a, b;
 
 
 
RtlInitUnicodeString(&devname, devicename);
RtlInitUnicodeString(&devlink, devicelink);
 
IoCreateDevice(driver, 256, &devname, FILE_DEVICE_UNKNOWN, 0, TRUE, &devobject);
IoCreateSymbolicLink(&devlink, &devname);
 
 
 
driver->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DrvDispatch;
driver->MajorFunction[IRP_MJ_CREATE] = DrvCreateClose;
driver->MajorFunction[IRP_MJ_CLOSE] = DrvCreateClose;
driver->DriverUnload = DrvUnload;
KeInitializeEvent(&event, SynchronizationEvent, 1);
return 0;
}
при сборке выдает 3 warning
1>d:\protector\protector.c(41) : warning C4047: 'function' : 'POBJECT_HANDLE_INFORMATION' differs in levels of indirection from 'POBJECT_HANDLE_INFORMATION *'
1>warnings in directory d:\protector
1>d:\protector\protector.c(41) : warning C4047: 'function' : 'POBJECT_HANDLE_INFORMATION' differs in levels of indirection from 'POBJECT_HANDLE_INFORMATION *'
1>d:\protector\protector.c(41) : warning C4024: 'ObReferenceObjectByHandle' : different types for formal and actual parameter 6
1>d:\protector\protector.c(41) : warning C4024: 'ObReferenceObjectByHandle' : different types for formal and actual parameter 6
1>d:\protector\protector.c(151) : warning C4022: 'MmUnmapIoSpace' : pointer mismatch for actual parameter 1
1>d:\protector\protector.c(151) : warning C4022: 'MmUnmapIoSpace' : pointer mismatch for actual parameter 1
1>d:\protector\protector.c(197) : warning C4022: 'MmUnmapIoSpace' : pointer mismatch for actual parameter 1
1>d:\protector\protector.c(197) : warning C4022: 'MmUnmapIoSpace' : pointer mismatch for actual parameter 1

В OACR выдает

warning 28155 : The function being assigned or passed should be a DRIVER_DISPATCH function: Add the declaration 'DRIVER_DISPATCH DrvDispatch;' before the current first declaration of DrvDispatch.


warning 28169 : The dispatch function 'DrvDispatch' does not have any __drv_dispatchType annotations: This can be corrected by adding appropriate __drv_dispatchType annotations to the function. Unnecessary casts can cause this warning.


Огромное спасибо за помошь
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 03:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru