Delen via


Het verbergen van gegevens voorkomen

Soms verbergen programma's opzettelijk of per ongeluk informatie van de RPC marshaling-engine. Enkele voorbeelden zijn als volgt:

  • Een gegevensstructuur verzenden als een niet-gedifferentieerd blok bytes
  • Verbeteren van prestaties door een neveneffect van een methode te gebruiken om extra gegevens via de lijn te sturen.
  • Een handvat vermommen door deze door te geven als een DWORD of een ULONG

Deze technieken leiden bijna zeker tot compatibiliteitsproblemen, zelfs voordat u uw toepassing naar 64-bits Windows hebt overgezet.

In plaats van een servercontext te verzenden als een DWORD- in een standaardaanroep voor externe procedures, gebruikt u een contextgreep om een ondoorzichtige ingang te bieden aan een servercontext die namens een client wordt bewaard. Contexten worden geïdentificeerd door GUID's die zijn gedefinieerd door de RPC-uitvoeringstijd wanneer een server een contextgreep voor een client maakt. Er wordt geen aanwijzer over de kabel gebruikt en de bewerking is volledig transparant over 32- of 64-bits grenzen. Zie Context handlesvoor meer informatie over het gebruik van contextgrepen.

DCOM-interfaces kunnen geen contextgrepen gebruiken omdat COM een eigen contextbeheer biedt. In plaats van een contextgreep te maken, kunt u een interfaceaanwijzer doorgeven aan het COM-object. Vervolgens kunt u de methoden rechtstreeks aanroepen via de interfacepointer of de aanwijzer binnen andere aanroepen plaatsen. Om het serverobject vrij te geven, roept de client de Release-methode van de interface aan via de interfacepointer.

Het kan ook voorkomen dat u het oorspronkelijke ontwerp van de code die u overdrat, niet kunt wijzigen. Als er geen manier is om een aanwijzer via het netwerk als een DWORDte verzenden, moet u een serverzijde-toewijzing implementeren tussen DWORD waarden en aanwijzers. Een manier om dit te doen, is door in de clienttoepassing de aanwijzers te wijzigen in typen voor precisie-aanwijzers, zoals ULONG_PTR of DWORD_PTR. Gebruik vervolgens het kenmerk MIDL [call_as] om de aanwijzers op de draad te plaatsen als DWORD- waarden. De client-side wrapper hoeft alleen de argumenten door te geven. De wrapper aan de serverzijde verwerkt de toewijzing tussen beide typen. Op een vergelijkbare manier kunt u het kenmerk [transmit_as] of het kenmerk [represent_as] gebruiken om uw gegevens te converteren naar een achterwaarts compatibele indeling voor draadweergave.

Als compatibiliteit met achterwaartse bedrading geen probleem is of als de ingang niet wordt gebruikt voor externe aanroepen en u zeker weet dat externe aanroepen tussen 32- en 64-bits processen nooit plaatsvinden, kunt u een argument opnieuw definiëren als een ULONG64. Indien nodig kunt u de 32-bits toepassing wijzigen om een DWORD- door te geven aan de gebruiker. U kunt ook afzonderlijke stubs bouwen van afzonderlijke IDL-bestanden voor elk platform met behulp van een DWORD- op 32-bits Windows en een ULONG64 op 64-bits Windows.