sexta-feira, 14 de outubro de 2016

WINDOWS - Usuário e Senhas de compartilhamentos - Users and Passwords of Shares

Comando para verificar Usuários e Senhas Armazenados no compartilhamentos do windows.

Você realizar algumas ações nessa janela:
- Adicionar
- Editar
- Remover
- Fazer Backup
- Restaurar Backup

Vá em Iniciar -> Executar (ou Win + R) e digite o texto abaixo:

rundll32.exe keymgr.dll, KRShowKeyMgr

DELPHI - Login AD/LDAP usando ADO - Login AD/LDAP using ADO

A função abaixo retorna TRUE se o usuário estiver válido no AD e False caso contrário.



{
Name               //Nome do Usuário Completo
sAMAccountName        // Nome do Usuario Logado(fulano.santos)
userAccountControl    //512 para usuario habilitado / 514 para usuario desabilitado
userPrincipalName     //Usuário com dominio (fulano.santos@dominio.com)
objectClass = 'User'  //para filtrar somente os objetos usuários no WHERE

EXEMPLO:
SELECT Name, sAMAccountName, userAccountControl FROM LDAP://dominio.com
WHERE objectClass = 'User' and sAMAccountName = 'fulano.santos'
}

//Data.DB, Data.Win.ADODB, System.SysUtils   <-- Declarar nas Uses


function ValidarLoginAD(Dominio, User, Password: String): Boolean;
var
  ADOCon :TADOConnection;
  ADOQuery :TADOQuery;
  SQL, NmUser :String;
  PosArroba :Integer;
const
  campos = 'Name, sAMAccountName, userAccountControl';
begin
  Result := False;

  PosArroba := Pos('@', User);
  NmUser := Copy(User, 1, Pos('@', User)-1); //copia o nome do usuario antes do @
  
  ADOCon := TADOConnection.Create(nil); //Cria os objetos de conexão
  ADOQuery := TADOQuery.Create(nil);
  try
    //Atribui as configurações
    ADOQuery.Connection := ADOCon;
    ADOCon.LoginPrompt := False;

    ADOCon.Provider := 'ADSDSOObject';
    ADOCon.Properties['User Id'].Value := User;
    ADOCon.Properties['Password'].Value := Password;
    ADOCon.Properties['Encrypt Password'].Value := True;
    //Gera o Select
    SQL := Format('SELECT %s FROM ''LDAP://%s'' WHERE objectClass = %s and sAMAccountName = %s',
      [campos, Dominio, QuotedStr('User'), QuotedStr(NmUser)]);
    ADOQuery.SQL.Text := SQL;

    try //Abre a conexão
      ADOQuery.Open;
      if ADOQuery.RecordCount > 0 then
      begin
        if ADOQuery.FieldByName('userAccountControl').AsInteger = 512 then //512 para usuario habilitado
          Result := True
        else
        if ADOQuery.FieldByName('userAccountControl').AsInteger = 514 then //514 para usuario desabilitado
          raise Exception.Create('User disabled');
      end;
    except on E :Exception do
      raise Exception.Create(E.Message);
    end;
  finally
    ADOQuery.Close;
    ADOCon.Connected := False;
    FreeAndNil(ADOCon);
    FreeAndNil(ADOQuery);
  end;
end;

DELPHI - Calcular diferença de data/hora - Calculate date/time difference

Essa função calcula a diferença entre duas data/hora e devolve o retorno em String pois o retorno vai ser sempre em horas.


Formato do retorno: HH:mm:ss


function CalcularDiferencaDtHrToString(DataFinal, DataInicial: TDate; HoraFinal, HoraInicial: TTime): String;
var
  DataHoraFinal, DataHoraInicial :TDateTime;
  Total, Horas :Real;
  H, M, S, SS :Word;
  NumDias :Integer;
begin
  DataHoraFinal := DataFinal + HoraFinal;
  DataHoraInicial := DataInicial + HoraInicial;

  if DataHoraInicial > DataHoraFinal then
    Total := DataHoraInicial - DataHoraFinal
  else
    Total := DataHoraFinal - DataHoraInicial;

  NumDias := Trunc(Total);
  Horas := Total - Trunc(Total);
  Decodetime(Horas, H, M, S, SS);
  H := H + 24 * Trunc(NumDias);

  Result := FormatFloat('#00',H) + ':' + FormatFloat('00',M)+':'+FormatFloat('00',S);
end;