У меня есть буфер:
typedef struct _MESSAGE {
UCHAR Data[];
} MESSAGE, *PMESSAGE;
Это используется для связи (для передачи параметров, например ulong) между приложением драйвера и режима пользователя. Я использовал его как тип UCHAR. Но теперь я хочу также отправить широкие символы с этим буфером, должен ли я изменить его тип на WCHAR или PCHAR?
Какой тип данных лучше подходит здесь?
Вам не нужно изменять тип данных, это общий байт (тип необработанного потока данных). Попробуйте это:
typedef struct _MESSAGE {
UCHAR Data[200];
} MESSAGE_T, *PMESSAGE_T;
int byte_offset = 0; // byte offset inside your data stream
wchar_t MyMessage1[] = L"Ciao Mondo";
wchar_t MyMessage2[100];
MESSAGE_T Message;
// write message1 in the data stream
wcscpy( (wchar_t*)&Message.Data[byte_offset], MyMessage1);
// read message from the data stream
wcscpy( MyMessage2, (wchar_t*)&Message.Data[byte_offset]);
// TESTED AND WORK!
Почему бы вам не использовать массив байтов? BYTE*
? Кроме того, если я правильно помню, вы могли бы передать void * в драйвер и прочитать его как структуру.