Gangster, vamos a probar una cosa. En esta linea:
Código Delphi
[-]
Disk:= CreateFile(PChar('\\.\' + Letra + ':'),GENERIC_READ,FILE_SHARE_READ
Realiza este cambio, y vuelve a probar:
Código Delphi
[-]
Disk:= CreateFile(PChar('\\.\PHYSICALDRIVE0'),GENERIC_READ,FILE_SHARE_READ
De esta manera te tendría que dar los datos del primer disco duro, \\.\PHYSICALDRIVE1 los del segundo, etc. Si te funciona no te sera muy difícil cambiar la función para que reciba como parámetro el número en vez de la letra.