Hirdetés

Hozzászólok Aktív témák

  • pmonitor

    tag

    A következő kód:
    using System;
    using System.IO;
    using System.Runtime.InteropServices;

    namespace DiskProp
    {
    class Program
    {
    const uint IOCTL_DISK_GET_DRIVE_LAYOUT_EX = 0x70050;

    public enum PARTITION_STYLE : int
    {
    MasterBootRecord = 0,
    GuidPartitionTable = 1,
    Raw = 2
    }

    [Serializable]
    [StructLayout(LayoutKind.Sequential)]
    public struct DRIVE_LAYOUT_INFORMATION_MBR
    {
    public long Signature;
    }

    [Serializable]
    [StructLayout(LayoutKind.Sequential)]
    public struct DRIVE_LAYOUT_INFORMATION_GPT
    {
    public Guid DiskId;
    public long StartingUsableOffset;
    public long UsableLength;
    public long MaxPartitionCount;
    }

    [Serializable]
    [StructLayout(LayoutKind.Explicit)]
    public struct DRIVE_LAYOUT_INFORMATION_UNION
    {
    [FieldOffset(0)]
    public DRIVE_LAYOUT_INFORMATION_MBR Mbr;

    [FieldOffset(0)]
    public DRIVE_LAYOUT_INFORMATION_GPT Gpt;
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct PARTITION_INFORMATION_MBR
    {
    public byte PartitionType;
    public bool BootIndicator;
    public bool RecognizedPartition;
    public Int32 HiddenSectors;
    }

    [Flags]
    public enum EFIPartitionAttributes : ulong
    {
    GPT_ATTRIBUTE_PLATFORM_REQUIRED = 0x0000000000000001,
    LegacyBIOSBootable = 0x0000000000000004,
    GPT_BASIC_DATA_ATTRIBUTE_NO_DRIVE_LETTER = 0x8000000000000000,
    GPT_BASIC_DATA_ATTRIBUTE_HIDDEN = 0x4000000000000000,
    GPT_BASIC_DATA_ATTRIBUTE_SHADOW_COPY = 0x2000000000000000,
    GPT_BASIC_DATA_ATTRIBUTE_READ_ONLY = 0x1000000000000000
    }

    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct PARTITION_INFORMATION_GPT
    {
    public Guid PartitionType;
    public Guid PartitionId;
    [MarshalAs(UnmanagedType.U8)]
    public EFIPartitionAttributes Attributes;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]
    public string Name;
    }

    [StructLayout(LayoutKind.Explicit)]
    public struct PARTITION_INFORMATION_UNION
    {
    [FieldOffset(0)]
    public PARTITION_INFORMATION_MBR Mbr;
    [FieldOffset(0)]
    public PARTITION_INFORMATION_GPT Gpt;
    }

    [Serializable]
    [StructLayout(LayoutKind.Sequential)]
    public struct PARTITION_INFORMATION_EX
    {
    [MarshalAs(UnmanagedType.U4)]
    public PARTITION_STYLE PartitionStyle;
    public long StartingOffset;
    public long PartitionLength;
    public int PartitionNumber;
    public bool RewritePartition;
    public PARTITION_INFORMATION_UNION DriveLayoutInformaiton;
    }

    [Serializable]
    [StructLayout(LayoutKind.Sequential)]
    public struct DRIVE_LAYOUT_INFORMATION_EX
    {
    public PARTITION_STYLE PartitionStyle;
    public int PartitionCount;
    public DRIVE_LAYOUT_INFORMATION_UNION DriveLayoutInformaiton;
    [MarshalAs(UnmanagedType.ByValArray, ArraySubType = UnmanagedType.Struct, SizeConst = 128)]
    public PARTITION_INFORMATION_EX[] PartitionEntry;
    }

    [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    public static extern IntPtr CreateFile(
    [MarshalAs(UnmanagedType.LPTStr)] string filename,
    [MarshalAs(UnmanagedType.U4)] FileAccess access,
    [MarshalAs(UnmanagedType.U4)] FileShare share,
    IntPtr securityAttributes, // optional SECURITY_ATTRIBUTES struct or IntPtr.Zero
    [MarshalAs(UnmanagedType.U4)] FileMode creationDisposition,
    [MarshalAs(UnmanagedType.U4)] FileAttributes flagsAndAttributes,
    IntPtr templateFile
    );

    [DllImport("kernel32.dll", ExactSpelling = true, SetLastError = true, CharSet = CharSet.Auto)]
    public static extern bool DeviceIoControl(IntPtr hDevice, uint dwIoControlCode,
    IntPtr lpInBuffer, uint nInBufferSize,
    IntPtr lpOutBuffer, uint nOutBufferSize,
    out uint lpBytesReturned, IntPtr lpOverlapped
    );

    static void Main(string[] args)
    {
    Type ts = typeof(DRIVE_LAYOUT_INFORMATION_EX);
    int ss = Marshal.SizeOf(ts);
    }
    }
    }

    Ezt a kivételt dobja:Nem kezelt kivétel: System.ArgumentException: A típus („DiskProp.Program+DRIVE_LAYOUT_INFORMATION_EX”) nem adható át végrehajtásra nem felügyelt struktúraként; nem számítható ki értelmezhető méret vagy eltolás.
    a következő helyen: System.Runtime.InteropServices.Marshal.SizeOf(Type t)

    A DRIVE_LAYOUT_INFORMATION_EX elég összetett struktúra. Nem tudom, hogy hol lehet a hiba. Van valami 5letetek?

    https://www.bferi.hu/download.php ; https://bferi.hu/egyeb.php

  • Keem1

    addikt

    Srácok, egy webclientes kódrészletet kéne kiegészítenem. Túl sok, bonyolult és fontos kód része, így csak a várt működéshez szükséges kóddal egészíteném ki.

    Ami kéne, egy json stringet kéne az alábbiakkal együtt elküldenem POST-ként. UploadString jó lenne, de az alábbiakat átírni nem akarom. Muszáj ezzel kezdenem valamit, mert már működő kód.

    :R

    GZipStream responseStream = new GZipStream(wc.OpenRead(page_url), CompressionMode.Decompress);
    StreamReader reader = new StreamReader(responseStream);
    ResponseHtml = reader.ReadToEnd();

    Samsung Galaxy S10 | Nexus 7 (2013) | Dropbox reg: https://db.tt/2QEPVJVS Mindketten +500 MB-ot kapunk. Te is, én is. | Apróim: https://bit.ly/2T2y2IZ

  • pmonitor

    tag

    válasz pmonitor #9542 üzenetére

    A következő módosítással sikerült megoldanom. Ezt:
    [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
    public struct PARTITION_INFORMATION_GPT
    {
    public Guid PartitionType;
    public Guid PartitionId;
    [MarshalAs(UnmanagedType.U8)]
    public EFIPartitionAttributes Attributes;
    [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 36)]
    public string Name;
    }

    Így módosítottam:
    [StructLayout(LayoutKind.Sequential)]
    public unsafe struct PARTITION_INFORMATION_GPT
    {
    public Guid PartitionType;
    public Guid PartitionId;
    public EFIPartitionAttributes Attributes;
    public fixed byte Data[72];
    }

    Így kell az unsafe kód engedélyezése, de a probléma megoldódott.

    [ Szerkesztve ]

    https://www.bferi.hu/download.php ; https://bferi.hu/egyeb.php

Hozzászólok Aktív témák

Hirdetés