亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? packet32.c

?? <Visual C++ 網絡程序設計實例詳解>配套源碼
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*++

Copyright (c) 1990-2000  Microsoft Corporation

Module Name:

    packet32.c

Abstract:


Author:

    BrianL

Environment:

    User mode only.

Notes:


Future:



Revision History:

--*/

#define UNICODE 1

#include <windows.h>
#include <windowsx.h> // for GlobalAllocPtr and GlobalFreePtr
#include <ntddpack.h>

#include <packet32.h>

TCHAR   szWindowTitle[] = TEXT("PACKET32");


#if DBG

#define ODS(_x) OutputDebugString(TEXT(_x))

#else

#define ODS(_x)

#endif






PVOID
PacketOpenAdapter(
    LPTSTR   AdapterName
    )
/*++

Routine Description:

    This rotine opens an instance of the adapter

Arguments:

    AdapterName - unicode name of the adapter to open

Return Value:

    SUCCESS - returns a pointer to an adapter object
    FAILURE - NULL

--*/


{

    LPADAPTER  lpAdapter;
    ULONG     Error;
    
    ODS("Packet32: PacketOpenAdapter\n");

    lpAdapter=(LPADAPTER)GlobalAllocPtr(
                             GMEM_MOVEABLE | GMEM_ZEROINIT,
                             sizeof(ADAPTER)
                             );


    if (lpAdapter==NULL) {

        ODS("Packet32: PacketOpenAdapter GlobalAlloc Failed\n");

        return NULL;

    }

    wsprintf(
        lpAdapter->SymbolicLink,
        TEXT("\\\\.\\%s"),
        &AdapterName[12]
        );

    lpAdapter->hFile=CreateFile(lpAdapter->SymbolicLink,
                         GENERIC_WRITE | GENERIC_READ,
                         0,
                         NULL,
                         OPEN_EXISTING,
                         FILE_FLAG_OVERLAPPED,
                         0
                         );

    if (lpAdapter->hFile != INVALID_HANDLE_VALUE)
        return lpAdapter;

    Error = GetLastError();

    ODS("Packet32: PacketOpenAdapter Could not open adapter\n");

    GlobalFreePtr(
        lpAdapter
        );

    return NULL;


}


VOID
PacketCloseAdapter(
    LPADAPTER   lpAdapter
    )
/*++

Routine Description:

    This rotine closes a previouly opened adapter

Arguments:

    Adapter object returned from PacketOpenAdapter

Return Value:


--*/
{

    ODS("Packet32: PacketCloseAdapter\n");

    CloseHandle(lpAdapter->hFile);

    GlobalFreePtr(lpAdapter);

}




PVOID
PacketAllocatePacket(
    LPADAPTER   AdapterObject
    )

{
/*++

Routine Description:

    This rotine this routine allocates a packet object for use
    in sending a receiveing packets

Arguments:

    Adapter object returned from PacketOpenAdapter

Return Value:

    SUCCESS - returns packet object
    FAILURE - NULL

--*/

    LPPACKET    lpPacket;

    lpPacket=(LPPACKET)GlobalAllocPtr(
                             GMEM_MOVEABLE | GMEM_ZEROINIT,
                             sizeof(PACKET)
                             );

    if (lpPacket==NULL) {

        ODS("Packet32: PacketAllocateSendPacket: GlobalAlloc Failed\n");

        return NULL;

    }

    lpPacket->OverLapped.hEvent=CreateEvent(
                        NULL,
                        FALSE,
                        FALSE,
                        NULL
                        );

    if (lpPacket->OverLapped.hEvent==NULL) {

        ODS("Packet32: PacketAllocateSendPacket: CreateEvent Failed\n");

        GlobalFreePtr(lpPacket);

        return NULL;
    }

    return lpPacket;

}

VOID
PacketFreePacket(
    LPPACKET    lpPacket
    )

