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

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? security.c

?? this sample is distantly related to the httpauth sample which demonstrates the use of the SSPI packa
?? C
字號(hào):
/*++

Copyright 1996-1997 Microsoft Corporation

Module Name:

    security.c

Abstract:

    Handles communication with the SSP package.

Revision History:

--*/

#include <windows.h>
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#define SECURITY_WIN32
#include "sspi.h"
#include "issperr.h"
#include "security.h"
#include "collect.h"

static HINSTANCE g_hLib;
static DWORD g_cbMaxToken;
static PSecurityFunctionTable g_pFuncs;

// structure storing the state of the authentication sequence
//
typedef struct _AUTH_SEQ {
    BOOL _fNewConversation;
    CredHandle _hcred;
    BOOL _fHaveCredHandle;
    BOOL _fHaveCtxtHandle;
    struct _SecHandle  _hctxt;
} AUTH_SEQ, *PAUTH_SEQ;

#define SEC_SUCCESS(Status) ((Status) >= 0)

#define PACKAGE_NAME	"NTLM"
#define NT_DLL_NAME		"security.dll"

// Target name for the security package
//
#define TOKEN_SOURCE_NAME       "AuthSamp"


BOOL InitPackage (DWORD *pcbMaxMessage)
/*++

 Routine Description:

    Finds, loads and initializes the security package

 Return Value:

    Returns TRUE is successful; otherwise FALSE is returned.

--*/
{
	FARPROC pInit;
	SECURITY_STATUS ss;
	PSecPkgInfo pkgInfo;

	// load and initialize the ntlm ssp
	//
	g_hLib = LoadLibrary (NT_DLL_NAME);
	if (NULL == g_hLib)  {
		fprintf (stderr, "Couldn't load dll: %u\n", GetLastError ());
		return(FALSE);
	}

	pInit = GetProcAddress (g_hLib, SECURITY_ENTRYPOINT);
	if (NULL == pInit)  {
		fprintf (stderr, "Couldn't get sec init routine: %u\n", GetLastError ());
		return(FALSE);
	}

	g_pFuncs = (PSecurityFunctionTable) pInit ();
	if (NULL == g_pFuncs)  {
		fprintf (stderr, "Couldn't init package\n");
		return(FALSE);
	}

	// Query for the package we're interested in
	//
	ss = g_pFuncs->QuerySecurityPackageInfo (PACKAGE_NAME, &pkgInfo);
	if (!SEC_SUCCESS(ss))  {
		fprintf (stderr, "Couldn't query package info for %s, error %u\n",
					PACKAGE_NAME, ss);
		return(FALSE);
	}

	g_cbMaxToken = pkgInfo->cbMaxToken;

	g_pFuncs->FreeContextBuffer (pkgInfo);

	*pcbMaxMessage = g_cbMaxToken;

	return TRUE;
}

BOOL TermPackage ()
{
	FreeLibrary (g_hLib);

	return(TRUE);
}

BOOL GenClientContext (
			DWORD dwKey,
			BYTE *pIn,
			DWORD cbIn,
			BYTE *pOut,
			DWORD *pcbOut,
			BOOL *pfDone)
