Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Marshal użytkownika ma ciąg formatu podobny do transmit_as:
FC_USER_MARSHAL
flags<1>
quadruple_index<2>
user_type_memory_size<2>
transmitted_type_buffer size<2>
offset_to_the_transmitted_type<2>
Flagi<1> bajtu składają się z górnej flagi nibble i dolnej nibble wyrównania.
Górne 2 bity nibble flagi służą do opisania, czy typ przewodu jest zdefiniowany jako unikatowy wskaźnik, wskaźnik odniesienia lub żaden wskaźnik (nie może to być ptr). Następujące manifesty zostały zdefiniowane w celu ustawienia/pobrania flag:
#define USER_MARSHAL_UNIQUE 0x80
#define USER_MARSHAL_REF 0x40
#define USER_MARSHAL_POINTER 0xc0 /* unique or ref */
#define USER_MARSHAL_IID 0x20 /* JIT compiler only */
Wyrównanie słowa flagi utrzymuje wyrównanie przewodu typu przesyłanego.
Quadruple_index<2> jest indeksem procedury wywołania zwrotnego czterokrotnie funkcji marshala użytkownika. Rutynowe pozycje są następujące: ustalanie rozmiaru, marshaling, unmarshaling i zwalnianie rutynowych.
User_type_memory_size<2> udostępnia rozmiar typu specyficznego dla użytkownika, w tym nieznanych typów.
Transmitted_type_buffer_size<2> wynosi zero, gdy rozmiar jest różny lub rzeczywisty stały rozmiar. Jest to optymalizacja, która umożliwia MIDL pomijanie wywołań zwrotnych podczas określania rozmiaru buforu, a także podczas zwalniania.
Zakres
Sprawdzanie [zakres] zapewnia dodatkowe środki weryfikacji argumentów w warstwie NDR. Deskryptor [zakres] ma następujący format:
FC_RANGE, flags_type <1>
low value<4>
high value<4>
Flagi biorą górne nibble i typ dolnej nibble drugiego bajtu. Niskie i wysokie wartości zależą od typu zmiennej do sprawdzenia.
Flagi są przeznaczone jako pojazd rozszerzający; kompilator ustawił nibble na zero.