массив байт в структуру
От: Аноним  
Дата: 07.07.07 10:18
Оценка:
Подскажите пожалуйста новичку как правильно преобразовать массив байт в структуру

Есть структура в C#

internal struct myStruct
{
internal ushort     Alpha;
internal string     Beta;
}


Преобразую структуру в массив байт и передаю ее драйверу с помощью IOCTL

IntPtr pStructure = Marshal.AllocHGlobal(256);
byte[] inBuffer = new byte[Marshal.SizeOf(ipRule)];
Marshal.StructureToPtr(ipRule, pStructure, false);
Marshal.Copy(pStructure, inBuffer, 0, inBuffer.Length);

returnString = Driver.CommunicateWithDriver(Driver.ioctlMyStruct(), inBuffer);

internal void CommunicateWithDriver
        (
            uint IoControlCode,
            byte[] Buffer
        )
        {
            int result = 0;
            int returned = 0;
            byte[] ReturnBuffer = new byte[256];

            unsafe
            {
                fixed (byte* pBuffer = Buffer)
                {
                    fixed (byte* pReturnBuffer = ReturnBuffer)
                    {
                        result = DeviceIoControl
                        (
                            DriverHandle,
                            IoControlCode,
                            pBuffer,
                            Buffer.Length,
                            pReturnBuffer,
                            ReturnBuffer.Length,
                            ref returned,
                            0
                        );
                    }
                }
            }
        }


В драйвере на СИ обьявляю структуру:

typedef struct _MYSTRUCT
{
    USHORT     Alpha;
    UCHAR      *Beta;
} MYSTRUCT, *MYSTRUCT;


Подскажите пожалуйста как мне получить струтуру MYSTRUCT из inBuffer

UCHAR *inBuffer;

case IOCTL_MYSTRUCT:
{
    inBuffer = Irp->AssociatedIrp.SystemBuffer;
    outBuffer = Irp->AssociatedIrp.SystemBuffer;

    // ???? ЧТО ЗДЕСЬ ПИСАТЬ ЧТОБЫ ПОЛУЧИТЬ СТРУКТУРУ MYSTRUCT ИЗ inBuffer

    break;
}
Re: массив байт в структуру
От: Cyberax Марс  
Дата: 07.07.07 10:31
Оценка: 3 (1)
Здравствуйте, Аноним, Вы писали:

А>
А>typedef struct _MYSTRUCT
А>{
А>    USHORT     Alpha;
А>    UCHAR      *Beta;
А>} MYSTRUCT, *MYSTRUCT;
А>

А>Подскажите пожалуйста как мне получить струтуру MYSTRUCT из inBuffer
А>
А>UCHAR *inBuffer;
А>

А>
А>case IOCTL_MYSTRUCT:
А>{
А>    inBuffer = Irp->AssociatedIrp.SystemBuffer;
А>    outBuffer = Irp->AssociatedIrp.SystemBuffer;

А>    // ???? ЧТО ЗДЕСЬ ПИСАТЬ ЧТОБЫ ПОЛУЧИТЬ СТРУКТУРУ MYSTRUCT ИЗ inBuffer

А>    break;
А>}
А>

MYSTRUCT *structPtr;

...
structPtr=(MYSTRUCT *)inBuffer;
Sapienti sat!
Re[2]: массив байт в структуру
От: Аноним  
Дата: 07.07.07 10:46
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>...

C>structPtr=(MYSTRUCT *)inBuffer;
C>[/ccode]

Огромное спасибо!!! Весь форум облазил не нашел ответа!!!
Re[3]: массив байт в структуру
От: Erop Россия  
Дата: 07.07.07 11:01
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Cyberax, Вы писали:


А>Огромное спасибо!!! Весь форум облазил не нашел ответа!!!


Для "спасибо" туи есть ещё и кнопочки
Можешь попробовать поставить отвкту Цайберакса оценку
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: массив байт в структуру
От: AlexBosen  
Дата: 07.07.07 11:26
Оценка: 8 (1)
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, Аноним, Вы писали:


А>>Здравствуйте, Cyberax, Вы писали:


А>>Огромное спасибо!!! Весь форум облазил не нашел ответа!!!


E>Для "спасибо" туи есть ещё и кнопочки

E>Можешь попробовать поставить отвкту Цайберакса оценку

Оценку поставил
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.