加入收藏 收藏网站 设为首页 设为首页
招生考试网
学历类| 阳光高考 研 究 生 自学考试 成人高考 专 升 本 中考会考 外语类| 四 六 级 职称英语 商务英语 公共英语 日语能力
资格类| 公 务 员 报 关 员 银行从业 司法考试 导 游 证 教师资格 财会类| 会 计 证 经 济 师 会计职称 注册会计 税 务 师
工程类| 一级建造 二级建造 造 价 师 造 价 员 咨 询 师 监 理 师 医学类| 卫生资格 执业医师 执业药师 执业护士 国际护士
计算机| 等级考试 软件水平 应用能力 其它类| 书画等级 美国高考 驾 驶 员 书法等级 少儿英语 报 检 员 单 证 员 出国留学
 招生考试网 - 计算机等级考试 - 考试辅导 - 计算机二级 - 正文

 
Delphi实现对注册表的监视和扫描完整代码解析
来源:青年人 2010-8-17 编辑:zhanghaifeng 【字体:小 大】
Delphi自带的TRegistry类只能实现注册表的基本操作,如果我们要实时监视注册表的变化或者扫描注册表特定项下的所有子项,TRegistry类就无能为力了。我啃了半天SDK,终于实现了Delphi对注册表的监视与扫描,不敢独享,拿来献给广大的Delphi爱好者。

 

 begin @WinNT_NetWkstaGetInfo := GetProcAddress(hNETAPI, \’NetWkstaGetInfo\’);
  @WinNT_NetApiBufferFree := GetProcAddress(hNETAPI, \’NetApiBufferFree\’);
  EC := WinNT_NetWkstaGetInfo(nil, 100, Pointer(WSNT));
  if EC = 0 then
  begin
  Result := WideCharToString(WSNT^.wki100_langroup);
  WinNT_NetApiBufferFree(Pointer(WSNT));
  end;
  end;
  end
  else
  begin
  hNETAPI := LoadLibrary(\’RADMIN32.DLL\’);
  if hNETAPI <> 0 then
  begin @Win95_NetApiBufferFree := GetProcAddress(hNETAPI, \’NetApiBufferFree\’);
  @Win95_NetUserGetInfo := GetProcAddress(hNETAPI, \’NetUserGetInfoA\’);
  EC := Win95_NetWkstaUserGetInfo(nil, 1, Pointer(WS95));
  if EC = 0 then
  begin
  Result := WS95^.wkui1_logon_domain;
  Win95_NetApiBufferFree(Pointer(WS95));
  end;
  end;
  end;

