Показать сообщение отдельно

  #25  
Старый 29.09.2007, 14:47
_Great_
Флудер
Регистрация: 27.12.2005
Сообщений: 2,372
С нами: 10721066

Репутация: 4360


По умолчанию

Цитата:
#define IOCTL_GETPID CTL_CODE(FILE_DEVICE_UNKNOWN, 0x01, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
лучше file_all_access

Цитата:
#ifdef DEBUG
#define DPRINT DbgPrint
#else
#define DPRINT
#endif
дурной тон. лучше KdPrint(())

Цитата:
//снимаем перехват
__asm
{
cli // запрещаем прерывания
mov eax, cr0
mov CR0Reg,eax
and eax,0xFFFEFFFF // сбросить WP bit
mov cr0, eax
}
запрещать прерывания не поможет на многопроцессорной системе. нам нужно делать KfRaiseIrql( HIGH_LEVEL )

Цитата:
VOID CreateProcessNotifyRoutine(IN HANDLE ParentId,
IN HANDLE ProcessId,
IN BOOLEAN Create)
{
DPRINT("CREATENOTIFY");
if (Create)
{
DPRINT("RUN CREATENOTIFY %d",ProcessId);
RUNPROC.parent=ProcessId;
RUNPROC.PID=ParentId;
}
}
что это за чудо и зачем оно надо

Цитата:
case IOCTL_GETPID: // Чтение PID
if (irpStack->Parameters.Read.Length < 4)
{
DPRINT("LENGTH < 4");
Irp->IoStatus.Information = 0;
status = STATUS_BUFFER_TOO_SMALL;

}
else
{
DPRINT("LENGTH OK");
Irp->IoStatus.Information = 4;
*(HANDLE *)Irp->AssociatedIrp.SystemBuffer=ProtectedPid;
status = STATUS_SUCCESS;
}
break;
С чего ты взял что длина будет в irpStack->Parameters.Read.Length ?
RTFM, она будет в irpStack->Parameters.DeviceIoControl.OutputBufferLength

А в irpStack->Parameters.Read.Length будет длина буффера при IRP_MJ_READ

В DriverEntry множество ошибок, связанных с обработкой статусов от IoCreateDevice/IoCreateSymbolicLink

Цитата:
rc = PsSetCreateProcessNotifyRoutine(*CreateProcessNoti fyRoutine, FALSE);
Что за нах? Откуда звездочка? У тебя ЭТО вообще компилируется? Сомневаюсь... сильно...
 
Ответить с цитированием