dwErrot— код ошибки от процесса согласования РРР;
Ш szNetBiosError — NetBIOS-имя, если во время процесса аутентификации
РРР возникает конфликт имен; если dwError возвращает ERROR_NAME_
EXISTS'JDN_NET, то szNetBiosError получит имя, вызвавшее ошибку;
• bLana — идентифицирует NetBIOS-номер LANA, который использовал- ся для установления соединения удаленного доступа.
Если вы укажете перечислимый тип RASP_PppNbf& RasGetProjectionlnfo, то получите структуру RASPPPNBF-.
ГЛАВА 16 Клиент служШЯАб 533
typedef struct _RASPPPNBF f!< r/ ,DWORD dwSize;. DWORD dwError;DWORD dwNetBiosError;TCHAR szNetBiosError[NETBIOS_NAME_LEN + 1];TCHAR szWorkstationName[NETBIOS_NAME_LEN + 1];BYTE bLana;} RASPPPNBF;Поля структуры
RASPPPNBF аналогичны полям структуры
RASAMB, за ис- ключением двух дополнительных:
szWorkstationName и
dwNetBiosError. Поле
szWorkstationName получает имя NetBIOS, которое было использовано для идентификации рабочей станции в сети, к которой вы подключаетесь. В
поле
dwNetBiosError записывается произошедшая ошибка NetBIOS.
Если определить тип перечисления
RASP_Ppplpx, как
RasGetProjectionlnfo,то вы получите структуру
RASPPPIPX:typedef struct _RASPPPIPXD W 0 R D d w S i z e :DWORD dwError;TCHAR szIpxAddress[RAS_MaxIpxAddress + 1];} RASPPPIPX; 1V ! { w.rПоля определены следующим образом:
'л' *
:
•
dwSize — размер (в байтах) структуры
RASPPPIPX;Ш dwError — код ошибки от процесса согласования РРР;
Ш szlpxAddress — строка, представляющая IPX-адрес клиента в удаленной сети.
Если вы
определите тип перечисления RASPPppIp, как RasGetProjectionlnfo,то получите структуру
RASPPPIP:typedef struct _RASPPPIP
"'{ - >
\\>лDWORD dwSize; ,-,т
DWORD dwError; ,|
f
,,
TCHAR szIpAddress[RAS_MaxIpAddress + 1];
TCHAR szServerIpAddress[RAS_MaxIpAddress + 1]; '
} RASPPPIP;
Поля определены следующим образом:
•
dwSize — размер (в байтах) структуры
RASPPPIP;Ш dwError — код ошибки от процесса согласования РРР;
Ш szlpAddress — строка, представляющая IP-адрес клиента в удаленной сети;
Я
szServerlpAddress — строка, представляющая IP-адрес сервера.
5 3 4 ЧАСТЬ III Служба удаленного доступа (RAS)
Листинг 16-4 демонстрирует, как выводить IP-адреса, заданные для IP- соединения, устанавливаемого через RAS.
Листинг 16-4. Использование RasGetProjectionlnfo при IP-соединении
lpProjection = (RASPPPIP *) GlobalAlloc(GPTR, cb);
lpProjection->dwSize = sizeof(RASPPPIP);
cb = sizeof(RASPPPIP);
Ret = RasGetProjectionInfo(hRasConn, RASP_PppIp,
lpProjection, &cb);
if (Ret != ERROR_SUCCESS) '
{
printf("RasGetProjectionlnfo failed with error Xd", Ret);
(
return; '!
else
printf("\nRas Client IP address: Xs\n",
lpProjection->szIpAddress);
printf("Ras Server IP address: Xs\n",
lpProjection->szServerIpAddress);
Резюме
В этой главе, завершающей часть III и всю книгу, были рассмотрены основы использования RAS для расширения сетевых возможностей компьютера. Мы описали, как вызывается функция RasDial для взаимодействия с удаленными компьютерами, и то, как далее использовать возможности RAS посредством создания записей телефонного справочника. •
г
.
й
^
г
Ш <
т
Д, HitКО! П Р И Л О Ж Е Н И ЕПеречень команд NetBIOS
t, »)"W ЬВ этом приложении перечислены и описаны допустимые команды для поля
ncbcommand из структуры
NCB, которую следует передать функции
NetbiosВ описание каждой команды входит таблица, где указано, какие поля вы должны задать для этой команды и какие поля функция
Netbios задает перед возвратом. В каждой таблице по две колонки.
Первая показывает, является ли данное имя из структуры
NCB параметром ввода или вывода. Во второй ко- лонке сообщается, должно ли поле задаваться при вызове NetBIOS. Подроб- ное описание функции
Netbios см в главе 1.
Команда NCBADDGRNAMEКоманда добавляет имя группы в локальную таблицу имен. Это имя не дол- жно конфликтовать с уникальным, но кто-то другой может использовать его в качестве имени группы. Имена групп в основном применяют как прием- ники дейтаграмм. Номер имени возвращается в поле
ncbnum, используемое в операциях с дейтаграммами.
Полеneb commandncbretcodeneb Isnncb_numncb_bufferneb lengthneb callnameneb nameneb rtoncb_stoncb_postneb lana num.neb cmd cpltneb event(зН
«Д
еД*Дтэй
*- лВвод или выводВвод
Вывод
Не обязательно
Вывод
Не обязательно
Не обязательно
Не обязательно
Ввод
Не обязательно
Не обязательно
Ввод
Ввод
Вывод
Ввод
Нужно ли задатьДаНет
Нет
Нет
Нет
Нет
Нет
ДаНет
Нет
Нет
ДаНет
Нет
536
Приложение А Перечень команд
NetBIOSКоманда NCBADDNAMEКоманда добавляет уникальное имя в локальную таблицу имен. Если имя в сети не уникально, программа выдаст ошибку. Номер имени возвращается в поле
ncbjnum, используемом в операциях с дейтаграммами.
Полеneb commandncbretcodencbjsnncbjiumncbbufferncbjengthneb callnamencb_namencbjrtoncb_stoncb_postnebjanajnumneb cmd cpltncbeventВвод или выводВвод
Вывод
Не обязательно
Вывод
Не обязательно
Не обязательно
Не обязательно
Ввод
Не обязательно
Не обязательно
Ввод
Ввод
Вывод
Ввод
Нужно ли задатьДа
Нет
Нет
Нет
Нет
Нет
Нет
Да
Нет
Нет
Нет
Да
Нет
Нет
Команда NCBASTATКоманда возвращает сведения о состоянии локального или удаленного адап- тера. При ее вызове поле
ncb_buffer должно ссылаться на буфер со структурой
ADAPTER STATUS, за которой следует массив структур
NAMEJ3UFFER.Поле Ввод или вывод Нужно ли задатьncbcommand Ввод Да
nebjretcode Вывод Нет
ncbjsn He обязательно ., Нет
nebjium Необязательно ,, Нет \ .,
nebjbuffer Ввод и вывод ,, Да
ncbjength Ввод и вывод Да
ncbcallname Ввод Да
nebjname He обязательно Нет
ncbrto He обязательно Нет
ncb_sto He обязательно Нет
ncb_post Ввод Нет
nebjananum Ввод Да
ncbcmdcplt Вывод Нет
ncb_event Ввод Нет
Приложение А Перечень команд NetBIOS 537
Команда NCBCALL
Команда устанавливает сетевое соединение с другим процессом, указанном в поле neb name.
Поле
neb command
neb retcode
neb Isn
ncbjium
neb buffer
neb length
ncbcallname
neb name
ncbrto
neb sto
ncb_post
neb lana пит
neb cmd cplt
neb event
Ввод или вывод
Ввод
Вывод
Вывод
Не обязательно
Не обязательно
Не обязательно
Ввод
Ввод
Ввод
Ввод
Ввод
Ввод
Вывод
Ввод
•
\
(лит
•
Нужно ли задать
Да
Нет
Нет _
Нет t ч tyP
1
Нет ,
v
, ","
Нет ч
Да
Д а
" *"" •""*'
Нет
Нет w
Нет
Да <
Нет <'
Нет
Команда NCBCANCEL
Эта команда отменяет предыдущую. Поле ncb_buffer указывает на структуру
NCB с операцией, которую вы хотите отменить. Отмена уведомляющих ко- манд NCBSEND или NCBCHAINSEND разрывает сеанс, отмена их не уведомля- ющих вариантов — нет. Нельзя отменить команды NCBADDGRNAME, NCBA-
DDNAME, NCBCANCEL, NCBDELNAME, NCBRESET, NCBDGSEND, NCBDGSENDBC
uNCBSSTAT.
Поле
nebcommand
neb retcode
ncbjsn
neb num.
nebbuffer
neb length
neb callname
nebname
ncbrto
ncbsto
ncb_post
neb lana_num
neb cmd cplt
neb event
Ввод или вывод
Ввод
Вывод
Не обязательно
Не обязательно
Ввод
Не обязательно
Не обязательно
Не обязательно
Не обязательно
Не обязательно
Не обязательно
Ввод
Вывод
Не обязательно
Нужно ли задать
Да
Нет
Нет
Нет
Да
Нет
Нет
Нет
Нет
Нет
Нет
Да
Нет
Нет
538 Приложение А Перечень команд NetBtOB
Команда NCBCHAINSEND Х1ЮКЖ бднвмоЖКоманда отправляет содержимое двух буферов указанному получателю. Мак- симальное количество данных, которое можно отправить, — 128 кб (по 64 кб в каждом буфере). Укажите первый буфер и его длину в полях
neb buffer и
ncbjength соответственно. Используйте байты 0-1 из
ncbcallname, чтобы задать длину второго буфера, а байты 2-5 — чтобы сослаться на него.
Полеneb commandneb retcodencbjsnneb питncbj>ufferneb lengthneb callnameneb namencbrtonebstoncb_postneb lana питncb_cmd_cpltneb eventI MlnilВвод или выводВвод
Вывод
Ввод
Не обязательно
Ввод
Ввод
Ввод
Не обязательно
Не обязательно
Не обязательно
Ввод
Ввод
Вывод |»;
Ввод
Нужно ли задатьДаНет
ДаНет
ДаДаДаН е т VK>\Нет
даНет
Нет
ДаНет
Нет
Команда NCBCHAINSENDNAКоманда отправляет
содержимое двух буферов указанному получателю, не ожидая подтверждения. Максимальное количество данных, которое можно отправить, — 128 кб (по 64 кб в каждом буфере). Укажите первый буфер и его длину в полях
nebjbuffer и
ncbjength соответственно. Используйте бай- ты 0-1 из
ncbjoallname, чтобы задать длину второго буфера, а байты 2-5 —
чтобы сослаться на него.
Полеncb_commandncbretcodencbjsnneb питneb bufferncbjengthncbjzallnamenebjiamencb_rtoncb_stoneb postВвод или выводВвод
Вывод
Ввод
Не обязательно
Ввод
Ввод
Ввод
Не обязательно
Не обязательно
Не обязательно
Ввод
мчНужно ли задатьДаНет
Да ,\Нет
^ ^Да чДаДаНет
Нет
Нет
Нет
Полеneb lana питncbcmdcpltneb eventПриложение АВвод или выводВвод
Вывод
Ввод
Перечень команд NetBIOS 539
продолжениеНужно ли задатьДа
Нет
Нет
Команда NCBDELNAMEКоманда удаляет имя из локальной таблицы имен. Если удаляемое имя связа- но с активными сеансами, возвращается ошибка
NRC^ACTSES (OxOF). Если ожи- дают выполнения какие-либо неактивные сеансы — ошибка
NRC_NAMERR(0x17).
Полеneb commandncb_retcodeneb Isnnebjiumneb bufferneb lengthneb callnameneb nameneb rtoneb stonebjjostneb lana питneb cmdcpltncb_eventВвод или выводВвод
Вывод
Не обязательно
Не обязательно
Не обязательно
Не обязательно
Не обязательно
Ввод
Не обязательно
Не обязательно
Ввод
Ввод
Вывод
Ввод
Нужно ли задатьДаНет
Нет
Нет
Нет
Нет
Нет
Да' t ЩНет
Нет
J.,,, Нет
«ДаНет
Нет
Команда NCBDGRECVКоманда получает дейтаграмму, адресованную локальному имени, связанно- му со значением
nebjium. Если
ncbjium — OxFF, то команда получает дей- таграммы, адресованные любому локальному имени.
Локальное имя может быть именем группы, либо уникальным. Если при отправке дейтаграммы нет команд, ожидающих приема дейтаграмм, данные удаляются. Если предостав- ленный буфер слишком мал, появится сообщение о невозможности завер- шения
(NRCJNCOMP — 0x06) и данные будут усечены до размера буфера.
Полеneb commandneb retcodeneb Isnneb питnebbufferВвод или выводВвод
Вывод
Не обязательно
Ввод
Вывод
Нужно ли задатьДаНет
Нет
ДаДасм. след. стр. 540
Приложение А Перечень команд NetBIOS
продолжениеПолеncbjengthneb callnameneb nameneb rtoneb stoncb_postnebjanajvumneb cmd cpltncb_eventВвод или выводВвод и вывод
Вывод
Не обязательно
Не обязательно
Не обязательно
Ввод
Ввод
Вывод
Ввод
Нужно ли задать
Да
Нет
Нет
Нет
Нет
Нет
Да
Нет
Нет
1 1
1 11
Команда NCBDGRECVBCКоманда получает широковещательную дейтаграмму от любого имени, вы- дающего команды отправки таких дейтаграмм. Если предоставленный буфер слишком мал, появится сообщение о невозможности завершения
(NRCJN-СОМР — ОхОб) и данные будут усечены до размера буфера.
Поле Ввод или вывод Нужно ли задатьnebcommand Ввод Да
ncbretcode Вывод Нет н
ncbjsn He обязательно Нет <
nebjium Ввод Да .1
ncb_buffer Ввод Да
лncbjength Ввод и вывод Да \.
neb callname Вывод Нет
nebjiame He обязательно Нет si
ncb_rto He обязательно Нет
ncb_sto Необязательно Нет
\ • |
ncb_post Ввод Нет
nebjanajnum Ввод Да f
'
ncbcmdcplt Вывод Нет ''
ncbevent Ввод Нет
Команда NCBDGSENDКоманда отправляет дейтаграмму по указанному уникальному или группо- вому имени. Если в адаптере есть отложенная команда приема
дейтаграммы для того же самого имени, то адаптер получит свое собственное сообщение.
Выполните локальную команду
NCBASTAT — в структуре
ADAPTERJ5TATUSбудет возвращен максимальный размер дейтаграммы для базового транспор- тного протокола.
Поле
neb command
neb retcode
ncbjsn
neb пит
neb buffer
nebjength
neb callname
nebjiame
neb rto
ncb_sto
ncb_post -*
neb lananum
ncbcmdcplt
neb event
Приложение А Перечень команд NetBIOS 54\
Ввод или вывод
Ввод
Вывод
Не обязательно
Ввод
Ввод
Ввод
Ввод
Не обязательно
Не обязательно
Не обязательно
Ввод
Ввод
Вывод
Ввод
Команда NCBDGSENDBC
Команда отправляет кальной сети. Только приема дейтаграмм отложенная команда
Нужно ли задать
Да
Нет
Нет
Да
Да
Да
Да
Нет
Нет
Нет
Нет
Да
Нет
Нет широковещательную дейтаграмму каждому узлу в ло компьютеры с ожидающими выполнения командам!
получат сообщение. Если приема дейтаграммы, он сообщение. Широковещательные дейтаграммы меру, упомянутые в описании NCBDGSEND.
Поле
ncb_command
neb retcode
neb Isn
nebnum
neb buffer
nebjength
neb callname
neb name
neb rto
neb sto
ncb_post '
neb lana пит
l
neb cmd cplt ^
neb event
Ввод или вывод
Ввод
Вывод
Ввод
Ввод
Ввод
Не обязательно
Не обязательно
Не обязательно
Не обязательно
Не обязательно
Ввод
Ввод
Вывод
Ввод в локальном адаптере ест получит свое собственно»
имеют ограничения по раз
Нужно ли задать
Да
Нет
Да
Да
Да
Нет
Нет
Нет
Нет
Нет
Нет
Да
Нет
Нет
542
Приложение А Перечень команд NetBIOS
Команда NCBENUMКоманда нумерует LANA. При этом
ncbjouffer должен ссылаться на структуру
LANA_ENUM. По возвращении поле
length структуры
LANA_ENUM будет содер- жать количество номеров LANA на локальном компьютере. Поле
lana из
LANA_ENUM заполняется номерами LANA.
Поле Ввод или вывод Нужно ли задатьneb commandneb retcodencbjsnneb питncbjoufferneb lengthncbcallnameneb namencbrtoneb stoncbj)ostneb lana питncb_cmd_cpltneb eventВвод
Вывод
He обязательно
He обязательно vm¥
Ввод
Ввод
He обязательно
He обязательно
He обязательно
He обязательно
He обязательно
Ввод
Вывод
Не обязательно
Да
Нет
Нет
Нет
_ Да
Да
Нет
Нет
Нет
Нет
Нет
Да
Нет
Нет