|
PROFESSIONAL NEWSGROUPS WINDEV, WEBDEV and WINDEV Mobile |
| | | | | |
Home → Off-topic → Modéle, Firmware et Numéro de série d'un disque dur : Qui peut me tester cette procédure ? MERCI D'AVANCE |
Modéle, Firmware et Numéro de série d'un disque dur : Qui peut me tester cette procédure ? MERCI D'AVANCE |
Started by Philippe Pasquali, Jul., 23 2007 10:30 AM - 6 replies |
| |
| | | |
|
| |
Posted on July, 23 2007 - 10:30 AM |
Bonjour Je vous livre cette fonction pour test. Sur mon pc deux disques SATA j'ai comme résultat disk0 ST380013AS 3.43 4MR21271 disk1 ST3160815AS 3.AAC 6RA0EH2R
Ne fonctionne pas pour les disques connectés en USB
Merci d'avance pour tous les testeurs
---------------------------------------------------- UNE COLLECTION GLOBALE : ppDRIVE ----------------------------------------------------
DECLARATION DE ppDRIVE ---------------------------------------------------- CONSTANT _GENERIC_READ = 0x80000000 _GENERIC_WRITE = 0x40000000 // _FILE_SHARE_READ = 0x00000001 _FILE_SHARE_WRITE = 0x00000002 // _DFP_GET_VERSION = 0x00074080 _DFP_SEND_DRIVE_COMMAND = 0x0007C084 _DFP_RECEIVE_DRIVE_DATA = 0x0007C088 // _OPEN_EXISTING = 3 _INVALID_HANDLE_VALUE = -1 END
_IDEREGS est une structure bFeaturesReg est un entier sans signe sur 1 octet bSectorCountReg est un entier sans signe sur 1 octet bSectorNumberReg est un entier sans signe sur 1 octet bCylLowReg est un entier sans signe sur 1 octet bCylHighReg est un entier sans signe sur 1 octet bDriveHeadReg est un entier sans signe sur 1 octet bCommandReg est un entier sans signe sur 1 octet bReserved est un entier sans signe sur 1 octet END _SENDCMDINPARAMS est une structure cBufferSize est un entier sans signe sur 4 octet irDriveRegs est une _IDEREGS bDriveNumber est un entier sans signe sur 1 octet bReserved est un tableau fixe de 3 entier sans signe sur 1 octet dwReserved est un tableau fixe de 4 entier sans signe sur 4 octet END _DRIVERSTATUS est une structure bDriverErrorest est un entier sans signe sur 1 octet bIDEStatusest est un entier sans signe sur 1 octet bReserved est un tableau fixe de 2 entier sans signe sur 1 octet dwReserved est un tableau fixe de 2 entier sans signe sur 4 octet END _SENDCMDOUTPARAMS est une structure cBufferSize est un entier sans signe sur 4 octet DriverStatus est un _DRIVERSTATUS bBuffer est un tableau fixe de 512 entier sans signe sur 1 octet END _IDSECTOR est une structure wGenConfig est un entier sans signe sur 2 octet wNumCyls est un entier sans signe sur 2 octet wReserved est un entier sans signe sur 2 octet wNumHeads est un entier sans signe sur 2 octet wBytesPerTrack est un entier sans signe sur 2 octet wBytesPerSector est un entier sans signe sur 2 octet wSectorsPerTrack est un entier sans signe sur 2 octet wVendorUnique est un tableau fixe de 3 entier sans signe sur 2 octet sSerialNumber est un tableau fixe de 20 caractères wBufferType est un entier sans signe sur 2 octet wBufferSize est un entier sans signe sur 2 octet wECCSize est un entier sans signe sur 2 octet sFirmwareRev est un tableau fixe de 8 caractères sModelNumber est un tableau fixe de 40 caractères wMoreVendorUnique est un entier sans signe sur 2 octet wDoubleWordIO est un entier sans signe sur 2 octet wCapabilities est un entier sans signe sur 2 octet wReserved1 est un entier sans signe sur 2 octet wPIOTiming est un entier sans signe sur 2 octet wDMATiming est un entier sans signe sur 2 octet wBS est un entier sans signe sur 2 octet wNumCurrentCyls est un entier sans signe sur 2 octet wNumCurrentHeads est un entier sans signe sur 2 octet wNumCurrentSectorsPerTrack est un entier sans signe sur 2 octet ulCurrentSectorCapacity est un entier sans signe sur 4 octet wMultSectorStuff est un entier sans signe sur 2 octet ulTotalAddressableSectors est un entier sans signe sur 4 octet wSingleWordDMA est un entier sans signe sur 2 octet wMultiWordDMA est un entier sans signe sur 2 octet bReserved est un tableau fixe de 128 entier sans signe sur 1 octet END _GETVERSIONOUTPARAMS est une structure bVersion est un entier sans signe sur 1 octet bRevision est un entier sans signe sur 1 octet bReserved est un entier sans signe sur 1 octet bIDEDeviceMap est un entier sans signe sur 1 octet fCapabilities est un entier dwReserved est un tableau fixe de 4 entier END
---------------------------------------------------------------------------------------------------------------------------------------------------- // Renvoi une chaine contenant les informations suivantes : // "Modéle du disque" TAB "Firmware" TAB "Numéro de série" // pour un disque physique donné par son numéro en non pas par son nom ou lettre. PROCEDURE GetDiskInfos(DriveNumber) m_bytesRead est un entier sans signe m_hDrive est un entier cmd_InParams est un _SENDCMDINPARAMS cmd_OutParams est un _SENDCMDOUTPARAMS cmd_hdInfos est un _IDSECTOR Resultat est une chaîne = "" PhysicalDriveName est une chaîne ASCIIZ sur 128 = "\\.\PHYSICALDRIVE" + NumériqueVersChaîne(DriveNumber) // Go m_hDrive = API("kernel32.dll", "CreateFileA", PhysicalDriveName, OUBinaire(_GENERIC_READ,_GENERIC_WRITE),OUBinaire(_FILE_SHARE_READ,_FILE_SHARE_WRITE), Null, _OPEN_EXISTING, 0, Null) IF m_hDrive = _INVALID_HANDLE_VALUE THEN RENVOYER "" IF m_hDrive <> Null THEN cmd_InParams:bDriveNumber = DriveNumber cmd_InParams:cBufferSize = 512 IF ETBinaire(DriveNumber,1) THEN cmd_InParams:irDriveRegs:bDriveHeadReg = 0xB0 ELSE cmd_InParams:irDriveRegs:bDriveHeadReg = 0xA0 END cmd_InParams:irDriveRegs:bCommandReg = 0xEC cmd_InParams:irDriveRegs:bSectorCountReg = 1 cmd_InParams:irDriveRegs:bSectorNumberReg = 1 m_bytesRead = 0 resAPI est un booléen = False resAPI = API( "kernel32.dll", "DeviceIoControl", m_hDrive, _DFP_RECEIVE_DRIVE_DATA, &cmd_InParams, Dimension(cmd_InParams),... &cmd_OutParams,Dimension(cmd_OutParams), &m_bytesRead, Null) IF NOT resAPI THEN RENVOYER "" IF m_bytesRead <> 0 THEN Transfert(&cmd_hdInfos, &cmd_OutParams:bBuffer, Dimension(cmd_hdInfos)) Resultat += SwapByteOrder( cmd_hdInfos:sModelNumber) + TAB Resultat += SwapByteOrder( cmd_hdInfos:sFirmwareRev) + TAB Resultat += SwapByteOrder( cmd_hdInfos:sSerialNumber) END API( "kernel32.dll", "CloseHandle", m_hDrive) END RENVOYER Resultat
---------------------------------------------------------------------------------------------------------------------------------------------------- // "1234567890" donne "2143658709" FUNCTION SwapByteOrder(pData) i est un entier sResult est un chaîne = "" Ch est un caractère FOR i=1 TO Dimension(pData) STEP 2 Ch = pData[i] pData[i] = pData[i+1] pData[i+1] = Ch END FOR i=1 TO Dimension(pData) sResult += pData[i] END RENVOYER SansEspace(sResult) |
| |
| |
| | | |
|
| | |
| |
Posted on July, 23 2007 - 10:40 AM |
Petit oublie, on l'appel par GetDiskInfos(0) pour le premier HDD, GetDiskInfos(1) pour le second etc...
"Philippe Pasquali" <philippe-pasquali@orange.fr> a écrit dans le message de news: 46a44a51@news.pcsoft.fr...
Bonjour Je vous livre cette fonction pour test. Sur mon pc deux disques SATA j'ai comme résultat disk0 ST380013AS 3.43 4MR21271 disk1 ST3160815AS 3.AAC 6RA0EH2R
Ne fonctionne pas pour les disques connectés en USB
Merci d'avance pour tous les testeurs
---------------------------------------------------- UNE COLLECTION GLOBALE : ppDRIVE ----------------------------------------------------
DECLARATION DE ppDRIVE ---------------------------------------------------- CONSTANT _GENERIC_READ = 0x80000000 _GENERIC_WRITE = 0x40000000 // _FILE_SHARE_READ = 0x00000001 _FILE_SHARE_WRITE = 0x00000002 // _DFP_GET_VERSION = 0x00074080 _DFP_SEND_DRIVE_COMMAND = 0x0007C084 _DFP_RECEIVE_DRIVE_DATA = 0x0007C088 // _OPEN_EXISTING = 3 _INVALID_HANDLE_VALUE = -1 END
_IDEREGS est une structure bFeaturesReg est un entier sans signe sur 1 octet bSectorCountReg est un entier sans signe sur 1 octet bSectorNumberReg est un entier sans signe sur 1 octet bCylLowReg est un entier sans signe sur 1 octet bCylHighReg est un entier sans signe sur 1 octet bDriveHeadReg est un entier sans signe sur 1 octet bCommandReg est un entier sans signe sur 1 octet bReserved est un entier sans signe sur 1 octet END _SENDCMDINPARAMS est une structure cBufferSize est un entier sans signe sur 4 octet irDriveRegs est une _IDEREGS bDriveNumber est un entier sans signe sur 1 octet bReserved est un tableau fixe de 3 entier sans signe sur 1 octet dwReserved est un tableau fixe de 4 entier sans signe sur 4 octet END _DRIVERSTATUS est une structure bDriverErrorest est un entier sans signe sur 1 octet bIDEStatusest est un entier sans signe sur 1 octet bReserved est un tableau fixe de 2 entier sans signe sur 1 octet dwReserved est un tableau fixe de 2 entier sans signe sur 4 octet END _SENDCMDOUTPARAMS est une structure cBufferSize est un entier sans signe sur 4 octet DriverStatus est un _DRIVERSTATUS bBuffer est un tableau fixe de 512 entier sans signe sur 1 octet END _IDSECTOR est une structure wGenConfig est un entier sans signe sur 2 octet wNumCyls est un entier sans signe sur 2 octet wReserved est un entier sans signe sur 2 octet wNumHeads est un entier sans signe sur 2 octet wBytesPerTrack est un entier sans signe sur 2 octet wBytesPerSector est un entier sans signe sur 2 octet wSectorsPerTrack est un entier sans signe sur 2 octet wVendorUnique est un tableau fixe de 3 entier sans signe sur 2 octet sSerialNumber est un tableau fixe de 20 caractères wBufferType est un entier sans signe sur 2 octet wBufferSize est un entier sans signe sur 2 octet wECCSize est un entier sans signe sur 2 octet sFirmwareRev est un tableau fixe de 8 caractères sModelNumber est un tableau fixe de 40 caractères wMoreVendorUnique est un entier sans signe sur 2 octet wDoubleWordIO est un entier sans signe sur 2 octet wCapabilities est un entier sans signe sur 2 octet wReserved1 est un entier sans signe sur 2 octet wPIOTiming est un entier sans signe sur 2 octet wDMATiming est un entier sans signe sur 2 octet wBS est un entier sans signe sur 2 octet wNumCurrentCyls est un entier sans signe sur 2 octet wNumCurrentHeads est un entier sans signe sur 2 octet wNumCurrentSectorsPerTrack est un entier sans signe sur 2 octet ulCurrentSectorCapacity est un entier sans signe sur 4 octet wMultSectorStuff est un entier sans signe sur 2 octet ulTotalAddressableSectors est un entier sans signe sur 4 octet wSingleWordDMA est un entier sans signe sur 2 octet wMultiWordDMA est un entier sans signe sur 2 octet bReserved est un tableau fixe de 128 entier sans signe sur 1 octet END _GETVERSIONOUTPARAMS est une structure bVersion est un entier sans signe sur 1 octet bRevision est un entier sans signe sur 1 octet bReserved est un entier sans signe sur 1 octet bIDEDeviceMap est un entier sans signe sur 1 octet fCapabilities est un entier dwReserved est un tableau fixe de 4 entier END
---------------------------------------------------------------------------------------------------------------------------------------------------- // Renvoi une chaine contenant les informations suivantes : // "Modéle du disque" TAB "Firmware" TAB "Numéro de série" // pour un disque physique donné par son numéro en non pas par son nom ou lettre. PROCEDURE GetDiskInfos(DriveNumber) m_bytesRead est un entier sans signe m_hDrive est un entier cmd_InParams est un _SENDCMDINPARAMS cmd_OutParams est un _SENDCMDOUTPARAMS cmd_hdInfos est un _IDSECTOR Resultat est une chaîne = "" PhysicalDriveName est une chaîne ASCIIZ sur 128 = "\\.\PHYSICALDRIVE" + NumériqueVersChaîne(DriveNumber) // Go m_hDrive = API("kernel32.dll", "CreateFileA", PhysicalDriveName, OUBinaire(_GENERIC_READ,_GENERIC_WRITE),OUBinaire(_FILE_SHARE_READ,_FILE_SHARE_WRITE), Null, _OPEN_EXISTING, 0, Null) IF m_hDrive = _INVALID_HANDLE_VALUE THEN RENVOYER "" IF m_hDrive <> Null THEN cmd_InParams:bDriveNumber = DriveNumber cmd_InParams:cBufferSize = 512 IF ETBinaire(DriveNumber,1) THEN cmd_InParams:irDriveRegs:bDriveHeadReg = 0xB0 ELSE cmd_InParams:irDriveRegs:bDriveHeadReg = 0xA0 END cmd_InParams:irDriveRegs:bCommandReg = 0xEC cmd_InParams:irDriveRegs:bSectorCountReg = 1 cmd_InParams:irDriveRegs:bSectorNumberReg = 1 m_bytesRead = 0 resAPI est un booléen = False resAPI = API( "kernel32.dll", "DeviceIoControl", m_hDrive, _DFP_RECEIVE_DRIVE_DATA, &cmd_InParams, Dimension(cmd_InParams),... &cmd_OutParams,Dimension(cmd_OutParams), &m_bytesRead, Null) IF NOT resAPI THEN RENVOYER "" IF m_bytesRead <> 0 THEN Transfert(&cmd_hdInfos, &cmd_OutParams:bBuffer, Dimension(cmd_hdInfos)) Resultat += SwapByteOrder( cmd_hdInfos:sModelNumber) + TAB Resultat += SwapByteOrder( cmd_hdInfos:sFirmwareRev) + TAB Resultat += SwapByteOrder( cmd_hdInfos:sSerialNumber) END API( "kernel32.dll", "CloseHandle", m_hDrive) END RENVOYER Resultat
---------------------------------------------------------------------------------------------------------------------------------------------------- // "1234567890" donne "2143658709" FUNCTION SwapByteOrder(pData) i est un entier sResult est un chaîne = "" Ch est un caractère FOR i=1 TO Dimension(pData) STEP 2 Ch = pData[i] pData[i] = pData[i+1] pData[i+1] = Ch END FOR i=1 TO Dimension(pData) sResult += pData[i] END RENVOYER SansEspace(sResult)
|
| |
| |
| | | |
|
| | |
| |
Posted on July, 23 2007 - 11:27 AM |
Philippe Pasquali a exprimé avec précision :
Bonjour Je vous livre cette fonction pour test. Sur mon pc deux disques SATA j'ai comme résultat disk0 ST380013AS 3.43 4MR21271 disk1 ST3160815AS 3.AAC 6RA0EH2R
Ne fonctionne pas pour les disques connectés en USB
Merci d'avance pour tous les testeurs
Je n'ai pas de disque USB, donc je ne peux dire le résultat en USB et sous WinXP ou inférieur.
Par contre sous Vista > m_hDrive = API("kernel32.dll", "CreateFileA", PhysicalDriveName, renvoie -1.
J'utilise une autre méthode pour récupérer les infos du disque, mais j'ai ce problème ou Vista ne fonctionne plus du tout de la même manière. Même les clés de registre sont tout autre. Si quelqu'un a une solution pour récupérer les infos du disque sous Vista, merci d'avance.
-- Pascal N0.pascal.SPAM@efpe.biz Ne garder que le prénom pour me joindre |
| |
| |
| | | |
|
| | |
| |
Posted on July, 23 2007 - 11:27 AM |
Dans son message précédent, Philippe Pasquali a écrit :
Petit oublie, on l'appel par GetDiskInfos(0) pour le premier HDD, GetDiskInfos(1) pour le second etc...
"Philippe Pasquali" <philippe-pasquali@orange.fr> a écrit dans le message de news: 46a44a51@news.pcsoft.fr...
j'obtiens :
ST380013AS 8.12 5MR37WRK
-- Cordialement JeAn-PhI |
| |
| |
| | | |
|
| | |
| |
Posted on July, 23 2007 - 1:25 PM |
Merci peut tu me donner l'OS sur lequel tu as testé ?
"JeAn-PhI" <no.spam@spam.fr> a écrit dans le message de news: mn.ba1d7d776ddfd244.49289@spam.fr...
Dans son message précédent, Philippe Pasquali a écrit : Petit oublie, on l'appel par GetDiskInfos(0) pour le premier HDD, GetDiskInfos(1) pour le second etc...
"Philippe Pasquali" <philippe-pasquali@orange.fr> a écrit dans le message de news: 46a44a51@news.pcsoft.fr...
j'obtiens : ST380013AS 8.12 5MR37WRK -- Cordialement JeAn-PhI |
| |
| |
| | | |
|
| | |
| |
Posted on July, 23 2007 - 1:48 PM |
Encore la sécurité avec VISTA c'est un vrai kastete ! Par exemple VNC ne doit pas être installé en mode service sinon le mot de passe de l'authentification ne fonctionne plus. Je regarde sur le net... Merci
"Pascal F" <N0.pascal.SPAM@efpe.biz> a écrit dans le message de news: 46a45570@news.pcsoft.fr...
Philippe Pasquali a exprimé avec précision : Bonjour Je vous livre cette fonction pour test. Sur mon pc deux disques SATA j'ai comme résultat disk0 ST380013AS 3.43 4MR21271 disk1 ST3160815AS 3.AAC 6RA0EH2R
Ne fonctionne pas pour les disques connectés en USB
Merci d'avance pour tous les testeurs
Je n'ai pas de disque USB, donc je ne peux dire le résultat en USB et sous WinXP ou inférieur. Par contre sous Vista m_hDrive = API("kernel32.dll", "CreateFileA", PhysicalDriveName, renvoie -1. J'utilise une autre méthode pour récupérer les infos du disque, mais j'ai ce problème ou Vista ne fonctionne plus du tout de la même manière. Même les clés de registre sont tout autre. Si quelqu'un a une solution pour récupérer les infos du disque sous Vista, merci d'avance. -- Pascal N0.pascal.SPAM@efpe.biz Ne garder que le prénom pour me joindre |
| |
| |
| | | |
|
| | |
| |
Posted on July, 23 2007 - 4:48 PM |
Philippe Pasquali a exprimé avec précision :
Merci peut tu me donner l'OS sur lequel tu as testé ? "JeAn-PhI" <no.spam@spam.fr> a écrit dans le message de news: mn.ba1d7d776ddfd244.49289@spam.fr... Dans son message précédent, Philippe Pasquali a écrit : Petit oublie, on l'appel par GetDiskInfos(0) pour le premier HDD, GetDiskInfos(1) pour le second etc...
"Philippe Pasquali" <philippe-pasquali@orange.fr> a écrit dans le message de news: 46a44a51@news.pcsoft.fr...
j'obtiens : ST380013AS 8.12 5MR37WRK -- Cordialement JeAn-PhI
XP Pro SP2
-- Cordialement JeAn-PhI |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|