Доброго дня! Я не знал, где создать топик, поэтому создал здесь. Есть программа и драйвер. Программа создает новый процесс через CreateProcess, потом должна отправить его PID в драйвер. А драйвер с ним что-нибудь делает (например выводит в дебагер) Я просто не совсем понял, как работает IOCTL и DeviceIoCintrol в частности. Не могли бы вы привести мизерный код, реализующий этот функционал, просто для наглядности.
в юзермоде: Код (Text): HANDLE hDev = CreateFileW(L"\\\\.\\" DEVNAME,GENERIC_ALL,FILE_SHARE_READ|FILE_SHARE_WRITE,0,OPEN_EXISTING,0,0); if (hDev != INVALID_HANDLE_VALUE) { ULONG dwRet; ULONG InBuf[2]; InBuf[0] = (ULONG)GetCurrentThreadId(); if (!DeviceIoControl(hDev,IOCTL, InBuf,sizeof(InBuf),0,0,&dwRet,0)) { // } } В ядре обработчик - Код (Text): static NTSTATUS NTAPI DeviceControlDispatch(PDEVICE_OBJECT pDeviceObject,PIRP pIrp) { HANDLE ThreadId,ThreadHandle; PVOID ApcRoutine; NTSTATUS Status; PIO_STACK_LOCATION pIoSl = IoGetCurrentIrpStackLocation(pIrp); // request handler if (pIoSl->Parameters.DeviceIoControl.IoControlCode == IOCTL ) { if (pIoSl->Parameters.DeviceIoControl.InputBufferLength != 8) { return STATUS_INFO_LENGTH_MISMATCH; } ThreadId = ((PHANDLE)pIrp->AssociatedIrp.SystemBuffer)[0]; } } Код поскипан но основная идея думаю понятна