tuxama
Messages postés6Date d'inscriptionlundi 28 janvier 2008StatutMembreDernière intervention18 février 2008
-
9 févr. 2008 à 20:45
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 2012
-
19 févr. 2008 à 06:34
Bonsoir,
Je tente de récupérer quelques caractéristiques de mon disque physique principal.
DeviceIOControl me retourne une erreur '1' : Fonction Incorrecte
Malgrès différents essais je ne parviens pas à trouver de solution.
Quelqu'un a t-il une idée, voir même LA solution ?
Merci de votre aide.
namespace RawDeviceAccess.Disk {
/// <summary>
/// Classe Wrapper pour des fonctions Win32 et les structures associées.
/// </summary>
internal class Win32Functions {
// Types d'accès
public const uint GENERIC_READ = 0x80000000;
public const uint GENERIC_WRITE = 0x40000000;
public const uint GENERIC_EXECUTE = 0x20000000;
public const uint GENERIC_ALL = 0x10000000;
// Partages
public const uint FILE_SHARE_READ = 0x00000001;
public const uint FILE_SHARE_WRITE = 0x00000002;
public const uint FILE_SHARE_DELETE = 0x00000004;
// Dispositions
public const uint CREATE_NEW = 1;
public const uint CREATE_ALWAYS = 2;
public const uint OPEN_EXISTING = 3;
public const uint OPEN_ALWAYS = 4;
public const uint TRUNCATE_EXISTING = 5;
//
public const uint IOCTL_CHANGER_GET_PRODUCT_DATA = 0x00000002; //0x0002;
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 10 févr. 2008 à 18:38
Oui je pense que c'est ça, les disques ne doivent pas être considérés comme des "changer". J'arrive à obtenir les réultats des codes DISK mais pas avec les code CHANGER.
( Exécuter en tant qu'administrateur ).
using System;
using System.Runtime.InteropServices;
namespace DeviceIO // compile with -unsafe
{
internal class Program /*** Run as Administrator !! ***/
{
//[ StructLayout( LayoutKind.Sequential ) ]
//private unsafe struct CHANGER_PRODUCT_DATA
//{
// public fixed byte VendorId8;
// public fixed byte ProductId16;
// public fixed byte Revision4;
// public fixed byte SerialNumber32;
// byte DeviceType;
//}
cs_wizad
Messages postés355Date d'inscriptionsamedi 30 octobre 2004StatutMembreDernière intervention14 avril 2009 9 févr. 2008 à 22:41
A vu de nez (oui un nez peut voire suffit de bien l'éduquer) je dirais que tu te complique beaucoup <strike>trop</strike> la vie. A priori tu devrais plutôt passer par la couche WMI qui est faite pour ça (entre autre) et qui est accéssible en C# sans devoir wrapper divers couche native.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 10 févr. 2008 à 15:07
Es-tu sûr que IOCTL_CHANGER_GET_PRODUCT_DATA s'applique aux disques et pas aux autres péréiphériques, les codes disque me semblent réunis dans "Disk Management Control Codes" ( IOCTL_DISK_* ).
tuxama
Messages postés6Date d'inscriptionlundi 28 janvier 2008StatutMembreDernière intervention18 février 2008 18 févr. 2008 à 22:32
Bonsoir Lutinore,
Ta réponse est me semble t-il à la fois juste et imcomplète. Car en effet s'il ne faut pas confondre les DISK et les CHANGER il n'en demeure pas moins que la possibilité nous est offerte (dans la doc msdn) de récupérer des infos uniquement accessiblent par IOCTL_GET_CHANGER_PRODUCT_DATA.
Pour récupérer comme dans les exemples MS la géométrie du disque pas de problème (en C# et C++ non managé sous VS 2008).
En revanche (pas d'exemple MS, j'en trouve pas) je prends un code retour 5, accès refusé, dès lors que je tente de récupérer les infos CHANGER_PRODUCT_DATA (en C# et C++ non managé sous VS 2008).
la doc msdn The following control codes are used with changer devices.
Value |Meaning |----
[Insert_Emoticon%28%27/imgs2/smile_wink.gif%27%29; ]
tuxama
Messages postés6Date d'inscriptionlundi 28 janvier 2008StatutMembreDernière intervention18 février 2008 18 févr. 2008 à 23:12
Après re-lecture de ton post j'ai voulu vérifier quelque chose (parfois je suis un peu borné )
Lors du createfile( DEVICE_NAME, ....
l'on précise le "nom de device". ET LA OUI TU AS RAISON il faut indiquer @"\\.\Changer0" dès lors que l'on indique un code de controle IOCTL_CHANGER !!
C'est en clair dans la doc :
Changer Device
The IOCTL_CHANGER_* control codes accept a handle to a changer device. To
open a changer device, use a file name of the following form:
\\.\Changerx where x is a number that indicates which device to
open, starting with zero (0). To open changer device zero (0) in an application
that is written in C or C++, use the following file name: "\\\\.\\Changer0".
Merci de m'avoir ouvert les yeux !
L'éternité c'est long surtout vers la fin...[Insert_Emoticon%28%27/imgs2/smile_wink.gif%27%29; ]