2420,391 → 2420,6 |
* иначе eax = TID - идентификатор потока |
|
====================================================================== |
= Функция 52, подфункция 0 - получить конфигурацию сетевого драйвера. |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 0 - номер подфункции |
Возвращаемое значение: |
* eax = двойное слово конфигурации |
Замечания: |
* Слово конфигурации можно установить подфункцией 2. |
* Ядро не использует соответствующую переменную. |
Ценность этой переменной и работающих с ней подфункций 0 и 2 |
представляется сомнительной. |
|
====================================================================== |
======= Функция 52, подфункция 1 - получить локальный IP-адрес. ====== |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 1 - номер подфункции |
Возвращаемое значение: |
* eax = IP-адрес (4 байта) |
Замечания: |
* Локальный IP-адрес устанавливается подфункцией 3. |
|
====================================================================== |
Функция 52, подфункция 2 - установить конфигурацию сетевого драйвера. |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 2 - номер подфункции |
* ecx = двойное слово конфигурации; если младшие 7 бит образуют |
число 3, это воспринимается как запрос на [пере-]инициализацию |
Ethernet-карты, в противном случае Ethernet выключается |
Возвращаемое значение: |
* если не запрошен Ethernet-интерфейс, то возвращается eax=2, |
но это может измениться в будущих версиях ядра |
* если запрошен Ethernet-интерфейс, то eax=0 означает ошибку |
(отсутствие Ethernet-карты), а ненулевое значение - успех |
Замечания: |
* Слово конфигурации можно прочитать подфункцией 0. |
* Ядро не использует соответствующую переменную. |
Ценность этой переменной, подфункции 0 и части подфункции 2, |
устанавливающей эту переменную, представляется сомнительной. |
|
====================================================================== |
====== Функция 52, подфункция 3 - установить локальный IP-адрес. ===== |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 3 - номер подфункции |
* ecx = IP-адрес (4 байта) |
Возвращаемое значение: |
* текущая реализация возвращает eax=3, но это может быть изменено |
в будущих версиях |
Замечания: |
* Локальный IP-адрес можно получить подфункцией 1. |
|
====================================================================== |
= Функция 52, подфункция 6 - добавить данные в стек входной очереди. = |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 6 - номер подфункции |
* edx = размер данных |
* esi = указатель на данные |
Возвращаемое значение: |
* eax = -1 - ошибка |
* eax = 0 - успешно |
Замечания: |
* Эта функция предназначена только для медленных сетевых драйверов |
(PPP, SLIP). |
* Размер данных не должен превосходить 1500 байт, |
хотя проверок корректности не делается. |
|
====================================================================== |
====================== Функция 52, подфункция 8 ====================== |
============= Прочитать данные из сетевой очереди вывода. ============ |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 8 - номер подфункции |
* esi = указатель на буфер размером 1500 байт |
Возвращаемое значение: |
* eax = число прочитанных байт (в текущей реализации |
либо 0 = нет данных, либо 1500) |
* данные скопированы в буфер |
Замечания: |
* Эта функция предназначена только для медленных сетевых драйверов |
(PPP, SLIP). |
|
====================================================================== |
=========== Функция 52, подфункция 9 - получить gateway IP. ========== |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 9 - номер подфункции |
Возвращаемое значение: |
* eax = gateway IP (4 байта) |
|
====================================================================== |
========= Функция 52, подфункция 10 - получить маску подсети. ======== |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 10 - номер подфункции |
Возвращаемое значение: |
* eax = маска подсети |
|
====================================================================== |
========= Функция 52, подфункция 11 - установить gateway IP. ========= |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 11 - номер подфункции |
* ecx = gateway IP (4 байта) |
Возвращаемое значение: |
* текущая реализация возвращает eax=11, но это может быть изменено |
в будущих реализациях |
|
====================================================================== |
======== Функция 52, подфункция 12 - установить маску подсети. ======= |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 12 - номер подфункции |
* ecx = маска подсети |
Возвращаемое значение: |
* текущая реализация возвращает eax=12, но это может быть изменено |
в будущих версиях |
|
====================================================================== |
============ Функция 52, подфункция 13 - получить DNS IP. ============ |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 13 - номер подфункции |
Возвращаемое значение: |
* eax = DNS IP (4 байта) |
|
====================================================================== |
=========== Функция 52, подфункция 14 - установить DNS IP. =========== |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 14 - номер подфункции |
* ecx = DNS IP (4 байта) |
Возвращаемое значение: |
* текущая реализация возвращает eax=14, но это может быть изменено |
в следующих версиях |
|
====================================================================== |
====== Функция 52, подфункция 15 - получить локальный MAC-адрес. ===== |
====================================================================== |
Параметры: |
* eax = 52 - номер функции |
* ebx = 15 - номер подфункции |
* ecx = 0 - читать первые 4 байта, |
ecx = 4 - читать последние 2 байта |
Возвращаемое значение: |
* для ecx=0: eax = первые 4 байта MAC-адреса |
* для ecx=4: ax = последние 2 байта MAC-адреса, |
старшая половина eax разрушается |
* для других ecx: eax = -1 как признак ошибки |
|
====================================================================== |
============ Функция 53, подфункция 0 - открыть UDP-сокет. =========== |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 0 - номер подфункции |
* ecx = локальный порт (учитывается только младшее слово), |
ecx = 0 - предоставить системе выбор локального порта |
* edx = удалённый порт (учитывается только младшее слово) |
* esi = удалённый IP |
Возвращаемое значение: |
* eax = -1 = 0xFFFFFFFF - ошибка; ebx разрушается |
* eax = хэндл сокета (некоторое число, однозначно идентифицирующее |
сокет и имеющее смысл только для системы) - успешно; |
ebx разрушается |
|
====================================================================== |
============ Функция 53, подфункция 1 - закрыть UDP-сокет. =========== |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 1 - номер подфункции |
* ecx = хэндл сокета |
Возвращаемое значение: |
* eax = -1 - неверный хэндл |
* eax = 0 - успешно |
* ebx разрушается |
Замечания: |
* Текущая реализация не закрывает автоматически все сокеты потока |
при его завершении. В частности, не следует прибивать поток |
с кучей открытых сокетов - будет утечка ресурсов. |
|
====================================================================== |
============== Функция 53, подфункция 2 - опрос сокета. ============== |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 2 - номер подфункции |
* ecx = хэндл сокета |
Возвращаемое значение: |
* eax = число полученных байт, 0 для неверного хэндла |
* ebx разрушается |
|
====================================================================== |
======== Функция 53, подфункция 3 - прочитать байт из сокета. ======== |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 3 - номер подфункции |
* ecx = хэндл сокета |
Возвращаемое значение: |
* если нет принятых данных или указан неверный хэндл: |
eax=0, bl=0, прочие байты ebx разрушаются |
* если были принятые данные: eax=число оставшихся байт |
(возможно, 0), bl=прочитанный байт, прочие байты ebx разрушаются |
|
====================================================================== |
========== Функция 53, подфункция 4 - записать в UDP-сокет. ========== |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 4 - номер подфункции |
* ecx = хэндл сокета |
* edx = число байт для записи |
* esi = указатель на данные для записи |
Возвращаемое значение: |
* eax = 0xffffffff - ошибка (неверный хэндл или недостаточно памяти) |
* eax = 0 - успешно |
* ebx разрушается |
Замечания: |
* Число байт для записи не может превышать 1500-28, хотя |
соответствующей проверки не делается. |
|
====================================================================== |
============ Функция 53, подфункция 5 - открыть TCP-сокет. =========== |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 5 - номер подфункции |
* ecx = локальный порт (учитывается только младшее слово), |
ecx = 0 - предоставить системе выбор локального порта |
* edx = удалённый порт (учитывается только младшее слово) |
* esi = удалённый IP |
* edi = режим открытия: SOCKET_PASSIVE=0 или SOCKET_ACTIVE=1 |
Возвращаемое значение: |
* eax = -1 = 0xFFFFFFFF - ошибка; ebx разрушается |
* eax = хэндл сокета (некоторое число, однозначно идентифицирующее |
сокет и имеющее смысл только для системы) - успешно; |
ebx разрушается |
|
====================================================================== |
====== Функция 53, подфункция 6 - получить состояние TCP-сокета. ===== |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 6 - номер подфункции |
* ecx = хэндл сокета |
Возвращаемое значение: |
* eax = 0 для неверного сокета или статус: одно из |
* TCB_LISTEN = 1 |
* TCB_SYN_SENT = 2 |
* TCB_SYN_RECEIVED = 3 |
* TCB_ESTABLISHED = 4 |
* TCB_FIN_WAIT_1 = 5 |
* TCB_FIN_WAIT_2 = 6 |
* TCB_CLOSE_WAIT = 7 |
* TCB_CLOSING = 8 |
* TCB_LAST_ASK = 9 |
* TCB_TIME_WAIT = 10 |
* TCB_CLOSED = 11 |
* ebx разрушается |
|
====================================================================== |
========== Функция 53, подфункция 7 - записать в TCP-сокет. ========== |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 7 - номер подфункции |
* ecx = хэндл сокета |
* edx = число байт для записи |
* esi = указатель на данные для записи |
Возвращаемое значение: |
* eax = 0xffffffff - ошибка (неверный хэндл или недостаточно памяти) |
* eax = 0 - успешно |
* ebx разрушается |
Замечания: |
* Число байт для записи не может превышать 1500-40, |
хотя соответствующей проверки не делается. |
|
====================================================================== |
============ Функция 53, подфункция 8 - закрыть TCP-сокет. =========== |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 8 - номер подфункции |
* ecx = хэндл сокета |
Возвращаемое значение: |
* eax = -1 - ошибка (неверный хэндл или |
недостаточно памяти для пакета закрытия сокета) |
* eax = 0 - успешно |
* ebx разрушается |
Замечания: |
* Текущая реализация не закрывает автоматически все сокеты потока |
при его завершении. В частности, не следует прибивать поток |
с кучей открытых сокетов - будет утечка ресурсов. |
|
====================================================================== |
== Функция 53, подфункция 9 - проверить, свободен ли локальный порт. = |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 9 - номер подфункции |
* ecx = номер локального порта (используются только младшие 16 бит) |
Возвращаемое значение: |
* eax = 0 - порт используется |
* eax = 1 - порт свободен |
* ebx разрушается |
|
====================================================================== |
==== Функция 53, подфункция 10 - получить статус кабеля Ethernet. ==== |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 10 - номер подфункции |
Возвращаемое значение: |
* al = -1 - драйвер сетевой карты не загружен или |
не поддерживает эту функцию |
* al = 0 - кабель не подключён |
* al = 1 - кабель подключён |
* ebx разрушается |
Замечания: |
* Текущая реализация ядра поддерживает эту функцию |
только для сетевых карт RTL8139. |
|
====================================================================== |
==== Функция 53, подфункция 11 - прочитать данные сетевого стека. ==== |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 11 - номер подфункции |
* ecx = хэндл сокета |
* edx = указатель на буфер |
* esi = число байт для чтения; |
* esi = 0 - читать все данные (максимум 4096 байт) |
Возвращаемое значение: |
* eax = число прочитанных байт (0 при неверном хэндле) |
* ebx разрушается |
|
====================================================================== |
Функция 53, подфункция 255 - отладочная информация сетевого драйвера. |
====================================================================== |
Параметры: |
* eax = 53 - номер функции |
* ebx = 255 - номер подфункции |
* ecx = тип запрашиваемой информации (смотри ниже) |
Возвращаемое значение: |
* eax = запрошенная информация |
* ebx разрушается |
Возможные значения ecx: |
* 100: длина очереди 0 (empty queue) |
* 101: длина очереди 1 (ip-out queue) |
* 102: длина очереди 2 (ip-in queue) |
* 103: длина очереди 3 (net1out queue) |
* 200: число элементов в таблице ARP |
* 201: размер таблицы ARP (в элементах) (20 в текущей версии) |
* 202: прочитать элемент edx таблицы ARP во временный буфер, откуда |
берут информацию 5 последующих типов; |
в этом случае eax неопределён |
* 203: IP-адрес, запомненный типом 202 |
* 204: старшее dword MAC-адреса, запомненного типом 202 |
* 205: младшее word MAC-адреса, запомненного типом 202 |
* 206: слово статуса, запомненное типом 202 |
* 207: слово ttl, запомненное типом 202 |
* 2: общее число полученных IP-пакетов |
* 3: общее число переданных IP-пакетов |
* 4: общее число сдампленных полученных пакетов |
* 5: общее число полученных ARP-пакетов |
* 6: статус драйвера пакетов, 0=неактивен, |
ненулевое значение=активен |
|
====================================================================== |
====================== Функция 55, подфункция 55 ===================== |
========== Начать проигрывать данные на встроенном спикере. ========== |
====================================================================== |
4631,6 → 4246,213 |
* функция не возвращает значения |
|
====================================================================== |
=================== Функция 74, подфункция -1 ======================== |
=========== Получить количество активных сетевых устройств. ========== |
====================================================================== |
Параметры: |
* eax = 74 - номер функции |
* bl = -1 - номер подфункции |
Возвращаемое значение: |
* eax = количество активных сетевых устройств |
|
====================================================================== |
==== Функция 74, подфункция 0, Получить тип сетевого устройства. ===== |
====================================================================== |
Параметры: |
* eax = 74 - номер функции |
* bl = 0 - номер подфункции |
* bh = номер устройства |
Возвращаемое значение: |
* eax = тип устройства |
|
====================================================================== |
==== Функция 74, подфункция 1, Получить имя сетевого устройства. ===== |
====================================================================== |
Параметры: |
* eax = 74 - номер функции |
* bl = 1 - номер подфункции |
* bh = номер устройства |
* ecx = указатель на буфера - 64 байт |
Возвращаемое значение: |
* eax = -1 для ошибки |
* В случае успеха в буфер записывается имя сетевого устройства |
|
====================================================================== |
======= Функция 74, подфункция 2, Сброс сетевого устройства. ========= |
====================================================================== |
Параметры: |
* eax = 74 - номер функции |
* bl = 2 - номер подфункции |
* bh = номер устройства |
Возвращаемое значение: |
* eax = -1 для ошибки |
|
====================================================================== |
====== Функция 74, подфункция 3, Остановить сетевое устройство. ====== |
====================================================================== |
Параметры: |
* eax = 74 - номер функции |
* bl = 3 - номер подфункции |
* bh = номер устройства |
Возвращаемое значение: |
* eax = -1 для ошибки |
|
====================================================================== |
======= Функция 75, подфункция 0, Open socket (Открыть сокет). ======= |
====================================================================== |
Параметры: |
* eax = 75 - номер функции |
* bl = 0 - номер подфункции |
* ecx = домен |
* edx = тип |
* esi = протокол |
Возвращаемое значение: |
* eax = номер сокета, -1 для ошибки |
* ebx = код ошибки |
|
====================================================================== |
======= Функция 75, подфункция 1, Close socket (Закрыть сокет). ====== |
====================================================================== |
Параметры: |
* eax = 75 - номер функции |
* bl = 1 - номер подфункции |
* ecx = номер сокета |
Возвращаемое значение: |
* eax = -1 для ошибки |
* ebx = код ошибки |
|
====================================================================== |
============= Функция 75, подфункция 2, Bind (Привязка). ============= |
====================================================================== |
Параметры: |
* eax = 75 - номер функции |
* bl = 2 - номер подфункции |
* ecx = номер сокета |
* edx = указатель на структуру sockaddr |
* esi = длина структуры sockaddr |
Возвращаемое значение: |
* eax = -1 для ошибки |
* ebx = код ошибки |
|
====================================================================== |
============ Функция 75, подфункция 3, Listen (Слушать). ============= |
====================================================================== |
Параметры: |
* eax = 75 - номер функции |
* bl = 3 - номер подфункции |
* ecx = номер сокета |
* edx = backlog (возвращаемый лог) |
Возвращаемое значение: |
* eax = -1 для ошибки |
* ebx = код ошибки |
|
====================================================================== |
========== Функция 75, подфункция 4, Connect (Соединение). =========== |
====================================================================== |
Параметры: |
* eax = 75 - номер функции |
* bl = 4 - номер подфункции |
* ecx = номер сокета |
* edx = указатель на структуру sockaddr |
* esi = длина структуры sockaddr |
Возвращаемое значение: |
* eax = -1 для ошибки |
* ebx = код ошибки |
|
====================================================================== |
=========== Функция 75, подфункция 5, Accept (Соглашение). =========== |
====================================================================== |
Параметры: |
* eax = 75 - номер функции |
* bl = 5 - номер подфункции |
* ecx = номер сокета |
* edx = указатель на структуру sockaddr |
* esi = длина структуры sockaddr |
Возвращаемое значение: |
* eax = номер сокета из принятого сокета, -1 для ошибки |
* ebx = код ошибки |
|
====================================================================== |
============= Функция 75, подфункция 6, Send (Послать). ============== |
====================================================================== |
Параметры: |
* eax = 75 - номер функции |
* bl = 6 - номер подфункции |
* ecx = номер сокета |
* edx = указатель на буфер |
* esi = длина буфера |
* edi = флаги |
Возвращаемое значение: |
* eax = количество скопированных байтов, -1 для ошибки |
* ebx = код ошибки |
|
====================================================================== |
============ Функция 75, подфункция 7, Receive (Получить). =========== |
====================================================================== |
Параметры: |
* eax = 75 - номер функции |
* bl = 7 - номер подфункции |
* ecx = номер сокета |
* edx = указатель на буфер |
* esi = длина буфера |
* edi = флаги |
Возвращаемое значение: |
* eax = количество скопированных байтов, -1 для ошибки |
* ebx = код ошибки |
|
====================================================================== |
= Функция 75, подфункция 8, Set socket options (Задать опции сокета) = |
====================================================================== |
Параметры: |
* eax = 75 - номер функции |
* bl = 8 - номер подфункции |
* ecx = номер сокета |
* edx = указатель на optstruct |
Возвращаемое значение: |
* eax = -1 для ошибки |
* ebx = код ошибки |
Замечания: |
|
Optstruct: dd level |
dd optionname |
dd optlength |
db options... |
|
====================================================================== |
= Функция 75, подфункция 9, Get socket options(Получить опции сокета) |
====================================================================== |
Параметры: |
* eax = 75 - номер функции |
* bl = 9 - номер подфункции |
* ecx = номер сокета |
* edx = указатель на optstruct |
Возвращаемое значение: |
* eax = -1 для ошибки |
* ebx = код ошибки |
Замечания: |
|
Optstruct: dd level |
dd optionname |
dd optlength |
db options... |
|
====================================================================== |
= Функция 75, подфункция 10, Get socketpair (Получить парный сокет). = |
====================================================================== |
Параметры: |
* eax = 75 - номер функции |
* bl = 10 - номер подфункции |
Возвращаемое значение: |
* eax = socketnum1, -1 для ошибки |
* ebx = socketnum2, код ошибки в случае ошибки |
Замечания: |
|
Optstruct: dd level |
dd optionname |
dd optlength |
db options... |
|
====================================================================== |
========== Функция -1 - завершить выполнение потока/процесса ========= |
====================================================================== |
Параметры: |