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

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

?? is2odbc.cpp

?? Windows多線程編碼隨書源碼
?? CPP
字號:
/*
 * Is2odbc.cpp : Implementation file for Internet Server Extension
 * 		 ISAPI to ODBC Extension
 *
 * Sample code for "Multithreading Applications in Win32"
 * This is from Chapter 16
 *
 * Implement an ISAPI extension that will launch and then
 * talk to an external process that is running the JET engine.
 *
 * The error messages returned by this filter are appropriate
 * for developers. They would need to be changed if this page
 * were being used by endusers.
 */

#include "stdafx.h"
#include "Is2Odbc.h"

// Add our include files here
#include "MtVerify.h"
#include "Request.h"

//
// Define how long an ISAPI thread should wait while 
// handling a DB request.
//
#define TIMEOUT_MUTEX   5000   /* 10 sec wait to do a request */
#define TIMEOUT_EVENT   360000   /* 60 sec wait for results     */

///////////////////////////////////////////////////////////////////////
// The one and only CWinApp object
// NOTE: You may remove this object if you alter your project to no
// longer use MFC in a DLL.

CWinApp theApp;

//
// Setup a security descriptor that allows world access
//
SECURITY_DESCRIPTOR sd;
SECURITY_ATTRIBUTES sa;

///////////////////////////////////////////////////////////////////////
// command-parsing map

BEGIN_PARSE_MAP(CIs2OdbcExtension, CHttpServer)
    // TODO: insert your ON_PARSE_COMMAND() and 
    // ON_PARSE_COMMAND_PARAMS() here to hook up your commands.
    // For example:

    //
    // Added Optional Filter and Sort arguments
    //
    ON_PARSE_COMMAND(Default, CIs2OdbcExtension, ITS_PSTR ITS_PSTR)
    ON_PARSE_COMMAND_PARAMS("Filter=~ Sort=~")
    DEFAULT_PARSE_COMMAND(Default, CIs2OdbcExtension)
END_PARSE_MAP(CIs2OdbcExtension)


///////////////////////////////////////////////////////////////////////
// The one and only CIs2OdbcExtension object

CIs2OdbcExtension theExtension;


///////////////////////////////////////////////////////////////////////
// CIs2OdbcExtension implementation

CIs2OdbcExtension::CIs2OdbcExtension()
{
}

CIs2OdbcExtension::~CIs2OdbcExtension()
{
}

BOOL CIs2OdbcExtension::GetExtensionVersion(HSE_VERSION_INFO* pVer)
{
    // Call default implementation for initialization
    CHttpServer::GetExtensionVersion(pVer);

    // Load description string
    TCHAR sz[HSE_MAX_EXT_DLL_NAME_LEN+1];
    ISAPIVERIFY(::LoadString(AfxGetResourceHandle(),
            IDS_SERVER, sz, HSE_MAX_EXT_DLL_NAME_LEN));
    _tcscpy(pVer->lpszExtensionDesc, sz);
    return TRUE;
}

BOOL CIs2OdbcExtension::InitInstance(CHttpServerContext* pCtxt)
{
	// Let the base class do its job.
	CHttpServer::InitInstance(pCtxt);

    // create a security descriptor that allows anyone
    //  to get at the event...
    //
    if (!InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION))
		return FALSE;

    // add a NULL disc. ACL to the security descriptor.
    //
    if (!SetSecurityDescriptorDacl(&sd, TRUE, (PACL) NULL, FALSE))
		return FALSE;

    sa.nLength = sizeof(sa);
    sa.lpSecurityDescriptor = &sd;
    sa.bInheritHandle = FALSE;

	return TRUE;
}

///////////////////////////////////////////////////////////////////////
// CIs2OdbcExtension command handlers

