Re[4]: Сервер (TDI),BSOD при конекте...
От: Zoya_Pobeda  
Дата: 08.02.07 14:31
Оценка:
Здравствуйте, TarasCo, Вы писали:

Извиняюсь за долгое молчание — грипповала
Может я вас не правильно поняла...,но что то у меня что странное твориться стало...
Windbg-ер у меня запустиь не удалось,что бы посмотреть что бы проанализировать дамп-файл,Verifiry тоже какойто кривой выбираю драйвер для ставлю его на проверку,перезагружаюсь...а он не проверяется...Вообщем какаято я не везучая
Но зато я по немногу осваеваю софтАйс, и вот что я выяснела...BSOD происходит уже после выхода и ф-ии TDIClnIoCompRtnAcc, а там уже АСМ и пнять что там происходит я непойму

TarasCo правильно ли я вас поняла?


NTSTATUS
TDISrvEventConnect(
                   PVOID                pEventCtx, 
                   LONG                 lnRmtAddr, 
                   PVOID                pRmtClnTA,   
                   LONG                 lnUserData,   
                   PVOID                pUserData,   
                   LONG                 lnOptions,   
                   PVOID                pOptions,    
                   CONNECTION_CONTEXT * ppConnCtx,    
                   PIRP               * ppIrp        
                  )
{
    pTDIClnConn                    pLclConn = (pTDIClnConn)pEventCtx;               pTDIClientExtension            pTDIDevExt  = (pTDIClientExtension)pLclConn->pTDIDevExt;  
    P_DEVICE_EXTENSION        pDevExt    = (P_DEVICE_EXTENSION)pTDIDevExt->pDevExt;
    PDEVICE_OBJECT                pTDIDeviceObject;
    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;   
   

    pTDIDeviceObject = IoGetRelatedDeviceObject(
                        pLclConn->pConnFileObj
                        );

    pLclConn->pIrpAccept = IoAllocateIrp(pTDIDeviceObject->StackSize, FALSE);



    TdiBuildAccept(pLclConn->pIrpAccept,                  
                    pTDIDevExt->pTcpDevObj,
                    pLclConn->pConnFileObj,
                    TDIClnIoCompRtnAcc,                   
                    pTDIDevExt,                              
                    pClientConn,                         
                    NULL
                    );

    IoSetNextIrpStackLocation(pLclConn->pIrpAccept);      

    *ppIrp = pLclConn->pIrpAccept;                        

    *ppConnCtx = (CONNECTION_CONTEXT)pLclConn;           
                                                      

    KdPrint(("%S --> function CONNECT",&pDevExt->symbolicLinkName.Buffer[12]));

    return STATUS_MORE_PROCESSING_REQUIRED;
} 
NTSTATUS
TDIClnIoCompRtnAcc(
                   PDEVICE_OBJECT       pDevObj,      
                   PIRP                 pIrp,         
                   PVOID                pCtx         
                  )
{

    pTDIClientExtension pDevExt        = (pTDIClientExtension)pCtx;
    pTDIClnConn            pLclConn    = (pTDIClnConn)pDevExt->pTDIClnConnArr;
                       

    IoFreeIrp( pLclConn->pIrpAccept );
    pLclConn->pIrpAccept = NULL;                          

    if (STATUS_SUCCESS!= pIrp->IoStatus.Status)
    {
        KdPrint((".TDIClnIoCompRtnAcc:  IoStatus.Status = 0x%08x, IoStatus.Information = 0x%08x\n",
              pIrp->IoStatus.Status, pIrp->IoStatus.Information));
    }

    return STATUS_SUCCESS;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.