estrutura NDIS_OID_REQUEST (ndis/oidrequest.h)

Para consultar ou definir informações de OID, o NDIS envia estruturas de NDIS_OID_REQUEST para filtrar drivers e miniportores.

Sintaxe

typedef struct _NDIS_OID_REQUEST {
  NDIS_OBJECT_HEADER       Header;
  NDIS_REQUEST_TYPE        RequestType;
  NDIS_PORT_NUMBER         PortNumber;
  UINT                     Timeout;
  PVOID                    RequestId;
  NDIS_HANDLE              RequestHandle;
  union {
    NDIS_OID Oid;
    struct {
      NDIS_OID Oid;
      PVOID    InformationBuffer;
      UINT     InformationBufferLength;
      UINT     BytesWritten;
      UINT     BytesNeeded;
    } QUERY_INFORMATION;
    struct {
      NDIS_OID Oid;
      PVOID    InformationBuffer;
      UINT     InformationBufferLength;
      UINT     BytesRead;
      UINT     BytesNeeded;
    } SET_INFORMATION;
    struct {
      NDIS_OID Oid;
      PVOID    InformationBuffer;
      ULONG    InputBufferLength;
      ULONG    OutputBufferLength;
      ULONG    MethodId;
      UINT     BytesWritten;
      UINT     BytesRead;
      UINT     BytesNeeded;
    } METHOD_INFORMATION;
  } DATA;
  _REQUEST_DATA            _REQUEST_DATA;
  UCHAR                    *NdisReserved[NDIS_OID_REQUEST_NDIS_RESERVED_SIZE  sizeof(PVOID)];
  UCHAR                    *MiniportReserved[2  sizeof(PVOID)];
  UCHAR                    *SourceReserved[2  sizeof(PVOID)];
  UCHAR                    SupportedRevision;
  UCHAR                    Reserved1;
  USHORT                   Reserved2;
  NDIS_NIC_SWITCH_ID       SwitchId;
  NDIS_NIC_SWITCH_VPORT_ID VPortId;
  ULONG                    Flags;
} NDIS_OID_REQUEST, *PNDIS_OID_REQUEST;

Membros

Header

A estrutura NDIS_OBJECT_HEADER para a estrutura NDIS_OID_REQUEST. Defina o membro Type como NDIS_OBJECT_TYPE_OID_REQUEST. Para indicar a versão da estrutura NDIS_OID_REQUEST, defina o membro Revision como um dos seguintes valores:

NDIS_OID_REQUEST_REVISION_2

Foram adicionados os membros SwitchId, VPortId e Flags para o NDIS 6.50.

Defina o membro Tamanho do Cabeçalho como NDIS_SIZEOF_OID_REQUEST_REVISION_2.

NDIS_OID_REQUEST_REVISION_1

Versão original do NDIS 6.0.

Defina o membro Tamanho do Cabeçalho como NDIS_SIZEOF_OID_REQUEST_REVISION_1.

RequestType

O tipo de solicitação como um dos valores de enumeração NDIS_REQUEST_TYPE .

PortNumber

A porta para a qual a solicitação é enviada. Se a porta for desconhecida ou padrão, esse membro será zero.

Timeout

Um tempo limite, em segundos, para a solicitação. O NDIS pode redefinir o driver ou cancelar a solicitação se o tempo limite expirar antes que o driver conclua a solicitação.

RequestId

Um identificador para a solicitação. Se um driver de miniporto precisar concluir uma solicitação imediatamente e concluir a solicitação com um status de NDIS_STATUS_INDICATION_REQUIRED, o driver de miniporto usará esse valor RequestId para definir o membro RequestId da estrutura NDIS_STATUS_INDICATION associada.

Os drivers NDIS ou sobrepostos também podem usar o RequestId para cancelar uma solicitação. Quando um driver de miniporto recebe uma solicitação de cancelamento, o driver de miniporta cancela todas as solicitações pendentes com uma RequestId correspondente. Se RequestId for zero, o driver de miniporto poderá ignorar esse membro. Para obter mais informações sobre status indicações, consulte a seção Comentários a seguir.

