tdikrnl.h

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 1,163 行 · 第 1/3 页

H
1,163
字号
  /*IN*/ PVOID  TdiEventContext,
  /*IN*/ PVOID  ConnectionContext,
  /*IN*/ ULONG  BytesAvailable);



  /* Macros and functions to build IRPs */

#define TdiBuildBaseIrp(                                                  \
  bIrp, bDevObj, bFileObj, bCompRoutine, bContxt, bIrpSp, bMinor)         \
{                                                                         \
  bIrpSp->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;                 \
  bIrpSp->MinorFunction = (bMinor);                                       \
  bIrpSp->DeviceObject  = (bDevObj);                                      \
  bIrpSp->FileObject    = (bFileObj);                                     \
  if (bCompRoutine)                                                       \
    IoSetCompletionRoutine(bIrp, bCompRoutine, bContxt, TRUE, TRUE, TRUE) \
  else                                                                    \
    IoSetCompletionRoutine(bIrp, NULL, NULL, FALSE, FALSE, FALSE);        \
}

  /*
 * VOID
 * TdiBuildAccept(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
 * OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo);
 */
#define TdiBuildAccept(                                             \
  Irp, DevObj, FileObj, CompRoutine, Contxt,                        \
  RequestConnectionInfo, ReturnConnectionInfo)                      \
{                                                                   \
  PTDI_REQUEST_KERNEL_ACCEPT _Request;                              \
  PIO_STACK_LOCATION _IrpSp;                                        \
                                                                    \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
                                                                    \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
                  Contxt, _IrpSp, TDI_ACCEPT);                      \
                                                                    \
  _Request = (PTDI_REQUEST_KERNEL_ACCEPT)&_IrpSp->Parameters;       \
  _Request->RequestConnectionInformation = (RequestConnectionInfo); \
  _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
}

  /*
 * VOID
 * TdiBuildAction(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN PMDL  MdlAddr);
 */
#define TdiBuildAction(                               \
  Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr) \
{                                                     \
  PIO_STACK_LOCATION _IrpSp;                          \
                                                      \
  _IrpSp = IoGetNextIrpStackLocation(Irp);            \
                                                      \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,  \
                  Contxt, _IrpSp, TDI_ACTION);        \
                                                      \
  (Irp)->MdlAddress = (MdlAddr);                      \
}

  /*
 * VOID
 * TdiBuildAssociateAddress(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN HANDLE  AddrHandle);
 */
#define TdiBuildAssociateAddress(                                \
  Irp, DevObj, FileObj, CompRoutine, Contxt, AddrHandle)         \
{                                                                \
  PTDI_REQUEST_KERNEL_ASSOCIATE _Request;                        \
  PIO_STACK_LOCATION _IrpSp;                                     \
                                                                 \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                       \
                                                                 \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \
                  Contxt, _IrpSp, TDI_ASSOCIATE_ADDRESS);        \
                                                                 \
  _Request = (PTDI_REQUEST_KERNEL_ASSOCIATE)&_IrpSp->Parameters; \
  _Request->AddressHandle = (HANDLE)(AddrHandle);                \
}

  /*
 * VOID
 * TdiBuildConnect(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN PLARGE_INTEGER  Time,
 * IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
 * OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo); 
 */
#define TdiBuildConnect(                                            \
  Irp, DevObj, FileObj, CompRoutine, Contxt,                        \
  Time, RequestConnectionInfo, ReturnConnectionInfo)                \
{                                                                   \
  PTDI_REQUEST_KERNEL _Request;                                     \
  PIO_STACK_LOCATION _IrpSp;                                        \
                                                                    \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
                                                                    \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
                  Contxt, _IrpSp, TDI_CONNECT);                     \
                                                                    \
  _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \
  _Request->RequestConnectionInformation = (RequestConnectionInfo); \
  _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
  _Request->RequestSpecific              = (PVOID)(Time);           \
}

  /*
 * VOID
 * TdiBuildDisassociateAddress(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt);
 */
#define TdiBuildDisassociateAddress(                                \
  Irp, DevObj, FileObj, CompRoutine, Contxt)                        \
{                                                                   \
  PIO_STACK_LOCATION _IrpSp;                                        \
                                                                    \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
                                                                    \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
                  Contxt, _IrpSp, TDI_DISASSOCIATE_ADDRESS);        \
}

  /*
 * VOID
 * TdiBuildDisconnect(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN PLARGE_INTEGER  Time,
 * IN PULONG  Flags,
 * IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
 * OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo); 
 */
