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

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

?? svc.cpp

?? com編程
?? CPP
字號:
/////////////////////////////////////////////////////
//
// svc.cpp
//
// Copyright 1997, Don Box/Addison Wesley
//
// This code accompanies the book "The Component
// Object Model" from Addison Wesley. Blah blah blah
//
//

#define _WIN32_WINNT 0x403
#include <windows.h>
#include <olectl.h>
#include <initguid.h>
#include <iaccess.h>

#include "ChatSession.h"
#include "../include/COMChat_i.c"


#if !defined(HAVE_IID_IACCESSCONTROL)
// there is a common bug is the SDK headers and libs
// that causes IID_IAccessControl to be undefined.
// We define it here to give the GUID linkage.
DEFINE_GUID(IID_IAccessControl,0xEEDD23E0, 0x8410, 0x11CE, 
            0xA1, 0xC3, 0x08, 0x00, 0x2B, 0x2B, 0x8D, 0x8F);
#endif

// standard MTA lifetime management helpers
HANDLE g_heventDone = CreateEvent(0, TRUE, FALSE, 0);

void ModuleLock(void)
{
    CoAddRefServerProcess();
}

void ModuleUnlock(void)
{
    if (CoReleaseServerProcess() == 0)
        SetEvent(g_heventDone);
}

// standard self-registration table
const char *g_RegTable[][3] = {
{ "CLSID\\{5223A053-2441-11d1-AF4F-0060976AA886}",
  0, "ChatSession" },
{ "CLSID\\{5223A053-2441-11d1-AF4F-0060976AA886}",
  "AppId", "{5223A054-2441-11d1-AF4F-0060976AA886}"
},
{ "CLSID\\{5223A053-2441-11d1-AF4F-0060976AA886}\\LocalServer32",
  0, (const char*)-1 // rogue value indicating file name
},
{ "AppID\\{5223A054-2441-11d1-AF4F-0060976AA886}",
  0, "ChatSession Server" },
{ "AppID\\{5223A054-2441-11d1-AF4F-0060976AA886}",
  "RunAs", "Domain\\ReplaceMe"
},
{ "AppID\\{5223A054-2441-11d1-AF4F-0060976AA886}",
  "Chat Admins Group", "Domain\\ReplaceMe"
},
{ "AppID\\{5223A054-2441-11d1-AF4F-0060976AA886}",
  "Chat Users Group", "Domain\\ReplaceMe"
},
{ "AppID\\COMChat.exe",
  "AppId", "{5223A054-2441-11d1-AF4F-0060976AA886}"
},
};

// self-unregistration routine
STDAPI UnregisterServer(void) {
  HRESULT hr = S_OK;
  int nEntries = sizeof(g_RegTable)/sizeof(*g_RegTable);
  for (int i = nEntries - 1; i >= 0; i--){
    const char *pszKeyName = g_RegTable[i][0];

    long err = RegDeleteKeyA(HKEY_CLASSES_ROOT, pszKeyName);
    if (err != ERROR_SUCCESS) 
      hr = S_FALSE;
  }
  return hr;
}

// self-registration routine
STDAPI RegisterServer(HINSTANCE hInstance = 0) {
  HRESULT hr = S_OK;
// look up server's file name
  char szFileName[MAX_PATH];
  GetModuleFileNameA(hInstance, szFileName, MAX_PATH);
// register entries from table
  int nEntries = sizeof(g_RegTable)/sizeof(*g_RegTable);
  for (int i = 0; SUCCEEDED(hr) && i < nEntries; i++) {
    const char *pszKeyName   = g_RegTable[i][0];
    const char *pszValueName = g_RegTable[i][1];
    const char *pszValue     = g_RegTable[i][2];
// map rogue value to module file name
    if (pszValue == (const char*)-1)
      pszValue = szFileName;
    HKEY hkey;
// create the key
    long err = RegCreateKeyA(HKEY_CLASSES_ROOT,
                            pszKeyName, &hkey);
    if (err == ERROR_SUCCESS) {
// set the value
      err = RegSetValueExA(hkey, pszValueName, 0,
                           REG_SZ, (const BYTE*)pszValue,
                           (strlen(pszValue) + 1));
      RegCloseKey(hkey);
    }
    if (err != ERROR_SUCCESS) {
  // if cannot add key or value, back out and fail
      UnregisterServer(); 
      hr = SELFREG_E_CLASS;
    }
  }
  return hr;
}

