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

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

?? config.c

?? apro控件安裝包,一個串通訊控件,可用于語音電話, 傳真,發短信等.
?? C
字號:
// ***** BEGIN LICENSE BLOCK *****
// * Version: MPL 1.1
// *
// * The contents of this file are subject to the Mozilla Public License Version
// * 1.1 (the "License"); you may not use this file except in compliance with
// * the License. You may obtain a copy of the License at
// * http://www.mozilla.org/MPL/
// *
// * Software distributed under the License is distributed on an "AS IS" basis,
// * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
// * for the specific language governing rights and limitations under the
// * License.
// *
// * The Original Code is TurboPower Async Professional
// *
// * The Initial Developer of the Original Code is
// * TurboPower Software
// *
// * Portions created by the Initial Developer are Copyright (C) 1991-2002
// * the Initial Developer. All Rights Reserved.
// *
// * Contributor(s):
// *
// * ***** END LICENSE BLOCK *****

/*++
Module Name:

    config.c

Abstract:

    Handles spooler entry points for adding, deleting, and configuring
    apfmon40 ports.


Environment:

    User Mode -Win32

Revision History:

--*/

#include <windows.h>
#include <winspool.h>
#include <winsplp.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <wchar.h>
#include "spltypes.h"
#include "apfmon40.h"
#include "local.h"
#include "lmon.h"



#define IS_NOT_LOCAL_PORT(pName, pLocalMonitorName) \
    _wcsicmp( pName, pLocalMonitorName )



DWORD
GetPortSize(
    PINIPORT pIniPort,
    DWORD   Level
);

LPBYTE
CopyIniPortToPort(
    PINIPORT pIniPort,
    DWORD   Level,
    LPBYTE  pPortInfo,
    LPBYTE   pEnd
);

BOOL
DeletePort(
    LPWSTR   pName,
    HWND    hWnd,
    LPWSTR   pPortName
);

BOOL
DeletePortEntry(
    LPWSTR   pPortName
);

BOOL
EnumPorts(
    LPWSTR   pName,
    DWORD   Level,
    LPBYTE  pPorts,
    DWORD   cbBuf,
    LPDWORD pcbNeeded,
    LPDWORD pcReturned
)
{
    PINIPORT pIniPort;
    DWORD   cb;
    LPBYTE  pEnd;
    DWORD   LastError=0;

   EnterSplSem();

    cb=0;

    pIniPort=pIniFirstPort;

    while (pIniPort) {
        cb+=GetPortSize(pIniPort, Level);
        pIniPort=pIniPort->pNext;
    }

    *pcbNeeded=cb;

    if (cb <= cbBuf) {

        pEnd=pPorts+cbBuf;
        *pcReturned=0;

        pIniPort=pIniFirstPort;
        while (pIniPort) {

            if (!(pIniPort->Status & PP_FILEPORT)) {

                pEnd = CopyIniPortToPort(pIniPort, Level, pPorts, pEnd);

                switch (Level) {
                case 1:
                    pPorts+=sizeof(PORT_INFO_1);
                    break;
                case 2:
                    pPorts+=sizeof(PORT_INFO_2);
                    break;
                default:
                    DBGMSG(DBG_ERROR,
                           ("EnumPorts: invalid level %d", Level));
                    LastError = ERROR_INVALID_LEVEL;
                    goto Cleanup;
                }
                (*pcReturned)++;
            }
            pIniPort=pIniPort->pNext;
        }

    } else

        LastError = ERROR_INSUFFICIENT_BUFFER;

Cleanup:
   LeaveSplSem();

    if (LastError) {

        SetLastError(LastError);
        return FALSE;

    } else

        return TRUE;
}


BOOL
AddPort(
    LPWSTR   pName,
    HWND    hWnd,
    LPWSTR   pMonitorName
)
{

    return TRUE;

}


