Jag har ett märkligt fel vad det gäller IConnectionPoint::Advise när jag kör DCOM. Klienten (som jag inte har skrivit själv) skicka in en korrekt pekare. När jag sedan i Advise försöker köpa QueryInterface på den klassen uppstår något märkligt. Jag kan bara fråga efter IID_IUnknown, och inte det interfas som klassen implementera. När jag stega koden körs inte ens QueryInterface i den klassen. OM jag prova att lägga exakt samma kod i klienten innan den kör Advise fungera det. Nu har jag kommit på vad felet var. Det handalde om säkerhetsprblem, och det löste sig om jag lade CoInitializeSecurity på klienten. Problemet är att jag som sagts inte skrivit klienten själv, och bör därför inte ändra den koden. Desutom finns det andra klienter som jag kan använda där jag INTE har tillgång till källkoden. Märkligt fel vid Advise för ConnectionPoint i DCOM
Koden som felar är:
if(FAILED(hr=pUnkSink->QueryInterface(m_iid, (void**)&pSink)))
return CONNECT_E_CANNOTCONNECT;
där m_iid är IID för det interfas som ska efterfrågas och pUnkSink är inparametern till Advise. Det som ska hända är ju att QueryInterface ska frågas i given klass efter angivet interfas och klassen som implementera interfaset ska returneras i pSink.
Finns det något sätt att felsöka DCOM-trafiken och se vilka funktioner som körs?Sv: Märkligt fel vid Advise för ConnectionPoint i DCOM
Min fråga är därför hur man sätter säkerheten på en klient.