/*++

 Routine Description:

    Optionally takes an input buffer coming from the server and returns
	a buffer of information to send back to the server.  Also returns
	an indication of whether or not the context is complete.

 Return Value:

    Returns TRUE is successful; otherwise FALSE is returned.

--*/
{
	SECURITY_STATUS	ss;
	TimeStamp		Lifetime;
	SecBufferDesc	OutBuffDesc;
	SecBuffer		OutSecBuff;
	SecBufferDesc	InBuffDesc;
	SecBuffer		InSecBuff;
	ULONG			ContextAttributes;
	PAUTH_SEQ		pAS;

	// Lookup pAS based on Key
	//
	if (!GetEntry (dwKey, (PVOID*) &pAS))
		return(FALSE);

	if (pAS->_fNewConversation)  {
		ss = g_pFuncs->AcquireCredentialsHandle (
							NULL,	// principal
							PACKAGE_NAME,
							SECPKG_CRED_OUTBOUND,
							NULL,	// LOGON id
							NULL,	// auth data
							NULL,	// get key fn
							NULL,	// get key arg
							&pAS->_hcred,
							&Lifetime
							);
		if (SEC_SUCCESS (ss))
			pAS->_fHaveCredHandle = TRUE;
		else {
			fprintf (stderr, "AcquireCreds failed: %u\n", ss);
			return(FALSE);
		}
	}

	// prepare output buffer
	//
	OutBuffDesc.ulVersion = 0;
	OutBuffDesc.cBuffers = 1;
	OutBuffDesc.pBuffers = &OutSecBuff;

	OutSecBuff.cbBuffer = *pcbOut;
	OutSecBuff.BufferType = SECBUFFER_TOKEN;
	OutSecBuff.pvBuffer = pOut;

	// prepare input buffer
	//
	if (!pAS->_fNewConversation)  {
		InBuffDesc.ulVersion = 0;
		InBuffDesc.cBuffers = 1;
		InBuffDesc.pBuffers = &InSecBuff;

		InSecBuff.cbBuffer = cbIn;
		InSecBuff.BufferType = SECBUFFER_TOKEN;
		InSecBuff.pvBuffer = pIn;
	}

	ss = g_pFuncs->InitializeSecurityContext (
						&pAS->_hcred,
						pAS->_fNewConversation ? NULL : &pAS->_hctxt,
						TOKEN_SOURCE_NAME,
						0,	// context requirements
						0,	// reserved1
						SECURITY_NATIVE_DREP,
						pAS->_fNewConversation ? NULL : &InBuffDesc,
						0,	// reserved2
						&pAS->_hctxt,
						&OutBuffDesc,
						&ContextAttributes,
						&Lifetime
						);
	if (!SEC_SUCCESS (ss))  {
		fprintf (stderr, "init context failed: %u\n", ss);
		return FALSE;
	}

	pAS->_fHaveCtxtHandle = TRUE;

	// Complete token -- if applicable
	//
	if ((SEC_I_COMPLETE_NEEDED == ss) || (SEC_I_COMPLETE_AND_CONTINUE == ss))  {
		if (g_pFuncs->CompleteAuthToken) {
			ss = g_pFuncs->CompleteAuthToken (&pAS->_hctxt, &OutBuffDesc);
			if (!SEC_SUCCESS(ss))  {
				fprintf (stderr, "complete failed: %u\n", ss);
				return FALSE;
			}
		}
		else {
			fprintf (stderr, "Complete not supported.\n");
			return FALSE;
		}
	}

	*pcbOut = OutSecBuff.cbBuffer;

	if (pAS->_fNewConversation)
		pAS->_fNewConversation = FALSE;

	*pfDone = !((SEC_I_CONTINUE_NEEDED == ss) ||
				(SEC_I_COMPLETE_AND_CONTINUE == ss));

	return TRUE;
}

BOOL GenServerContext (
			DWORD dwKey,
			BYTE *pIn,
			DWORD cbIn,
			BYTE *pOut,
			DWORD *pcbOut,
			BOOL *pfDone)