//
// Added Filter and Sort arguments
void CIs2OdbcExtension::Default(CHttpServerContext* pCtxt, LPTSTR pszFilter, LPTSTR pszSort)
{
    StartContent(pCtxt);
    WriteTitle(pCtxt);

	CEvent serverRunning(FALSE, TRUE, EVENT_SERVER_RUNNING, &sa);
	if (::GetLastError() != ERROR_ALREADY_EXISTS)
	{
		CString strDllPath;
		GetModuleFileName( theApp.m_hInstance,
							strDllPath.GetBuffer(MAX_PATH),
							MAX_PATH );
		strDllPath.ReleaseBuffer();
		strDllPath = strDllPath.Left( strDllPath.ReverseFind(_T('\\'))+1 );
		strDllPath += "DbServer.EXE";

		STARTUPINFO si;
		PROCESS_INFORMATION pi;
		ZeroMemory( &si, sizeof(si) );
		si.cb = sizeof(si);

		BOOL fServerCreated = ::CreateProcess(
						strDllPath,
						NULL,		// Command line
						NULL,		// Process Security
						NULL,		// Thread Security
						FALSE,		// No Inherit
						DETACHED_PROCESS,
						NULL,		// Environment
						NULL,
						&si,
						&pi
					);
		if (!fServerCreated)
		{
			*pCtxt << _T("CreateProcess failed calling DbServer.<p>");
			EndContent(pCtxt);
			return;
		}
	}
	// DbServer may be starting up now, so wait for it.
	if (::WaitForSingleObject(serverRunning, TIMEOUT_EVENT) == WAIT_TIMEOUT)
	{
        *pCtxt << _T("DbServer failed to start.<p>");
	    EndContent(pCtxt);
		return;
	}

	// This mutex is only used within the Web server,
	// so it should not need world security attributes.
    CMutex myMutex(FALSE, MUTEX_DB_REQUEST);
    CSingleLock myLock(&myMutex, FALSE);

    // Wait to get access to DbServer
    // If another request is outstanding then we will not get in.
    if (myLock.Lock(TIMEOUT_MUTEX))
    {
        // Create events for signalling DbServer
        CEvent startEvent(FALSE, TRUE, EVENT_START_PROCESSING, &sa);
        CEvent doneEvent(FALSE, TRUE, EVENT_DONE_PROCESSING, &sa);

        // 
        // Allocate memory for our data structure in shared memory.
        // 
        HANDLE hFileMapping = NULL;
        DbRequest* pDbRequest = NULL;

        MTVERIFY( hFileMapping = ::CreateFileMapping((LPVOID) -1, &sa, 
            PAGE_READWRITE, 0, sizeof(DbRequest), 
            FILE_DB_REQUEST));

        MTVERIFY( pDbRequest = (DbRequest*) ::MapViewOfFile(hFileMapping,
            FILE_MAP_ALL_ACCESS, 0, 0, 0));

        //
        // Fill in our DB request.
        // Make sure we detect the default argument "~" and replace it.
        //
        strcpy(pDbRequest->sqlFilter, "");
        if (strcmp(pszFilter, "~") != 0)
            strcpy(pDbRequest->sqlFilter, pszFilter);

        strcpy(pDbRequest->sqlSort, "");
        if (strcmp(pszSort, "~") != 0)
            strcpy(pDbRequest->sqlSort, pszSort);

        // Tell DbServer to do the DB Query
        startEvent.SetEvent();

        // Wait for result from DbServer
        // If Server has died, we can tell user
        CSingleLock waitForDoneEvent(&doneEvent, FALSE);
        if (waitForDoneEvent.Lock(TIMEOUT_EVENT))
        {   // got result from server
            *pCtxt << _T("The following books match your search request:<p>");
            *pCtxt << pDbRequest->sqlResult << "<p>";
        }   // end if
        else
        {   // Got no response from server
            *pCtxt << _T("Sorry, but DbServer never responded with the results.<p>");
        }   // end else
        doneEvent.ResetEvent();

        // Close request data structure
        UnmapViewOfFile(pDbRequest);
        CloseHandle(hFileMapping);

    } // end if
    else
        {   // Another Thread is busy accessing the server
            *pCtxt << _T("Sorry, another Web Page is busy making a database request.<p>");
        }   // end else


    EndContent(pCtxt);
}

// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CIs2OdbcExtension, CHttpServer)
    //{{AFX_MSG_MAP(CIs2OdbcExtension)
    //}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif  // 0



///////////////////////////////////////////////////////////////////////
// If your extension will not use MFC, you'll need this code to make
// sure the extension objects can find the resource handle for the
// module.  If you convert your extension to not be dependent on MFC,
// remove the comments arounn the following AfxGetResourceHandle()
// and DllMain() functions, as well as the g_hInstance global.

/****

static HINSTANCE g_hInstance;

HINSTANCE AFXISAPI AfxGetResourceHandle()
{
    return g_hInstance;
}

BOOL WINAPI DllMain(HINSTANCE hInst, ULONG ulReason,
                    LPVOID lpReserved)
{
    if (ulReason == DLL_PROCESS_ATTACH)
    {
        g_hInstance = hInst;
    }

    return TRUE;
}

****/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩制服丝袜av| 国产另类ts人妖一区二区| 丝袜美腿亚洲综合| 国产精品久久久久久久久免费相片 | 亚洲成a人片在线观看中文| 一区二区三区在线视频免费观看 | 91亚洲精品一区二区乱码| 欧美日韩在线直播| 久久久久久免费网| 亚洲色图一区二区| 亚洲一区成人在线| 国产一区二区在线免费观看| 97久久超碰国产精品电影| 7777精品伊人久久久大香线蕉| 久久先锋影音av鲁色资源网| 亚洲资源中文字幕| 国产福利一区二区三区| 欧美人体做爰大胆视频| 亚洲国产精品国自产拍av| 午夜久久电影网| 91免费看片在线观看| 久久久亚洲高清| 亚洲成a人v欧美综合天堂| 久久不见久久见免费视频1| 国产精品亚洲а∨天堂免在线| 欧美性xxxxx极品少妇| 国产丝袜在线精品| 日本不卡一区二区三区高清视频| 99免费精品在线| 欧美一二三区在线| 亚洲国产日韩av| 91首页免费视频| 国产午夜一区二区三区| 久久成人av少妇免费| 91精品国产综合久久蜜臀| 亚洲精品国产第一综合99久久| 国产成人免费视频网站高清观看视频 | 国产剧情一区二区三区| 欧美一区二区三区爱爱| 性感美女久久精品| 欧美性受xxxx| 亚洲精品视频在线看| jiyouzz国产精品久久| 中文字幕av在线一区二区三区| 国产盗摄精品一区二区三区在线| 日韩亚洲欧美一区二区三区| 日韩高清国产一区在线| 欧美精品18+| 亚洲欧美色综合| 91蜜桃网址入口| 亚洲欧美日韩一区二区三区在线观看| 成人av在线电影| 日韩伦理免费电影| 色吊一区二区三区| 国产精品成人在线观看| 91视频在线看| 亚洲第四色夜色| 欧美一区二区三区免费| 国产老肥熟一区二区三区| 国产精品你懂的| 91丝袜美女网| 亚洲成av人在线观看| 欧美日韩精品一区二区三区蜜桃 | 麻豆极品一区二区三区| 91精品欧美综合在线观看最新| 日本三级亚洲精品| 欧美不卡一二三| 粉嫩aⅴ一区二区三区四区五区| 91精品国产入口在线| 精品亚洲porn| 中文字幕字幕中文在线中不卡视频| 色婷婷精品久久二区二区蜜臀av| 亚洲小少妇裸体bbw| 欧美大片顶级少妇| 国产一区二区三区观看| 中文字幕一区二区三| 欧美色图免费看| 精品制服美女丁香| 中文字幕一区在线观看| 9i看片成人免费高清| 青青草国产成人99久久| 国产亚洲一本大道中文在线| 日本伦理一区二区| 国产在线视频不卡二| 亚洲欧美日韩国产综合| 欧美猛男gaygay网站| 国产一区二区91| 亚洲国产日日夜夜| 中文字幕的久久| 91精选在线观看| 丁香另类激情小说| 一区二区视频在线| 久久人人97超碰com| 在线观看中文字幕不卡| 国产成人h网站| 日韩精品欧美成人高清一区二区| 久久久一区二区三区| 欧美日韩三级一区二区| 粉嫩一区二区三区性色av| 天天色 色综合| 久久久久久夜精品精品免费| 欧美三级电影在线看| 成人黄色一级视频| 九九视频精品免费| 秋霞av亚洲一区二区三| 亚洲另类中文字| 亚洲国产电影在线观看| 7799精品视频| 欧美日韩色一区| 在线观看视频91| 欧美亚洲图片小说| 欧美午夜精品一区二区三区 | 亚洲视频图片小说| 国产精品女主播在线观看| 国产精品私人影院| 亚洲国产高清在线观看视频| 国产精品色呦呦| 亚洲欧洲色图综合| 亚洲你懂的在线视频| 亚洲摸摸操操av| 亚洲福中文字幕伊人影院| 亚洲成人一区二区在线观看| 日产欧产美韩系列久久99| 久久精品国产亚洲高清剧情介绍| 久国产精品韩国三级视频| 国产又黄又大久久| 成人激情校园春色| 在线视频观看一区| 91精品国产一区二区| 精品欧美一区二区久久| 久久人人超碰精品| 亚洲欧美乱综合| 强制捆绑调教一区二区| 国产一区啦啦啦在线观看| 成人91在线观看| 欧美三级日本三级少妇99| 日韩三级免费观看| 日本一区二区视频在线| 亚洲欧美一区二区三区国产精品 | 欧美岛国在线观看| 国产欧美日韩卡一| 一区二区三区精品久久久| 日本成人在线看| 国产91对白在线观看九色| 欧美三级电影网站| 国产片一区二区三区| 亚洲高清不卡在线观看| 国产综合久久久久影院| 一本在线高清不卡dvd| 日韩欧美一二三区| 亚洲免费在线观看视频| 狂野欧美性猛交blacked| 色综合天天做天天爱| 欧美本精品男人aⅴ天堂| 亚洲日本欧美天堂| 免费不卡在线观看| 91麻豆免费看片| 精品国产一区二区三区久久影院| 亚洲视频一二三| 国内精品久久久久影院色| 日本道色综合久久| 久久久久国产精品麻豆ai换脸 | 欧美日韩国产成人在线91| 久久久久久一级片| 日韩和欧美一区二区三区| 99久久99久久综合| 久久亚区不卡日本| 日韩av中文字幕一区二区| 91香蕉视频mp4| 国产日韩av一区| 另类小说一区二区三区| 欧美日韩免费一区二区三区视频| 欧美国产欧美亚州国产日韩mv天天看完整| 亚洲国产美国国产综合一区二区| 国产一区二区三区免费看| 日韩一区二区三区高清免费看看| 亚洲人精品一区| 国产91综合网| 久久综合一区二区| 久久国产生活片100| 制服丝袜在线91| 亚洲在线中文字幕| 一本色道久久综合亚洲精品按摩| 久久精品日韩一区二区三区| 久久99久久久久久久久久久| 91 com成人网| 欧美aaa在线| 欧美一区二区三区在线电影| 亚洲午夜精品一区二区三区他趣| a4yy欧美一区二区三区| 亚洲五月六月丁香激情| 92精品国产成人观看免费| 国产精品亲子伦对白| 国产福利一区二区三区在线视频| 欧美精品一区二区三区一线天视频| 日韩一区精品视频| 欧美一区二区在线免费观看| 日韩影院免费视频| 欧美一区二区福利视频| 美国欧美日韩国产在线播放|