BOOL
DeletePort(
    LPWSTR   pName,
    HWND    hWnd,
    LPWSTR   pPortName
)
{
    BOOL rc;

    if( !hWnd )
        hWnd = GetDesktopWindow( );

    EnterSplSem();

    if (rc = DeletePortEntry( pPortName ))
        WriteProfileString(szPorts, pPortName, NULL);

    LeaveSplSem();

    return rc;

    UNREFERENCED_PARAMETER( pName );
}



/* ConfigurePort
 *
 */
BOOL
ConfigurePort(
    LPWSTR   pName,
    HWND  hWnd,
    LPWSTR pPortName
)
{
    DWORD  ThreadId;
    DWORD  WindowThreadId;

    ThreadId = GetCurrentThreadId( );
    WindowThreadId = GetWindowThreadProcessId(hWnd, NULL);

    if (!AttachThreadInput(ThreadId, WindowThreadId, TRUE))
        DBGMSG(DBG_WARNING, ("AttachThreadInput failed: Error %d\n", GetLastError()));

    Message( hWnd, MSG_INFORMATION, IDS_LOCALMONITOR,
                 IDS_NOTHING_TO_CONFIGURE );

    AttachThreadInput(WindowThreadId, ThreadId, FALSE);

    return TRUE;
}



BOOL
LocalAddPortEx(
    LPWSTR   pName,
    DWORD    Level,
    LPBYTE   pBuffer,
    LPWSTR   pMonitorName
)
{
    LPWSTR pPortName;
    DWORD  Error;
    WCHAR  szLocalMonitor[MAX_PATH+1];
    LPPORT_INFO_1 pPortInfo1;
    LPPORT_INFO_FF pPortInfoFF;

    LoadString(hInst, IDS_LOCALMONITOR, szLocalMonitor, sizeof(szLocalMonitor)-1);
    if  (IS_NOT_LOCAL_PORT( pMonitorName, szLocalMonitor)) {

        // If pMonitorName != "Local Port", we have an
        // invalid Monitor name
        SetLastError(ERROR_INVALID_PARAMETER);
        return(FALSE);
    }
    switch (Level) {
    case (DWORD)-1:
        pPortInfoFF = (LPPORT_INFO_FF)pBuffer;
        pPortName = pPortInfoFF->pName;
        break;

    case 1:
        pPortInfo1 =  (LPPORT_INFO_1)pBuffer;
        pPortName = pPortInfo1->pName;
        break;

    default:
        SetLastError(ERROR_INVALID_LEVEL);
        return(FALSE);
    }
    if (!pPortName) {
        SetLastError(ERROR_INVALID_PARAMETER);
        return(FALSE);
    }
    if (PortExists(pName, pPortName, &Error)) {
        SetLastError(ERROR_INVALID_PARAMETER);
        return(FALSE);
    }
    if (Error != NO_ERROR) {
        SetLastError(Error);
        return(FALSE);
    }
    if (!CreatePortEntry(pPortName)) {
        return(FALSE);
    }
    if (!WriteProfileString(szPorts, pPortName, L"")) {
        DeletePortEntry(pPortName);
        return(FALSE);
    }
    return TRUE;
}

//
// Support routines
//


/* From Control Panel's control.h:
 */
#define CHILD_PORTS 0

/* From cpl.h:
 */
#define CPL_INIT        1
#define CPL_DBLCLK      5
#define CPL_EXIT        7

/* Hack:
 */
#define CHILD_PORTS_HELPID  0