// these point to standard access control objects
// used to protect particular methods
IAccessControl *g_pacUsers = 0;
IAccessControl *g_pacAdmins = 0;

// this routine is called at process init time
// to build access control objects and to allow
// anonymous access to server by default
HRESULT InitializeApplicationSecurity(void)
{
// load groupnames from registry
    static OLECHAR wszAdminsGroup[1024];
    static OLECHAR wszUsersGroup[1024];
    HKEY hkey;
    long err = RegOpenKeyEx(HKEY_CLASSES_ROOT,
         __TEXT("AppID\\{5223A054-2441-11d1-AF4F-0060976AA886}"),
                            0, KEY_QUERY_VALUE,
                            &hkey);
    if (err == ERROR_SUCCESS)
    {
        DWORD cb = sizeof(wszAdminsGroup);
        err = RegQueryValueExW(hkey, L"Chat Admins Group",
                              0, 0, (BYTE*)wszAdminsGroup,
                              &cb);
        cb = sizeof(wszAdminsGroup);
        if (err == ERROR_SUCCESS)
            err = RegQueryValueExW(hkey, 
                                   L"Chat Users Group",
                                   0, 0, (BYTE*)wszUsersGroup,
                                   &cb); 
        RegCloseKey(hkey);
    }
    if (err != ERROR_SUCCESS)
        return MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32,
                            GetLastError());
                            
// declare vectors of user/groups for 2 access 
// control objects

    ACTRL_ACCESS_ENTRYW rgaaeUsers[] = {
      { {0, NO_MULTIPLE_TRUSTEE, TRUSTEE_IS_NAME, 
        TRUSTEE_IS_GROUP, wszUsersGroup  }, 
        ACTRL_ACCESS_ALLOWED, COM_RIGHTS_EXECUTE, 0, 
        NO_INHERITANCE, 0 },
    };
    ACTRL_ACCESS_ENTRY_LISTW aaelUsers = { 
        sizeof(rgaaeUsers)/sizeof(*rgaaeUsers), 
        rgaaeUsers
    };
    ACTRL_PROPERTY_ENTRYW apeUsers = { 0, &aaelUsers, 0 };
    ACTRL_ACCESSW aaUsers = { 1, &apeUsers };

    ACTRL_ACCESS_ENTRYW rgaaeAdmins[] = {
      { {0, NO_MULTIPLE_TRUSTEE, TRUSTEE_IS_NAME, 
        TRUSTEE_IS_GROUP, wszAdminsGroup }, 
        ACTRL_ACCESS_ALLOWED, COM_RIGHTS_EXECUTE, 0, 
        NO_INHERITANCE, 0 },
    };
    ACTRL_ACCESS_ENTRY_LISTW aaelAdmins = { 
        sizeof(rgaaeAdmins)/sizeof(*rgaaeAdmins), 
        rgaaeAdmins
    };
    ACTRL_PROPERTY_ENTRYW apeAdmins = { 0, &aaelAdmins, 0 };
    ACTRL_ACCESSW aaAdmins = { 1, &apeAdmins };

    HRESULT hr = CoInitializeSecurity(0, -1, 0, 0,
                              RPC_C_AUTHN_LEVEL_NONE,
                              RPC_C_IMP_LEVEL_ANONYMOUS,
                              0,
                              EOAC_NONE,
                              0);
    if (SUCCEEDED(hr))
    {
        hr = CoCreateInstance(CLSID_DCOMAccessControl,
                              0, CLSCTX_ALL, IID_IAccessControl,
                              (void**)&g_pacUsers);
        if (SUCCEEDED(hr))
            hr = g_pacUsers->SetAccessRights(&aaUsers);
        if (SUCCEEDED(hr))
        {
            hr = CoCreateInstance(CLSID_DCOMAccessControl,
                                  0, CLSCTX_ALL, 
                                  IID_IAccessControl,
                                  (void**)&g_pacAdmins);
            if (SUCCEEDED(hr))
                hr = g_pacAdmins->SetAccessRights(&aaAdmins);
        }
        if (FAILED(hr))
        {
            if (g_pacAdmins)
            {
                g_pacAdmins->Release();
                g_pacAdmins = 0;
            }
            if (g_pacUsers)
            {
                g_pacUsers->Release();
                g_pacUsers = 0;
            }
        }
    }
    return hr;
}

