亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
91国偷自产一区二区开放时间| 欧美在线观看视频在线| 亚洲欧美一区二区久久| 欧美一区在线视频| 91猫先生在线| 国产成a人亚洲| 加勒比av一区二区| 香蕉成人啪国产精品视频综合网| 国产欧美一区二区精品忘忧草| 欧美日韩一级二级三级| 成人激情午夜影院| 久99久精品视频免费观看| 亚洲小少妇裸体bbw| 国产精品嫩草影院av蜜臀| 欧美精品一区二区三区久久久| 91成人看片片| thepron国产精品| 国产综合一区二区| 免费人成精品欧美精品 | 一区二区在线观看免费视频播放| 日韩欧美的一区二区| 欧美亚洲动漫另类| 91老师片黄在线观看| 成人毛片在线观看| 国产精品一线二线三线精华| 午夜精品久久久久久久蜜桃app| 亚洲狠狠丁香婷婷综合久久久| 国产精品毛片大码女人| 久久久久久电影| 欧美精品一区二区高清在线观看 | 懂色av一区二区在线播放| 久久99精品国产麻豆婷婷| 视频在线观看一区| 男男视频亚洲欧美| 青青草91视频| 另类小说欧美激情| 国模娜娜一区二区三区| 国内成人免费视频| 国产乱码一区二区三区| 国产乱码精品一品二品| 国产一区在线不卡| 国产福利91精品一区二区三区| 国产激情一区二区三区桃花岛亚洲| 国产在线观看免费一区| 国内精品国产三级国产a久久| 国产一区二区三区在线观看免费视频| 久久99久久99| 懂色av噜噜一区二区三区av| 成人免费高清在线观看| 91日韩一区二区三区| 日本精品一区二区三区四区的功能| 91丨九色丨尤物| 精品视频在线视频| 91精品国产欧美一区二区| 欧美一二三四在线| 精品国产伦一区二区三区观看方式 | 欧美综合视频在线观看| 91福利资源站| 欧美亚洲国产怡红院影院| 在线观看免费一区| 制服丝袜一区二区三区| 日韩欧美国产综合一区 | 91麻豆国产自产在线观看| 99久久99久久精品国产片果冻 | 777奇米成人网| 日韩美女视频在线| 中文字幕成人在线观看| 亚洲另类在线视频| 五月天欧美精品| 极品少妇xxxx偷拍精品少妇| 国产a视频精品免费观看| 色婷婷久久99综合精品jk白丝| 欧美日韩国产三级| 亚洲精品在线一区二区| 亚洲日本乱码在线观看| 麻豆一区二区99久久久久| 福利视频网站一区二区三区| 欧美中文字幕不卡| 2023国产精品| 亚洲欧洲性图库| 秋霞影院一区二区| 成人免费视频caoporn| 欧美日韩在线播放三区四区| 精品捆绑美女sm三区| 一区在线中文字幕| 美女视频黄a大片欧美| 91色在线porny| 国产午夜精品一区二区三区视频| 欧美午夜精品免费| 久久尤物电影视频在线观看| 亚洲色图第一区| 久久er精品视频| 在线看国产一区| 中文字幕国产一区二区| 午夜久久电影网| 99久久er热在这里只有精品66| 欧美精品aⅴ在线视频| 亚洲欧洲精品一区二区精品久久久| 丝袜美腿亚洲一区| 色综合天天综合| 国产亚洲精品aa| 美女免费视频一区二区| 色婷婷亚洲综合| 中文一区一区三区高中清不卡| 毛片av中文字幕一区二区| 色婷婷av久久久久久久| 国产午夜精品久久| 麻豆精品一区二区三区| 欧美裸体一区二区三区| 亚洲欧美日韩一区| 成人app在线| 国产精品色哟哟| 国产另类ts人妖一区二区| 欧美精品亚洲二区| 午夜av区久久| 欧美撒尿777hd撒尿| 亚洲欧美日韩电影| www.色精品| 欧美激情在线看| 国产99久久久国产精品免费看| 日韩精品一区二区三区视频| 五月天亚洲婷婷| 欧美丰满嫩嫩电影| 亚洲成人激情自拍| 欧美亚日韩国产aⅴ精品中极品| 国产精品美女一区二区| 粉嫩嫩av羞羞动漫久久久| 精品国产污污免费网站入口 | 精品少妇一区二区三区免费观看| 亚洲bdsm女犯bdsm网站| 在线观看不卡一区| 亚洲久草在线视频| 色先锋久久av资源部| 亚洲精品亚洲人成人网| 91免费看片在线观看| 亚洲视频1区2区| 日本高清成人免费播放| 亚洲成在线观看| 欧美精品123区| 久久国产精品区| 精品不卡在线视频| 国内外精品视频| 国产日韩av一区二区| 成人午夜视频在线| 亚洲四区在线观看| 色先锋资源久久综合| 亚洲电影第三页| 91精品国产综合久久国产大片 | 91热门视频在线观看| 亚洲素人一区二区| 欧美三级电影在线看| 亚洲成av人片在www色猫咪| 欧美一区二区三区四区高清| 精品一区二区免费视频| 国产女人aaa级久久久级| 99国产精品久久| 亚洲高清免费视频| 欧美变态口味重另类| 国产精选一区二区三区| 亚洲欧洲日韩女同| 欧美午夜精品电影| 麻豆91在线看| 国产精品毛片久久久久久| 欧美专区亚洲专区| 久久99精品一区二区三区 | 亚洲成人资源网| 精品久久久三级丝袜| 丰满岳乱妇一区二区三区| 亚洲激情欧美激情| 欧美电视剧在线观看完整版| 成人午夜伦理影院| 亚洲高清在线精品| 久久―日本道色综合久久| 99这里只有精品| 日韩av电影免费观看高清完整版 | 日韩一区二区三区四区 | 欧美一区二区三区四区五区| 懂色av一区二区三区免费观看 | 欧美激情一二三区| 欧洲一区二区三区在线| 国产一区二区三区精品欧美日韩一区二区三区| 国产欧美日韩亚州综合| 欧美少妇一区二区| 国产精品一级在线| 亚洲一区在线视频观看| 精品88久久久久88久久久| 91久久精品国产91性色tv| 精品在线一区二区| 一区二区在线观看视频在线观看| 日韩免费一区二区三区在线播放| 成人av午夜影院| 美脚の诱脚舐め脚责91| 自拍偷拍欧美激情| 精品国产在天天线2019| 91久久线看在观草草青青| 国产麻豆日韩欧美久久| 日韩精品色哟哟| 一区二区三区欧美在线观看| 国产三区在线成人av| 91精品久久久久久久99蜜桃|