RequestHandle

Um identificador que identifica a origem que emitiu a solicitação OID. Se um driver de miniporto precisar concluir a solicitação imediatamente e concluir a solicitação com uma status de NDIS_STATUS_INDICATION_REQUIRED, o driver de miniporto usará esse valor RequestHandle para definir o membro DestinationHandle da estrutura NDIS_STATUS_INDICATION associada. Nesse caso, o NDIS enviará apenas a indicação de status subsequente para a origem que emitiu a solicitação OID.

Para obter mais informações sobre status indicações, consulte a seção Comentários a seguir.

DATA

Uma união que define os dados da solicitação. As informações nos dados variam de acordo com o tipo de solicitação, conforme especificado pelo membro RequestType . As seguintes estruturas de membro são especificadas:

DATA.Oid

DATA.QUERY_INFORMATION

Essa estrutura contém os parâmetros para um tipo de solicitação NdisRequestQueryInformation ou NdisRequestQueryStatistics . Essa estrutura é especificada da seguinte maneira:


struct _QUERY
  {
    NDIS_OID    Oid;
    PVOID       InformationBuffer;
    UINT        InformationBufferLength;
    UINT        BytesWritten;
    UINT        BytesNeeded;
  } QUERY_INFORMATION;

DATA.QUERY_INFORMATION.Oid

O identificador de objeto da operação solicitada. O valor é um código XXX OID_.

DATA.QUERY_INFORMATION.InformationBuffer

Um ponteiro para um buffer no qual o driver subjacente ou o NDIS retorna as informações solicitadas para solicitações de informações de consulta.

DATA.QUERY_INFORMATION.InformationBufferLength

O tamanho, em bytes, do buffer no InformationBuffer. O valor em Oid determina o valor apropriado para esse membro.

DATA.QUERY_INFORMATION.BytesWritten

O número de bytes que o driver subjacente ou o NDIS transfere para o buffer no InformationBuffer para solicitações de informações de consulta. Se a função NdisOidRequest retornar NDIS_STATUS_INVALID_LENGTH, o valor desse membro não tem sentido.

DATA.QUERY_INFORMATION.BytesNeeded

O número de bytes necessários para retornar as informações de consulta solicitadas pelo código XXX OID_ determinado.

Se NdisOidRequest retornar NDIS_STATUS_SUCCESS, o valor desse membro não tem sentido. Se InformationBufferLength for muito pequeno para o OID_ XXX fornecido em uma solicitação de consulta, esse membro indicará o tamanho de um buffer necessário para atender à solicitação.

DATA.SET_INFORMATION

Essa estrutura contém os parâmetros para um tipo de solicitação NdisRequestSetInformation . Essa estrutura é especificada da seguinte maneira:


struct _SET
  {
    NDIS_OID    Oid;
    PVOID       InformationBuffer;
    UINT        InformationBufferLength;
    UINT        BytesRead;
    UINT        BytesNeeded;
  } SET_INFORMATION;

DATA.SET_INFORMATION.Oid

O identificador de objeto da operação solicitada. O valor é um código XXX OID_.

DATA.SET_INFORMATION.InformationBuffer

Um ponteiro para um buffer do qual o driver subjacente lê informações fornecidas pelo chamador para solicitações de set-information.

DATA.SET_INFORMATION.InformationBufferLength

O tamanho, em bytes, do buffer no InformationBuffer. O valor em Oid determina o valor apropriado para esse membro.

DATA.SET_INFORMATION.BytesRead

O número de bytes que o driver subjacente leu do buffer no InformationBuffer para solicitações de set-information.

DATA.SET_INFORMATION.BytesNeeded

O número de bytes necessários para executar a operação de conjunto solicitada pelo código XXX OID_ determinado.

Se NdisOidRequest retornar NDIS_STATUS_SUCCESS, o valor desse membro não tem sentido. Se o buffer no InformationBuffer não contiver dados suficientes para o OID_ XXX fornecido em uma solicitação definida, esse membro indicará quantos dados são necessários.

DATA.METHOD_INFORMATION

