Использование индекса NET_LUID
NDIS предоставляет функции для выделения и освобождения NET_LUID индексов, необходимых для создания NET_LUID значений. Поставщик интерфейса NDIS должен выделить значение NET_LUID для регистрации интерфейса.
Чтобы выделить индекс NET_LUID, поставщик интерфейса вызывает функцию NdisIfAllocateNetLuidIndex . После выделения индекса поставщик интерфейса вызывает макрос NDIS_MAKE_NET_LUID для построения значения NET_LUID. Чтобы освободить индекс NET_LUID, поставщик интерфейса вызывает функцию NdisIfFreeNetLuidIndex .
NdisIfAllocateNetLuidIndex пытается выделить 24-разрядное значение, связанное с типом интерфейса, указанным вызывающим объектом в параметре IfType , и уникальное для локального компьютера. Если выделение индекса выполнено успешно, NdisIfAllocateNetLuidIndex возвращает NDIS_STATUS_SUCCESS и предоставляет индекс NET_LUID по адресу, указанному в параметре pNetLuidIndex . Если NDIS не удается найти свободный индекс NET_LUID, NdisIfAllocateNetLuidIndex возвращает NDIS_STATUS_RESOURCES. NdisIfAllocateNetLuidIndex может возвращать другие значения состояния NDIS, чтобы указать на внутренние ошибки в NDIS. NDIS записывает выделение этого индекса для момента последующей перезагрузки компьютера. NDIS не будет использовать определенный индекс для будущих вызывающих объектов даже после перезагрузки компьютера, пока поставщик интерфейса, который выделил этот индекс, не вызовет функцию NdisIfFreeNetLuidIndex для этого индекса.
NdisIfFreeNetLuidIndex освобождает ранее выделенный NET_LUID индекс, чтобы NDIS мог перераспределить этот индекс в другой интерфейс. Вызывающий объект должен передать тот же тип интерфейса в IfType , что и вызывающий объект при вызове NdisIfAllocateNetLuidIndex для выделения индекса NET_LUID. Если бесплатная операция завершается успешно, функция NdisIfFreeNetLuidIndex возвращает NDIS_STATUS_SUCCESS. Если вызов NdisIfFreeNetLuidIndex завершается сбоем, поставщик интерфейса должен удалить все сведения, сохраненные в постоянном хранилище, связанном с индексом NET_LUID. Удаление сведений гарантирует, что поставщик не будет пытаться освободить индекс, который уже освобождается после каждой перезагрузки компьютера. После вызова NdisIfFreeNetLuidIndex вызывающий объект не должен повторно использовать значение NET_LUID, если он не вызовет NdisIfAllocateNetLuidIndex для того же типа интерфейса и не получит тот же индекс NET_LUID, который он освободил.
Чтобы зарегистрировать сетевой интерфейс, поставщик интерфейса должен передать допустимое значение NET_LUID функции NdisIfRegisterInterface . Дополнительные сведения о регистрации сетевых интерфейсов см. в разделе Регистрация сетевого интерфейса.