Difference between revisions of "SysFn46/ru"
Jump to navigation
Jump to search
Punk Joker (talk | contribs) |
m |
||
Line 3: | Line 3: | ||
---- | ---- | ||
'''Внимание:''' | '''Внимание:''' | ||
− | * Эта функция устарела и может быть удалена в следующих версиях ядра. | + | :* Эта функция устарела и может быть удалена в следующих версиях ядра. |
− | * При необходимости прямого (бездрайверного) ввода/вывода в порты и в память внешних устройств рекомендуется использовать [[SysFn62|функцию 62]] | + | :* При необходимости прямого (бездрайверного) ввода/вывода в порты и в память внешних устройств рекомендуется использовать [[SysFn62/ru|функцию 62]] |
− | К зарезервированным портам можно обращаться напрямую из приложения командами in/out (рекомендуемый способ) и вызовом функции 43 (нерекомендуемый способ). | + | К зарезервированным портам можно обращаться напрямую из приложения командами in/out (рекомендуемый способ) и вызовом [[SysFn43/ru|функции 43]] (нерекомендуемый способ). |
Параметры: | Параметры: | ||
− | * eax = 46 - номер функции | + | :* eax = 46 - номер функции |
− | * ebx = 0 - зарезервировать, 1 - освободить | + | :* ebx = 0 - зарезервировать, 1 - освободить |
− | * ecx = номер начала диапазона портов | + | :* ecx = номер начала диапазона портов |
− | * edx = номер конца диапазона портов (включительно) | + | :* edx = номер конца диапазона портов (включительно) |
Возвращаемое значение: | Возвращаемое значение: | ||
− | * eax = 0 - успешно | + | :* eax = 0 - успешно |
− | * eax = 1 - ошибка | + | :* eax = 1 - ошибка |
Замечания: | Замечания: | ||
− | * В случае резервирования портов ошибкой считается выполнение одного из условий: | + | :* В случае резервирования портов ошибкой считается выполнение одного из условий: |
− | :* начальный адрес больше конечного; | + | ::* начальный адрес больше конечного; |
− | :* указанный диапазон содержит некорректный номер порта (корректные - от 0 до 0xFFFF); | + | ::* указанный диапазон содержит некорректный номер порта (корректные - от 0 до 0xFFFF); |
− | :* превышено ограничение на общее число зарезервированных областей - допускается максимум 255; | + | ::* превышено ограничение на общее число зарезервированных областей - допускается максимум 255; |
− | :* указанный диапазон пересекается с одним из ранее зарезервированных | + | ::* указанный диапазон пересекается с одним из ранее зарезервированных |
− | * В случае освобождения портов ошибкой считается попытка освобождения диапазона, который ранее не был целиком зарезервирован этой же функцией (с такими же значениями ecx,edx). | + | :* В случае освобождения портов ошибкой считается попытка освобождения диапазона, который ранее не был целиком зарезервирован этой же функцией (с такими же значениями ecx,edx). |
− | * При обнаружении ошибки (в обоих случаях) никаких действий не производится. | + | :* При обнаружении ошибки (в обоих случаях) никаких действий не производится. |
− | * При загрузке система резервирует за собой порты 0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (включительно). | + | :* При загрузке система резервирует за собой порты 0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (включительно). |
− | * При завершении потока автоматически освобождаются все зарезервированные им порты. | + | :* При завершении потока автоматически освобождаются все зарезервированные им порты. |
+ | '''Константы для регистров:''' | ||
+ | ::eax - SF_SET_PORTS (46) | ||
{{System_functions}} | {{System_functions}} | ||
[[Category: SysCalls]] | [[Category: SysCalls]] |
Revision as of 18:21, 17 January 2016
Функция 46 - зарезервировать/освободить группу портов ввода/вывода
Внимание:
- Эта функция устарела и может быть удалена в следующих версиях ядра.
- При необходимости прямого (бездрайверного) ввода/вывода в порты и в память внешних устройств рекомендуется использовать функцию 62
К зарезервированным портам можно обращаться напрямую из приложения командами in/out (рекомендуемый способ) и вызовом функции 43 (нерекомендуемый способ). Параметры:
- eax = 46 - номер функции
- ebx = 0 - зарезервировать, 1 - освободить
- ecx = номер начала диапазона портов
- edx = номер конца диапазона портов (включительно)
Возвращаемое значение:
- eax = 0 - успешно
- eax = 1 - ошибка
Замечания:
- В случае резервирования портов ошибкой считается выполнение одного из условий:
- начальный адрес больше конечного;
- указанный диапазон содержит некорректный номер порта (корректные - от 0 до 0xFFFF);
- превышено ограничение на общее число зарезервированных областей - допускается максимум 255;
- указанный диапазон пересекается с одним из ранее зарезервированных
- В случае освобождения портов ошибкой считается попытка освобождения диапазона, который ранее не был целиком зарезервирован этой же функцией (с такими же значениями ecx,edx).
- При обнаружении ошибки (в обоих случаях) никаких действий не производится.
- При загрузке система резервирует за собой порты 0..0x2d, 0x30..0x4d, 0x50..0xdf, 0xe5..0xff (включительно).
- При завершении потока автоматически освобождаются все зарезервированные им порты.
Константы для регистров:
- eax - SF_SET_PORTS (46)
|