Насколько я знаю, кажется, что мы можем использовать NdrComplexStructMarshall для маршалинга сложной структуры в сетевой буфер и NdrComplexStructUnmarshall для демаршализации сложной структуры из сетевого буфера в память , И здесь - их невозможная реализация.
Но его параметры мне сложно предоставить.
#include "rpc.h"
#include "rpcndr.h"
#pragma comment(lib, "RpcRT4.lib") //rpcndr.h (include Rpc.h) RpcRT4.dll
char packet_bytes[] = {0};
void main()
{
extern const mssrvs_MIDL_TYPE_FORMAT_STRING mssrvs__MIDL_TypeFormatString;
//PFORMAT_STRING mssrvs__MIDL_ProcFormatString;
MIDL_STUB_MESSAGE response = { 0 };
response.Buffer = (unsigned char*)packet_bytes;
response.BufferLength = sizeof(packet_bytes);
response.BufferStart = (unsigned char*)packet_bytes;
response.BufferEnd = (unsigned char*)packet_bytes + sizeof(packet_bytes);
PSHARE_INFO_1 pShareInfo1 = NULL;
//NdrComplexStructUnmarshall: Returns null upon success. Raises one of the following exceptions upon failure.
auto pr = NdrComplexStructUnmarshall(&response, (unsigned char**)&pShareInfo1, (PFORMAT_STRING)&mssrvs__MIDL_TypeFormatString.Format[1882], TRUE);
}
У меня вопрос: как я могу использовать эти API или есть другой API для кодирования или декодирования между памятью, указывающей на тип или структуру, и сетевым буфером?
Учитывая,
После компиляции IDL из [MS-SRVS]: удаленный протокол службы сервера - 6 Приложение A: Полная IDL , я получил: mssrvs.h, mssrvs_c.c (224 КБ) и mssrvs_s.c (199 КБ) слишком велико.
Возможно связанные ссылки
Представление сетевых данных (NDR).