Ver Mensaje Individual
  #7  
Antiguo 21-05-2007
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Reputación: 20
cHackAll Va por buen camino
Cool Yo digo...

Acá les dejo la función que hice el '05 para obtener la serie de un HDD... La adecué un poco para que sea una función independiente pues yo lo uso luego del "InitExe". Es todo lo que se necesita y funciona a la perfección sin DLLs.
Código Delphi [-]
function GetSerial(Drive: Char): ShortString;
const InBuffer: array [0..7] of Cardinal = ($200,$10100,$ECB000,0,0,0,0,0);
var
 hDevice, Dummy: Cardinal;
 IdeInfo: array [0..$83] of Cardinal;
begin
 Result[0] := #0;
 hDevice := CreateFile(PChar('\\.\' + Drive + ':'), GENERIC_READ + GENERIC_WRITE, FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
 if hDevice <> INVALID_HANDLE_VALUE then
  begin
   DeviceIoControl(hDevice, $7C088, @InBuffer, SizeOf(InBuffer), @IdeInfo, SizeOf(IdeInfo), Dummy, nil);
   CloseHandle(hDevice);
   Result[0] := #20;
   Move(IdeInfo[9], Result[1], Byte(Result[0]));
  end;
end;

procedure TForm1.ComboBox1Change(Sender: TObject);
begin
 Caption := '"'+GetSerial(ComboBox1.Text[1])+'"'; // 'a..z'
end;

La función no es aplicable en 9x, puesto que para ésos fines se debiese acceder a los puertos que manejan los buses (1F0h, 170h, 1E8h y 168h).
Personalmente mis aplicaciones solo corren en NT, lo decidí firmemente cuando me enteré que Microsoft ya no daba soporte a ésos SOs.

PD: Disculpen el retraso pero andaba "programando"
Responder Con Cita