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

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

?? clsspiauth.pas

?? Clever_Internet_Suite_6.2的代碼 Clever_Internet_Suite_6.2的代碼 Clever_Internet_Suite_6.2的代碼
?? PAS
字號(hào):
{
  Clever Internet Suite Version 6.2
  Copyright (C) 1999 - 2006 Clever Components
  www.CleverComponents.com
}

unit clSspiAuth;

interface

{$I clVer.inc}
{$IFDEF DELPHI6}
  {$WARNINGS OFF}
{$ENDIF}

uses
  Classes, Windows, clSspi, SysUtils;

type
  PSEC_WINNT_AUTH_IDENTITY = ^TSEC_WINNT_AUTH_IDENTITY;
  TSEC_WINNT_AUTH_IDENTITY = record
    User: PChar;
    UserLength: DWORD;
    Domain: PChar;
    DomainLength: DWORD;
    Password: PChar;
    PasswordLength: DWORD;
    Flags: DWORD;
  end;

  TclAuthIdentity = class
  private
    FUser: string;
    FPassword: string;
    FDomain: string;
    FIdentity: TSEC_WINNT_AUTH_IDENTITY;
    function GetIdentity: PSEC_WINNT_AUTH_IDENTITY;
    procedure Clear;
  public
    constructor Create(const AUser, ADomain, APassword: string); overload;
    constructor Create(const AUser, APassword: string); overload;
    property User: string read FUser;
    property Domain: string read FDomain;
    property Password: string read FPassword;
    property Identity: PSEC_WINNT_AUTH_IDENTITY read GetIdentity;
  end;

  
  TclNtAuthSspi = class(TclSspi)
  protected
    FCredHandle: TCredHandle;
    FCtxtHandle: TCtxtHandle;
    procedure GenCredentialHandle(const APackage: string;
      ACredentialUse: DWORD; AuthIdentity: TclAuthIdentity);
    procedure DeleteSecHandles;
  public
    constructor Create;
    destructor Destroy; override;
  end;

  TclNtAuthClientSspi = class(TclNtAuthSspi)
  public
    function GenChallenge(const APackage: string; ABuffer: TStream;
      const ATargetName: string; AuthIdentity: TclAuthIdentity): Boolean;
  end;

  TclNtAuthServerSspi = class(TclNtAuthSspi)
  private
    FNewConversation: Boolean;
  public
    constructor Create;
    function GenChallenge(const APackage: string; ABuffer: TStream;
      AuthIdentity: TclAuthIdentity): Boolean;
    procedure ImpersonateUser;
    procedure RevertUser;
  end;

implementation

{ TclAuthIdentity }

constructor TclAuthIdentity.Create(const AUser, ADomain, APassword: string);
begin
  inherited Create();

  FUser := AUser;
  FDomain := ADomain;
  FPassword := APassword;

  Clear();
end;

procedure TclAuthIdentity.Clear;
begin
  FIdentity.User := nil;
  FIdentity.UserLength := 0;
  FIdentity.Domain := nil;
  FIdentity.DomainLength := 0;
  FIdentity.Password := nil;
  FIdentity.PasswordLength := 0;
  FIdentity.Flags := 1;
end;

function TclAuthIdentity.GetIdentity: PSEC_WINNT_AUTH_IDENTITY;
begin
  Result := @FIdentity;

  Clear();
  if Length(User) > 0 then
  begin
    FIdentity.User := PChar(User);
    FIdentity.UserLength := Length(User);
  end;
  if Length(Domain) > 0 then
  begin
    FIdentity.Domain := PChar(Domain);
    FIdentity.DomainLength := Length(Domain);
  end;
  if Length(Password) > 0 then
  begin
    FIdentity.Password := PChar(Password);
    FIdentity.PasswordLength := Length(Password);
  end;
end;

constructor TclAuthIdentity.Create(const AUser, APassword: string);
var
  ind: Integer;
