发新话题
打印

delphi自动关机代码分析

delphi自动关机代码分析

下面的代码摘自网上的一个delphi自动关机源程序,请大家看一下,这样的自动关机代码会导致硬盘出现坏道吗?不知怎么的,这几天,我那块老硬盘出了好几块物理坏道,就在用这个自动关机程序之后,大家说说看,与下面的代码有关吗?精通软硬件的朋友显身吧。

//NT关机准备函数
function SetPrivilege(sPrivilegeName : string;bEnabled : boolean ): boolean;
var
  TPPrev,TP : TTokenPrivileges;
  Token : THandle;
  dwRetLen : DWord;
begin
  Result := False;
  OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,Token);
  TP.PrivilegeCount:=1;
  if( LookupPrivilegeValue(Nil,PChar( sPrivilegeName ),TP.Privileges[ 0 ].LUID ))then
  begin
    if( bEnabled )then //Give this privileges
    begin
      TP.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
    end
    else begin //NOT Give this privileges
      TP.Privileges[ 0 ].Attributes := 0;
    end;
    dwRetLen := 0;
    //enables or disables privileges in the specified access token.
    Result := AdjustTokenPrivileges(Token,False,TP,SizeOf( TPPrev ),TPPrev,dwRetLen);
  end;
  CloseHandle( Token );
end;

//NT关机函数
function WinExitInNT( iFlags : integer ) : boolean;
begin
  Result := True;
  if( SetPrivilege( 'SeShutdownPrivilege',True ) )then
  begin
    if( not ExitWindowsEx( iFlags,0 ) )then
    begin
      Result := False;
    end;
    SetPrivilege( 'SeShutdownPrivilege',False )
  end
  else begin
  // handle errors...
  Result := False;
  end;
end;

procedure TFShutDown.Timer1Timer(Sender: TObject);
begin
  m:=m+1;

  if m>=n then  begin
    if CkB_beforshut.Checked then begin
      FShutDownInfo.show;
      n:=n+1;
      exit;
    end;
    if Lab_CanShutdown.Caption='0' then begin
      // win9x
      if Win32Platform = VER_PLATFORM_WIN32_WINDOWS then
        ExitWindowsEx(EWX_FORCE+EWX_SHUTDOWN+EWX_POWEROFF,32);
      // winNT
      if Win32Platform = VER_PLATFORM_WIN32_NT then
        WinExitInNT(EWX_FORCE+EWX_SHUTDOWN+EWX_POWEROFF);
    end else Btn_cancelClick(Sender);
  end else
    edt_mm.text:=inttostr(n-m);
end;

[ Last edited by zqssoft on 2005-11-20 at 09:36 ]
wawasoft.68ab.com zqssoft@125.com zqssoft@126.com zqssoft@127.com

TOP

看不懂

TOP

我也不知道会不会出坏道,不过你想稳妥的话,可以用softice跟踪一下看Windows自己的关机调用了哪几个API,分别是怎么填的参数。

TOP

在互联网上, 都可找到 Delphi的自动关机程式码. 看样子跟你显示的不太一样. 但总不会弄坏硬碟吧. 别多疑!

TOP

应该没有关系的

我用vc也写过一个关机程序,最主要调用的就是这个 ExitWindowsEx函数

TOP

没有问题呀,我一直都是这样用的!

TOP

谢谢支持,不过此代码确实是一个可以关机的delphi源程序中摘取的.

同在别论坛问了,都是确实的答复:不伤.

也可能是我的那块希捷U6硬盘年事已高,自然寿命到了吧.
wawasoft.68ab.com zqssoft@125.com zqssoft@126.com zqssoft@127.com

TOP

发新话题