www.google.com http://www.google.com/search?hl=en&...al+number+programmatically&btnG=Google+Search Ссылка номер 1.
кстати в той ссылке что номер один грубейшая ошибка-пример работать не будет. На самом деле примерно так function snumber(str:string):integer; var SerialNum : pdword; a,b : dword; Buffer : array [0..255] of char; begin new(serialnum); if GetVolumeInformation(pchar(str), Buffer, SizeOf(Buffer), SerialNum, a, b, nil, 0) then Result:=(SerialNum^) else raise exception.CreateFmt('ошибка %d',[getlasterror]); dispose(serialnum); end; procedure TForm1.Button1Click(Sender: TObject); begin label1.Caption:=format('%x',[snumber('c:\')]); end; Под 9х возможна ситуация когда GetVolumeInformation возвратит 0 если определять номер Removable Device. Тогда надо юзать GetFileInformationByHаndle