Resolvi o Ctrl Alt Del no XP/2000

Delphi

29/09/2003

Galera,

resolvi o ctrl+alt+del no xp, criei a dll para substituir a msgina.dll, to fazendo alguns testes e vou tentar disponibilizar ainda hoje.


[]s,

Cleber


Clebertom

Clebertom

Curtidas 0

Respostas

Clebertom

Clebertom

29/09/2003

Seguinte fiz a dll chama-se cblgina.dll quem quiser me manda um e-mail que eu retorno com a dll (clebertom@uol.com.br)

Instrucoes:

1.Colocar a dll cblgina.dll dentro de windows\system32

2.Criar o valor no registro

lRegistry := TRegistry.Create;
Try
lRegistry.RootKey := HKEY_LOCAL_MACHINE;
lRegistry.OpenKey(´Software´, True);
lRegistry.OpenKey(´Microsoft´, True);
lRegistry.OpenKey(´Windows NT´, True);
lRegistry.OpenKey(´CurrentVersion´, True);
lRegistry.OpenKey(´Winlogon´, True);
lRegistry.WriteString(´GinaDLL´, ´cblgina.dll´)
Finally
lRegistry.CloseKey;
end;

3. Para desativar o ctrl+alt+del criar o valor no registro

lRegistry := TRegistry.Create;
Try
lRegistry.RootKey := HKEY_LOCAL_MACHINE;
lRegistry.OpenKey(´Software´, True);
lRegistry.OpenKey(´CBLSoftware´, True);
lRegistry.OpenKey(´CBLGina´, True);

lRegistry.WriteBool(´CtrlAltDel´, False) // Ctrl+Alt+Del Desativado
Finally
lRegistry.CloseKey;
end;

4. Só reiniciar a maquina


Obs. Para habilitar o ctrl+alt+del em qualquer momento é so alterar o valor ´CtrlAltDel´ para True:

lRegistry.WriteBool(´CtrlAltDel´, True) // Ctrl+Alt+Del Ativado


Eh isso ai, penei mas consegui desativar essa @#$¬^& de ctrl+alt+del

[]s,

Cleber

[b:cb19f71a64]Texto editado pelo Moderador - AZ[/b:cb19f71a64]


GOSTEI 0
Clebertom

Clebertom

29/09/2003

Detalhe se quiserem mando o fonte da dll tb.

[]s,

Cleber


GOSTEI 0
Bruno Conegundes

Bruno Conegundes

29/09/2003

Amigo poderia me enviar essa dll !!! ( bruno.orange@terra.com.br )
[/b]


GOSTEI 0
Clebertom

Clebertom

29/09/2003

Galera, ai vai o fonte da dll, eh so criar um projeto novo de dll e substituir com o codigo abaixo, por favor se alguem fizer alguma melhoria ou modificacao relevante a todos, disponibilizem aqui para a galera.

[]s,

Clebertom


library CBLGina;

