Я начал разработку SMB-сервера для старой машины на базе Z80.Эта машина работает с очень простой MS-DOS-подобной операционной системой (без многозадачности, без понятия пользователей, только с файловой системой FAT, без юникода, только с именами файлов 8.3) и имеет ограниченную память, поэтому моя первая идея - реализовать только протокол ядра SMB,Я буду использовать транспорт TCP.
На данный момент у меня есть только очень короткий тестовый код, который просто отвечает на команду SMB_COM_NEGOTIATE, указывая, что основной протокол ("PC NETWORK PROGRAM 1.0") является желаемым диалектом.Чтобы проверить это, я пытаюсь подключиться с компьютера с Windows 7, открыв окно обозревателя и введя "\\<server IP>"
в адресной строке.Я проверил с помощью Wireshark, что сервер получает команду согласования и отправляет (очевидно) правильный ответ.
Проблема: , как только клиент Windows получает ответ, он показывает общийСообщение об ошибке «Не удается получить доступ к ресурсу» (с кодом ошибки 0x80004005), после чего ничего не происходит (дальнейшие сообщения SMB не отправляются).Я ожидал получить SMB_COM_TREE_CONNECT или подобную команду.
Я думал, что, возможно, Windows 7 не поддерживает основной протокол (он очень старый и вообще не имеет каких-либо функций безопасности), но потом, почему это так?перечислить имя основного диалекта в запросе на переговоры?Может быть, я пропускаю какой-то шаг?Должен ли сервер отправлять какой-либо дополнительный пакет после согласованного ответа?
Клиентская ОС - это Windows 7 Ultimate, 64-битная версия, и вот дампы Wireshark как запроса, так и ответа на случай, если кто-то может обнаружить что-то неправильное впроцесс:
Запрос:
Ответ:
ОБНОВЛЕНИЕ: Если я выберу диалект NT LM 0.12 вместо основного диалекта, я получу команду SESSION_SETUP_AND_REQUESTX от клиента.Таким образом, очевидно, что действительно, основной протокол не поддерживается Windows 7. В любом случае, любая дополнительная информация будет оценена.