Как маршалировать или демаршировать данные NDR на MS-RPC в моих буферах ввода и вывода - PullRequest
0 голосов
/ 28 июня 2019

Насколько я знаю, кажется, что мы можем использовать 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).

...