{
    CloseHandle(lpPacket->OverLapped.hEvent);

    GlobalFreePtr(lpPacket);

}

VOID
PacketInitPacket(
    LPPACKET    lpPacket,
    PVOID       Buffer,
    UINT        Length
    )
/*++

Routine Description:

    This rotine initializes a packet object to point to
    a memory buffer described by Start address and length

Arguments:

    lpPacket   -  Packet object returned by PacketAllocatePacket

    Buffer     -  Begining address of a memory buffer

    Length     -  Length of memory buffer

Return Value:


--*/

{

    lpPacket->Buffer=Buffer;
    lpPacket->Length=Length;

}


BOOL
PacketSendPacket(
    LPADAPTER   AdapterObject,
    LPPACKET    lpPacket,
    BOOLEAN     Sync
    )
/*++

Routine Description:

    This rotine sends a packet to the adapter

Arguments:

    AdapterObject  - AdapterObject return by PacketOpenAdapter

    lpPacket       - Packet object returned by PacketAllocatePacket and initialized
                     by PacketInitPacket

    Sync           - TRUE if service should wait for packet to transmit


Return Value:

    SUCCESS - TRUE if succeeded and SYNC==TRUE
    FAILURE -

--*/

{
    BOOL      Result;

    DWORD      BytesTransfered;


    lpPacket->OverLapped.Offset=0;
    lpPacket->OverLapped.OffsetHigh=0;

    if (!ResetEvent(lpPacket->OverLapped.hEvent)) {

        return FALSE;

    }

    Result=WriteFile(
              AdapterObject->hFile,
              lpPacket->Buffer,
              lpPacket->Length,
              &BytesTransfered,
              &lpPacket->OverLapped
              );
    if(!Result) {
    
        if (GetLastError() == ERROR_IO_PENDING) {
            if (Sync) {
                //
                //  They want to wait for I/O to complete
                //
                Result=GetOverlappedResult(
                           AdapterObject->hFile,
                           &lpPacket->OverLapped,
                           &BytesTransfered,
                           TRUE
                           );

            } else {
                //
                //  They don't want to wait, they will call PacketWaitPacket to get
                //  The real result
                //
                Result=TRUE;

            }
        }
    }
    return Result;
}



BOOL
PacketReceivePacket(
    LPADAPTER   AdapterObject,
    LPPACKET    lpPacket,
    BOOLEAN     Sync,
    PULONG      BytesReceived
    )
/*++

Routine Description:

    This rotine issues a receive request from the adapter

Arguments:

    AdapterObject  - AdapterObject return by PacketOpenAdapter

    lpPacket       - Packet object returned by PacketAllocatePacket and initialized
                     by PacketInitPacket

    Sync           - TRUE if service should wait for packet to transmit


Return Value:

    SUCCESS - TRUE if succeeded and SYNC==TRUE
    FAILURE -

--*/


{
    BOOL      Result;

    lpPacket->OverLapped.Offset=0;
    lpPacket->OverLapped.OffsetHigh=0;

    if (!ResetEvent(lpPacket->OverLapped.hEvent)) {

        return FALSE;

    }

    Result=ReadFile(
              AdapterObject->hFile,
              lpPacket->Buffer,
              lpPacket->Length,
              BytesReceived,
              &lpPacket->OverLapped
              );
    if(!Result) {
    
        if (GetLastError() == ERROR_IO_PENDING) {

            if (Sync) {
                //
                //  They want to wait
                //
                Result=GetOverlappedResult(
                           AdapterObject->hFile,
                           &lpPacket->OverLapped,
                           BytesReceived,
                           TRUE
                           );


            } else {
                //
                //  They don't want to wait, they will call PacketWaitPacket to get
                //  The real result
                //
                Result=TRUE;

            }
        }
    }
    return Result;
}


BOOL
PacketWaitPacket(
    LPADAPTER  AdapterObject,
    LPPACKET   lpPacket,
    PULONG     BytesReceived
    )
