Ustawianie zabezpieczeń Process-Wide za pomocą polecenia CoInitializeSecurity
Funkcja CoInitializeSecurity umożliwia sterowanie złożonymi scenariuszami zabezpieczeń przez programowe ustawianie zabezpieczeń aplikacji. W tym temacie opisano scenariusze, w których można użyć CoInitializeSecurity i przedstawiono szczegółowe informacje na temat sposobu jej używania.
Istnieje kilka powodów, dla których warto użyć CoInitializeSecurity w celu ustawienia zabezpieczeń całego procesu w programie. Na przykład, mimo że można ustawić poziom uwierzytelniania i uprawnienia dostępu dla aplikacji przy użyciu dcomcnfg.exe, domyślny poziom personifikacji dla komputera może nie być odpowiedni dla procesu. Jedynym sposobem zmiany tego ustawienia dla procesu jest wywołanie CoInitializeSecurity.
Jeśli chcesz użyć dostawcy zabezpieczeń Schannel, musisz określić go jako usługę uwierzytelniania w wywołaniu CoInitializeSecurity.
Innym częstym scenariuszem, w którym można programowo ustawić zabezpieczenia dla całego procesu, jest sytuacja, gdy chcesz ustawić domyślne zabezpieczenia dla całego procesu, ale masz jeden lub więcej obiektów w tym procesie, które udostępniają interfejsy ze specjalnymi wymaganiami dotyczącymi zabezpieczeń. W takim przypadku można wywołać CoInitializeSecurity w celu ustawienia zabezpieczeń dla procesu, umożliwiając modelu COM obsługę większości kontroli zabezpieczeń, a także wywołać inne metody ustawiania zabezpieczeń dla obiektów ze specjalnymi potrzebami bezpieczeństwa. Wywoływanie tych metod i funkcji zostało opisane w Ustawienia zabezpieczeń na poziomie interfejsu proxy.
Jeśli Twoja aplikacja ma bardzo wyspecjalizowane wymagania dotyczące zabezpieczeń, na przykład umożliwienie niektórym grupom dostępu do różnych obiektów w zależności od pory dnia, możesz chcieć obsłużyć wszystkie zabezpieczenia programistycznie. Upewnij się, że COM w ogóle nie wykonuje automatycznego sprawdzania. W tym celu należy wywołać parametr CoInitializeSecurity, ustawiając parametr dwAuthnLevel na brak, a parametr pVoidnull. Jeśli masz własny pakiet zabezpieczeń, musisz go również zarejestrować w parametrze pAuthnSvc. Następnie można obsługiwać wszystkie własne zabezpieczenia programistycznie za pomocą wywołań interfejsu na poziomie serwera proxy i funkcji, opisanych w Ustawianie zabezpieczeń na poziomie serwera proxy interfejsu.
CoInitializeSecurity oferuje bogaty zestaw możliwości. Jeśli wywołasz funkcję CoInitializeSecurity, wartości w rejestrze zostaną zignorowane, a zamiast tego użyte będą wartości inicjalizacji zabezpieczeń, które przekażesz podczas wywołania. W zależności od żądanego wyniku pierwszy parametr pVoid może wskazywać trzy różne typy wartości: SECURITY_DESCRIPTOR , obiekt IAccessControl lub wskaźnik do identyfikatora AppID. W większości przypadków użyjesz funkcji systemu Windows, aby utworzyć SECURITY_DESCRIPTOR, do którego pVoid wskaże.
Jednak pVoid może również wskazywać obiekt IAccessControl.
Aby wskazać, że CoInitializeSecurity przekazujesz obiekt IAccessControl do pVoid, należy przekazać wartość EOAC_ACCESS_CONTROL do parametru dwCapabilities. Ponieważ CoInitializeSecurity buforuje wyniki kontroli dostępu, nie można zmienić listy kontroli dostępu po wywołaniu CoInitializeSecurity.
Innym typem wartości, który możesz przekazać do parametru pVoid, jest wskaźnik do GUID, który stanowi AppID Twojej aplikacji. Jeśli pVoid jest wskaźnikiem do identyfikatora AppID, należy określić EOAC_APPID w parametrze pCapabilities, aby funkcja wiedziała, jakiej wartości należy się spodziewać w pVoid. Jeśli pVoid wskazuje na identyfikator AppID, CoInitializeSecurity korzysta tylko z rejestru dla wartości uwierzytelniania i ignoruje wszystkie inne parametry wywołania CoInitializeSecurity.
Tematy pokrewne
-
Ustawienie zabezpieczeń Process-Wide