Win2k in gesperrtem Zustand herunterfahren?

CybeR_GizzmO

Cadet 4th Year
Registriert
Mai 2001
Beiträge
95
Nabend,

ich suche nach einer Möglichkeit, ein gesperrtes Win2k aus einem Delphi-Programm heraus herunterzufahren/neu zu starten. Sowohl Rundll-, als auch diverse programmiertechnische Routinen führten nicht zum Erfolg, da Win offensichtlich alles in der Hinsicht blockt wenn es gesperrt ist. Es bedarf also a) einer Routine, die Win 'zwingt', herunterzufahren oder b) einer Möglichkeit, Win vor dem Shutdown zu entsperren - was mir nicht gelungen ist, da die einzige mir bekannte Möglichkeit das Senden von Tastenanschlägen wäre, die jedoch von Win im 'Entsperren'-Fenster nicht akzeptiert werden. Das gleiche gilt für ein direktes Zugreifen auf das Edit des Dialogs.

Falls jemand eine Idee hat...

MfG
 
vielleicht durch die Hintertür des APM bzw. ACPI
überhöhte Prozessortemperatur oder zu geringe Batteriespannung vortäuschen dann müßte w2k wohl aufgeben

mosquito

PS beim C64 gabs so schöne Befehle sowas wie SYS 64738
 
Danke für den Tipp. Wenn du mir noch sagst wie genau sich das realisieren lässt bin ich happy ;) Ach ja: Assembler bzw direkte CPU-Programmierung ist mir zu hoch...
 
:eek: :eek: :eek: hoppla
muß dich leider enttäuschen
bin kein Programmierer jedenfalls nichtmehr seit Windows
Früher beim C64 hätte ich dir helfen können, hab sogar mal Assembler gelernt (inzwischen wieder vergessen)
Heute bin ich nur noch User wenn ich viel Lust habe werde ich mich mal in VB-Scripts versuchen das wars aber dann schon.
Wollte dir nur ein Tip geben um W2K durch die Hintertür zu umgehen:rolleyes:

mosquito:cool_alt:
 
SMS-Helpdesk

probiers mal mit SMS-Helpdesk
gibts allerdings nur bei der Server-version, glaube ich
kannst ja mal bei Microsoft nachlesen wie das geht
brauchst allerdings lokale Adminrechte um angemeldete User zu entsperren.
wenn der Client eingerichtet ist kann über Scripts der Rechner entsperrt werden.

mosquito
 
Nar kannst du nicht ein Programm programieren wenn du den Ausschalter betätigst(an deinen Com) das der Com herrunter gefahren wird?Wall der ausschalter dürfte nicht gespert sein glaube ich.
 
@mosquito: Noch nie gehört, werde ich mir aber mal anschauen...

@AlbertLast: Nee - Ziel ist es, den PC in Abwesenheit des Users (APM natürlich vorausgesetzt) herunterzufahren :)
 
SMS =Microsoft Systems Management Server

ist so das Standarttool bei PDC´s. Einen link zur Webseite hab ich bislang noch nicht.

mosquito

hier hab ich noch was für dich gefunden klingt ganz interessant
Windows Shut Down

jetzt hab ich doch einen Link
 
Zuletzt bearbeitet:
Morgen...
hab zwar kein Plan von Delphi...Habs aber kürzlich mit C# (VS.Net) geschafft...Egal welcher zusatnd (ausser ausgeschaltet)...Die Kiste fährt runter..

Remote, übers Netzwerk..

Wie gesagt..Weiss nicht ob Du ans WMI über Delphi rankommst

-Blaschke
 
@mosquito: Danke für deine Recherchen! Aber SMS (ohne dass ich mich grossartig damit auseinandergesetzt hab) schiesst über's Ziel hinaus und schränkt die Flexibilität des finalen Programms zu sehr ein. Externe, 'fremde' Programme (wie 'Ray Windows Shutdown') sind leider selten eine saubere Alternative, zumal in diesem Fall Optionen zum 'Fernsteuern' (z.B. über Parameter) fehlen...

@MrBlaschke: Hab zwar noch nie was mit .net gemacht, aber für den Source wäre ich dennoch dankbar :)
 
@Kayleigh: Hab einige Komponenten durch und keine tut ihren Dienst sobald Win gesperrt ist... Aber danke für den Tipp.

Hab jetzt eine Lösung gefunden, Delphi-Source:

Code:
function ExWindows(flag: word): Boolean;
var
  vi     : TOSVersionInfo;
  hToken : THandle;
  tp     : TTokenPrivileges;
  h      : DWord;
begin
  vi.dwOSVersionInfoSize:=SizeOf(vi);
  GetVersionEx(vi);
  if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then 
  begin 
    // Windows NT
    OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken);
    LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid);
    tp.PrivilegeCount := 1;
    tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
    h := 0;
    AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^,h);
    CloseHandle(hToken);
    result := ExitWindowsEx(flag,0);
  end
  else
  begin // Windows 95
    Result := ExitWindowsEx(flag,0);
  end;
end;

Aufruf erfolgt mit:

ExWindows(EWX_POWEROFF + EWX_FORCE);
 
Zurück
Oben