/*++

Routine Description:

    This routine waits for an overlapped IO on a packet to complete
    Called if the send or receive call specified FALSE for the Sync parmeter

Arguments:

    AdapterObject  - AdapterObject return by PacketOpenAdapter

    lpPacket       - Packet object returned by PacketAllocatePacket and initialized
                     by PacketInitPacket

Return Value:

    SUCCESS - TRUE if overlapped call succeeded
    FAILURE -

--*/

{


    return GetOverlappedResult(
               AdapterObject->hFile,
               &lpPacket->OverLapped,
               BytesReceived,
               TRUE
               );


}


BOOL
PacketResetAdapter(
    LPADAPTER  AdapterObject
    )
/*++

Routine Description:

    This rotuine resets the adapter. This will complete all pending sends receives and requests

Arguments:

    AdapterObject  - AdapterObject return by PacketOpenAdapter

Return Value:

    SUCCESS - TRUE if overlapped call succeeded
    FAILURE -

--*/

{
    UINT       BytesReturned;

    return DeviceIoControl(

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲视频电影在线| 国产亚洲综合av| 成人在线一区二区三区| 国产一区二区在线观看免费| 亚洲成在线观看| 天天影视涩香欲综合网| 午夜久久久影院| 久久国产生活片100| 精品一区二区三区免费| 激情久久久久久久久久久久久久久久| 日欧美一区二区| 激情文学综合插| 风流少妇一区二区| 91看片淫黄大片一级在线观看| 99精品国产视频| 欧美三级中文字| 6080日韩午夜伦伦午夜伦| 91精品国产综合久久香蕉麻豆| 日韩美女在线视频 | 国产乱子伦视频一区二区三区 | 成人福利视频在线看| 91在线免费视频观看| 色婷婷av一区二区三区软件| 欧美亚洲综合一区| 欧美一级午夜免费电影| 国产亚洲综合性久久久影院| 亚洲欧美另类图片小说| 日韩av电影免费观看高清完整版在线观看| 蜜桃久久久久久| 成人性色生活片| 91精品国产综合久久精品图片 | 午夜视频久久久久久| 韩国精品主播一区二区在线观看| 福利电影一区二区| 欧美日韩中文字幕一区| 久久久久久免费毛片精品| 亚洲视频在线一区观看| 久久精品国产精品青草| 99re这里只有精品6| 日韩午夜在线观看| 亚洲欧美怡红院| 人人精品人人爱| 色综合天天天天做夜夜夜夜做| 欧美男生操女生| 日韩理论在线观看| 久久99久久99小草精品免视看| 97久久精品人人做人人爽| 日韩美女一区二区三区| 亚洲一区二区三区四区五区黄 | 色丁香久综合在线久综合在线观看| 日韩三级精品电影久久久| 国产亚洲午夜高清国产拍精品| 一区2区3区在线看| 成人午夜电影小说| 精品少妇一区二区三区日产乱码| 亚洲一卡二卡三卡四卡| 国产69精品久久久久777| 日韩一区国产二区欧美三区| 综合精品久久久| 国产99久久久国产精品免费看 | 国产精品网站在线观看| 韩国视频一区二区| 欧美一区二区三区视频免费| 亚洲影院理伦片| 在线免费观看不卡av| 中文字幕一区二区三区在线播放| 国产一区激情在线| 精品国产一区a| 免费观看在线综合色| 在线综合亚洲欧美在线视频| 伊人性伊人情综合网| 91小视频在线免费看| 亚洲日本va午夜在线影院| 成人午夜私人影院| 亚洲国产精品高清| eeuss鲁一区二区三区| 国产嫩草影院久久久久| 成人丝袜18视频在线观看| 国产精品传媒入口麻豆| av中文字幕一区| 一区二区高清视频在线观看| 色成年激情久久综合| 亚洲高清免费在线| 日韩一区二区视频在线观看| 免费欧美高清视频| 久久久噜噜噜久久中文字幕色伊伊 | 丰满亚洲少妇av| 中文字幕在线观看一区二区| 97精品久久久久中文字幕 | 欧美色图免费看| 亚洲va国产天堂va久久en| 91麻豆精品91久久久久久清纯| 日韩高清一区在线| 久久久久久久精| 97se亚洲国产综合在线| 一区二区三区国产精品| 日韩欧美一区二区久久婷婷| 国产91精品久久久久久久网曝门 | 久久国产成人午夜av影院| 久久午夜色播影院免费高清| www.色精品| 香蕉成人啪国产精品视频综合网| 欧美电视剧在线看免费| 成人av手机在线观看| 亚洲国产精品精华液网站| 精品国产伦一区二区三区观看体验| 国产精品18久久久| 亚洲午夜成aⅴ人片| 日韩免费看的电影| av成人免费在线观看| 日本美女一区二区| 国产精品免费视频网站| 欧美日韩在线亚洲一区蜜芽| 高清视频一区二区| 爽爽淫人综合网网站| 亚洲国产精华液网站w| 欧美区一区二区三区| 成人免费毛片a| 久久99热这里只有精品| 一区二区三区 在线观看视频| 久久久亚洲欧洲日产国码αv| 欧美三级日本三级少妇99| 成人在线综合网| 久久99在线观看| 丝袜亚洲精品中文字幕一区| 中文字幕一区av| 精品国产污污免费网站入口| 欧美日韩二区三区| 91免费看`日韩一区二区| 国产原创一区二区| 免费在线观看一区| 五月综合激情日本mⅴ| 亚洲私人影院在线观看| 欧美国产日韩在线观看| 欧美变态tickling挠脚心| 欧美日韩免费观看一区三区| av动漫一区二区| 国产一区二区三区蝌蚪| 日本三级亚洲精品| 亚洲a一区二区| 亚洲一区免费在线观看| 亚洲欧美日韩中文字幕一区二区三区 | 国产人成一区二区三区影院| 欧美日韩国产影片| 欧美亚洲国产bt| 色呦呦日韩精品| 99久久久久久| 91小视频在线免费看| 成人久久久精品乱码一区二区三区| 久久国产精品99久久人人澡| 日本中文字幕不卡| 免费高清在线视频一区·| 日韩av不卡一区二区| 日韩有码一区二区三区| 天天综合色天天| 久久黄色级2电影| 国产专区欧美精品| 国产老妇另类xxxxx| 国产精品主播直播| 成人免费福利片| 94-欧美-setu| 欧美日韩亚洲国产综合| 欧美在线观看一区二区| 欧美蜜桃一区二区三区 | 久久国产精品免费| 经典一区二区三区| 国产伦理精品不卡| 丁香激情综合五月| 91国产福利在线| 91精品国产欧美一区二区18| 欧美成人a∨高清免费观看| 国产欧美日本一区二区三区| 中文字幕亚洲一区二区av在线| 亚洲视频免费在线观看| 天天射综合影视| 狠狠v欧美v日韩v亚洲ⅴ| 不卡一区二区中文字幕| 色狠狠av一区二区三区| 日韩一级二级三级精品视频| 久久婷婷成人综合色| 亚洲欧美日韩成人高清在线一区| 午夜视频久久久久久| 国产成人免费9x9x人网站视频| 色诱视频网站一区| 日韩欧美高清一区| 日韩一区中文字幕| 免费在线观看日韩欧美| 99精品欧美一区二区三区小说| 欧美一区二区三区色| 亚洲图片激情小说| 日韩国产欧美一区二区三区| 丰满少妇久久久久久久| 666欧美在线视频| 国产精品久久久久久亚洲伦| 人人狠狠综合久久亚洲| 色婷婷av久久久久久久| 精品国产一区二区三区忘忧草| 一区二区高清视频在线观看| 国产成a人亚洲| 日韩女优毛片在线|