{

Declaracoes da API em C apenas para referencia

BOOL WlxActivateUserShell(
  PVOID pWlxContext,
  PWSTR pszDesktopName,
  PWSTR pszMprLogonScript,
  PVOID pEnvironment
);

VOID WlxDisplayLockedNotice(
  PVOID pWlxContext
);

VOID WlxDisplaySASNotice(
  PVOID pWlxContext
);

BOOL WlxDisplayStatusMessage(
  PVOID pWlxContext,
  HDESK hDesktop,
  DWORD dwOptions,
  PWSTR pTitle,
  PWSTR pMessage
);

BOOL WINAPI WlxGetConsoleSwitchCredentials(
  PVOID pWlxContext,
  PVOID pInfo
);

BOOL WlxGetStatusMessage(
  PVOID pWlxContext,
  DWORD* pdwOptions,
  PWSTR pMessage,
  DWORD dwBufferSize
);

BOOL WlxInitialize(
  LPWSTR lpWinsta,
  HANDLE hWlx,
  PVOID pvReserved,
  PVOID pWinlogonFunctions,
  PVOID* pWlxContext
);

BOOL WlxIsLockOk(
  PVOID pWlxContext
);

BOOL WlxIsLogoffOk(
  PVOID pWlxContext
);

int WlxLoggedOnSAS(
  PVOID pWlxContext,
  DWORD dwSasType,
  PVOID pReserved
);

int WlxLoggedOutSAS(
  PVOID pWlxContext,
  DWORD dwSasType,
  PLUID pAuthenticationId,
  PSID pLogonSid,
  PDWORD pdwOptions,
  PHANDLE phToken,
  PWLX_MPR_NOTIFY_INFO pNprNotifyInfo,
  PVOID* pProfile
);

typedef struct _WLX_MPR_NOTIFY_INFO <
  PWSTR pszUserName;
  PWSTR pszDomain;
  PWSTR pszPassword;
  PWSTR pszOldPassword;
> WLX_MPR_NOTIFY_INFO, *PWLX_MPR_NOTIFY_INFO;

VOID WlxLogoff(
  PVOID pWlxContext
);

BOOL WlxNegotiate(
  DWORD dwWinLogonVersion,
  PDWORD pdwDllVersion
);

BOOL WlxNetworkProviderLoad(
  PVOID pWlxContext,
  PWLX_MPR_NOTIFY_INFO pNprNotifyInfo
);

BOOL WlxRemoveStatusMessage(
  PVOID pWlxContext
);

BOOL WlxScreenSaverNotify(
  PVOID pWlxContext,
  BOOL* pSecure
);

VOID WlxShutdown(
  PVOID pWlxContext,
  DWORD ShutdownType
);

BOOL WlxStartApplication(
  PVOID pWlxContext,
  PWSTR pszDesktopName,
  PVOID pEnvironment,
  PWSTR pszCmdLine
);

int WlxWkstaLockedSAS(
  PVOID pWlxContext,
  DWORD dwSasType
);

}

uses
  SysUtils,
  Classes,
  Windows,
  Registry;

{$R *.RES}

const
  msgina  = ´msgina.dll´;

type WLX_MPR_NOTIFY_INFO = record
  pszUserName,
  pszDomain,
  pszPassword,
  pszOldPassword : PWideString;
end;
type PWLX_MPR_NOTIFY_INFO = ^WLX_MPR_NOTIFY_INFO;

type
  PLUID = PLargeInteger;
  PVOID = Pointer;

type TWlxLoggedOnSAS = function(pWlxContext : PVOID; dwSasType : DWORD; pReserved : PVOID) : integer; stdcall;

function WlxActivateUserShell(pWlxContext : PVOID; pszDesktopName : PWideString; pszMprLogonScript : PWideString; pEnvironment : PVOID) : BOOL; stdcall; external msgina name ´WlxActivateUserShell´;
procedure WlxDisplayLockedNotice(pWlxContext : PVOID); stdcall; external msgina name ´WlxDisplayLockedNotice´;
procedure WlxDisplaySASNotice(pWlxContext : PVOID); stdcall; external msgina name ´WlxDisplaySASNotice´;
function WlxDisplayStatusMessage(pWlxContext : PVOID; hDesktop : HDESK; dwOptions : DWORD; pTitle : PWideString; pMessage : PWideString) : BOOL; stdcall; external msgina name ´WlxDisplayStatusMessage´;
function WlxGetConsoleSwitchCredentials(pWlxContext : PVOID; pInfo : PVOID) : BOOL; stdcall; external msgina name ´WlxGetConsoleSwitchCredentials´;
function WlxGetStatusMessage(pWlxContext : PVOID; pdwOptions : PDWORD; pMessage : PWideString; dwBufferSize : DWORD) : BOOL; stdcall; external msgina name ´WlxGetStatusMessage´;
function WlxInitialize(lpWinsta : LPWSTR; hWlx : THandle; pvReserved : PVOID; pWinlogonFunctions : PVOID; pWlxContext : PVOID) : BOOL; stdcall; external msgina name ´WlxInitialize´;
function WlxIsLockOk(pWlxContext : PVOID) : BOOL; stdcall; external msgina name ´WlxIsLockOk´;
function WlxIsLogoffOk(pWlxContext : PVOID) : BOOL; stdcall; external msgina name ´WlxIsLogoffOk´;