Essa estrutura contém os parâmetros para um tipo de solicitação NdisRequestMethod . Essa estrutura é especificada da seguinte maneira:


struct _METHOD
  {
    NDIS_OID            Oid;
    PVOID               InformationBuffer;
    ULONG               InputBufferLength;
    ULONG               OutputBufferLength;
    ULONG               MethodId;
    UINT                BytesWritten;
    UINT                BytesRead;
    UINT                BytesNeeded;
  } METHOD_INFORMATION;

DATA.METHOD_INFORMATION.Oid

O identificador de objeto da operação solicitada. O valor é um código XXX OID_.

DATA.METHOD_INFORMATION.InformationBuffer

Um ponteiro para um buffer no qual o driver subjacente ou o NDIS retorna as informações solicitadas para operações de consulta ou do qual o driver subjacente lê informações fornecidas pelo chamador para operações definidas. Essas operações são específicas para o tipo de tipo de solicitação NdisRequestMethod que está sendo feito.

Nota Esse buffer é usado para solicitações set-information e query-information. Como resultado, os dados no buffer para a solicitação set-information seriam substituídos por dados retornados para a solicitação de informações de consulta. O uso exato depende da operação solicitada, conforme especificado pelo membro Oid .
 

DATA.METHOD_INFORMATION.InputBufferLength

O tamanho, em bytes, dos dados legíveis no buffer no InformationBuffer. O valor em Oid determina o valor apropriado para esse membro.

DATA.METHOD_INFORMATION.OutputBufferLength

O número de bytes no buffer no InformationBuffer que o driver pode gravar.

DATA.METHOD_INFORMATION.MethodId

O método a ser executado para um método OID. Uma solicitação OID de método pode dar suporte a várias operações conforme definido por MethodId. Pode ser qualquer valor maior ou igual a zero. Zero indica o método padrão. O NDIS pode definir OIDs de método público com alguns métodos predefinidos. Os drivers de miniport podem definir OIDs de método personalizado. Para obter mais informações sobre OIDs personalizados, consulte OID_GEN_SUPPORTED_GUIDS.

DATA.METHOD_INFORMATION.BytesWritten

O número de bytes que o driver subjacente ou o NDIS transfere para o buffer no InformationBuffer para solicitações de informações de consulta. Se a função NdisOidRequest retornar NDIS_STATUS_INVALID_LENGTH, o valor desse membro não tem sentido.

Para OIDs de método, BytesWritten deve ser menor ou igual ao valor no membro OutputBufferLength .

DATA.METHOD_INFORMATION.BytesRead

O número de bytes que o driver subjacente leu do buffer no InformationBuffer para solicitações de set-information.

Para OIDs de método, BytesRead deve ser menor ou igual ao valor no membro InputBufferLength .

DATA.METHOD_INFORMATION.BytesNeeded

O número de bytes necessários para retornar informações de consulta ou para executar a operação de conjunto solicitada pelo código XXX OID_ determinado.

Se NdisOidRequest retornar NDIS_STATUS_SUCCESS, o valor desse membro não tem sentido. Se InformationBufferLength for muito pequeno para o OID_ XXX fornecido em uma consulta, esse membro indicará o tamanho de um buffer necessário para atender à solicitação. Se o buffer no InformationBuffer não contiver dados suficientes para o OID_ XXX fornecido em um conjunto, esse membro indicará a quantidade de dados necessária.

_REQUEST_DATA

NdisReserved[NDIS_OID_REQUEST_NDIS_RESERVED_SIZE * sizeof(PVOID)]

Uma área reservada para NDIS.

MiniportReserved[2 * sizeof(PVOID)]

Uma área reservada para o driver de miniporto.

SourceReserved[2 * sizeof(PVOID)]

Uma área reservada para o driver de origem. Reservado para o alocador da estrutura de NDIS_OID_REQUEST. Geralmente, esse é um driver de protocolo NDIS ou um driver de filtro NDIS.

SupportedRevision

