Rev 3780 | Rev 3837 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3780 | Rev 3835 | ||
---|---|---|---|
Line 2418... | Line 2418... | ||
2418 | Возвращаемое значение: |
2418 | Возвращаемое значение: |
2419 | * eax = -1 - ошибка (в системе слишком много потоков) |
2419 | * eax = -1 - ошибка (в системе слишком много потоков) |
2420 | * иначе eax = TID - идентификатор потока |
2420 | * иначе eax = TID - идентификатор потока |
Line 2421... | Line 2421... | ||
2421 | 2421 | ||
2422 | ====================================================================== |
- | |
2423 | = Функция 52, подфункция 0 - получить конфигурацию сетевого драйвера. |
- | |
2424 | ====================================================================== |
- | |
2425 | Параметры: |
- | |
2426 | * eax = 52 - номер функции |
- | |
2427 | * ebx = 0 - номер подфункции |
- | |
2428 | Возвращаемое значение: |
- | |
2429 | * eax = двойное слово конфигурации |
- | |
2430 | Замечания: |
- | |
2431 | * Слово конфигурации можно установить подфункцией 2. |
- | |
2432 | * Ядро не использует соответствующую переменную. |
- | |
2433 | Ценность этой переменной и работающих с ней подфункций 0 и 2 |
- | |
2434 | представляется сомнительной. |
- | |
2435 | - | ||
2436 | ====================================================================== |
- | |
2437 | ======= Функция 52, подфункция 1 - получить локальный IP-адрес. ====== |
- | |
2438 | ====================================================================== |
- | |
2439 | Параметры: |
- | |
2440 | * eax = 52 - номер функции |
- | |
2441 | * ebx = 1 - номер подфункции |
- | |
2442 | Возвращаемое значение: |
- | |
2443 | * eax = IP-адрес (4 байта) |
- | |
2444 | Замечания: |
- | |
2445 | * Локальный IP-адрес устанавливается подфункцией 3. |
- | |
2446 | - | ||
2447 | ====================================================================== |
- | |
2448 | Функция 52, подфункция 2 - установить конфигурацию сетевого драйвера. |
- | |
2449 | ====================================================================== |
- | |
2450 | Параметры: |
- | |
2451 | * eax = 52 - номер функции |
- | |
2452 | * ebx = 2 - номер подфункции |
- | |
2453 | * ecx = двойное слово конфигурации; если младшие 7 бит образуют |
- | |
2454 | число 3, это воспринимается как запрос на [пере-]инициализацию |
- | |
2455 | Ethernet-карты, в противном случае Ethernet выключается |
- | |
2456 | Возвращаемое значение: |
- | |
2457 | * если не запрошен Ethernet-интерфейс, то возвращается eax=2, |
- | |
2458 | но это может измениться в будущих версиях ядра |
- | |
2459 | * если запрошен Ethernet-интерфейс, то eax=0 означает ошибку |
- | |
2460 | (отсутствие Ethernet-карты), а ненулевое значение - успех |
- | |
2461 | Замечания: |
- | |
2462 | * Слово конфигурации можно прочитать подфункцией 0. |
- | |
2463 | * Ядро не использует соответствующую переменную. |
- | |
2464 | Ценность этой переменной, подфункции 0 и части подфункции 2, |
- | |
2465 | устанавливающей эту переменную, представляется сомнительной. |
- | |
2466 | - | ||
2467 | ====================================================================== |
- | |
2468 | ====== Функция 52, подфункция 3 - установить локальный IP-адрес. ===== |
- | |
2469 | ====================================================================== |
- | |
2470 | Параметры: |
- | |
2471 | * eax = 52 - номер функции |
- | |
2472 | * ebx = 3 - номер подфункции |
- | |
2473 | * ecx = IP-адрес (4 байта) |
- | |
2474 | Возвращаемое значение: |
- | |
2475 | * текущая реализация возвращает eax=3, но это может быть изменено |
- | |
2476 | в будущих версиях |
- | |
2477 | Замечания: |
- | |
2478 | * Локальный IP-адрес можно получить подфункцией 1. |
- | |
2479 | - | ||
2480 | ====================================================================== |
- | |
2481 | = Функция 52, подфункция 6 - добавить данные в стек входной очереди. = |
- | |
2482 | ====================================================================== |
- | |
2483 | Параметры: |
- | |
2484 | * eax = 52 - номер функции |
- | |
2485 | * ebx = 6 - номер подфункции |
- | |
2486 | * edx = размер данных |
- | |
2487 | * esi = указатель на данные |
- | |
2488 | Возвращаемое значение: |
- | |
2489 | * eax = -1 - ошибка |
- | |
2490 | * eax = 0 - успешно |
- | |
2491 | Замечания: |
- | |
2492 | * Эта функция предназначена только для медленных сетевых драйверов |
- | |
2493 | (PPP, SLIP). |
- | |
2494 | * Размер данных не должен превосходить 1500 байт, |
- | |
2495 | хотя проверок корректности не делается. |
- | |
2496 | - | ||
2497 | ====================================================================== |
- | |
2498 | ====================== Функция 52, подфункция 8 ====================== |
- | |
2499 | ============= Прочитать данные из сетевой очереди вывода. ============ |
- | |
2500 | ====================================================================== |
- | |
2501 | Параметры: |
- | |
2502 | * eax = 52 - номер функции |
- | |
2503 | * ebx = 8 - номер подфункции |
- | |
2504 | * esi = указатель на буфер размером 1500 байт |
- | |
2505 | Возвращаемое значение: |
- | |
2506 | * eax = число прочитанных байт (в текущей реализации |
- | |
2507 | либо 0 = нет данных, либо 1500) |
- | |
2508 | * данные скопированы в буфер |
- | |
2509 | Замечания: |
- | |
2510 | * Эта функция предназначена только для медленных сетевых драйверов |
- | |
2511 | (PPP, SLIP). |
- | |
2512 | - | ||
2513 | ====================================================================== |
- | |
2514 | =========== Функция 52, подфункция 9 - получить gateway IP. ========== |
- | |
2515 | ====================================================================== |
- | |
2516 | Параметры: |
- | |
2517 | * eax = 52 - номер функции |
- | |
2518 | * ebx = 9 - номер подфункции |
- | |
2519 | Возвращаемое значение: |
- | |
2520 | * eax = gateway IP (4 байта) |
- | |
2521 | - | ||
2522 | ====================================================================== |
- | |
2523 | ========= Функция 52, подфункция 10 - получить маску подсети. ======== |
- | |
2524 | ====================================================================== |
- | |
2525 | Параметры: |
- | |
2526 | * eax = 52 - номер функции |
- | |
2527 | * ebx = 10 - номер подфункции |
- | |
2528 | Возвращаемое значение: |
- | |
2529 | * eax = маска подсети |
- | |
2530 | - | ||
2531 | ====================================================================== |
- | |
2532 | ========= Функция 52, подфункция 11 - установить gateway IP. ========= |
- | |
2533 | ====================================================================== |
- | |
2534 | Параметры: |
- | |
2535 | * eax = 52 - номер функции |
- | |
2536 | * ebx = 11 - номер подфункции |
- | |
2537 | * ecx = gateway IP (4 байта) |
- | |
2538 | Возвращаемое значение: |
- | |
2539 | * текущая реализация возвращает eax=11, но это может быть изменено |
- | |
2540 | в будущих реализациях |
- | |
2541 | - | ||
2542 | ====================================================================== |
- | |
2543 | ======== Функция 52, подфункция 12 - установить маску подсети. ======= |
- | |
2544 | ====================================================================== |
- | |
2545 | Параметры: |
- | |
2546 | * eax = 52 - номер функции |
- | |
2547 | * ebx = 12 - номер подфункции |
- | |
2548 | * ecx = маска подсети |
- | |
2549 | Возвращаемое значение: |
- | |
2550 | * текущая реализация возвращает eax=12, но это может быть изменено |
- | |
2551 | в будущих версиях |
- | |
2552 | - | ||
2553 | ====================================================================== |
- | |
2554 | ============ Функция 52, подфункция 13 - получить DNS IP. ============ |
- | |
2555 | ====================================================================== |
- | |
2556 | Параметры: |
- | |
2557 | * eax = 52 - номер функции |
- | |
2558 | * ebx = 13 - номер подфункции |
- | |
2559 | Возвращаемое значение: |
- | |
2560 | * eax = DNS IP (4 байта) |
- | |
2561 | - | ||
2562 | ====================================================================== |
- | |
2563 | =========== Функция 52, подфункция 14 - установить DNS IP. =========== |
- | |
2564 | ====================================================================== |
- | |
2565 | Параметры: |
- | |
2566 | * eax = 52 - номер функции |
- | |
2567 | * ebx = 14 - номер подфункции |
- | |
2568 | * ecx = DNS IP (4 байта) |
- | |
2569 | Возвращаемое значение: |
- | |
2570 | * текущая реализация возвращает eax=14, но это может быть изменено |
- | |
2571 | в следующих версиях |
- | |
2572 | - | ||
2573 | ====================================================================== |
- | |
2574 | ====== Функция 52, подфункция 15 - получить локальный MAC-адрес. ===== |
- | |
2575 | ====================================================================== |
- | |
2576 | Параметры: |
- | |
2577 | * eax = 52 - номер функции |
- | |
2578 | * ebx = 15 - номер подфункции |
- | |
2579 | * ecx = 0 - читать первые 4 байта, |
- | |
2580 | ecx = 4 - читать последние 2 байта |
- | |
2581 | Возвращаемое значение: |
- | |
2582 | * для ecx=0: eax = первые 4 байта MAC-адреса |
- | |
2583 | * для ecx=4: ax = последние 2 байта MAC-адреса, |
- | |
2584 | старшая половина eax разрушается |
- | |
2585 | * для других ecx: eax = -1 как признак ошибки |
- | |
2586 | - | ||
2587 | ====================================================================== |
- | |
2588 | ============ Функция 53, подфункция 0 - открыть UDP-сокет. =========== |
- | |
2589 | ====================================================================== |
- | |
2590 | Параметры: |
- | |
2591 | * eax = 53 - номер функции |
- | |
2592 | * ebx = 0 - номер подфункции |
- | |
2593 | * ecx = локальный порт (учитывается только младшее слово), |
- | |
2594 | ecx = 0 - предоставить системе выбор локального порта |
- | |
2595 | * edx = удалённый порт (учитывается только младшее слово) |
- | |
2596 | * esi = удалённый IP |
- | |
2597 | Возвращаемое значение: |
- | |
2598 | * eax = -1 = 0xFFFFFFFF - ошибка; ebx разрушается |
- | |
2599 | * eax = хэндл сокета (некоторое число, однозначно идентифицирующее |
- | |
2600 | сокет и имеющее смысл только для системы) - успешно; |
- | |
2601 | ebx разрушается |
- | |
2602 | - | ||
2603 | ====================================================================== |
- | |
2604 | ============ Функция 53, подфункция 1 - закрыть UDP-сокет. =========== |
- | |
2605 | ====================================================================== |
- | |
2606 | Параметры: |
- | |
2607 | * eax = 53 - номер функции |
- | |
2608 | * ebx = 1 - номер подфункции |
- | |
2609 | * ecx = хэндл сокета |
- | |
2610 | Возвращаемое значение: |
- | |
2611 | * eax = -1 - неверный хэндл |
- | |
2612 | * eax = 0 - успешно |
- | |
2613 | * ebx разрушается |
- | |
2614 | Замечания: |
- | |
2615 | * Текущая реализация не закрывает автоматически все сокеты потока |
- | |
2616 | при его завершении. В частности, не следует прибивать поток |
- | |
2617 | с кучей открытых сокетов - будет утечка ресурсов. |
- | |
2618 | - | ||
2619 | ====================================================================== |
- | |
2620 | ============== Функция 53, подфункция 2 - опрос сокета. ============== |
- | |
2621 | ====================================================================== |
- | |
2622 | Параметры: |
- | |
2623 | * eax = 53 - номер функции |
- | |
2624 | * ebx = 2 - номер подфункции |
- | |
2625 | * ecx = хэндл сокета |
- | |
2626 | Возвращаемое значение: |
- | |
2627 | * eax = число полученных байт, 0 для неверного хэндла |
- | |
2628 | * ebx разрушается |
- | |
2629 | - | ||
2630 | ====================================================================== |
- | |
2631 | ======== Функция 53, подфункция 3 - прочитать байт из сокета. ======== |
- | |
2632 | ====================================================================== |
- | |
2633 | Параметры: |
- | |
2634 | * eax = 53 - номер функции |
- | |
2635 | * ebx = 3 - номер подфункции |
- | |
2636 | * ecx = хэндл сокета |
- | |
2637 | Возвращаемое значение: |
- | |
2638 | * если нет принятых данных или указан неверный хэндл: |
- | |
2639 | eax=0, bl=0, прочие байты ebx разрушаются |
- | |
2640 | * если были принятые данные: eax=число оставшихся байт |
- | |
2641 | (возможно, 0), bl=прочитанный байт, прочие байты ebx разрушаются |
- | |
2642 | - | ||
2643 | ====================================================================== |
- | |
2644 | ========== Функция 53, подфункция 4 - записать в UDP-сокет. ========== |
- | |
2645 | ====================================================================== |
- | |
2646 | Параметры: |
- | |
2647 | * eax = 53 - номер функции |
- | |
2648 | * ebx = 4 - номер подфункции |
- | |
2649 | * ecx = хэндл сокета |
- | |
2650 | * edx = число байт для записи |
- | |
2651 | * esi = указатель на данные для записи |
- | |
2652 | Возвращаемое значение: |
- | |
2653 | * eax = 0xffffffff - ошибка (неверный хэндл или недостаточно памяти) |
- | |
2654 | * eax = 0 - успешно |
- | |
2655 | * ebx разрушается |
- | |
2656 | Замечания: |
- | |
2657 | * Число байт для записи не может превышать 1500-28, хотя |
- | |
2658 | соответствующей проверки не делается. |
- | |
2659 | - | ||
2660 | ====================================================================== |
- | |
2661 | ============ Функция 53, подфункция 5 - открыть TCP-сокет. =========== |
- | |
2662 | ====================================================================== |
- | |
2663 | Параметры: |
- | |
2664 | * eax = 53 - номер функции |
- | |
2665 | * ebx = 5 - номер подфункции |
- | |
2666 | * ecx = локальный порт (учитывается только младшее слово), |
- | |
2667 | ecx = 0 - предоставить системе выбор локального порта |
- | |
2668 | * edx = удалённый порт (учитывается только младшее слово) |
- | |
2669 | * esi = удалённый IP |
- | |
2670 | * edi = режим открытия: SOCKET_PASSIVE=0 или SOCKET_ACTIVE=1 |
- | |
2671 | Возвращаемое значение: |
- | |
2672 | * eax = -1 = 0xFFFFFFFF - ошибка; ebx разрушается |
- | |
2673 | * eax = хэндл сокета (некоторое число, однозначно идентифицирующее |
- | |
2674 | сокет и имеющее смысл только для системы) - успешно; |
- | |
2675 | ebx разрушается |
- | |
2676 | - | ||
2677 | ====================================================================== |
- | |
2678 | ====== Функция 53, подфункция 6 - получить состояние TCP-сокета. ===== |
- | |
2679 | ====================================================================== |
- | |
2680 | Параметры: |
- | |
2681 | * eax = 53 - номер функции |
- | |
2682 | * ebx = 6 - номер подфункции |
- | |
2683 | * ecx = хэндл сокета |
- | |
2684 | Возвращаемое значение: |
- | |
2685 | * eax = 0 для неверного сокета или статус: одно из |
- | |
2686 | * TCB_LISTEN = 1 |
- | |
2687 | * TCB_SYN_SENT = 2 |
- | |
2688 | * TCB_SYN_RECEIVED = 3 |
- | |
2689 | * TCB_ESTABLISHED = 4 |
- | |
2690 | * TCB_FIN_WAIT_1 = 5 |
- | |
2691 | * TCB_FIN_WAIT_2 = 6 |
- | |
2692 | * TCB_CLOSE_WAIT = 7 |
- | |
2693 | * TCB_CLOSING = 8 |
- | |
2694 | * TCB_LAST_ASK = 9 |
- | |
2695 | * TCB_TIME_WAIT = 10 |
- | |
2696 | * TCB_CLOSED = 11 |
- | |
2697 | * ebx разрушается |
- | |
2698 | - | ||
2699 | ====================================================================== |
- | |
2700 | ========== Функция 53, подфункция 7 - записать в TCP-сокет. ========== |
- | |
2701 | ====================================================================== |
- | |
2702 | Параметры: |
- | |
2703 | * eax = 53 - номер функции |
- | |
2704 | * ebx = 7 - номер подфункции |
- | |
2705 | * ecx = хэндл сокета |
- | |
2706 | * edx = число байт для записи |
- | |
2707 | * esi = указатель на данные для записи |
- | |
2708 | Возвращаемое значение: |
- | |
2709 | * eax = 0xffffffff - ошибка (неверный хэндл или недостаточно памяти) |
- | |
2710 | * eax = 0 - успешно |
- | |
2711 | * ebx разрушается |
- | |
2712 | Замечания: |
- | |
2713 | * Число байт для записи не может превышать 1500-40, |
- | |
2714 | хотя соответствующей проверки не делается. |
- | |
2715 | - | ||
2716 | ====================================================================== |
- | |
2717 | ============ Функция 53, подфункция 8 - закрыть TCP-сокет. =========== |
- | |
2718 | ====================================================================== |
- | |
2719 | Параметры: |
- | |
2720 | * eax = 53 - номер функции |
- | |
2721 | * ebx = 8 - номер подфункции |
- | |
2722 | * ecx = хэндл сокета |
- | |
2723 | Возвращаемое значение: |
- | |
2724 | * eax = -1 - ошибка (неверный хэндл или |
- | |
2725 | недостаточно памяти для пакета закрытия сокета) |
- | |
2726 | * eax = 0 - успешно |
- | |
2727 | * ebx разрушается |
- | |
2728 | Замечания: |
- | |
2729 | * Текущая реализация не закрывает автоматически все сокеты потока |
- | |
2730 | при его завершении. В частности, не следует прибивать поток |
- | |
2731 | с кучей открытых сокетов - будет утечка ресурсов. |
- | |
2732 | - | ||
2733 | ====================================================================== |
- | |
2734 | == Функция 53, подфункция 9 - проверить, свободен ли локальный порт. = |
- | |
2735 | ====================================================================== |
- | |
2736 | Параметры: |
- | |
2737 | * eax = 53 - номер функции |
- | |
2738 | * ebx = 9 - номер подфункции |
- | |
2739 | * ecx = номер локального порта (используются только младшие 16 бит) |
- | |
2740 | Возвращаемое значение: |
- | |
2741 | * eax = 0 - порт используется |
- | |
2742 | * eax = 1 - порт свободен |
- | |
2743 | * ebx разрушается |
- | |
2744 | - | ||
2745 | ====================================================================== |
- | |
2746 | ==== Функция 53, подфункция 10 - получить статус кабеля Ethernet. ==== |
- | |
2747 | ====================================================================== |
- | |
2748 | Параметры: |
- | |
2749 | * eax = 53 - номер функции |
- | |
2750 | * ebx = 10 - номер подфункции |
- | |
2751 | Возвращаемое значение: |
- | |
2752 | * al = -1 - драйвер сетевой карты не загружен или |
- | |
2753 | не поддерживает эту функцию |
- | |
2754 | * al = 0 - кабель не подключён |
- | |
2755 | * al = 1 - кабель подключён |
- | |
2756 | * ebx разрушается |
- | |
2757 | Замечания: |
- | |
2758 | * Текущая реализация ядра поддерживает эту функцию |
- | |
2759 | только для сетевых карт RTL8139. |
- | |
2760 | - | ||
2761 | ====================================================================== |
- | |
2762 | ==== Функция 53, подфункция 11 - прочитать данные сетевого стека. ==== |
- | |
2763 | ====================================================================== |
- | |
2764 | Параметры: |
- | |
2765 | * eax = 53 - номер функции |
- | |
2766 | * ebx = 11 - номер подфункции |
- | |
2767 | * ecx = хэндл сокета |
- | |
2768 | * edx = указатель на буфер |
- | |
2769 | * esi = число байт для чтения; |
- | |
2770 | * esi = 0 - читать все данные (максимум 4096 байт) |
- | |
2771 | Возвращаемое значение: |
- | |
2772 | * eax = число прочитанных байт (0 при неверном хэндле) |
- | |
2773 | * ebx разрушается |
- | |
2774 | - | ||
2775 | ====================================================================== |
- | |
2776 | Функция 53, подфункция 255 - отладочная информация сетевого драйвера. |
- | |
2777 | ====================================================================== |
- | |
2778 | Параметры: |
- | |
2779 | * eax = 53 - номер функции |
- | |
2780 | * ebx = 255 - номер подфункции |
- | |
2781 | * ecx = тип запрашиваемой информации (смотри ниже) |
- | |
2782 | Возвращаемое значение: |
- | |
2783 | * eax = запрошенная информация |
- | |
2784 | * ebx разрушается |
- | |
2785 | Возможные значения ecx: |
- | |
2786 | * 100: длина очереди 0 (empty queue) |
- | |
2787 | * 101: длина очереди 1 (ip-out queue) |
- | |
2788 | * 102: длина очереди 2 (ip-in queue) |
- | |
2789 | * 103: длина очереди 3 (net1out queue) |
- | |
2790 | * 200: число элементов в таблице ARP |
- | |
2791 | * 201: размер таблицы ARP (в элементах) (20 в текущей версии) |
- | |
2792 | * 202: прочитать элемент edx таблицы ARP во временный буфер, откуда |
- | |
2793 | берут информацию 5 последующих типов; |
- | |
2794 | в этом случае eax неопределён |
- | |
2795 | * 203: IP-адрес, запомненный типом 202 |
- | |
2796 | * 204: старшее dword MAC-адреса, запомненного типом 202 |
- | |
2797 | * 205: младшее word MAC-адреса, запомненного типом 202 |
- | |
2798 | * 206: слово статуса, запомненное типом 202 |
- | |
2799 | * 207: слово ttl, запомненное типом 202 |
- | |
2800 | * 2: общее число полученных IP-пакетов |
- | |
2801 | * 3: общее число переданных IP-пакетов |
- | |
2802 | * 4: общее число сдампленных полученных пакетов |
- | |
2803 | * 5: общее число полученных ARP-пакетов |
- | |
2804 | * 6: статус драйвера пакетов, 0=неактивен, |
- | |
2805 | ненулевое значение=активен |
- | |
2806 | - | ||
2807 | ====================================================================== |
2422 | ====================================================================== |
2808 | ====================== Функция 55, подфункция 55 ===================== |
2423 | ====================== Функция 55, подфункция 55 ===================== |
2809 | ========== Начать проигрывать данные на встроенном спикере. ========== |
2424 | ========== Начать проигрывать данные на встроенном спикере. ========== |
2810 | ====================================================================== |
2425 | ====================================================================== |
2811 | Параметры: |
2426 | Параметры: |