Создать именованное устройство в win32

Я могу создать именованный канал в Windows через CreateNamedPipe,

p = win32pipe.CreateNamedPipe(r'\\.\pipe\test_pipe',
    win32pipe.PIPE_ACCESS_DUPLEX,
    win32pipe.PIPE_TYPE_MESSAGE | win32pipe.PIPE_WAIT,
    1, 65536, 65536,300,None)

Это файловый объект, и, в отличие от Linux FIFO, он не находится в основной файловой системе, а в специальном пространстве имен ядра (это то, что \\.\pipe для). Теперь у меня есть устройство, которое живет на //./xillybus_read_32и хотел бы макетировать его для испытаний, то есть создать подделку, которая ведет себя так же, как она. Согласно MSDN, это пространство имен устройств Win32. Если возможно, как я могу создать подобный трубе объект там? Будет ли необходимо написать драйвер, или есть API пользовательского пространства?

(Конечно, я могу просто изменить потребляющий код для использования моего канала или решить его десятком других способов. Но мне действительно любопытно это пространство имен устройства Win32.)

1 ответ

Я думаю, что нашел это. Этот комментарий, комментарии Гарри Джонстона и некоторые просмотры WinObj привели меня к решению.

import win32pipe, win32file, win32con

win32file.DefineDosDevice(win32con.DDD_RAW_TARGET_PATH, r'test_device', r'\??\GLOBAL\pipe\test_pipe')

fileHandle = win32file.CreateFile(r"//./test_device",
                              win32file.GENERIC_READ | win32file.GENERIC_WRITE,
                              0, None,
                              win32file.OPEN_EXISTING,
                              0, None)
data = win32file.ReadFile(fileHandle, 4096)
print (data)

Что здесь происходит, так это \?? оставляет тебя в \Sessions\0\DosDevices\[LogonID], В этой папке есть символическая ссылка GLOBAL что приводит к \GLOBAL??, в котором живут названные трубы.

Почему я не могу получить доступ к пути напрямую через \\.\GLOBAL??\pipe\test_pipeи почему CreateFile и CreateNamedPipe могут найти его в \\.\pipe\test_pipeПока не знаю Я также не уверен, должен ли я сделать некоторую очистку после этого. Тем не менее, это похоже на работу.

Другие вопросы по тегам