修改 DDK 自带的 PASSTHRU,如何彻底拦截指定的域名?目前能够解析出指定的域名,但在 PtReceive 、 PtReceivePacket最后返回 if(fStatus == STATUS_DROP)
{
DbgPrint("[xiaoc httpfilter] PtReceive is STATUS_DROP");
Status = NDIS_STATUS_NOT_ACCEPTED; return Status;
}不能拦截改网页,只是访问很慢了,一直再重发,最后客户端还是显示出了网页。。
怎么能彻底而又快速的让客户端显示无法访问该页?
{
DbgPrint("[xiaoc httpfilter] PtReceive is STATUS_DROP");
Status = NDIS_STATUS_NOT_ACCEPTED; return Status;
}不能拦截改网页,只是访问很慢了,一直再重发,最后客户端还是显示出了网页。。
怎么能彻底而又快速的让客户端显示无法访问该页?
已经可以了显示我的页面了,但是它蓝屏了,我就郁闷了.在PtReceivePacket
检测到是要拦截的HTTP包后,就发送我的页面过去,
结果 在调用
NdisSend(&Status,
pAdapt->BindingHandle,
MyPacket);
的时候蓝屏了,客户端已经显示出我的拦截页面了..求解.
NDIS_STATUS SendBlockPacket(PADAPT pAdapt, PUCHAR pPacketContent)
{ PNDIS_PACKET MyPacket;
PNDIS_BUFFER tmpBuffer, MyBuffer;
NDIS_STATUS Status;
UINT OffsetSize = 0;
PSEND_RSVD SendRsvd;
PVOID Address;
UINT Current_length; DbgPrint("[xiaoc httpfilter] PtReceivePacket is STATUS_DROP");
DbgBreakPoint();
NdisAllocatePacket(&Status, &MyPacket, pAdapt->SendPacketPoolHandle);
if (Status == NDIS_STATUS_SUCCESS)
{
// 在缓冲池中分配缓冲描述符,将包描述符与缓冲描述符关联。
NdisAllocateBuffer(&Status, &MyBuffer, pAdapt->SendPacketPoolHandle, pPacketContent, OffsetSize); if (NDIS_STATUS_SUCCESS != Status)
{
NdisFreeMemory(pPacketContent, BUFFER_SIZE, 0);
return NDIS_STATUS_NOT_ACCEPTED;
}
NdisChainBufferAtFront(MyPacket, MyBuffer); SendRsvd = (PSEND_RSVD)(MyPacket->ProtocolReserved);
SendRsvd->OriginalPkt = MyPacket; NdisSend(&Status,
pAdapt->BindingHandle,
MyPacket); if (Status != NDIS_STATUS_PENDING)
{
NdisUnchainBufferAtFront(MyPacket ,&MyBuffer);
while (NULL != MyBuffer)
{
NdisQueryBufferSafe(MyBuffer, &Address, &Current_length, NormalPagePriority);
NdisFreeMemory(Address, Current_length, 0);
tmpBuffer = MyBuffer;
NdisGetNextBuffer(tmpBuffer, &MyBuffer);
NdisFreeBuffer(tmpBuffer);
}
return Status;
} //ResetPacketToServer(pAdapt, Packet, pPacketContent);
NdisUnchainBufferAtFront(MyPacket ,&MyBuffer);
while (NULL != MyBuffer)
{
NdisQueryBufferSafe(MyBuffer, &Address, &Current_length, NormalPagePriority);
NdisFreeMemory(Address, Current_length, 0);
tmpBuffer = MyBuffer;
NdisGetNextBuffer(tmpBuffer, &MyBuffer);
NdisFreeBuffer(tmpBuffer);
}
NdisFreeMemory(pPacketContent, BUFFER_SIZE, 0);
return Status;
}
return NDIS_STATUS_NOT_ACCEPTED;
}