HI;
Last time, I post a simple description about this problem.
Now i show out my code ,wish you can help me.
I have a very simple Socket class derive from KStreamSocket.
........................
void CMegaTDISocket::OnDisconnect(uint OptionsLength, PVOID Options, BOOLEAN
bAbort)
{
DbgPrint("I am away dsfsdfsdf!\n");
}
uint CMegaTDISocket::OnReceive(uint Indicated, uchar *Data,
uint Available, uchar **RcvBuffer, uint* RcvBufferLen)
{
UNREFERENCED_PARAMETERS3(Available, RcvBuffer, RcvBufferLen); // no need in
this simple proto
Data[Indicated]=0;
DbgPrint(" (%u bytes): %s\n", Indicated, (char*)Data);
return Indicated;
}
void CMegaTDISocket::On_connectComplete(PVOID, TDI_STATUS Status, uint)
{
// KeSetEvent((m_pLDI->peventforconnect),IO_NO_INCREMENT, FALSE);
DbgPrint("Connect is OK\n");
}
.......................
Now I create a CMegaTDISocket instance.and add to my device.
NTSTATUS
GpdAddDevice(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PhysicalDeviceObject
){
................
deviceInfo->pMegaSocket = new CMegaTDISocket(deviceInfo);
if( deviceInfo->pMegaSocket && deviceInfo->pMegaSocket->IsCreated())
{
deviceInfo->pMegaSocket->SetEvents(TRUE);
DbgPrint("OK!");
T<<"Port At" <<deviceInfo->pMegaSocket->QueryPort()<<"EN";
}
else
{
IoDeleteSymbolicLink(win32DeviceName);
IoDeleteDevice(deviceObject);
return STATUS_INSUFFICIENT_RESOURCES;
}
TDI_ADDRESS_IP addr = {htons(80),MY_HTTP_SERVER};
CTDI_CONNECTION_INFORMATION server(addr);
if(deviceInfo->pMegaSocket&&deviceInfo->pMegaSocket->IsConnected())deviceInf
o->pMegaSocket->disconnect(TRUE);
if(deviceInfo->pMegaSocket&&(deviceInfo->pMegaSocket->IsCreated()))
TDI_STATUS status = deviceInfo->pMegaSocket->connect(server,
DAYTIME_QUERY_PERIOD*100);
...............
}
and in order to give a response to WriteFile,
DriverObject->MajorFunction[IRP_MJ_WRITE] = GpdWrite;
NTSTATUS
GpdWrite(
IN PDEVICE_OBJECT pDO,
IN PIRP pIrp
)
{ T << "ENTER GpdWrite\n";
LARGE_INTEGER timeout;
timeout.QuadPart = -10000000;
NTSTATUS Status = STATUS_UNSUCCESSFUL ;
//timeout.QuadPart=-3*10000000;
PLOCAL_DEVICE_INFO pLDI = (PLOCAL_DEVICE_INFO)pDO->DeviceExtension;
if(pLDI->pMegaSocket&&pLDI->pMegaSocket->IsConnected())
pLDI->pMegaSocket->send("Get \n\n",7,NULL);
IoCompleteRequest(pIrp, IO_NO_INCREMENT);
return Status;
}
"Jerry" <tghu@163.net> wrote in message
news:#uGxWb8PDHA.3192@TK2MSFTNGP10.phx.gbl...