Udostępnij za pośrednictwem


Ciągi formatu RPC NDR

Aparat NDR: interpreter 32-bitowy

W tym dokumencie opisano deskryptory ciągów formatu, nazywane czasami adresami MOP dla 32-bitowego aparatu NDR. W tej sekcji opisano zmiany związane z ewolucją interpretera –Oi do warstwy interpretera –Oif, a także dodatki związane z potokami i obsługą asynchroniczną.

W tym dokumencie opisano bieżącą technologię języka Microsoft Interface Definition Language (MIDL) z perspektywy aparatu oraz bieżący aparat NDR.

Przegląd

Aparat NDR to aparat marshalingowy składników Remote Procedure Call (RPC) i DCOM. Obsługuje on wszystkie problemy związane ze wycinkami połączenia zdalnego. W ramach procesu marshaling NDR jest sterowany przez kod C z wycinków generowanych przez MIDL, generator typu JIT MIDL lub wycinki generowane przez inne narzędzia lub napisane ręcznie. Z kolei aparat NDR napędza bazowy czas wykonywania (DCOM lub RPC), który komunikuje się z określonymi transportami.

Pierwotnym celem projektu było zapewnienie narzędzia do efektywnego marshalingu dla dowolnych danych na podstawie informacji dostarczonych przez kompilator MIDL. Ciągi formatu opisane w tym dokumencie — i rzeczywiście wszystkie informacje generowane przez kompilator do użycia aparatu NDR — zawsze były traktowane jako wewnętrzny interfejs między kompilatorem a aparatem. Podobnie interfejsy dostępne dla aparatu do obsługi problemów z czasem wykonywania są również głównie wewnętrzne (niektóre wyjątki istnieją po stronie czasu wykonywania RPC, a niektóre interfejsy DCOM używane przez aparat są zewnętrzne).

Dwie typowe podejścia do marshalingu zawsze były wbudowane i oparte na danych (interpretowane). Język MIDL obsługuje zarówno za pośrednictwem –Os, jak i przełączników –Oi* w swoich wycinkach generowanych przez język C. Ponadto narzędzie MIDL może wygenerować biblioteki TLB używane przez pakiet oleautomation. W związku z tym jedną z perspektyw wewnętrznych silników jest to, że składa się z dwóch części.

Pierwszy to zestaw procedur, które obsługują ustalanie rozmiaru, marshaling itd., odpowiadające typowym obiektom typu danych, takim jak struktura lub tablica. Te procedury są dostosowane do wydajności; na przykład zwykle próbują blokować dane wszędzie tam, gdzie jest to możliwe. Ta część jest często określana jako podstawowy aparat NDR.

Druga część składa się z interpretera i powiązanych elementów. Interpreter używa procedur z podstawowego aparatu NDR, tak jakby z biblioteki wewnętrznej, w celu wykonania zdalnego wywołania ze wszystkimi argumentami marshaled i unmarshaled, zgodnie z potrzebami.

Podstawowy aparat NDR jest używany w podobny sposób, niezależnie od tego, czy jest używany z wbudowanych wycinków, czy z interpretera. Wszystkie podstawowe procedury aparatu zależą od stanu przekazywanego przez strukturę komunikatów wycinkowych. Struktura jest odpowiednio konfigurowana przez wbudowany wycink lub interpreter. Przez lata silnik podstawowy był używany w innym kontekście; obecnie interpreter jest zestawem kilku odrębnych pętli interpretera. Są one związane ze starymi i nowymi (–Oi a –Oif) interpreterami, a także pętlami związanymi z serializacji danych (pickling), obsługą asynchroniczną RPC i obsługą asynchroniczną DCOM (RPC i DCOM mają różne modele programowania asynchronicznego).

Poza dodatkami nowych funkcji, ważnym aspektem ewolucji silnika NDR jest ogólna zmiana podejścia do interpreterów. Wersja NDR 1.1 rozpoczęła się w ramach nowego podejścia MIDL 2.0 do marshalingu, a wycinki wbudowane są preferowane w przypadku zagadnień dotyczących wydajności. W najnowszej wersji NDR –Oif stał się najczęściej używanym trybem kompilatora, niemal do wykluczenia wycinków wbudowanych.

Deskryptory ciągów formatu aparatu RPC NDR zostały szczegółowo opisane w następujących tematach:

  • ciągi formatu
  • ciągi formatu procedury
  • deskryptor nagłówka procedury
  • dojścia
  • nagłówka
  • deskryptory parametrów
  • ciągi formatu typu