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

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

?? moduleloader.pas

?? 用DELPHI寫的網卡啟動禁用程序
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{******************************************************************}
{                                                                  }
{       Project JEDI                                               }
{       OS independent Dynamic Loading Helpers                     }
{                                                                  }
{ The initial developer of the this code is                        }
{ Robert Marquardt <robert_marquardt@gmx.de)                       }
{                                                                  }
{ Copyright (C) 2000, 2001 Robert Marquardt.                       }
{                                                                  }
{ Obtained through:                                                }
{ Joint Endeavour of Delphi Innovators (Project JEDI)              }
{                                                                  }
{ You may retrieve the latest version of this file at the Project  }
{ JEDI home page, located at http://delphi-jedi.org                }
{                                                                  }
{ The contents of this file are used with permission, 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/NPL/NPL-1_1Final.html                     }
{                                                                  }
{ 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.                        }
{                                                                  }
{******************************************************************}

{$I jvcl.inc}

unit ModuleLoader;

{$WEAKPACKAGEUNIT ON}

interface

{$IFDEF MSWINDOWS}

uses
  Windows;

type
  // Handle to a loaded DLL
  TModuleHandle = HINST;

{$ENDIF MSWINDOWS}

{$IFDEF LINUX}
uses
  Types, Libc;

type
  // Handle to a loaded .so
  TModuleHandle = Pointer;

{$ENDIF LINUX}

const
  // Value designating an unassigned TModuleHandle or a failed loading
  INVALID_MODULEHANDLE_VALUE = TModuleHandle(0);

function LoadModule(var Module: TModuleHandle; FileName: string): Boolean;
function LoadModuleEx(var Module: TModuleHandle; FileName: string; Flags: Cardinal): Boolean;
procedure UnloadModule(var Module: TModuleHandle);
function GetModuleSymbol(Module: TModuleHandle; SymbolName: string): Pointer;
function GetModuleSymbolEx(Module: TModuleHandle; SymbolName: string; var Accu: Boolean): Pointer;
function ReadModuleData(Module: TModuleHandle; SymbolName: string; var Buffer; Size: Cardinal): Boolean;
function WriteModuleData(Module: TModuleHandle; SymbolName: string; var Buffer; Size: Cardinal): Boolean;

// (p3)
// Simple DLL loading class. The idea is to use it to dynamically load
// a DLL at run-time using the GetProcedure method. Another (better) use is to derive a
// new class for each DLL you are interested in and explicitly call GetProcedure for
// each function in an overriden Load method. You would then add procedure/function
// aliases to the new class that maps down to the internally managed function pointers.
// This class is built from an idea I read about in Delphi Magazine a while ago but
// I forget who was the originator. If you know, let me know and I'll put it in the credits

// NB!!!
// * Prepared for Kylix but not tested
// * Is GetLastError implemented on Kylix? RaiseLastOSError implies it is...

type
  TModuleLoadMethod = (ltDontResolveDllReferences, ltLoadAsDataFile, ltAlteredSearchPath);
  TModuleLoadMethods = set of TModuleLoadMethod;

  TModuleLoader = class(TObject)
  private
    FHandle: TModuleHandle;
    FDLLName: string;
    function GetLoaded: Boolean;
  protected
    procedure Load(LoadMethods: TModuleLoadMethods); virtual;
    procedure Unload; virtual;
    procedure Error(ErrorCode: Cardinal); virtual;
  public
    // Check whether a DLL (and optionally a function) is available on the system
    // To only check the DLL, leave ProcName empty
    class function IsAvaliable(const ADLLName: string; const AProcName: string = ''): Boolean;
    constructor Create(const ADLLName: string; LoadMethods: TModuleLoadMethods = []);
    destructor Destroy; override;
    // Get a pointer to a function in the DLL. Should be called as GetProcedure('Name',@FuncPointer);
    // Returns True if the function was found. Note that a call to GetProcAddress is only executed if AProc = nil
    function GetProcedure(const AName: string; var AProc: Pointer): Boolean;
    // Returns a symbol exported from the DLL and puts it in Buffer.
    // Make sure AName is actually a symbol and not a function or this will crash horribly!
    function GetExportedSymbol(const AName: string; var Buffer; Size: Integer): Boolean;
    // Changes a symbol exported from the DLL into the value in Buffer.
    // The change is not persistent (it will get lost when the DLL is unloaded)
    // Make sure AName is actually a symbol and not a function or this will crash horribly!
    function SetExportedSymbol(const AName: string; var Buffer; Size: Integer): Boolean;

    property Loaded: Boolean read GetLoaded;
    property DLLName: string read FDLLName;
    property Handle: TModuleHandle read FHandle;
  end;

implementation

{$IFDEF MSWINDOWS}
// load the DLL file FileName
// the rules for FileName are those of LoadLibrary
// Returns: True = success, False = failure to load
// Assigns: the handle of the loaded DLL to Module
// Warning: if Module has any other value than INVALID_MODULEHANDLE_VALUE
// on entry the function will do nothing but returning success.

function LoadModule(var Module: TModuleHandle; FileName: string): Boolean;
begin
  if Module = INVALID_MODULEHANDLE_VALUE then
    Module := LoadLibrary(PChar(FileName));
  Result := Module <> INVALID_MODULEHANDLE_VALUE;
end;

// load the DLL file FileName
// LoadLibraryEx is used to get better control of the loading
// for the allowed values for flags see LoadLibraryEx documentation.

function LoadModuleEx(var Module: TModuleHandle; FileName: string; Flags: Cardinal): Boolean;
begin
  if Module = INVALID_MODULEHANDLE_VALUE then
    Module := LoadLibraryEx(PChar(FileName), 0, Flags);
  Result := Module <> INVALID_MODULEHANDLE_VALUE;
end;

// unload a DLL loaded with LoadModule or LoadModuleEx
// The procedure will not try to unload a handle with
// value INVALID_MODULEHANDLE_VALUE and assigns this value
// to Module after unload.

procedure UnloadModule(var Module: TModuleHandle);
begin
  if Module <> INVALID_MODULEHANDLE_VALUE then
    FreeLibrary(Module);
  Module := INVALID_MODULEHANDLE_VALUE;
end;

// returns the pointer to the symbol named SymbolName
// if it is exported from the DLL Module
// nil is returned if the symbol is not available

function GetModuleSymbol(Module: TModuleHandle; SymbolName: string): Pointer;
begin
  Result := nil;
  if Module <> INVALID_MODULEHANDLE_VALUE then
    Result := GetProcAddress(Module, PChar(SymbolName));
end;

// returns the pointer to the symbol named SymbolName
// if it is exported from the DLL Module
// nil is returned if the symbol is not available.
// as an extra the Boolean variable Accu is updated
// by anding in the success of the function.
// This is very handy for rendering a global result
// when accessing a long list of symbols.

function GetModuleSymbolEx(Module: TModuleHandle; SymbolName: string; var Accu: Boolean): Pointer;
begin
  Result := nil;
  if Module <> INVALID_MODULEHANDLE_VALUE then
    Result := GetProcAddress(Module, PChar(SymbolName));
  Accu := Accu and (Result <> nil);
end;

// get the value of variables exported from a DLL Module
// Delphi cannot access variables in a DLL directly, so
// this function allows to copy the data from the DLL.
// Beware! You are accessing the DLL memory image directly.
// Be sure to access a variable not a function and be sure
// to read the correct amount of data.

function ReadModuleData(Module: TModuleHandle; SymbolName: string; var Buffer; Size: Cardinal): Boolean;
var
  Sym: Pointer;
begin
  Result := True;
  Sym := GetModuleSymbolEx(Module, SymbolName, Result);
  if Result then
    Move(Sym^, Buffer, Size);
end;

// set the value of variables exported from a DLL Module
// Delphi cannot access variables in a DLL directly, so
// this function allows to copy the data to the DLL!
// BEWARE! You are accessing the DLL memory image directly.
// Be sure to access a variable not a function and be sure
// to write the correct amount of data.
// The changes are not persistent. They get lost when the
// DLL is unloaded.

function WriteModuleData(Module: TModuleHandle; SymbolName: string; var Buffer; Size: Cardinal): Boolean;
var
  Sym: Pointer;
begin
  Result := True;
  Sym := GetModuleSymbolEx(Module, SymbolName, Result);
  if Result then
    Move(Buffer, Sym^, Size);
end;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91在线视频播放地址| 欧美一级二级在线观看| 日韩一区二区免费在线观看| 久久久影视传媒| 亚洲自拍偷拍欧美| 成人午夜碰碰视频| 日韩精品一区二区三区三区免费 | 91精品欧美一区二区三区综合在| 久久久国产精品午夜一区ai换脸| 亚洲午夜免费福利视频| 成人app网站| 久久综合久久综合九色| 日本最新不卡在线| 欧美三级在线看| 一区二区三区产品免费精品久久75| 精品一区二区三区的国产在线播放| 欧美日韩亚洲另类| 一区二区三区中文在线| 99精品久久久久久| 国产精品美女久久久久高潮| 国产精品一区二区在线播放| 日韩视频免费直播| 免费日韩伦理电影| 宅男在线国产精品| 日韩电影一区二区三区四区| 91极品视觉盛宴| 一区二区成人在线视频| 色婷婷综合激情| 亚洲综合免费观看高清完整版在线| 不卡电影一区二区三区| 国产日韩精品一区二区三区在线| 韩国精品主播一区二区在线观看| 欧美大片国产精品| 六月丁香婷婷色狠狠久久| 日韩欧美国产三级| 狠狠久久亚洲欧美| 久久尤物电影视频在线观看| 国产精品1区二区.| 中文字幕免费在线观看视频一区| 国产mv日韩mv欧美| 中文字幕在线免费不卡| 91亚洲男人天堂| 亚洲九九爱视频| 欧美日韩美少妇| 九九**精品视频免费播放| 久久―日本道色综合久久| 国产电影一区在线| 亚洲欧美日韩小说| 欧美日韩国产高清一区二区| 蜜桃一区二区三区在线| 精品国产精品网麻豆系列| 成人久久视频在线观看| 免费在线看成人av| 亚洲精品一区二区在线观看| 国产69精品久久久久777| 亚洲视频一区在线| 欧美日韩国产一级片| 韩国成人精品a∨在线观看| 国产精品久久久久久久久快鸭| 色综合 综合色| 免费成人深夜小野草| 国产三区在线成人av| 色婷婷久久久久swag精品| 日本美女视频一区二区| 国产精品无遮挡| 欧美精品 日韩| 成人一级视频在线观看| 亚洲国产视频直播| 久久一区二区视频| 欧美视频一区二区| 国产成人a级片| 午夜视频在线观看一区二区三区| 26uuu国产一区二区三区| 91福利社在线观看| 黑人巨大精品欧美一区| 亚洲一区精品在线| 国产精品天干天干在线综合| 欧美日韩情趣电影| 99热这里都是精品| 久久av资源站| 亚洲网友自拍偷拍| 中文字幕免费不卡| 欧美大度的电影原声| 欧美日韩在线亚洲一区蜜芽| 成人激情图片网| 久久99国产精品免费| 亚洲一区国产视频| 国产精品久久久久影院亚瑟| 日韩精品一区二区三区四区| 欧美色图在线观看| 91香蕉视频污在线| 成人性视频网站| 久久97超碰国产精品超碰| 亚洲一区二区三区四区五区黄| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 激情文学综合插| 一区二区成人在线| 亚洲免费av高清| 中文字幕亚洲欧美在线不卡| 久久夜色精品国产噜噜av| 91精品黄色片免费大全| 欧美日韩国产小视频在线观看| 99re视频这里只有精品| 成人午夜视频免费看| 国产精品中文有码| 国产剧情一区二区| 精品系列免费在线观看| 日本中文字幕一区| 免费高清成人在线| 免费成人在线影院| 久久精品国产亚洲一区二区三区| 丝瓜av网站精品一区二区| 午夜精品一区二区三区免费视频| 亚洲一二三区在线观看| 一区二区三区成人| 亚洲国产美国国产综合一区二区| 亚洲一区二区精品久久av| 亚洲电影视频在线| 午夜不卡在线视频| 国产一区二区三区国产| 国产成人午夜视频| 成人精品一区二区三区四区| 成人动漫一区二区在线| 99视频精品全部免费在线| 色婷婷亚洲一区二区三区| 欧美午夜一区二区三区免费大片| 欧美艳星brazzers| 91精品国产欧美一区二区成人| 日韩一级成人av| 国产亚洲视频系列| 中文字幕亚洲电影| 亚洲一区二区三区小说| 奇米精品一区二区三区在线观看| 久久精品国产亚洲高清剧情介绍| 韩国女主播成人在线观看| 成人免费毛片片v| 91福利资源站| 日韩视频一区二区在线观看| 久久精品亚洲精品国产欧美| 综合网在线视频| 亚洲va欧美va人人爽午夜| 美腿丝袜亚洲色图| 国产·精品毛片| 欧美日韩国产综合视频在线观看| 日韩欧美高清dvd碟片| 日本一区二区三级电影在线观看 | 99久久国产综合色|国产精品| 93久久精品日日躁夜夜躁欧美| 欧美三级日韩三级| 久久久国产精华| 亚洲福中文字幕伊人影院| 久久国产人妖系列| 色一情一乱一乱一91av| 日韩一区二区三区av| 中文字幕一区在线观看视频| 日本视频中文字幕一区二区三区| 成人在线综合网| 日韩一区国产二区欧美三区| 国产农村妇女毛片精品久久麻豆| 亚洲午夜影视影院在线观看| 国产成a人无v码亚洲福利| 欧美调教femdomvk| 欧美激情一区二区三区在线| 视频一区中文字幕国产| 波多野结衣91| 久久亚洲欧美国产精品乐播 | 国产精品免费丝袜| 日韩vs国产vs欧美| 一本到一区二区三区| 久久丝袜美腿综合| 肉丝袜脚交视频一区二区| 不卡电影一区二区三区| 久久这里只有精品首页| 日韩二区三区四区| 色狠狠av一区二区三区| 国产精品色婷婷| 狠狠狠色丁香婷婷综合久久五月| 欧美日韩一卡二卡三卡| 亚洲欧洲精品一区二区精品久久久 | 一区二区三区成人| 成人午夜在线免费| 久久精品视频在线免费观看| 男女男精品网站| 欧美日韩国产123区| 一区二区日韩电影| aaa亚洲精品一二三区| 国产午夜三级一区二区三| 蜜臀精品久久久久久蜜臀| 欧美日韩成人综合天天影院 | 国产在线精品一区在线观看麻豆| 欧美日韩在线播放| 亚洲人成电影网站色mp4| 国产成人精品免费一区二区| 国产亚洲综合av| 国产精品白丝av| 久久精品免费在线观看| 国产麻豆成人传媒免费观看| 久久亚洲精华国产精华液| 国产一区视频导航| 久久精品在线免费观看|