SysFn46/ru: Difference between revisions
Jump to navigation
Jump to search
Punk Joker (talk | contribs) No edit summary |
mNo edit summary |
||
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)
|