Т.е. Возможноли из драйвера открыть другой драйвера, как в юзер-моде, что то в таком роде:
HANDLE hDrv = INVALID_HANDLE_VALUE;
hDrv = CreateFile("\\\\.\\драйвер", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
Что бы можно было работать ф-циями WriteFileEx, ReadFileEx.
Здравствуйте, Аноним, Вы писали:
А>Т.е. Возможноли из драйвера открыть другой драйвера, как в юзер-моде, что то в таком роде:
А>А>HANDLE hDrv = INVALID_HANDLE_VALUE;
А> hDrv = CreateFile("\\\\.\\драйвер", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
А>
А>Что бы можно было работать ф-циями WriteFileEx, ReadFileEx.
Первый вариант.
Открывается не драйвер, а DeviceObject этого драйвера!
Задача сводится к нахождениею этого самого DeviceObject.
Можно воспользоваться функцией ObReferenceObjectByName где первым параметром передать UNICODE_STRING имя объекта
драйвера. А потом полученому DeviceObject отправлять IRP с кодом IRP_MJ_READ, IRP_MJ_WRITE
Второй вариант
ZwCreateFile и соответсвенно ZwWriteFile и ZwReadFile
Здравствуйте, <Аноним>, Вы писали:
[skip]
А>А>HANDLE hDrv = INVALID_HANDLE_VALUE;
А> hDrv = CreateFile("\\\\.\\драйвер", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL);
А>
IoGetDeviceObjectPointer
А>Что бы можно было работать ф-циями WriteFileEx, ReadFileEx.
Вопрос как вы дутете в kernel-mode работать с этими функциями? Или вы хотите зделать тунель, как я понимаю условие что
другой драйвер поддерживает такую функциональность (чтение и запись), но не дает открывать устройство из user-mode. Сложностей не вижу если условия выполняются.
Пусто
Правда, Ложь — мне все одно — я имею свое мнение.
Если функция недокументированна — это не значит, что ее не используют все ваши конкуренты в своих продуктах.
Любой строй переходный и отрицать это значит быть закостенелым идиотом.