PINIPORT
CreatePortEntry(
    LPWSTR   pPortName
)
{
    DWORD       cb;
    PINIPORT    pIniPort, pPort;

    cb = sizeof(INIPORT) + wcslen(pPortName)*sizeof(WCHAR) + sizeof(WCHAR);

    pIniPort=AllocSplMem(cb);

    if( pIniPort )
    {
        pIniPort->pName = wcscpy((LPWSTR)(pIniPort+1), pPortName);
        pIniPort->cb = cb;
        pIniPort->pNext = 0;
        pIniPort->signature = IPO_SIGNATURE;

        //
        // KrishnaG -- initialized the hFile value; it will be set to
        // a legal value in the StartDocPort call
        //

        pIniPort->hFile = INVALID_HANDLE_VALUE;


        if (pPort = pIniFirstPort) {

            while (pPort->pNext)
                pPort = pPort->pNext;

            pPort->pNext = pIniPort;

        } else

            pIniFirstPort = pIniPort;
    }

    return pIniPort;
}




BOOL
DeletePortEntry(
    LPWSTR   pPortName
)
{
    DWORD       cb;
    PINIPORT    pPort, pPrevPort;

    cb = sizeof(INIPORT) + wcslen(pPortName)*sizeof(WCHAR) + sizeof(WCHAR);

    pPort = pIniFirstPort;


    while (pPort) {

        if (!lstrcmpi(pPort->pName, pPortName)) {
            if (pPort->Status & PP_FILEPORT) {
                pPrevPort = pPort;
                pPort = pPort->pNext;
                continue;
            }
            break;
        }

        pPrevPort = pPort;
        pPort = pPort->pNext;
    }

    if (pPort) {
        if (pPort == pIniFirstPort) {
            pIniFirstPort = pPort->pNext;
        } else {
            pPrevPort->pNext = pPort->pNext;
        }
        FreeSplMem(pPort);

        return TRUE;
    }
    else
        return FALSE;
}



DWORD
GetPortSize(
    PINIPORT pIniPort,
    DWORD   Level
)
{
    DWORD   cb;
    WCHAR   szLocalMonitor[MAX_PATH+1], szPortDesc[MAX_PATH+1];

    switch (Level) {

    case 1:

        cb=sizeof(PORT_INFO_1) +
           wcslen(pIniPort->pName)*sizeof(WCHAR) + sizeof(WCHAR);
        break;

    case 2:
        LoadString(hInst, IDS_LOCALMONITORNAME, szLocalMonitor, sizeof(szLocalMonitor)-1);
        LoadString(hInst, IDS_LOCALMONITOR, szPortDesc, sizeof(szPortDesc)-1);
        cb = wcslen(pIniPort->pName) + 1 +
             wcslen(szLocalMonitor) + 1 +
             wcslen(szPortDesc) + 1;
        cb *= sizeof(WCHAR);
        cb += sizeof(PORT_INFO_2);
        break;

    default:
        cb = 0;
        break;
    }

    return cb;
}

LPBYTE
CopyIniPortToPort(
    PINIPORT pIniPort,
    DWORD   Level,
    LPBYTE  pPortInfo,
    LPBYTE   pEnd
)
{
    LPWSTR         *SourceStrings,  *pSourceStrings;
    PPORT_INFO_2    pPort2 = (PPORT_INFO_2)pPortInfo;
    WCHAR           szLocalMonitor[MAX_PATH+1], szPortDesc[MAX_PATH+1];
    DWORD          *pOffsets;
    DWORD           Count;

    switch (Level) {

    case 1:
        pOffsets = PortInfo1Strings;
        break;

    case 2:
        pOffsets = PortInfo2Strings;
        break;

    default:
        DBGMSG(DBG_ERROR,
               ("CopyIniPortToPort: invalid level %d", Level));
        return NULL;
    }

    for ( Count = 0 ; pOffsets[Count] != -1 ; ++Count ) {
    }

    SourceStrings = pSourceStrings = AllocSplMem(Count * sizeof(LPWSTR));

    if ( !SourceStrings ) {

        DBGMSG( DBG_WARNING, ("Failed to alloc port source strings.\n"));
        return NULL;
    }

    switch (Level) {

    case 1:
        *pSourceStrings++=pIniPort->pName;

        break;

    case 2:
        *pSourceStrings++=pIniPort->pName;

        LoadString(hInst, IDS_LOCALMONITORNAME, szLocalMonitor, sizeof(szLocalMonitor)-1);
        LoadString(hInst, IDS_LOCALMONITOR, szPortDesc, sizeof(szPortDesc)-1);
        *pSourceStrings++ = szLocalMonitor;
        *pSourceStrings++ = szPortDesc;

        // How do i findout other types ???
        pPort2->fPortType = PORT_TYPE_WRITE;

        // Reserved
        pPort2->Reserved = 0;



        break;

    default:
        DBGMSG(DBG_ERROR,
               ("CopyIniPortToPort: invalid level %d", Level));
        return NULL;
    }

    pEnd = PackStrings(SourceStrings, pPortInfo, pOffsets, pEnd);
    FreeSplMem(SourceStrings);

    return pEnd;
}


