传奇单机版,GM论坛,传奇版本库,GM基地

传奇3大补帖1.82 Delphi源代码

[复制链接]
查看: 512   回复: 1     # 登录器源码

187

主题

189

帖子

7505

积分

霸王教主

Rank: 9Rank: 9Rank: 9

积分
7505
2022-4-22 23:28:35   显示全部楼层   阅读模式  
[Delphi] 纯文本查看 复制代码
  {打开Service Control Manager}
    SchSCManager := OpenSCManager (nil,                       { 机器 (nil = 本机) }
                                  nil,                        { 数据库 (nil = 默认 }
                                  SC_MANAGER_ALL_ACCESS);     { 访问权 }

    if (SchSCManager = 0) then
      if (GetLastError = ERROR_ACCESS_DENIED) then
      begin
         { 没有权限打开SCM管理,必须是poor用户}
         showmessage('PortTalk: 没有权限访问Service Control Manager,'#$D#$A+
                     '不能安装和启动PortTalk,请使用超级用户来安装。');
         result:=false;
         exit;
      end;

    repeat begin
         {打开PortTalk服务数据库}
         schService := OpenService(SchSCManager,       {服务数据库句柄}
                                  'PortTalk',          {要启动的服务名}
                                  SERVICE_ALL_ACCESS); {存取的权限}

         if (schService = 0) then
            case (GetLastError) of
                ERROR_ACCESS_DENIED:
                   begin
                        showmessage('PortTalk: 没有权限访问PortTalk服务数据库');
                        result:=false;
                        exit;
                   end;
                ERROR_INVALID_NAME:
                   begin
                        showmessage('PortTalk: 指定的服务名无效');
                        result:=false;
                        exit;
                   end;
                ERROR_SERVICE_DOES_NOT_EXIST:
                   begin
                        showmessage('PortTalk: PortTalk驱动程序不存在');
                        InstallPortTalkDriver;
                   end;
            end;
     end until (schService <> 0);

    {启动PortTalk驱动程序,如果发生错误,一般是由于PortTalk.SYS不存在。}

    ret := TNewStartService(@StartService) (schService,  {服务标识}
                        0,             {参数个数}
                        nil);         {参数}

    if (ret) then //showmessage('PortTalk: PortTalk安装成功!')
    else begin
        err := GetLastError;
        if (err = ERROR_SERVICE_ALREADY_RUNNING) then
          showmessage('PortTalk: PortTalk已经安装')
        else begin
          showmessage('PortTalk: 启动PortTalk时发生未知错误。'+#$D#$A+
                      'PortTalk.SYS没有放入\System32\Drivers目录吗?');
          result:=false;
          exit;
        end;
    end;

    {关闭Service Control Manager}
    CloseServiceHandle (schService);
    result:=TRUE;
end;

procedure InstallPortTalkDriver;
var
    SchSCManager:SC_HANDLE;
    schService:SC_HANDLE;
    err:DWORD;
    DriverFileName:array[0..79]of CHAR;
begin
    if (GetSystemDirectory(DriverFileName, 55)=0) then
    begin
       showmessage('PortTalk: 取System目录出错');
       exit;
    end;

    {加入驱动程序文件名}
    lstrcat(DriverFileName,'\Drivers\PortTalk.sys');
    showmessagefmt('PortTalk: 拷贝驱动程序到%s',[DriverFileName]);

    {拷贝驱动程序到System32/drivers目录,如果出错,一般是因为文件不存在。}

    if (not CopyFile('PortTalk.sys', DriverFileName, FALSE)) then
    begin
         showmessagefmt('PortTalk: 拷贝驱动程序到以下位置出错:%s'+#$D#$A+
                        '请手工拷贝到system32/driver目录',
                        [DriverFileName]);
         exit;
    end;

    {打开Service Control Manager}
    SchSCManager := OpenSCManager (nil,                   { 机器 (nil = 本机) }
                                  nil,                    { 数据库 (nil = 默认 }
                                  SC_MANAGER_ALL_ACCESS); { 访问权 }

    schService := CreateService (SchSCManager,                     { SCManager数据库 }
                                'PortTalk',                        { 服务个数 }
                                'PortTalk',                        { 显示名 }
                                SERVICE_ALL_ACCESS,                { 权限 }
                                SERVICE_KERNEL_DRIVER,             { 服务类别 }
                                SERVICE_DEMAND_START,              { 启动类别 }
                                SERVICE_ERROR_NORMAL,              { 出错控件类别 }
                                'System32\Drivers\PortTalk.sys',   { 服务二进制文件 }
                                nil,                               { 加入的组 }
                                nil,                               { 标识 }
                                nil,                               { 隶属 }
                                nil,                               { 本地帐户 }
                                nil                                { 密码 }
                                );

    if (schService = 0) then
    begin
         err := GetLastError;
         if (err = ERROR_SERVICE_EXISTS) then
               showmessage('PortTalk: 驱动程序不存在。')
         else  showmessage('PortTalk:建立服务时发生未知的错误。');
    end
    else showmessage('PortTalk: 成功安装!');

    { 关闭Service Control Manager }
    CloseServiceHandle (schService);
end;
end.


游客,如果您要查看本帖隐藏内容请回复




上一篇:传奇3人寿仁插件DD145源代码全套编译通过
下一篇:dnf地下城与勇士源码(Edgame Maker版)源码
回复 关闭延时

使用道具 举报

0

主题

6

帖子

60

积分

旋风流星刀

Rank: 1

积分
60
2022-4-23 16:31:25   显示全部楼层  
传奇3大补帖1.82

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖   登录 立即注册

高级模式

Powered by Discuz! X3.4 © Comsenz Inc.

Archiver|手机版|小黑屋|美林传奇GM论坛 ( 蜀ICP备2020030293号-2 )