A revisão de uma estrutura NDIS com suporte de um driver NDIS 6.0 ou posterior quando ele lidou com uma solicitação OID. Uma estrutura com revisão é qualquer estrutura NDIS 6.0 que tenha uma estrutura NDIS_OBJECT_HEADER dentro dela. Quando o driver tiver êxito na configuração de um OID, ele deverá definir SupportedRevision como o número de revisão da estrutura com suporte. Para obter mais informações sobre informações de versão do NDIS, consulte Especificando informações de versão do NDIS.

Reserved1

Reservado para uso futuro.

Reserved2

Reservado para uso futuro.

SwitchId

Um valor NDIS_NIC_SWITCH_ID que identifica a opção na qual o VPort de destino, especificado por VPortId, está em execução.

Observação

Esse campo tem suporte no NDIS 6.50 e posterior.

VPortId

Um valor NDIS_NIC_SWITCH_VPORT_ID que identifica o VPort que essa solicitação OID está direcionando. Esse campo será considerado válido somente se o sinalizador NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID estiver definido.

Observação

Esse campo tem suporte no NDIS 6.50 e posterior.

Flags

Um valor ULONG que contém um OR bit a bit de sinalizadores para essa solicitação OID. Atualmente, há suporte para esses sinalizadores:

Sinalizador Valor Descrição
NDIS_OID_REQUEST_FLAGS_VPORT_ID_VALID 0x0001 Quando esse sinalizador é definido, o membro VportId é considerado válido e identifica o VPort ao qual o OID é direcionado. Se esse sinalizador não estiver definido, o OID será para o adaptador de miniporte em si.

Observação

Esse campo tem suporte no NDIS 6.50 e posterior.

Comentários

Um driver de protocolo ou um driver de filtro deve alocar memória nãopagada para o buffer no InformationBuffer e para a estrutura NDIS_OID_REQUEST. O uso de dados alocados da memória paginada pode causar falhas fatais de página porque os drivers subjacentes são executados em IRQL = DISPATCH_LEVEL realizar a operação solicitada.

NDIS_OID_REQUEST contém uma subestrutura DATA para cada tipo de operação que um driver de protocolo pode solicitar de um driver subjacente. Antes de chamar NdisOidRequest, o driver de protocolo preenche os membros relevantes da subestrutura que representa a consulta ou a operação de definição especificada no membro Oid . O NDIS ou o driver subjacente preenche os membros restantes antes de retornar o controle ao chamador.

Algumas solicitações de OID permitem que um driver de miniporte forneça uma status de conclusão de OID com uma indicação de status. Nesse caso, o driver de miniporto retorna NDIS_STATUS_INDICATION_REQUIRED para o status de conclusão da solicitação OID. Um driver de miniporte não pode retornar esse status, a menos que o OID específico o permita. Para determinar se esse status é permitido, consulte a página de referência OID.

Se uma indicação de status estiver associada a uma solicitação OID em que o driver de miniporto retornou NDIS_STATUS_INDICATION_REQUIRED, o driver que está fazendo a indicação status deverá definir os membros DestinationHandle e RequestId na estrutura NDIS_STATUS_INDICATION.

Nesse caso, o driver define os membros DestinationHandle e RequestId para os valores dos membros RequestHandle e RequestId na estrutura NDIS_OID_REQUEST, respectivamente.

Por exemplo, na rede sem fio, o processamento de uma solicitação OID pode levar muito tempo para ser concluído. Nesse caso, o driver de miniporto pode concluir a solicitação OID imediatamente e fornecer uma indicação status posteriormente para fornecer o resultado final para a solicitação OID.

Os tipos NdisRequestGenericn(1-4) estão disponíveis para drivers de miniporto que criam suas próprias solicitações internas. Para implementar essa solicitação, um driver de miniporto atribui uma variável interna a um desses tipos genéricos.

Requisitos

Requisito Valor
Cliente mínimo com suporte Com suporte no NDIS 6.0 e posterior.
Cabeçalho ndis/oidrequest.h (inclua ndis.h)

Confira também

NDIS_OBJECT_HEADER

NDIS_REQUEST_TYPE

NDIS_STATUS_INDICATION

NdisOidRequest

OID_GEN_SUPPORTED_GUIDS