Требуется протокол сигнализации Windows waitfor.exe

482
fsteff

В Windows есть команда waitFor.exe, доступная для использования в пакетном режиме и PowerShell (и на любом другом языке, который может вызывать исполняемый файл), который позволяет отправлять или ожидать сигнал в системе, что позволяет синхронизировать выполнение по сети, хотя он также отлично работает на одном компьютере.

Это очень удобно, но из-за отсутствия хорошей документации в основном неправильно вставлять паузу в пакетные файлы, используя опцию тайм-аута.

Единственная документация, которую я могу найти, - это: https://technet.microsoft.com/en-us/library/cc731613(v=ws.11).aspx, которая обеспечивает очень простое использование для конкретной команды waitFor.exe. в Windows - но ничего не говорит о том, как это на самом деле реализовано, и о том, как я гарантирую, что он будет работать (== не блокируется каким-либо брандмауэром) в данной сети.

Я хотел бы иметь возможность встроить отправку и получение этих сигналов в свой собственный код, но не могу найти ничего о том, как это сделать - даже самый простой протокол и формат пакета не доступны.

Мои вопросы,

  1. Какой сетевой протокол используется для этого? (Как упомянул @Seth, это, вероятно, RPC, но как это реализовать?)
  2. Какой формат пакета используется?
  3. Какие сетевые порты необходимы для маршрутизации этих сигналов?

Другими словами, мне нужно знать все, что нужно для реализации этого в моих собственных программах.

Спасибо за ваше время!

2
Как видно из примеров, сигнал выглядит как простая строка, которую вы, вероятно, можете отправить любой строке. Обычно Windows использует RPC-вызовы для таких функций. Seth 6 лет назад 0
Только что найден @eryksun [комментарий 2014 SO] (https://stackoverflow.com/questions/45675500): waitfor.exe основан на [mailslots] (https://msdn.microsoft.com/en-us/library/aa365576 ). waitfor someevent создает почтовый ящик с именем `\\. \ mailslot \ WAITFOR.EXE \ someevent`. Отправка сигнала через `waitfor / si someevent` открывает дескриптор для` \\ * \ mailslot \ WAITFOR.EXE \ someevent`, где "*" провайдер UNC передает сообщение каждому компьютеру в домене. `waitfor / s% COMPUTERNAME% / si someevent` специально` открывает \\ [имя_компьютера] \ mailslot \ WAITFOR.EXE \ someevent` вместо широковещательной передачи сигнала. fsteff 6 лет назад 0

0 ответов на вопрос