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

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

?? packet32.c

?? vc++網絡程序設計實例詳解 人民郵電出版社3-4章源碼
?? 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一区二区三区免费野_久草精品视频
日韩一区和二区| 久久精品国产99国产精品| 精品少妇一区二区| 欧美一区二区三区日韩| 精品视频免费在线| 国产一区二区美女| 国产精品一区二区你懂的| 首页亚洲欧美制服丝腿| 亚洲另类在线视频| 亚洲精选视频免费看| 亚洲人成亚洲人成在线观看图片 | 亚洲美女视频在线| 亚洲色图欧美在线| 午夜精品久久久久久久久久久| 亚洲一区二区三区影院| 五月天国产精品| 国内精品嫩模私拍在线| 国产不卡在线播放| 日韩主播视频在线| 午夜精品久久久久久久 | 麻豆91精品视频| 韩国精品一区二区| 成人a区在线观看| 日韩视频在线永久播放| 日韩视频在线你懂得| 国产亚洲美州欧州综合国| 国产丝袜在线精品| 亚洲与欧洲av电影| 另类小说综合欧美亚洲| 丁香天五香天堂综合| 91国产精品成人| 日韩精品在线一区二区| 国产精品夫妻自拍| 日韩电影免费在线观看网站| 国产精品一卡二卡在线观看| 色婷婷综合五月| 精品久久久久久综合日本欧美| 国产精品国模大尺度视频| 亚洲成av人片一区二区梦乃 | 国产91露脸合集magnet| 欧美视频你懂的| 精品国产一区二区三区不卡| 一区二区三区日韩精品| 国内精品国产成人国产三级粉色| 成人国产亚洲欧美成人综合网| 欧美日韩视频在线第一区| 国产欧美一区视频| 免费一区二区视频| 91免费精品国自产拍在线不卡 | 久久久精品黄色| 午夜精品久久一牛影视| 91丝袜美腿高跟国产极品老师 | 成人免费看黄yyy456| 91麻豆精品国产91久久久久久久久| 国产人成亚洲第一网站在线播放| 天堂一区二区在线免费观看| 色婷婷激情久久| 国产欧美精品一区二区色综合 | 日韩一区有码在线| 美女在线一区二区| 欧美久久高跟鞋激| 一区二区不卡在线播放| 99久久婷婷国产综合精品| 久久久亚洲综合| 久久99久久99小草精品免视看| 色素色在线综合| 亚洲精品国产a久久久久久| 国产99久久精品| 国产欧美日韩不卡免费| 国产又黄又大久久| 国产三级精品三级| 国产精品12区| 中文一区二区完整视频在线观看 | 不卡在线观看av| 国产亚洲自拍一区| 成人午夜视频免费看| 欧美激情在线观看视频免费| 国产高清在线精品| 国产偷国产偷精品高清尤物| 国产高清一区日本| 国产精品久久久久久亚洲伦 | 天天综合日日夜夜精品| 欧美日韩一区二区电影| 日本少妇一区二区| 日韩欧美一二区| 韩国欧美一区二区| 欧美国产欧美亚州国产日韩mv天天看完整| 国内精品写真在线观看| 中文字幕第一区综合| 91视频.com| 亚洲国产另类av| 欧美一级在线视频| 国产美女在线精品| 国产精品久久久久久一区二区三区| 99久久99久久综合| 亚洲综合在线电影| 欧美一级久久久久久久大片| 免费成人你懂的| 国产精品免费免费| 欧美日韩国产首页| 韩国在线一区二区| 亚洲免费观看高清完整版在线观看 | 国产精品天天摸av网| 色婷婷综合中文久久一本| 日韩av一二三| 中文字幕欧美激情| 欧美日韩一区视频| 国产一区视频网站| 亚洲免费视频成人| 欧美成人在线直播| 91麻豆成人久久精品二区三区| 视频精品一区二区| 国产精品久久久久久亚洲伦| 91精品婷婷国产综合久久性色 | 欧美艳星brazzers| 国产一区二区三区美女| 一区二区三区日韩在线观看| 日韩欧美www| 在线免费av一区| 国产原创一区二区| 日一区二区三区| 日韩一区中文字幕| 久久精品视频在线看| 欧美日韩一区二区不卡| 不卡的电影网站| 精品一区二区三区在线视频| 一区二区三区免费在线观看| 国产亚洲精品超碰| 91精品国产aⅴ一区二区| 成人动漫一区二区在线| 蜜臀av一区二区三区| 亚洲一区在线播放| 最新高清无码专区| 中文字幕第一区| 国产喷白浆一区二区三区| 欧美不卡激情三级在线观看| 欧美日韩在线一区二区| 色妹子一区二区| 99久免费精品视频在线观看| 国产一区二区三区精品视频| 男女视频一区二区| 日本91福利区| 天天综合天天做天天综合| 中文字幕一区二区三区在线播放| 久久久亚洲午夜电影| 2020国产精品久久精品美国| 日韩欧美国产精品一区| 7777精品伊人久久久大香线蕉完整版 | 韩国视频一区二区| 日韩电影一二三区| 麻豆中文一区二区| 蜜臀av一区二区在线免费观看| 日本va欧美va精品发布| 日韩成人午夜精品| 美女脱光内衣内裤视频久久影院| 日韩电影免费一区| 九九久久精品视频| 国产专区综合网| 懂色av一区二区三区免费观看 | 91国产成人在线| 91久久一区二区| 在线一区二区三区四区| 欧美日韩久久一区二区| 欧美电影在哪看比较好| 欧美成人激情免费网| 久久久久久免费网| 国产精品久久三区| 亚洲资源在线观看| 日本特黄久久久高潮| 国产乱妇无码大片在线观看| 成人免费电影视频| 欧美在线看片a免费观看| 在线不卡的av| 久久综合九色欧美综合狠狠| 国产精品亲子伦对白| 一区二区国产盗摄色噜噜| 午夜精品福利久久久| 国产做a爰片久久毛片| 粉嫩高潮美女一区二区三区| 91国偷自产一区二区开放时间| 337p亚洲精品色噜噜| 久久久久久久久久久久久女国产乱| 国产精品丝袜91| 天天亚洲美女在线视频| 国产麻豆精品视频| 一本色道久久加勒比精品 | 国产宾馆实践打屁股91| 91国产成人在线| 久久久综合精品| 亚洲激情五月婷婷| 久色婷婷小香蕉久久| 一本一本大道香蕉久在线精品| 国产欧美日韩另类一区| 亚洲女人****多毛耸耸8| 青青国产91久久久久久| 成人网男人的天堂| 欧美一级在线免费| 亚洲欧美一区二区久久| 激情小说亚洲一区| 欧美三级日本三级少妇99|