finally
  if hNETAPI <> 0 then
  FreeLibrary(hNETAPI);
  end;
  end;
  function AppendShareResource(ServerName,FilePath,NetName, Remark : string): Integer;
  var
  ShInfo: TSHARE_INFO_502;
  parm_err:PDWORD;
  _FilePath,_NetName, _Remark : PWideChar ;
  _ServerName : Pchar ;
  LibHandle : THandle;
  begin
  LibHandle := LoadLibrary(NTlib);
  if LibHandle = 0 then
  raise Exception.Create(\’Unable to map library: \’ + NTlib);
  try
  @NTNetShareAdd := GetProcAddress(Libhandle, \’NetShareAdd\’);
  GetMem(_ServerName,255) ; //分配内存
  GetMem(_FilePath,255);
  GetMem(_NetName,255);
  GetMem(_Remark,255);
  StringToWideChar(FilePath,_FilePath,255); //字符串转换,一定要转换正确
  StringToWideChar(NetName,_NetName,255);
  StringToWideChar(Remark,_Remark,255);
  strpcopy(_ServerName,ServerName);
  //开始创建结构
  with ShInfo do
  begin
  shi502_netname := _NetName;
  shi502_type := STYPE_DISKTREE ;
  shi502_remark := _Remark ;
  shi502_max_uses := $FFFFFFFF;
  shi502_current_uses := 10;
  shi502_path := _FilePath;
  shi502_passwd := nil;
  shi502_reserved := 0;
  shi502_security_descriptor := nil;
  shi502_permissions := ACCESS_ALL;
  end;
  try
  Result := NTNetShareAdd(_ServerName, 502, @ShInfo, parm_err);
  finally // 别忘了释放内存
  FreeMem(_ServerName,255);
  FreeMem(_FilePath,255);
  FreeMem(_NetName,255);
  FreeMem(_Remark,255);
  end;
  finally
  FreeLibrary(Libhandle);
  end;
  end;
  function DeleteShareResource(ServerName: string; NetName: string): Integer;
  var
  _ServerName : Pchar ;
  LibHandle : THandle;
  begin
  LibHandle := LoadLibrary(NTlib);
  if LibHandle = 0 then
  raise Exception.Create(\’Unable to map library: \’ + NTlib);
  try
  @NTNetShareDel := GetProcAddress(Libhandle, \’NetShareDel\’);
  GetMem(_ServerName,255) ; //分配内存
  strpcopy(_ServerName,ServerName);
  try
  Result := NTNetShareDel(_ServerName, NetName,0);
  finally
  FreeMem(_ServerName,255);
  end;
  finally
  FreeLibrary(Libhandle);
  end;
  end;

 function AddShareResource (ServerName : PChar; FilePath : PChar;
  NetName : PChar; Remark : PChar ) : Integer;
  var
  MyShare : Share_Info50;
  PMyShare : ^Share_Info50;
  LibHandle : THandle;
  begin
  LibHandle := LoadLibrary(NTlib);
  if LibHandle = 0 then
  raise Exception.Create(\’Unable to map library: \’ + MElib);
  try
  @MENetShareAdd := GetProcAddress(Libhandle, \’NetShareDel\’);
  strLcopy(MyShare.shi50_netname,NetName,13);
  MyShare.shi50_type := 0;
  MyShare.shi50_flags := 0;
  MyShare.shi50_remark := Remark;
  MyShare.shi50_path := FilePath;
  {MyShare.shi50_rw_password := nil ;
  MyShare.shi50_ro_password :=nil ;}
  PMyShare := @MyShare;
  Result := MENetShareAdd(ServerName,50,PMyShare,SizeOf(MyShare));
  finally
  FreeLibrary(Libhandle);
  end;
  end;
  function DelShareResource(ServerName: string; NetName: string): Integer;
  var
  _ServerName : Pchar ;
  LibHandle : THandle;
  begin
  LibHandle := LoadLibrary(NTlib);
  if LibHandle = 0 then
  raise Exception.Create(\’Unable to map library: \’ + MElib);
  try
  @NTNetShareDel := GetProcAddress(Libhandle, \’NetShareDel\’);
  GetMem(_ServerName,255) ; //分配内存
  strpcopy(_ServerName,ServerName);
  try
  Result := NTNetShareDel(_ServerName, NetName,0);
  finally
  FreeMem(_ServerName,255);
  end;
  finally
  FreeLibrary(Libhandle);
  end;
  end;

 

 



 
网站版权与免责声明
①由于各方面情况的不断调整与变化,本网所提供的相关信息请以权威部门公布的正式信息为准.
②本网转载的文/图等稿件出于非商业性目的,如转载稿涉及版权等问题,请在两周内来电联系.
推荐文章
  • 此栏目下没有推荐文章
  • 热门文章

    报名考试
    全国 | 黑龙江 | 吉林 | 辽宁 | 内蒙古
    青海 | 宁夏 | 甘肃 | 新疆 | 陕西
    西藏 | 北京 | 天津 | 河北 | 山东
    江苏 | 安徽 | 河南 | 上海 | 浙江
    福建 | 广东 | 山西 | 湖南 | 湖北
    江西 | 广西 | 海南 | 云南 | 贵州
    四川 | 重庆
    分省高校计算机考试
    黑龙江 | 吉林 | 辽宁 | 内蒙古 | 河北
    北京 | 天津 | 新疆 | 甘肃 | 宁夏
    青海 | 陕西 | 山西 | 河南 | 山东
    江苏 | 安徽 | 浙江 | 福建 | 广东
    海南 | 广西 | 江西 | 湖北 | 湖南
    四川 | 上海 | 重庆 | 贵州 | 云南
    西藏
    成绩查询
    报考指南
    试题答案
    模拟试题
    考试辅导
    计算机一级 | 计算机二级 | 计算机三级 | 计算机四级
    经验交流
    高校计算机