打开提供程序后重新启动服务会断开连接并强制您重新启动整个应用程序。
步步:
打开提供程序
NCryptOpenStorageProvider(myProvider, MS_KEY_STORAGE_PROVIDER, 0)
— 将为“00000000”(ERROR_SUCCESS)重启
CNG Key Isolation
服务重新打开提供程序
NCryptOpenStorageProvider(myProvider, MS_KEY_STORAGE_PROVIDER, 0)
— 将是“80070006”(ERROR_INVALID_HANDLE)
如何在重新启动服务后正确地重新打开提供程序,而无需重新启动应用程序?
当你第一次打电话时
NCryptOpenStorageProvider(&hProvider, MS_KEY_STORAGE_PROVIDER, 0);
ncryptprov.dll已加载,当它第一次调用函数时(每次打开时都会调用),它会调用并缓存 KeyIso 服务的某些句柄。当然,这些句柄在服务重启后就失效了。我的看法是,只有卸载 ncryptprov.dll 时才会调用(ncryptprov.dll 中的内部函数)。并且ncrypt 本身永远不会卸载已经加载的提供程序,即使在关闭了所有句柄之后(通过)。所以如果不重启进程,真的没有办法解决这个问题。
MsProvCryptOpenProvider_KeyIso
NCryptOpenStorageProviderFn
NCRYPT_KEY_STORAGE_FUNCTION_TABLE
MsProvCryptOpenProvider_KeyIso
MS_KEY_STORAGE_PROVIDER
KeyIsoServerBind
KeyIsoServerUnbind
NCryptFreeObject
然而我注意到一些 Windows 内置组件也受到了影响。当我锁定工作站然后尝试使用 PIN 提供商将其解锁时,我得到了下一个错误