// the main thread routine that simply registers the class
// object and waits to die
int WINAPI WinMain(HINSTANCE, HINSTANCE, 
                   LPSTR szCmdParam, int)
{
    const TCHAR *pszPrompt = 
        __TEXT("Ensure that you have properly ")
        __TEXT("configured the application to ")
        __TEXT("run as a particular user and that ")
        __TEXT("you have manually changed the ")
        __TEXT("Users and Admins Group registry ")
        __TEXT("settings under this server's AppID.");

    HRESULT hr = CoInitializeEx(0, COINIT_MULTITHREADED);
    if (FAILED(hr))
        return hr;

// look for self-registration flags
    if (strstr(szCmdParam, "/UnregServer") != 0
        || strstr(szCmdParam, "-UnregServer") != 0)
    {
        hr = UnregisterServer();
        CoUninitialize();
        return hr;
    }
    else if (strstr(szCmdParam, "/RegServer") != 0
             || strstr(szCmdParam, "-RegServer") != 0)
    {
        hr = RegisterServer();
        MessageBox(0, pszPrompt, __TEXT("COMChat"), 
                   MB_SETFOREGROUND);
        CoUninitialize();
        return hr;
    }
    
// set up process security
    hr = InitializeApplicationSecurity();
    if (SUCCEEDED(hr))
    {
// register class object and wait to die
        DWORD  dwReg;
        static ChatSessionClass cmc;
        hr = CoRegisterClassObject(CLSID_ChatSession, 
              static_cast<IExternalConnection*>(&cmc),
                                   CLSCTX_LOCAL_SERVER
                  REGCLS_SUSPENDED|REGCLS_MULTIPLEUSE,
                                   &dwReg);
        if (SUCCEEDED(hr))
        {
            hr = CoResumeClassObjects();
            if (SUCCEEDED(hr))
                WaitForSingleObject(g_heventDone, INFINITE);
            CoRevokeClassObject(dwReg);
        }
        g_pacUsers->Release();
        g_pacAdmins->Release();
    }
    if (FAILED(hr))
        MessageBox(0, pszPrompt, __TEXT("Error"), 
                   MB_SETFOREGROUND);

    CoUninitialize();
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
xf在线a精品一区二区视频网站| 99久久国产综合精品女不卡| 午夜视频一区二区| 免费成人av在线播放| eeuss影院一区二区三区 | 一二三四区精品视频| 精品一区二区国语对白| 色综合久久中文综合久久97| www成人在线观看| 婷婷综合久久一区二区三区| 成人精品电影在线观看| www久久久久| 日产国产欧美视频一区精品| 精品久久久久久最新网址| 欧美日韩高清一区二区不卡| 成人黄色av网站在线| 欧美一级片免费看| 亚洲成av人**亚洲成av**| av在线一区二区三区| 久久先锋影音av| 久久se这里有精品| 91精品国产一区二区人妖| 亚洲综合一区在线| 在线看国产一区二区| 亚洲三级电影网站| 一本色道综合亚洲| 亚洲视频在线观看三级| 波多野结衣中文字幕一区二区三区| 久久噜噜亚洲综合| 国产酒店精品激情| 久久亚洲欧美国产精品乐播| 国内国产精品久久| 欧美性猛交xxxxxx富婆| 欧美色图在线观看| 亚洲成人久久影院| 欧美日韩在线一区二区| 亚洲永久精品大片| 欧美日韩视频专区在线播放| 亚洲综合成人网| 欧美日韩和欧美的一区二区| 亚洲最新视频在线观看| 欧美视频在线观看一区| 亚洲v日本v欧美v久久精品| 欧美精品在线一区二区三区| 亚洲6080在线| 日韩欧美黄色影院| 国产成人在线看| 亚洲乱码精品一二三四区日韩在线| 色妹子一区二区| 午夜成人在线视频| 精品国产一区二区三区忘忧草| 国产尤物一区二区| 亚洲欧洲无码一区二区三区| 色av一区二区| 蜜臀久久99精品久久久久久9| 久久久噜噜噜久久中文字幕色伊伊| 国产69精品一区二区亚洲孕妇| 国产精品你懂的| 欧美日韩精品福利| 国产一区二区三区久久久| 欧美调教femdomvk| 一区二区三区四区国产精品| 欧美在线观看18| 毛片av中文字幕一区二区| 国产日产亚洲精品系列| 色av一区二区| 蜜臀a∨国产成人精品| 国产日韩欧美精品综合| 欧美视频你懂的| 国产成人精品亚洲777人妖| 亚洲精品欧美综合四区| 日韩精品最新网址| 在线视频观看一区| 国产馆精品极品| 亚洲蜜臀av乱码久久精品蜜桃| 91精品国产麻豆| 色系网站成人免费| 国产精品一区专区| 日韩精品电影在线观看| 中文字幕一区三区| 久久久久久麻豆| 91麻豆精品国产91久久久久| 成人免费黄色大片| 免费xxxx性欧美18vr| 亚洲一区二区欧美激情| 中文字幕一区二| 久久久国产精华| 91精品国产综合久久久久| 97aⅴ精品视频一二三区| 国产在线精品不卡| 蜜臀久久99精品久久久久宅男| 一区二区三区高清在线| 国产蜜臀av在线一区二区三区| 日韩欧美黄色影院| 欧美日韩国产区一| 91国偷自产一区二区开放时间| 国产91在线|亚洲| 久久国产成人午夜av影院| 香蕉成人伊视频在线观看| 亚洲欧美二区三区| 自拍偷拍国产亚洲| 国产精品国产三级国产aⅴ原创| 久久女同性恋中文字幕| 欧美一三区三区四区免费在线看| 欧美日韩在线不卡| 色天天综合久久久久综合片| 99久久婷婷国产综合精品电影| 国产在线播精品第三| 国产制服丝袜一区| 蜜臀av性久久久久蜜臀aⅴ四虎| 首页国产欧美久久| 午夜久久久久久| 奇米亚洲午夜久久精品| 美国一区二区三区在线播放| 日本不卡一区二区三区高清视频| 亚洲一区二区三区小说| 亚洲成人av福利| 日本不卡一区二区三区高清视频| 日本不卡的三区四区五区| 蜜桃久久久久久| 激情综合网av| 国产成人av网站| 成人av在线观| 色综合视频一区二区三区高清| 色婷婷综合久久久中文一区二区| 色就色 综合激情| 欧美狂野另类xxxxoooo| 欧美一区二区三区啪啪| 日韩精品中文字幕在线不卡尤物| 精品国产一区二区三区忘忧草 | 韩国成人精品a∨在线观看| 紧缚奴在线一区二区三区| 国产一区二区三区香蕉| 成人av中文字幕| 91黄色免费版| 欧美变态口味重另类| 国产欧美视频一区二区三区| 亚洲人吸女人奶水| 日本欧美在线观看| 国产福利精品一区二区| 色综合天天综合| 欧美一级xxx| 国产精品久久久久久一区二区三区 | 国产精品私房写真福利视频| 亚洲人精品午夜| 另类人妖一区二区av| 成人精品一区二区三区中文字幕| 欧美视频在线观看一区二区| 精品久久人人做人人爰| 亚洲伦在线观看| 精品一区二区三区在线播放视频 | 精品中文字幕一区二区| 99久久综合精品| 7777精品伊人久久久大香线蕉| 久久久久久夜精品精品免费| 亚洲最大的成人av| 国产成人自拍网| 欧美老人xxxx18| 亚洲三级在线观看| 狠狠色丁香久久婷婷综合丁香| 色婷婷精品久久二区二区蜜臀av | 亚洲综合无码一区二区| 紧缚捆绑精品一区二区| 在线观看av一区| 欧美国产精品中文字幕| 婷婷开心激情综合| 99久久免费国产| 精品国产a毛片| 五月婷婷激情综合网| a4yy欧美一区二区三区| 欧美mv日韩mv亚洲| 亚洲成a人v欧美综合天堂下载| 国产成人免费视| 精品国免费一区二区三区| 亚洲一区在线播放| 91在线国产福利| 日本一区二区三区在线观看| 美女免费视频一区二区| 欧美三级三级三级爽爽爽| 亚洲欧洲日本在线| 国产成人亚洲精品青草天美| 欧美一二三区在线观看| 一区二区在线免费观看| 91影院在线免费观看| 国产日产欧美一区| 国产在线看一区| 欧美刺激午夜性久久久久久久| 亚洲国产欧美日韩另类综合 | 国产在线精品免费av| 日韩欧美一卡二卡| 男女男精品视频| 欧美丰满少妇xxxxx高潮对白| 亚洲图片欧美综合| 欧美亚洲国产bt| 樱花影视一区二区| 欧美色窝79yyyycom| 午夜精品爽啪视频| 欧美精品一级二级三级| 日韩av电影免费观看高清完整版 | 精品国偷自产国产一区|