#define TdiBuildDisconnect(                                         \
  Irp, DevObj, FileObj, CompRoutine, Contxt, Time,                  \
  Flags, RequestConnectionInfo, ReturnConnectionInfo)               \
{                                                                   \
  PTDI_REQUEST_KERNEL _Request;                                     \
  PIO_STACK_LOCATION _IrpSp;                                        \
                                                                    \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
                                                                    \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
                  Contxt, _IrpSp, TDI_DISCONNECT);                  \
                                                                    \
  _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \
  _Request->RequestConnectionInformation = (RequestConnectionInfo); \
  _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
  _Request->RequestSpecific = (PVOID)(Time);                        \
  _Request->RequestFlags    = (Flags);                              \
}

  /*
 * PIRP
 * TdiBuildInternalDeviceControlIrp(
 * IN CCHAR IrpSubFunction,
 * IN PDEVICE_OBJECT DeviceObject,
 * IN PFILE_OBJECT FileObject,
 * IN PKEVENT Event,
 * IN PIO_STATUS_BLOCK IoStatusBlock);
 */
#define TdiBuildInternalDeviceControlIrp( \
  IrpSubFunction, DeviceObject,           \
  FileObject, Event, IoStatusBlock)       \
  IoBuildDeviceIoControlRequest(          \
		0x00000003, DeviceObject,             \
		NULL, 0, NULL, 0,                     \
		TRUE, Event, IoStatusBlock)

  /*
 * VOID
 * TdiBuildListen(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN ULONG  Flags,
 * IN PTDI_CONNECTION_INFORMATION  RequestConnectionInfo,
 * OUT PTDI_CONNECTION_INFORMATION  ReturnConnectionInfo); 
 */
#define TdiBuildListen(                                             \
  Irp, DevObj, FileObj, CompRoutine, Contxt,                        \
  Flags, RequestConnectionInfo, ReturnConnectionInfo)               \
{                                                                   \
  PTDI_REQUEST_KERNEL _Request;                                     \
  PIO_STACK_LOCATION _IrpSp;                                        \
                                                                    \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                          \
                                                                    \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                \
                  Contxt, _IrpSp, TDI_LISTEN);                      \
                                                                    \
  _Request = (PTDI_REQUEST_KERNEL)&_IrpSp->Parameters;              \
  _Request->RequestConnectionInformation = (RequestConnectionInfo); \
  _Request->ReturnConnectionInformation  = (ReturnConnectionInfo);  \
  _Request->RequestFlags = (Flags);                                 \
}

TDIKRNLAPI
VOID
DDKAPI
TdiBuildNetbiosAddress(
  /*IN*/ PUCHAR  NetbiosName,
  /*IN*/ BOOLEAN  IsGroupName,
  /*IN OUT*/ PTA_NETBIOS_ADDRESS  NetworkName);

TDIKRNLAPI
NTSTATUS
DDKAPI
TdiBuildNetbiosAddressEa(
  /*IN*/ PUCHAR  Buffer,
  /*IN*/ BOOLEAN  IsGroupName,
  /*IN*/ PUCHAR  NetbiosName);

  /*
 * VOID
 * TdiBuildQueryInformation(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN UINT  QType,
 * IN PMDL  MdlAddr);
 */
#define TdiBuildQueryInformation(                                        \
  Irp, DevObj, FileObj, CompRoutine, Contxt, QType, MdlAddr)             \
{                                                                        \
  PTDI_REQUEST_KERNEL_QUERY_INFORMATION _Request;                        \
  PIO_STACK_LOCATION _IrpSp;                                             \
                                                                         \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                               \
                                                                         \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,                     \
                  Contxt, _IrpSp, TDI_QUERY_INFORMATION);                \
                                                                         \
  _Request = (PTDI_REQUEST_KERNEL_QUERY_INFORMATION)&_IrpSp->Parameters; \
  _Request->RequestConnectionInformation = NULL;                         \
  _Request->QueryType = (ULONG)(QType);                                  \
  (Irp)->MdlAddress   = (MdlAddr);                                       \
}

  /*
 * VOID
 * TdiBuildReceive(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN PMDL  MdlAddr,
 * IN ULONG  InFlags, 
 * IN ULONG  ReceiveLen); 
 */
