@@ -98,40 +98,43 @@ public Boolean IsBusy {
98
98
public void EnumKeys ( ) {
99
99
IsBusy = true ;
100
100
Keys . Clear ( ) ;
101
- try {
102
- Int32 hresult = NCryptOpenStorageProvider ( out SafeNCryptProviderHandle phProvider , Name , 0x00000040 ) ;
103
- if ( hresult > 0 ) {
104
- MsgBox . Show ( "Error" , "Failed to open provider:\n " + new Win32Exception ( hresult ) . Message ) ;
101
+ foreach ( UInt32 flags in new [ ] { 0x40 , 0x60 } ) {
102
+ try {
103
+ Int32 hresult = NCryptOpenStorageProvider ( out SafeNCryptProviderHandle phProvider , Name , 0 ) ;
104
+ if ( hresult > 0 ) {
105
+ MsgBox . Show ( "Error" , "Failed to open provider:\n " + new Win32Exception ( hresult ) . Message ) ;
105
106
106
- return ;
107
- }
107
+ return ;
108
+ }
108
109
109
- IntPtr ppKeyName = IntPtr . Zero ;
110
- IntPtr ppEnumState = IntPtr . Zero ;
111
- do {
112
- hresult = NCryptEnumKeys ( phProvider , null , ref ppKeyName , ref ppEnumState , 0x00000040 ) ;
113
- if ( hresult == 0 ) {
114
- NCryptKeyName keyStruct = Marshal . PtrToStructure < NCryptKeyName > ( ppKeyName ) ;
115
- Keys . Add ( new KeyContainerVM {
116
- KeyName = keyStruct . pszName ,
117
- Algorithm = keyStruct . pszAlgid ,
118
- KeySpec = ( X509KeySpec2 ) keyStruct . dwLegacyKeySpec ,
119
- Flags = keyStruct . dwFlags
120
- } ) ;
110
+ IntPtr ppKeyName = IntPtr . Zero ;
111
+ IntPtr ppEnumState = IntPtr . Zero ;
112
+ do {
113
+ hresult = NCryptEnumKeys ( phProvider , null , ref ppKeyName , ref ppEnumState , flags ) ;
114
+ if ( hresult == 0 ) {
115
+ NCryptKeyName keyStruct = Marshal . PtrToStructure < NCryptKeyName > ( ppKeyName ) ;
116
+ Keys . Add ( new KeyContainerVM {
117
+ KeyName = keyStruct . pszName ,
118
+ Algorithm = keyStruct . pszAlgid ,
119
+ KeySpec = ( X509KeySpec2 ) keyStruct . dwLegacyKeySpec ,
120
+ Flags = keyStruct . dwFlags
121
+ } ) ;
121
122
122
- NCryptFreeObject ( ppKeyName ) ;
123
- } else {
124
- ppKeyName = IntPtr . Zero ;
123
+ NCryptFreeObject ( ppKeyName ) ;
124
+ } else {
125
+ ppKeyName = IntPtr . Zero ;
126
+ }
127
+ } while ( ! IntPtr . Zero . Equals ( ppKeyName ) ) ;
128
+ NCryptFreeObject ( phProvider . DangerousGetHandle ( ) ) ;
129
+ if ( ! IntPtr . Zero . Equals ( ppEnumState ) ) {
130
+ NCryptFreeObject ( ppEnumState ) ;
125
131
}
126
- } while ( ! IntPtr . Zero . Equals ( ppKeyName ) ) ;
127
- NCryptFreeObject ( phProvider . DangerousGetHandle ( ) ) ;
128
- if ( ! IntPtr . Zero . Equals ( ppEnumState ) ) {
129
- NCryptFreeObject ( ppEnumState ) ;
132
+ } catch ( Exception ex ) {
133
+ MsgBox . Show ( "Error" , "Failed to enumerate keys:\n " + ex . Message ) ;
130
134
}
131
- } catch ( Exception ex ) {
132
- MsgBox . Show ( "Error" , "Failed to enumerate keys:\n " + ex . Message ) ;
133
135
}
134
136
137
+
135
138
IsBusy = false ;
136
139
}
137
140
}
0 commit comments