Фиксирование линейного адреса блока памяти
В некоторых случаях вам необходимо запретить изменение линейного адреса блока памяти, которое выполняется в процессе перемещения. Такое изменение выполняется заменой базового адреса в соответствующем дескрипторе локальной таблицы дескрипторов. В результате при перемещении блока логический адрес остается постоянным (так как при перемещении блока ему не присваивается новый дескриптор, а логический адрес состоит из ссылки на дескриптор, номера запрошенного кольца защиты и смещения), в то время как линейный может изменяться.
Если драйвер какого-либо устройства ввода/вывода работает с линейным адресом буфера, память, отведенная для такого буфера в некоторых случаях должна быть зафиксирована функцией GlobalFix :
void WINAPI GlobalFix(HGLOBAL hglb);
Параметр функции указывает идентификатор фиксируемого блока памяти.
Как только отпадет необходимость в фиксировании блока памяти, его следует расфиксировать, вызвав функцию GlobalUnfix :
void WINAPI GlobalUnfix(HGLOBAL hglb);
Единственный параметр этой функции должен содержать идентификатор блока памяти, который будет расфиксирован.