Je suivais ma classe Win32 aujourd'hui pour travailler sur quelques améliorations nécessaires depuis longtemps. Je suis coincé sur mon code de géométrie de disque. Sur leProblème avec la classe Marshal
var ob = (DiskGeometry) Marshal.PtrToStructure (geomp, typeof (DiskGeometry));
ligne, il continue à lancer une exception ..
Tentative de lecture ou d'écriture de mémoire protégée. C'est souvent une indication que l'autre mémoire est corrompue.
Mon code est ..
if (Handle.IsInvalid)
{
Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
return new DiskGeometry();
}
var geom = new DiskGeometry();
var geomp = Marshal.AllocHGlobal(Marshal.SizeOf(geom));
Marshal.StructureToPtr(geom, geomp, false);
uint returnedBytes;
if (!DeviceIoControl(Handle, (uint) IOCTL_CONTROL_CODE_CONSTANTS.IOCTL_DISK_GET_DRIVE_GEOMETRY, IntPtr.Zero, 0, ref geomp, (uint)Marshal.SizeOf(typeof(DiskGeometry)), out returnedBytes, IntPtr.Zero))
{
Marshal.ThrowExceptionForHR(Marshal.GetHRForLastWin32Error());
return new DiskGeometry();
}
var ob = (DiskGeometry)Marshal.PtrToStructure(geomp, typeof (DiskGeometry));
Qu'est-ce que je fais mal?
Pouvez-vous nous montrer la définition de 'DiskGeometry'? – JaredPar
http://pastie.org/1324196 – Eaton
Avez-vous changé quelque chose d'autre? La structure 'DiskGeometry' a-t-elle changé? Qu'en est-il du code au-dessus de ce que vous nous montrez? Je suis curieux de savoir d'où vient "Handle". –