/*++

 Routine Description:

    Takes an input buffer coming from the client and returns a buffer
	to be sent to the client.  Also returns an indication of whether or
	not the context is complete.

 Return Value:

    Returns TRUE is successful; otherwise FALSE is returned.

--*/
{
	SECURITY_STATUS	ss;
	TimeStamp		Lifetime;
	SecBufferDesc	OutBuffDesc;
	SecBuffer		OutSecBuff;
	SecBufferDesc	InBuffDesc;
	SecBuffer		InSecBuff;
	ULONG			ContextAttributes;
	PAUTH_SEQ		pAS;

	// Lookup pAS based on Key
	//
	if (!GetEntry (dwKey, (PVOID*) &pAS))
		return(FALSE);

	if (pAS->_fNewConversation)  {
		ss = g_pFuncs->AcquireCredentialsHandle (
							NULL,	// principal
							PACKAGE_NAME,
							SECPKG_CRED_INBOUND,
							NULL,	// LOGON id
							NULL,	// auth data
							NULL,	// get key fn
							NULL,	// get key arg
							&pAS->_hcred,
							&Lifetime
							);
		if (SEC_SUCCESS (ss))
			pAS->_fHaveCredHandle = TRUE;
		else {
			fprintf (stderr, "AcquireCreds failed: %u\n", ss);
			return(FALSE);
		}
	}

	// prepare output buffer
	//
	OutBuffDesc.ulVersion = 0;
	OutBuffDesc.cBuffers = 1;
	OutBuffDesc.pBuffers = &OutSecBuff;

	OutSecBuff.cbBuffer = *pcbOut;
	OutSecBuff.BufferType = SECBUFFER_TOKEN;
	OutSecBuff.pvBuffer = pOut;

	// prepare input buffer
	//
	InBuffDesc.ulVersion = 0;
	InBuffDesc.cBuffers = 1;
	InBuffDesc.pBuffers = &InSecBuff;

	InSecBuff.cbBuffer = cbIn;
	InSecBuff.BufferType = SECBUFFER_TOKEN;
	InSecBuff.pvBuffer = pIn;

	ss = g_pFuncs->AcceptSecurityContext (
						&pAS->_hcred,
						pAS->_fNewConversation ? NULL : &pAS->_hctxt,
						&InBuffDesc,
						0,	// context requirements
						SECURITY_NATIVE_DREP,
						&pAS->_hctxt,
						&OutBuffDesc,
						&ContextAttributes,
						&Lifetime
						);
	if (!SEC_SUCCESS (ss))  {
		fprintf (stderr, "init context failed: %u\n", ss);
		return FALSE;
	}

	pAS->_fHaveCtxtHandle = TRUE;

	// Complete token -- if applicable
	//
	if ((SEC_I_COMPLETE_NEEDED == ss) || (SEC_I_COMPLETE_AND_CONTINUE == ss))  {
		if (g_pFuncs->CompleteAuthToken) {
			ss = g_pFuncs->CompleteAuthToken (&pAS->_hctxt, &OutBuffDesc);
			if (!SEC_SUCCESS(ss))  {
				fprintf (stderr, "complete failed: %u\n", ss);
				return FALSE;
			}
		}
		else {
			fprintf (stderr, "Complete not supported.\n");
			return FALSE;
		}
	}

	*pcbOut = OutSecBuff.cbBuffer;

	if (pAS->_fNewConversation)
		pAS->_fNewConversation = FALSE;

	*pfDone = !((SEC_I_CONTINUE_NEEDED == ss) ||
				(SEC_I_COMPLETE_AND_CONTINUE == ss));

	return TRUE;
}

BOOL ImpersonateContext (DWORD dwKey)
/*++

 Routine Description:

    Impersonates the client whose context is associated with the
	supplied key.

 Return Value:

    Returns TRUE is successful; otherwise FALSE is returned.

--*/
{
	SECURITY_STATUS	ss;
	PAUTH_SEQ		pAS;

	// Lookup pAS based on Key
	//
	if (!GetEntry (dwKey, (PVOID*) &pAS))
		return(FALSE);

	ss = g_pFuncs->ImpersonateSecurityContext (&pAS->_hctxt);
	if (!SEC_SUCCESS(ss)) {
		fprintf (stderr, "Impersonate failed: %u\n", ss);
		return(FALSE);
	}

	return(TRUE);
}

BOOL RevertContext (DWORD dwKey)
/*++

 Routine Description:

    Reverts to the original server context.

 Return Value:

    Returns TRUE is successful; otherwise FALSE is returned.

--*/
{
	SECURITY_STATUS ss;
	PAUTH_SEQ		pAS;

	// Lookup pAS based on Key
	//
	if (!GetEntry (dwKey, (PVOID*) &pAS))
		return(FALSE);

	ss = g_pFuncs->RevertSecurityContext (&pAS->_hctxt);
	if (!SEC_SUCCESS(ss)) {
		fprintf (stderr, "Revert failed: %u\n", ss);
		return(FALSE);
	}

	return(TRUE);
}