begin
  inherited Create();

  ind := system.Pos('\', AUser);
  if (ind = 0) then
  begin
    ind := system.Pos('/', AUser);
  end;
  if (ind > 0) then
  begin
    FUser := system.Copy(AUser, ind + 1, Length(AUser));
    FDomain := system.Copy(AUser, 1, ind - 1);
  end else
  begin
    FUser := AUser;
    FDomain := '';
  end;
  FPassword := APassword;

  Clear();
end;

{ TclNtAuthSspi }

procedure TclNtAuthSspi.DeleteSecHandles;
begin
  if ((FCtxtHandle.dwLower <> 0) or (FCtxtHandle.dwUpper <> 0)) then
  begin
    FunctionTable.DeleteSecurityContext(@FCtxtHandle);
  end;
  FCtxtHandle.dwLower := 0;
  FCtxtHandle.dwUpper := 0;

  if ((FCredHandle.dwLower <> 0) or (FCredHandle.dwUpper <> 0)) then
  begin
    FunctionTable.FreeCredentialHandle(@FCredHandle);
  end;
  FCredHandle.dwLower := 0;
  FCredHandle.dwUpper := 0;
end;

procedure TclNtAuthSspi.GenCredentialHandle(const APackage: string;
  ACredentialUse: DWORD; AuthIdentity: TclAuthIdentity);
var
  statusCode: SECURITY_STATUS;
  authData: PSEC_WINNT_AUTH_IDENTITY;
  tsExpiry: TTimeStamp;
begin
  authData := nil;
  if (AuthIdentity <> nil) then
  begin
    authData := AuthIdentity.Identity;
  end;
  statusCode := FunctionTable.AcquireCredentialsHandle(
    nil, PChar(APackage), ACredentialUse, nil, authData, nil, nil, @FCredHandle, @tsExpiry);

  if (statusCode <> SEC_E_OK) then
  begin
    raise EclSSPIError.Create(GetSspiErrorMessage(statusCode), statusCode);
  end;
end;

constructor TclNtAuthSspi.Create;
begin
  inherited Create();
  DeleteSecHandles();
end;

destructor TclNtAuthSspi.Destroy;
begin
  DeleteSecHandles();
  inherited Destroy();
end;

{ TclNtAuthClientSspi }

function TclNtAuthClientSspi.GenChallenge(const APackage: string;
  ABuffer: TStream; const ATargetName: string;
  AuthIdentity: TclAuthIdentity): Boolean;
var
  statusCode: SECURITY_STATUS;
  flags, outFlags: DWORD;
  inBuffer: TSecBufferDesc;
  inBuffers: array[0..0] of TSecBuffer;
  outBuffer: TSecBufferDesc;
  outBuffers: array[0..0] of TSecBuffer;
  buf: PChar;
  bufSize: Integer;
  pInBuffer: PSecBufferDesc;
  pCtxt: PCtxtHandle;
  tsExpiry: TTimeStamp;
begin
  flags := ISC_REQ_DELEGATE + ISC_REQ_MUTUAL_AUTH + ISC_REQ_REPLAY_DETECT +
    ISC_REQ_SEQUENCE_DETECT + ISC_REQ_CONFIDENTIALITY + ISC_REQ_CONNECTION +
    ISC_REQ_INTEGRITY + ISC_REQ_ALLOCATE_MEMORY;

  bufSize := ABuffer.Size - ABuffer.Position;

  buf := nil;
  try
    if (bufSize > 0) then
    begin
      inBuffer.ulVersion := 0;
      inBuffer.cBuffers := 1;
      inBuffer.pBuffers := @inBuffers;

      GetMem(buf, bufSize);
      ABuffer.Read(buf^, bufSize);

      inBuffers[0].cbBuffer := bufSize;
      inBuffers[0].BufferType := SECBUFFER_TOKEN;
      inBuffers[0].pvBuffer := buf;
      
      pInBuffer := @inBuffer;
      pCtxt := @FCtxtHandle;
    end else
    begin
      DeleteSecHandles();
      GenCredentialHandle(APackage, SECPKG_CRED_OUTBOUND, AuthIdentity);

      pInBuffer := nil;
      pCtxt := nil;
    end;

    outBuffer.ulVersion := 0;
    outBuffer.cBuffers := 1;
    outBuffer.pBuffers := @outBuffers;

    outBuffers[0].cbBuffer := 0;
    outBuffers[0].BufferType := SECBUFFER_TOKEN;
    outBuffers[0].pvBuffer := nil;

    statusCode := FunctionTable.InitializeSecurityContext(
      @FCredHandle, pCtxt, @ATargetName, flags, 0, 0,
      pInBuffer, 0, @FCtxtHandle, @outBuffer, @outFlags, @tsExpiry);

    Result := (statusCode = SEC_E_OK);
    if (statusCode <> SEC_E_OK) and (statusCode <> SEC_I_CONTINUE_NEEDED) then
    begin
      raise EclSSPIError.Create(GetSspiErrorMessage(statusCode), statusCode);
    end;

    if (outBuffers[0].pvBuffer <> nil) then
    begin
      ABuffer.Size := 0;
      ABuffer.Write(outBuffers[0].pvBuffer^, outBuffers[0].cbBuffer);
      ABuffer.Position := 0;
    end;
  finally
    if (outBuffers[0].pvBuffer <> nil) then
    begin
      FunctionTable.FreeContextBuffer(outBuffers[0].pvBuffer);
    end;
    FreeMem(buf);
  end;
end;

{ TclNtAuthServerSspi }

constructor TclNtAuthServerSspi.Create;
begin
  inherited Create();
  FNewConversation := True;
end;

function TclNtAuthServerSspi.GenChallenge(const APackage: string;
  ABuffer: TStream; AuthIdentity: TclAuthIdentity): Boolean;
var
  statusCode: SECURITY_STATUS;
  flags, outFlags: DWORD;
  inBuffer: TSecBufferDesc;
  inBuffers: array[0..0] of TSecBuffer;
  outBuffer: TSecBufferDesc;
  outBuffers: array[0..0] of TSecBuffer;
  buf: PChar;
  bufSize: Integer;
  pInBuffer: PSecBufferDesc;
  pCtxt: PCtxtHandle;
  tsExpiry: TTimeStamp;
begin
  flags := ASC_REQ_DELEGATE + ASC_REQ_MUTUAL_AUTH + ASC_REQ_REPLAY_DETECT +
    ASC_REQ_SEQUENCE_DETECT + ASC_REQ_CONFIDENTIALITY + ASC_REQ_CONNECTION +
    ASC_REQ_INTEGRITY + ASC_REQ_ALLOCATE_MEMORY;

  bufSize := ABuffer.Size - ABuffer.Position;

  buf := nil;
  try
    if (bufSize > 0) then
    begin
      inBuffer.ulVersion := 0;
      inBuffer.cBuffers := 1;
      inBuffer.pBuffers := @inBuffers;

      GetMem(buf, bufSize);
      ABuffer.Read(buf^, bufSize);

      inBuffers[0].cbBuffer := bufSize;
      inBuffers[0].BufferType := SECBUFFER_TOKEN;
      inBuffers[0].pvBuffer := buf;
      
      pInBuffer := @inBuffer;
    end else
    begin
      pInBuffer := nil;
    end;

    if FNewConversation then
    begin
      DeleteSecHandles();
      GenCredentialHandle(APackage, SECPKG_CRED_INBOUND, AuthIdentity);
      pCtxt := nil;
      FNewConversation := False;
    end else
    begin
      pCtxt := @FCtxtHandle;
    end;

    outBuffer.ulVersion := 0;
    outBuffer.cBuffers := 1;
    outBuffer.pBuffers := @outBuffers;

    outBuffers[0].cbBuffer := 0;
    outBuffers[0].BufferType := SECBUFFER_TOKEN;
    outBuffers[0].pvBuffer := nil;

    statusCode := FunctionTable.AcceptSecurityContext(
      @FCredHandle, pCtxt, pInBuffer, flags, 0, @FCtxtHandle, @outBuffer, @outFlags, @tsExpiry);

    Result := (statusCode = SEC_E_OK) or (statusCode = SEC_I_COMPLETE_NEEDED);
      
    if (statusCode = SEC_I_COMPLETE_AND_CONTINUE) or (statusCode = SEC_I_COMPLETE_NEEDED) then
    begin
      statusCode := FunctionTable.CompleteAuthToken(pCtxt, @outBuffer);
      if (statusCode <> SEC_E_OK) then
      begin
        raise EclSSPIError.Create(GetSspiErrorMessage(statusCode), statusCode);
      end;
    end;

    if (statusCode <> SEC_E_OK) and (statusCode <> SEC_I_CONTINUE_NEEDED) then
    begin
      raise EclSSPIError.Create(GetSspiErrorMessage(statusCode), statusCode);
    end;

    if (outBuffers[0].pvBuffer <> nil) then
    begin
      ABuffer.Size := 0;
      ABuffer.Write(outBuffers[0].pvBuffer^, outBuffers[0].cbBuffer);
      ABuffer.Position := 0;
    end;
  finally
    if (outBuffers[0].pvBuffer <> nil) then
    begin
      FunctionTable.FreeContextBuffer(outBuffers[0].pvBuffer);
    end;
    FreeMem(buf);
  end;
end;

procedure TclNtAuthServerSspi.ImpersonateUser;
var
  statusCode: SECURITY_STATUS;
begin
  statusCode := FunctionTable.ImpersonateSecurityContext(@FCtxtHandle);
  if (statusCode <> SEC_E_OK) then
  begin
    raise EclSSPIError.Create(GetSspiErrorMessage(statusCode), statusCode);
  end;
end;

procedure TclNtAuthServerSspi.RevertUser;
var
  statusCode: SECURITY_STATUS;
begin
  statusCode := FunctionTable.RevertSecurityContext(@FCtxtHandle);
  if (statusCode <> SEC_E_OK) then
  begin
    raise EclSSPIError.Create(GetSspiErrorMessage(statusCode), statusCode);
  end;
end;

end.

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一区二区日韩| 激情综合亚洲精品| 欧美丝袜丝交足nylons图片| 日韩一区中文字幕| 91九色02白丝porn| 午夜视频在线观看一区二区 | 免费成人在线网站| 日韩一区二区三区四区| 九九九精品视频| 国产欧美日韩不卡| 欧美性猛交xxxxxx富婆| 偷拍日韩校园综合在线| 精品剧情在线观看| 欧美日韩另类国产亚洲欧美一级| 日本成人在线看| 中文字幕av资源一区| 欧美日韩免费观看一区三区| 精品亚洲成a人在线观看 | 欧美男人的天堂一二区| 国产在线一区二区综合免费视频| 国产精品视频一二三| 欧美日韩国产影片| 成人av影视在线观看| 日本午夜精品一区二区三区电影| 2021中文字幕一区亚洲| 欧美日韩一区二区三区在线 | 国产一区二区主播在线| 一区2区3区在线看| 国产欧美日韩久久| 精品免费日韩av| 欧美日韩精品一区二区天天拍小说| 国产综合色视频| 免费黄网站欧美| 亚洲午夜成aⅴ人片| 亚洲乱码精品一二三四区日韩在线| 一区二区三区四区激情| 亚洲欧洲精品一区二区三区不卡| 欧美tk—视频vk| 欧美日本精品一区二区三区| 在线免费观看日韩欧美| 9i看片成人免费高清| 成人av免费在线播放| 成人免费av资源| 婷婷综合在线观看| 欧美国产一区二区| 久久青草欧美一区二区三区| 精品国产免费久久| 精品国产sm最大网站免费看| 精品国产91洋老外米糕| 久久久久国产精品麻豆| 国产午夜亚洲精品羞羞网站| 国产精品久久久久久久久久免费看| 成人丝袜18视频在线观看| 亚洲aⅴ怡春院| 五月婷婷久久综合| 美女视频免费一区| 精品一区中文字幕| 丁香天五香天堂综合| 91麻豆精品久久久久蜜臀| 91蝌蚪国产九色| 欧美综合一区二区三区| 色久优优欧美色久优优| 色综合网色综合| 91福利资源站| 91精品国产免费| 久久精品网站免费观看| 成人免费视频在线观看| 亚洲成av人在线观看| 紧缚奴在线一区二区三区| 国内精品免费在线观看| 99久久久免费精品国产一区二区| 精品久久免费看| 亚洲一区二区三区四区在线免费观看 | 久草热8精品视频在线观看| 国产伦精品一区二区三区免费迷 | 一区二区三区国产| 国内欧美视频一区二区| 色婷婷精品久久二区二区蜜臂av| 欧美乱熟臀69xxxxxx| √…a在线天堂一区| 全国精品久久少妇| av福利精品导航| 日韩欧美的一区| 亚洲二区在线观看| 99re这里都是精品| 国产欧美日韩精品一区| 麻豆精品一区二区| 欧美日韩黄视频| 一区二区三区在线免费播放| 韩国女主播成人在线观看| 在线观看亚洲一区| 亚洲精品国产无套在线观| 成人avav影音| 国产欧美日韩综合精品一区二区| 蜜桃av一区二区| 欧美精品aⅴ在线视频| 亚洲超丰满肉感bbw| 欧洲视频一区二区| 亚洲成人av免费| 欧美性极品少妇| 无码av中文一区二区三区桃花岛| 欧美午夜电影一区| 一区二区三区高清在线| 欧美日韩在线播放三区四区| 国产一区不卡视频| 欧美成人猛片aaaaaaa| 久久国产尿小便嘘嘘尿| 久久久久国色av免费看影院| 国产精品系列在线播放| 国产欧美精品一区二区三区四区| 成人一区二区三区| 亚洲欧美电影院| 欧美日韩国产精品自在自线| 日韩成人一级大片| 国产日韩欧美在线一区| 99久久国产综合精品色伊| 一区二区在线观看视频| 4438亚洲最大| 国产高清不卡一区二区| 一区二区在线观看免费视频播放| 5月丁香婷婷综合| 国产成人免费视| 亚洲一区二区精品视频| 久久午夜免费电影| 欧美日韩免费观看一区三区| 国产一区二区三区精品欧美日韩一区二区三区 | 国产成人亚洲综合a∨婷婷| 亚洲人精品一区| 国产欧美日本一区视频| 51精品国自产在线| 国产午夜一区二区三区| 欧美麻豆精品久久久久久| 国产成人在线影院| 久久国产乱子精品免费女| 亚洲一区二区三区中文字幕 | 成人中文字幕合集| 美日韩一区二区三区| 午夜电影网一区| 亚洲成人自拍一区| 中文字幕亚洲在| 国产精品初高中害羞小美女文| xnxx国产精品| 日韩欧美精品在线视频| 欧美一区二区三区视频| 欧美猛男男办公室激情| 欧美丰满少妇xxxxx高潮对白| 99精品国产视频| 91亚洲男人天堂| 91麻豆产精品久久久久久| 成人v精品蜜桃久久一区| 欧美一级视频精品观看| 欧美xingq一区二区| 欧美精品一区二区三区蜜桃视频| 666欧美在线视频| 精品国产电影一区二区| 中文字幕av免费专区久久| 日韩毛片精品高清免费| 亚洲一区二区三区免费视频| 日韩电影网1区2区| 国产福利一区在线| 国产精品一区二区久久精品爱涩| 成人高清免费观看| 欧美电影在线免费观看| 久久精品夜色噜噜亚洲a∨| 亚洲欧洲色图综合| 免费在线观看精品| 91免费看视频| 26uuu亚洲| 日韩二区在线观看| 成人综合在线观看| 日韩一区二区免费电影| 国产精品污网站| 久久aⅴ国产欧美74aaa| 久久久久久久久一| 亚洲国产日日夜夜| 国产一区日韩二区欧美三区| 欧美手机在线视频| 欧美国产国产综合| 极品少妇xxxx精品少妇偷拍| 国产高清成人在线| 欧美成人精品福利| 一区二区三区精品视频| 波波电影院一区二区三区| 日韩久久精品一区| 水野朝阳av一区二区三区| 91久久精品国产91性色tv| 国产精品另类一区| 国内成人自拍视频| 精品久久久久久久一区二区蜜臀| 舔着乳尖日韩一区| 欧美一区二区视频在线观看| 亚洲国产另类精品专区| 色美美综合视频| 亚洲五码中文字幕| 91精品国产免费| 久久精品999| 日韩精品一区国产麻豆| 精品一区二区三区免费视频| 日韩区在线观看| 国产成人精品三级|