Q&A

  • 하드 포멧해도 변하지 않는 시리얼넘버는?
API 함수를 통한 시리얼 넘버는 하드를 포멧하거나 시스템적인 프로그램을

돌리고 나면 변경되던데 하드의 물리적인 시리얼 넘버를 구할수는

없는지요.. 특정 메모리 번지나 특정 포트를 읽어오면 될것도 같은데..

그 특정 번지가 어딘지....



2  COMMENTS
  • Profile
    1999.05.27 23:40
    이현신 께서 말씀하시기를...

    > API 함수를 통한 시리얼 넘버는 하드를 포멧하거나 시스템적인 프로그램을

    > 돌리고 나면 변경되던데 하드의 물리적인 시리얼 넘버를 구할수는

    > 없는지요.. 특정 메모리 번지나 특정 포트를 읽어오면 될것도 같은데..

    > 그 특정 번지가 어딘지....

    >



    음냐...



    예제입니다.



    procedure TForm1.Button1Click(Sender: TObject);

    var

    VolumeName,

    FileSystemName : array [0..MAX_PATH-1] of Char;

    VolumeSerialNo : DWord;

    MaxComponentLength,

    FileSystemFlags : Integer;

    begin

    GetVolumeInformation('C:',VolumeName,MAX_PATH,@VolumeSerialNo,

    MaxComponentLength,FileSystemFlags,

    FileSystemName,MAX_PATH);

    Memo1.Lines.Add('VName = '+VolumeName);

    Memo1.Lines.Add('SerialNo = $'+IntToHex(VolumeSerialNo,8));

    Memo1.Lines.Add('CompLen = '+IntToStr(MaxComponentLength));

    Memo1.Lines.Add('Flags = $'+IntToHex(FileSystemFlags,4));

    Memo1.Lines.Add('FSName = '+FileSystemName);

    end;



    도움이 되셨는지....

  • Profile
    이현신 1999.05.28 00:19
    저도 GetVolumeInformation 를 사용해서 하드시리얼을 구햇읍니다.

    그런데 포멧을 한후에 다시 구해보면 값이 틀리게 나오는데...

    아래 제가 만든 함수입니다...



    function HardSerial:string;

    var

    szLabel : array [0..255] of char;

    dwVolumSerialNumber : DWORD;

    dwMaxNameLength : DWORD ;

    dwFileSystemFlages : DWORD ;

    szFileSysName : array [0..255] of char ;

    begin

    try

    GetVolumeInformation('c:',szLabel,255, @dwVolumSerialNumber,dwMaxNameLength,

    dwFileSystemFlages,szFileSysName, 255);

    result := IntToStr(dwVolumSerialNumber);

    except

    result := '';

    end;



    end;