?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
美女视频黄频大全不卡视频在线播放| 欧美高清视频在线高清观看mv色露露十八 | 欧美大片一区二区三区| 久久精品亚洲精品国产欧美 | 亚洲日本va在线观看| 久久精品国产一区二区三区免费看 | 欧美日韩国产一级二级| 国产精品你懂的在线欣赏| 亚洲18色成人| 色婷婷av一区二区三区软件| 精品国产精品网麻豆系列| 亚洲v中文字幕| 91成人免费网站| 亚洲欧洲日韩在线| 大陆成人av片| 久久久久久久久伊人| 另类调教123区| 日韩欧美成人激情| 久久国产精品露脸对白| 欧美一级片免费看| 天天综合日日夜夜精品| 一本一道久久a久久精品综合蜜臀| 国产日韩欧美在线一区| 国产精品一区二区在线看| 日韩亚洲国产中文字幕欧美| 视频在线在亚洲| 欧美电影在哪看比较好| 午夜影院久久久| 欧美色视频一区| 偷窥国产亚洲免费视频| 欧美老肥妇做.爰bbww视频| 亚洲午夜久久久久中文字幕久| 一本大道av一区二区在线播放 | 色婷婷av一区二区三区之一色屋| 亚洲欧洲日本在线| 色综合一区二区| 一区二区三区资源| 欧美综合在线视频| 日本午夜一本久久久综合| 91麻豆精品国产91| 激情国产一区二区| 国产精品久久久久久久久图文区| 不卡一区二区三区四区| 亚洲综合色丁香婷婷六月图片| 欧美午夜精品一区二区蜜桃| 天天做天天摸天天爽国产一区| 884aa四虎影成人精品一区| 蜜臀国产一区二区三区在线播放 | 欧美一区二区国产| 国产综合成人久久大片91| 国产欧美一区二区三区网站| 成人性生交大片免费看中文 | 国产成人免费视频网站高清观看视频| 欧美精品一区在线观看| 99麻豆久久久国产精品免费| 亚洲一区日韩精品中文字幕| 欧美一级欧美三级在线观看| 国产成人无遮挡在线视频| 亚洲美女屁股眼交3| 91精品国产综合久久小美女| 国产精品一区二区无线| 亚洲免费观看在线视频| 欧洲av在线精品| 午夜精品免费在线观看| 极品少妇一区二区| 国产精品亲子乱子伦xxxx裸| 一本久久精品一区二区| 日韩avvvv在线播放| 国产精品国产三级国产aⅴ原创| 欧美专区在线观看一区| 免费观看91视频大全| 国产精品理论片在线观看| 正在播放亚洲一区| www.日韩大片| 精品写真视频在线观看| 亚洲乱码中文字幕| 日韩欧美电影一二三| 91麻豆国产精品久久| 国产在线精品一区二区三区不卡| 亚洲女人****多毛耸耸8| 久久午夜国产精品| 欧美群妇大交群中文字幕| jvid福利写真一区二区三区| 免费成人深夜小野草| 亚洲一二三四区| 26uuu国产在线精品一区二区| 国内精品嫩模私拍在线| 午夜婷婷国产麻豆精品| 欧美日韩国产高清一区| 国产成人精品亚洲午夜麻豆| 日韩国产在线观看一区| 玉足女爽爽91| 国产精品免费网站在线观看| 日韩美一区二区三区| 欧美日韩视频专区在线播放| www.激情成人| 懂色一区二区三区免费观看| 久草中文综合在线| 亚洲第一会所有码转帖| 中文字幕在线免费不卡| 国产偷国产偷精品高清尤物| 精品久久久久久久久久久久久久久 | 亚洲成人在线网站| 99综合电影在线视频| 国产一区二区三区久久久| 五月综合激情日本mⅴ| 日韩一区日韩二区| 欧美激情中文字幕| 国产日韩欧美制服另类| 国产午夜精品久久久久久久 | 欧美在线你懂的| 99久久精品国产观看| 成人爱爱电影网址| 成人av动漫网站| 99久久精品国产网站| 成人午夜私人影院| 国产精品66部| 国产成人免费在线| www.久久久久久久久| 99精品欧美一区二区三区小说| 成人美女在线观看| 99久久精品国产精品久久| 色哟哟一区二区三区| 欧美性高清videossexo| 美女视频一区二区| 亚洲蜜臀av乱码久久精品蜜桃| 国产一区二区三区日韩 | 精品国产髙清在线看国产毛片 | 麻豆国产精品777777在线| 蜜臀久久久99精品久久久久久| 麻豆精品视频在线观看| 国产精品自拍网站| 本田岬高潮一区二区三区| 色系网站成人免费| 欧美性受xxxx黑人xyx性爽| 欧美日韩精品三区| 欧美sm美女调教| 国产精品久久久久久户外露出 | 日韩精品最新网址| 欧美精彩视频一区二区三区| 中文字幕一区二区三区在线播放 | 99热在这里有精品免费| av成人动漫在线观看| 91福利国产精品| 欧美日韩一区 二区 三区 久久精品| 欧美无人高清视频在线观看| 欧美一区二区三区啪啪| 国产精品久久久久永久免费观看| 亚洲综合色丁香婷婷六月图片| 麻豆中文一区二区| 成人免费毛片片v| 欧美精品vⅰdeose4hd| 久久久精品国产99久久精品芒果 | 日韩精品免费视频人成| 国产一区二区精品久久99| 91在线观看免费视频| 欧美一级片在线观看| 亚洲欧洲成人精品av97| 免费在线成人网| 一本一道波多野结衣一区二区| 欧美一区二区三区白人| 亚洲色图一区二区三区| 国产一区二区三区观看| 欧美日韩一区二区三区不卡| 国产精品久久久久久久久搜平片 | 99精品欧美一区二区三区小说 | 另类成人小视频在线| av亚洲精华国产精华精华| 欧美日韩一区二区三区高清| 久久精品一区八戒影视| 一区二区在线观看免费视频播放| 国产美女精品在线| 欧美日韩国产一级二级| 中文字幕日韩av资源站| 国产麻豆精品在线观看| 91精品视频网| 午夜欧美视频在线观看 | 亚洲影视在线观看| 99精品热视频| 欧美国产精品v| 韩国精品在线观看| 91精品一区二区三区在线观看| 综合欧美一区二区三区| 国产成人av电影| 久久麻豆一区二区| 蓝色福利精品导航| 欧美精品乱人伦久久久久久| 亚洲综合一区二区三区| 9久草视频在线视频精品| 中文字幕一区二区三区在线播放| 国产a级毛片一区| 国产欧美一区二区三区在线老狼| 国产又粗又猛又爽又黄91精品| 欧美成人艳星乳罩| 久久不见久久见免费视频1| 日韩欧美国产一区二区在线播放 | 五月激情六月综合| 欧美高清视频一二三区| 视频一区二区欧美| 欧美一级片在线|