#define TdiBuildReceive(                                       \
  Irp, DevObj, FileObj, CompRoutine, Contxt,                   \
  MdlAddr, InFlags, ReceiveLen)                                \
{                                                              \
  PTDI_REQUEST_KERNEL_RECEIVE _Request;                        \
  PIO_STACK_LOCATION _IrpSp;                                   \
                                                               \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                     \
                                                               \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,           \
                  Contxt, _IrpSp, TDI_RECEIVE);                \
                                                               \
  _Request = (PTDI_REQUEST_KERNEL_RECEIVE)&_IrpSp->Parameters; \
  _Request->ReceiveFlags  = (InFlags);                         \
  _Request->ReceiveLength = (ReceiveLen);                      \
  (Irp)->MdlAddress       = (MdlAddr);                         \
}

  /*
 * VOID
 * TdiBuildReceiveDatagram(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN PMDL  MdlAddr,
 * IN ULONG  ReceiveLen,
 * IN PTDI_CONNECTION_INFORMATION  ReceiveDatagramInfo,
 * OUT PTDI_CONNECTION_INFORMATION  ReturnInfo,
 *   ULONG InFlags); 
 */
#define TdiBuildReceiveDatagram(                                 \
  Irp, DevObj, FileObj, CompRoutine, Contxt, MdlAddr,            \
  ReceiveLen, ReceiveDatagramInfo, ReturnInfo, InFlags)          \
{                                                                \
  PTDI_REQUEST_KERNEL_RECEIVEDG _Request;                        \
  PIO_STACK_LOCATION _IrpSp;                                     \
                                                                 \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                       \
                                                                 \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,             \
                  Contxt, _IrpSp, TDI_RECEIVE_DATAGRAM);         \
                                                                 \
  _Request = (PTDI_REQUEST_KERNEL_RECEIVEDG)&_IrpSp->Parameters; \
  _Request->ReceiveDatagramInformation = (ReceiveDatagramInfo);  \
  _Request->ReturnDatagramInformation  = (ReturnInfo);           \
  _Request->ReceiveLength = (ReceiveLen);                        \
  _Request->ReceiveFlags  = (InFlags);                           \
  (Irp)->MdlAddress       = (MdlAddr);                           \
}

  /*
 * VOID
 * TdiBuildSend(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN PMDL  MdlAddr,
 * IN ULONG  InFlags,
 * IN ULONG  SendLen);
 */
#define TdiBuildSend(                                       \
  Irp, DevObj, FileObj, CompRoutine, Contxt,                \
  MdlAddr, InFlags, SendLen)                                \
{                                                           \
  PTDI_REQUEST_KERNEL_SEND _Request;                        \
  PIO_STACK_LOCATION _IrpSp;                                \
                                                            \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                  \
                                                            \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,        \
                  Contxt, _IrpSp, TDI_SEND);                \
                                                            \
  _Request = (PTDI_REQUEST_KERNEL_SEND)&_IrpSp->Parameters; \
  _Request->SendFlags  = (InFlags);                         \
  _Request->SendLength = (SendLen);                         \
  (Irp)->MdlAddress    = (MdlAddr);                         \
}

  /*
 * VOID
 * TdiBuildSendDatagram(
 * IN PIRP  Irp,
 * IN PDEVICE_OBJECT  DevObj,
 * IN PFILE_OBJECT  FileObj,
 * IN PVOID  CompRoutine,
 * IN PVOID  Contxt,
 * IN PMDL  MdlAddr,
 * IN ULONG  SendLen,
 * IN PTDI_CONNECTION_INFORMATION  SendDatagramInfo); 
 */
#define TdiBuildSendDatagram(                                 \
  Irp, DevObj, FileObj, CompRoutine, Contxt,                  \
  MdlAddr, SendLen, SendDatagramInfo)                         \
{                                                             \
  PTDI_REQUEST_KERNEL_SENDDG _Request;                        \
  PIO_STACK_LOCATION _IrpSp;                                  \
                                                              \
  _IrpSp = IoGetNextIrpStackLocation(Irp);                    \
                                                              \
  TdiBuildBaseIrp(Irp, DevObj, FileObj, CompRoutine,          \
                  Contxt, _IrpSp, TDI_SEND_DATAGRAM);         \
                                                              \

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?