Здравствуйте, TarasCo, Вы писали:
TC>Не могли бы Вы подробно указать место, где происходит BSOD? Я могу предположить, что это происходит в ф. TDISrvEventConnect, а ее код вы не привели.
Да собственно как я понимаю стандартная комбинация...
NTSTATUS
TDISrvEventConnect(
PVOID pEventCtx, // Event context.
LONG lnRmtAddr, // Buffer length.
PVOID pRmtClnTA, // Buffer (transport address of remote client).
LONG lnUserData, // Length of user data buffer.
PVOID pUserData, // User data buffer.
LONG lnOptions, // Length of options.
PVOID pOptions, // Options buffer.
CONNECTION_CONTEXT * ppConnCtx, // Output connection context.
PIRP * ppIrp // Output Irp address.
)
{
pTDIClnConn pLclConn = (pTDIClnConn)pEventCtx;
pTDIClientExtension pDevExt = pLclConn->pDevExt;
PTDI_CONNECTION_INFORMATION pClientConn = pLclConn->pClientConnInfo;
PTA_IP_ADDRESS pClientConnInfo = (PTA_IP_ADDRESS)pClientConn->RemoteAddress;
PTA_IP_ADDRESS pTAAddrIp = (PTA_IP_ADDRESS)pRmtClnTA;
pClientConnInfo->Address[0].Address[0].in_addr = pTAAddrIp->Address[0].Address[0].in_addr;
pClientConnInfo->Address[0].Address[0].sin_port = pTAAddrIp->Address[0].Address[0].sin_port;
TdiBuildAccept(pDevExt->pIrpAccept,
pDevExt->pTcpDevObj,
pLclConn->pConnFileObj,
TDIClnIoCompRtnAcc,
pDevExt,
pClientConn,
NULL
);
IoSetNextIrpStackLocation(pDevExt->pIrpAccept);
*ppIrp = pDevExt->pIrpAccept;
*ppConnCtx = (CONNECTION_CONTEXT)pLclConn;
return STATUS_MORE_PROCESSING_REQUIRED;
}