2017-09-04 11 views
0

디지털 인증서를 키로 사용하여 RSACryptoServiceProvider를 통해 문자열에 서명하고 있습니다.RSACryptoServiceProvider의 인증 창의 핸들 설정

이 프로세스는 델파이 응용 프로그램에서 호출되는 COM DLL 내에서 수행됩니다.

scollection = X509Certificate2UI.SelectFromCollection (fcollection, "Available digital certificate (s)", "Select digital certificate", X509SelectionFlag.SingleSelection, ptr); 

하지만 비슷한 일을 할 수없는 인증 화면에서

이 사람이 나를 도울 수있다 :이 방법을 통해 핸들을 전달하는 것이 가능하다 인증서의 선택에

?

답변

1

당신이 어떤 HWND를 부모에 PIN 또는 동의 프롬프트를 원하는 뜻 가정 할 때, 당신이 원하는이 코드는 당신이 설명하는 쉬운 경로를 사용하여 런타임으로 .NET 4.7을 가정합니다

private static RSACryptoServiceProvider AssociateHwnd(
    RSACryptoServiceProvider rsaCsp, 
    IntPtr hwnd) 
{ 
    CspKeyContainerInfo containerInfo = rsaCsp.CspKeyContainerInfo; 

    CspParameters newParameters = new CspParameters(
     containerInfo.ProviderType, 
     containerInfo.ProviderName, 
     containerInfo.KeyContainerName) 
    { 
     KeyNumber = (int)containerInfo.KeyNumber, 
     Flags = CspProviderFlags.UseExistingKey, 
     ParentWindowHandle = hwnd, 
    }; 

    if (containerInfo.MachineKeyStore) 
    { 
     newParameters.Flags |= CspProviderFlags.UseMachineKeyStore; 
    } 

    return new RSACryptoServiceProvider(newParameters); 
} 

주 같은 https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/mitigation-cspparameters-parentwindowhandle-expects-an-hwnd.