// Essa funcao recebe o ctrl+alt+del
//function WlxLoggedOnSAS(pWlxContext : PVOID; dwSasType : DWORD; pReserved : PVOID) : integer; stdcall; external msgina name ´WlxLoggedOnSAS´;
function WlxLoggedOnSAS(pWlxContext : PVOID; dwSasType : DWORD; pReserved : PVOID) : integer; stdcall;
var
  lGinaInst : HINST;
  lWlxLoggedOnSAS : TWlxLoggedOnSAS;
  lRegistry : TRegistry;
  lCtrlAltDel : Boolean;
begin

  lRegistry := TRegistry.Create;
  Try
    lRegistry.RootKey := HKEY_LOCAL_MACHINE;
    lRegistry.OpenKey(´Software´, True);
    lRegistry.OpenKey(´CBLSoftware´, True);
    lRegistry.OpenKey(´CBLGina´, True);
    Try
      lCtrlAltDel := lRegistry.ReadBool(´CtrlAltDel´);
    Except
      lCtrlAltDel := True;
    End;
  Finally
    lRegistry.CloseKey;
  end;


  Result := 0;
  // Abrindo a Gina
  lGinaInst := LoadLibrary(´msgina.dll´);
  Try
    if lGinaInst <> 0 then
    begin
      // Se o Ctrl+alt+del estiver ativo entao utilizar o procedimento da api
      if lCtrlAltDel then
      begin
        @lWlxLoggedOnSAS := GetProcAddress(lGinaInst, ´WlxLoggedOnSAS´);
        if Assigned(lWlxLoggedOnSAS) then
          Result := lWlxLoggedOnSAS(pWlxContext, dwSasType, pReserved);
      end else
        Result := 2;
    end;
  Finally
    if lGinaInst <> 0 then FreeLibrary(lGinaInst);
  End;
end;

function WlxLoggedOutSAS(pWlxContext : PVOID; dwSasType : DWORD; pAuthenticationId : PLUID; pLogonSid : PSID; pdwOptions : PDWORD; phToken : PHANDLE; pNprNotifyInfo : PWLX_MPR_NOTIFY_INFO; pProfile : PVOID) : integer; stdcall; external msgina name ´WlxLoggedOutSAS´;

procedure WlxLogoff(pWlxContext : PVOID); stdcall; external msgina name ´WlxLogoff´;
function WlxNegotiate(dwWinLogonVersion : DWORD; pdwDllVersion : PDWORD) : BOOL; stdcall; external msgina name ´WlxNegotiate´;

function WlxNetworkProviderLoad(pWlxContext : PVOID; pNprNotifyInfo : PWLX_MPR_NOTIFY_INFO) : BOOL; stdcall; external msgina name ´WlxNetworkProviderLoad´;
function WlxRemoveStatusMessage(pWlxContext : PVOID) : BOOL; stdcall; external msgina name ´WlxRemoveStatusMessage´;
function WlxScreenSaverNotify(pWlxContext : PVOID; pSecure : PBOOL) : BOOL; stdcall; external msgina name ´WlxScreenSaverNotify´;
procedure WlxShutdown(pWlxContext : PVOID; ShutdownType : DWORD); stdcall; external msgina name ´WlxShutdown´;
function WlxStartApplication(pWlxContext : PVOID; pszDesktopName : PWideString; pEnvironment : PVOID; pszCmdLine : PWideString) : BOOL; stdcall; external msgina name ´WlxStartApplication´;
function WlxWkstaLockedSAS(pWlxContext : PVOID; dwSasType : DWORD) : integer; stdcall; external msgina name ´WlxWkstaLockedSAS´;





exports
  WlxActivateUserShell,
  WlxDisplayLockedNotice,
  WlxDisplaySASNotice,
  WlxDisplayStatusMessage,
  WlxGetConsoleSwitchCredentials,
  WlxGetStatusMessage,
  WlxInitialize,
  WlxIsLockOk,
  WlxIsLogoffOk,
  WlxLoggedOnSAS,
  WlxLoggedOutSAS,
  WlxLogoff,
  WlxNegotiate,
  WlxNetworkProviderLoad,
  WlxRemoveStatusMessage,
  WlxScreenSaverNotify,
  WlxShutdown,
  WlxStartApplication,
  WlxWkstaLockedSAS;

begin

end.





GOSTEI 0
Clebertom

Clebertom

29/09/2003

Galera, testei hoje no windows 2000 e deu pau, to tentando resolver, por enquanto utilizem apenas no windows XP.


[]s,

Clebertom


GOSTEI 0
POSTAR