BOOL InitSession (DWORD dwKey)
/*++

 Routine Description:

    Initializes the context associated with a key and adds it to the
	collection.

 Return Value:

    Returns TRUE is successful; otherwise FALSE is returned.

--*/
{
	PAUTH_SEQ pAS;

	pAS = (PAUTH_SEQ) malloc (sizeof (AUTH_SEQ));
	if (NULL == pAS)
		return(FALSE);

	pAS->_fNewConversation = TRUE;
	pAS->_fHaveCredHandle = FALSE;
	pAS->_fHaveCtxtHandle = FALSE;
		
	if (!AddEntry (dwKey, (PVOID)pAS))  {
		free (pAS);
		return(FALSE);
	}

	return(TRUE);
}

BOOL TermSession (DWORD dwKey)
/*++

 Routine Description:

    Releases the resources associated with a key and removes it from
	the collection.

 Return Value:

    Returns TRUE is successful; otherwise FALSE is returned.

--*/
{
	PAUTH_SEQ pAS;

	if (!DeleteEntry (dwKey, (LPVOID*)&pAS))	
		return(FALSE);

	if (pAS->_fHaveCtxtHandle)
		g_pFuncs->DeleteSecurityContext (&pAS->_hctxt);

	if (pAS->_fHaveCredHandle)
		g_pFuncs->FreeCredentialHandle (&pAS->_hcred);

	free (pAS);
	
	return(TRUE);
}	

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本va欧美va精品发布| 欧美日韩一区二区三区在线 | 婷婷久久综合九色综合伊人色| 欧美激情一区二区三区蜜桃视频| 欧美一区二区三区视频在线| 欧美在线看片a免费观看| 日本韩国一区二区| 色综合久久综合中文综合网| 日韩精品国产欧美| 久久99在线观看| 在线观看日韩毛片| 国产精品福利影院| 精品一区二区免费看| 欧美午夜影院一区| 国产精品久久看| 国产在线一区观看| 91精品午夜视频| 亚洲四区在线观看| 东方欧美亚洲色图在线| 91精品啪在线观看国产60岁| 一区二区三区四区不卡在线| 成人午夜视频在线观看| 欧美精品一区二区三区很污很色的 | 亚洲欧美日韩国产一区二区三区 | 国产在线看一区| 777欧美精品| 一区二区免费在线| 色婷婷久久久久swag精品| 国产精品日日摸夜夜摸av| 蜜桃在线一区二区三区| 制服丝袜av成人在线看| 亚洲电影一级片| 日本高清无吗v一区| 亚洲欧美日韩小说| 成人sese在线| 中文字幕日韩精品一区| 不卡大黄网站免费看| 欧美国产乱子伦| 处破女av一区二区| 国产精品久久久久久久久图文区| 国产毛片精品视频| 日本一区二区免费在线| 岛国av在线一区| 有坂深雪av一区二区精品| 丝袜诱惑制服诱惑色一区在线观看 | 成人美女视频在线观看18| 91高清在线观看| 久久伊人蜜桃av一区二区| 亚洲激情欧美激情| 狠狠色丁香婷综合久久| 色综合视频在线观看| 久久综合一区二区| 亚洲成人在线网站| gogo大胆日本视频一区| 日韩欧美三级在线| 亚洲一区二区三区不卡国产欧美| 国产一区二区中文字幕| 欧美午夜一区二区| 椎名由奈av一区二区三区| 国产一区二区三区久久悠悠色av| 欧美午夜精品理论片a级按摩| 久久久久久久综合狠狠综合| 午夜欧美2019年伦理| 91捆绑美女网站| 久久亚洲一区二区三区四区| 五月天精品一区二区三区| 成人高清免费观看| xfplay精品久久| 麻豆91免费看| 国产精品夜夜嗨| 中文字幕 久热精品 视频在线| 91欧美激情一区二区三区成人| 婷婷激情综合网| 久久久一区二区三区| 色94色欧美sute亚洲线路一久| 日韩黄色小视频| 欧美国产精品中文字幕| 欧美日韩二区三区| 国产成人福利片| 亚洲va欧美va人人爽午夜| 久久久99久久| 欧美日韩国产美| 成人美女视频在线看| 蜜臀av一区二区在线免费观看| 国产欧美1区2区3区| 7777精品伊人久久久大香线蕉 | 天天操天天色综合| 国产欧美一区二区精品性| 欧美视频一区在线观看| 国产成人av自拍| 成人免费视频网站在线观看| 日韩专区中文字幕一区二区| 国产精品久久二区二区| 精品精品欲导航| 欧美三片在线视频观看| av在线一区二区三区| 韩国成人福利片在线播放| 亚洲国产wwwccc36天堂| 国产精品久久久久一区二区三区共 | 欧美变态凌虐bdsm| 欧美日韩一区二区欧美激情| 成人一区二区三区中文字幕| 免费在线观看视频一区| 亚洲一本大道在线| 亚洲欧美综合色| 国产欧美一区二区精品秋霞影院| 日韩写真欧美这视频| 欧美日韩午夜影院| 欧洲中文字幕精品| 色天天综合色天天久久| 成年人午夜久久久| 粉嫩13p一区二区三区| 91香蕉视频mp4| 亚洲一区二区三区四区在线观看| 日韩欧美国产麻豆| 91色婷婷久久久久合中文| 午夜一区二区三区在线观看| 国产亚洲视频系列| 欧美日韩一区二区在线观看视频 | 日韩一级二级三级精品视频| 东方欧美亚洲色图在线| 五月天一区二区三区| 91视频观看视频| 国产精品99久久久久久似苏梦涵 | 一区二区三区四区亚洲| 亚洲人成人一区二区在线观看| 国产精品人成在线观看免费| 久久精品人人做人人爽97| 国产日韩av一区二区| 国产欧美中文在线| 亚洲欧洲日韩一区二区三区| 最新不卡av在线| 一区二区三区四区不卡视频| 天天色 色综合| 精品一区二区在线视频| 国产精品中文字幕欧美| 成人av集中营| 欧美性一二三区| 91麻豆精品国产91久久久更新时间| 亚洲国产电影在线观看| 亚洲私人影院在线观看| 亚洲一区二区三区中文字幕在线| 图片区小说区区亚洲影院| 久久精品理论片| 成人免费三级在线| 欧美伊人久久久久久午夜久久久久| 欧美色欧美亚洲另类二区| 欧美一区二区福利视频| 久久尤物电影视频在线观看| 国产精品国产三级国产aⅴ中文| 亚洲日本免费电影| 日产精品久久久久久久性色| 激情图区综合网| 色综合天天狠狠| 91精品国产乱码久久蜜臀| 欧美激情艳妇裸体舞| 亚洲一区二区av电影| 国内精品视频一区二区三区八戒| 成人久久久精品乱码一区二区三区| 日本丰满少妇一区二区三区| 日韩视频一区二区在线观看| 国产精品热久久久久夜色精品三区| 亚洲福利视频一区二区| 国产精品18久久久久| 欧美日韩视频一区二区| 久久久精品tv| 天天爽夜夜爽夜夜爽精品视频| 国产精品综合久久| 欧美日韩1234| 国产精品久久久久久久久久免费看| 午夜精品在线看| 成+人+亚洲+综合天堂| 日韩精品一区二| 亚洲精品自拍动漫在线| 国产一区二区伦理片| 欧美日韩免费观看一区三区| 国产精品免费视频观看| 免费精品视频在线| 在线观看日韩精品| 国产精品无码永久免费888| 奇米888四色在线精品| 在线观看免费成人| 亚洲欧洲成人精品av97| 国产伦理精品不卡| 欧美一级片在线看| 午夜精品福利一区二区三区蜜桃| www.在线成人| 国产亚洲欧美在线| 久88久久88久久久| 综合网在线视频| 国产精品夜夜嗨| 日韩精品一区二区三区四区| 亚洲二区在线视频| 日本道在线观看一区二区| 中文字幕一区二区三区四区不卡 | 国产午夜精品一区二区| 老司机午夜精品| 欧美一激情一区二区三区| 亚洲国产婷婷综合在线精品| 色综合久久综合|