597 lines
27 KiB
Plaintext
597 lines
27 KiB
Plaintext
CERT_KEY_PROV_INFO_PROP_ID is needed by boyd's code
|
||
typedef struct _CRYPT_KEY_PROV_INFO {
|
||
LPWSTR pwszContainerName;
|
||
LPWSTR pwszProvName;
|
||
DWORD dwProvType;
|
||
DWORD dwFlags;
|
||
DWORD cProvParam;
|
||
PCRYPT_KEY_PROV_PARAM rgProvParam;
|
||
DWORD dwKeySpec;
|
||
} CRYPT_KEY_PROV_INFO, *PCRYPT_KEY_PROV_INFO;
|
||
the above comes from WinCrypt.h.
|
||
|
||
|
||
// This section covers how we interact with the Xenroll and CertServer
|
||
// COM objects. It shows a line of action [documenting ALL interaction
|
||
// with have with these COM objects] Main action is in nLocEnrl.cpp
|
||
// and if any line numbers are given they refer to check in date 4-12-98 v14 in Slim]
|
||
|
||
hr = spICertGetConfig->GetConfig(0, &ConfigString) ;
|
||
Invoke_GetConfig(CComBSTR & {...}, ADMIN_INFO & {...}, IPtr<ICertGetConfig,IID_ICertGetConfig> & {...}) line 2361 + 19 bytes
|
||
callXenroll(char * 0x0233ab5c, char * 0x0012dcf0, int 1, TAGCertStates MD_CERT_ENROLL_ENTERING_DATA, ADMIN_INFO & {...}) line 830 + 17 bytes
|
||
Finish_NewCertWiz(ADMIN_INFO & {...}, CString & {""}) line 701 + 34 bytes
|
||
|
||
==> it will retrieve a ConfigString like "TPOP_DELL\Your Name" <== strange name...
|
||
|
||
|
||
|
||
hr = x->put_GenKeyFlags( (DWORD) CRYPT_EXPORTABLE); // in VB use '1' its value see wincrypt.h
|
||
&
|
||
hr = x->put_ProviderType( pdwType ); // we need PROV_RSA_SCHANNEL but use PROV_RSA_FULL
|
||
in the code there is a popup that will ask which to use
|
||
&
|
||
hr = x->put_HashAlgorithmWStr(L"MD5");
|
||
|
||
SeeIf_keysExport_or_MD5(ADMIN_INFO & {...}, int 1, IPtr<IEnroll,IID_IEnroll> & {...}) line 2430 + 10 bytes
|
||
callXenroll(char * 0x0233ab5c, char * 0x0012dcf0, int 1, TAGCertStates MD_CERT_ENROLL_ENTERING_DATA, ADMIN_INFO & {...}) line 924 + 20 bytes
|
||
Finish_NewCertWiz(ADMIN_INFO & {...}, CString & {""}) line 701 + 34 bytes
|
||
|
||
DWORD dwFlags = 0;
|
||
hr = x->get_MyStoreFlags( &dwFlags);
|
||
|
||
dwFlags &= ~CERT_SYSTEM_STORE_LOCATION_MASK ;
|
||
dwFlags |= CERT_SYSTEM_STORE_LOCAL_MACHINE ;
|
||
|
||
hr = x->put_MyStoreFlags( dwFlags);
|
||
ForceCertIntoLocalMachineMyStore(ADMIN_INFO & {...}, IPtr<IEnroll,IID_IEnroll> & {...}) line 230 + 12 bytes
|
||
callXenroll(char * 0x0233ab5c, char * 0x0012dcf0, int 1, TAGCertStates MD_CERT_ENROLL_ENTERING_DATA, ADMIN_INFO & {...}) line 975 + 16 bytes
|
||
Finish_NewCertWiz(ADMIN_INFO & {...}, CString & {""}) line 701 + 34 bytes
|
||
|
||
|
||
hr = x->createPKCS10WStr(IN BSTR2LPCWSTR(DN), IN BSTR2LPCWSTR(Usage), OUT &PKCS10Blob);
|
||
// line: 1178 in nLocEnrl.cpp [as of date 4-12-98 v14 in Slim]
|
||
DN="CN=localhost.explorer.TPOP.microsoft.com;O=tjpExploration Air;OU=IIS;C=US;S=Washington;L=Seattle"
|
||
Usage="1.3.6.1.5.5.7.3.1,1.3.6.1.4.1.311.10.3.1"
|
||
callXenroll(char * 0x0233ab5c, char * 0x0012dcf0, int 1, TAGCertStates MD_CERT_ENROLL_ENTERING_DATA, ADMIN_INFO & {...}) line 1178 + 36 bytes
|
||
Finish_NewCertWiz(ADMIN_INFO & {...}, CString & {""}) line 701 + 34 bytes
|
||
DoWizardFinish(ADMIN_INFO & {...}) line 282 + 14 bytes
|
||
|
||
WCHAR* wszContainerName=0;
|
||
hr = x->get_ContainerNameWStr( &wszContainerName );
|
||
// after this call wszContainerName is: "f6d013e1-d269-11d1-8ac9-00c04fd42c51"
|
||
GetContainerName_fromXenroll_storeInMetabase(ADMIN_INFO & {...}, IPtr<IEnroll,IID_IEnroll> & {...}) line 2525 + 12 bytes
|
||
callXenroll(char * 0x0233ab5c, char * 0x0012dcf0, int 1, TAGCertStates MD_CERT_ENROLL_ENTERING_DATA, ADMIN_INFO & {...}) line 1184 + 16 bytes
|
||
Finish_NewCertWiz(ADMIN_INFO & {...}, CString & {""}) line 701 + 34 bytes
|
||
|
||
//////////////////////////////////////////////////////////////////
|
||
// The following will free the blob and set the byte count
|
||
// to Zero for safety (if the upper layer still has a ptr to it).
|
||
//////////////////////////////////////////////////////////////////
|
||
if(PKCS10Blob.pbData) {
|
||
if (bWeAllocated_PKCS10Blob_pbData) // if we allocate it, call XFree
|
||
XFree(PKCS10Blob.pbData); // otherwise Xenroll allocated
|
||
else // it so call 'freeRequestInfoBlob'
|
||
x->freeRequestInfoBlob(PKCS10Blob);
|
||
|
||
AddBeginEndWrappers(_CRYPTOAPI_BLOB & {...}, int 0, CComBSTR & {...}, unsigned long & 258, ADMIN_INFO & {...}, IPtr<IEnroll,IID_IEnroll> & {...}) line 2908 + 18 bytes
|
||
callXenroll(char * 0x0233ab5c, char * 0x0012dcf0, int 1, TAGCertStates MD_CERT_ENROLL_ENTERING_DATA, ADMIN_INFO & {...}) line 1247 + 44 bytes
|
||
Finish_NewCertWiz(ADMIN_INFO & {...}, CString & {""}) line 701 + 34 bytes
|
||
|
||
hr = spICertRequest->Submit(SubmitFlag, bstrPKCS10, Attributes, ConfigString,
|
||
OUT &DispositionCode );
|
||
//SubmitFlag=258,for binary data in BSTR bstrPKCS10
|
||
//Attributes=""
|
||
//ConfigString="TPOP_DELL\Your Name" [the string we queried earlier]
|
||
//DispositionCode=3 after the successful operation
|
||
Send2CA(CComBSTR & {...}, CComBSTR & {...}, unsigned long & 258, CComBSTR & {...}, ADMIN_INFO & {...}, IPtr<ICertRequest,IID_ICertRequest> & {...}) line 3272 + 45 bytes
|
||
callXenroll(char * 0x0233ab5c, char * 0x0012dcf0, int 1, TAGCertStates MD_CERT_ENROLL_ENTERING_DATA, ADMIN_INFO & {...}) line 1353 + 38 bytes
|
||
Finish_NewCertWiz(ADMIN_INFO & {...}, CString & {""}) line 701 + 34 bytes
|
||
|
||
|
||
hr = spICertRequest->GetCertificate(GetCertFlag, OUT &bstrPKCS7Certificate);
|
||
//GetCertFlag=257,because we want a base64 string output
|
||
Send2CA(CComBSTR & {...}, CComBSTR & {...}, unsigned long & 258, CComBSTR & {...}, ADMIN_INFO & {...}, IPtr<ICertRequest,IID_ICertRequest> & {...}) line 3355 + 21 bytes
|
||
callXenroll(char * 0x0233ab5c, char * 0x0012dcf0, int 1, TAGCertStates MD_CERT_ENROLL_ENTERING_DATA, ADMIN_INFO & {...}) line 1353 + 38 bytes
|
||
Finish_NewCertWiz(ADMIN_INFO & {...}, CString & {""}) line 701 + 34 bytes
|
||
|
||
|
||
hr = x->put_RootStoreNameWStr (wszName);
|
||
//wszName="CA"
|
||
callXenroll(char * 0x0233ab5c, char * 0x0012dcf0, int 1, TAGCertStates MD_CERT_ENROLL_ENTERING_DATA, ADMIN_INFO & {...}) line 1414 + 18 bytes
|
||
Finish_NewCertWiz(ADMIN_INFO & {...}, CString & {""}) line 701 + 34 bytes
|
||
DoWizardFinish(ADMIN_INFO & {...}) line 282 + 14 bytes
|
||
|
||
hr = x->acceptPKCS7Blob( &PKCS7Blob );
|
||
callXenroll(char * 0x0233ab5c, char * 0x0012dcf0, int 1, TAGCertStates MD_CERT_ENROLL_ENTERING_DATA, ADMIN_INFO & {...}) line 1822 + 15 bytes
|
||
Finish_NewCertWiz(ADMIN_INFO & {...}, CString & {""}) line 701 + 34 bytes
|
||
DoWizardFinish(ADMIN_INFO & {...}) line 282 + 14 bytes
|
||
|
||
if ( (PKCS7Blob.cbData == 0)
|
||
|| ((pCertContext = x->getCertContextFromPKCS7(
|
||
IN /*PCRYPT_DATA_BLOB*/ &PKCS7Blob )) == 0))
|
||
callXenroll(char * 0x0233ab5c, char * 0x0012dcf0, int 1, TAGCertStates MD_CERT_ENROLL_ENTERING_DATA, ADMIN_INFO & {...}) line 1845 + 21 bytes
|
||
Finish_NewCertWiz(ADMIN_INFO & {...}, CString & {""}) line 701 + 34 bytes
|
||
DoWizardFinish(ADMIN_INFO & {...}) line 282 + 14 bytes
|
||
|
||
|
||
Now I am trying: http://pkstl1/CertSrv/CertEnroll/krenroll.asp
|
||
=== its another cert server. We get the same error 0x80093005
|
||
|
||
|
||
==For this CertServer: http://certsrv/CertSrv/CertEnroll/ceaccept.asp
|
||
==This is what we get back from createPKCS10 when doing a renewal request
|
||
==its pretty big: >4098 chars. When I give this to CertServer I get an error code
|
||
==of 0x80093005
|
||
|
||
-----BEGIN NEW CERTIFICATE REQUEST-----
|
||
MIIMHQYJKoZIhvcNAQcCoIIMDjCCDAoCAQExCzAJBgUrDgMCGgUAMIIGngYJKoZI
|
||
hvcNAQcBoIIGjwSCBoswggaHMIIGNQIBADAAMFwwDQYJKoZIhvcNAQEBBQADSwAw
|
||
SAJBALSnpRBe3rvyzH7fFaNYhI/bm8jhFX5/Fy5ySGqJoVlVAG1eW2EiGhhITW46
|
||
bKSZFvmItHw7s/U5q6NRiMvHpLcCAwEAAaCCBc4wIAYKKwYBBAGCNwIBDjESMBAw
|
||
DgYDVR0PAQH/BAQDAgHAMIIBSwYKKwYBBAGCNw0CAjGCATswggE3HoGoAE0AaQBj
|
||
AHIAbwBzAG8AZgB0ACAAQgBhAHMAZQAgAEMAcgB5AHAAdABvAGcAcgBhAHAAaABp
|
||
AGMAIABQAHIAbwB2AGkAZABlAHIAIAB2ADEALgAwAAAAAAAFAAwBAAAIAAAAAAAA
|
||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAFAAAAFADQABTcoAAgAGQAbABs
|
||
AAAADQADAQAADFNSMUEASAAAA4GJAIhSraSWBd0MUKT+LrIzrFo677g6+iRcJlNu
|
||
EpqWe/lKpcYBMgqHfTYjHqqLQpYPLgEkQXOlaUB1HJQbQQl0qjNXrYC+NMsqxb4I
|
||
vx/bfglMC0tj2niAkpKZxmgE9K+OYIRvHn5DNu0FKSr+fOd9MpEstUFNCqSoyslZ
|
||
3tEnCM9WAAAAAAAAAAAwggRZBgkrBgEEAYI3DQExggRKMIIERjCCA/CgAwIBAgII
|
||
Gb0Z4QAABrEwDQYJKoZIhvcNAQEEBQAwgZMxCzAJBgNVBAYTAlVTMQswCQYDVQQI
|
||
EwJXQTEQMA4GA1UEBxMHUmVkbW9uZDETMBEGA1UEChMKV2luZG93cyBOVDEbMBkG
|
||
A1UECxMSRGlzdHJpYnV0ZWQgU3lzdGVtMTMwMQYDVQQDEypNaWNyb3NvZnQgQ2Vy
|
||
dGlmaWNhdGUgU2VydmVyIFRlc3QgR3JvdXAgQ0EwHhcNOTgwNDA2MjE0MTIwWhcN
|
||
OTgxMDE0MTgxMTI4WjBzMQswCQYDVQQGEwJVUzETMBEGA1UECBMKV2FzaGluZ3Rv
|
||
bjEQMA4GA1UEBxMHUmVkbW9uZDESMBAGA1UEChMJTWljcm9zb2Z0MQwwCgYDVQQL
|
||
EwNJSVMxGzAZBgNVBAMTEmJveWQubWljcm9zb2Z0LmNvbTBcMA0GCSqGSIb3DQEB
|
||
AQUAA0sAMEgCQQD+vFXGy/7SkbMUdugDhptekRIT4n6Dw5OKUygYgC6w7IcWcxUk
|
||
SAYO4QZVbuMoCzN2OAuoGqIQ3i/k/n0T+cvbAgMBAAGjggJFMIICQTALBgNVHQ8E
|
||
BAMCADgwHwYDVR0lBBgwFgYIKwYBBQUHAwEGCisGAQQBgjcKAwEwgc8GA1UdIwSB
|
||
xzCBxIAUt4UyEbgWWjom4bdQ2Y501IPyIkWhgZmkgZYwgZMxCzAJBgNVBAYTAlVT
|
||
MQswCQYDVQQIEwJXQTEQMA4GA1UEBxMHUmVkbW9uZDETMBEGA1UEChMKV2luZG93
|
||
cyBOVDEbMBkGA1UECxMSRGlzdHJpYnV0ZWQgU3lzdGVtMTMwMQYDVQQDEypNaWNy
|
||
b3NvZnQgQ2VydGlmaWNhdGUgU2VydmVyIFRlc3QgR3JvdXAgQ0GCEBETYQCqAP6F
|
||
EdFEueIoFGMwgb0GA1UdHwSBtTCBsjBWoFSgUoZQaHR0cDovL0NFUlRTUlYvQ2Vy
|
||
dFNydi9DZXJ0RW5yb2xsL01pY3Jvc29mdCBDZXJ0aWZpY2F0ZSBTZXJ2ZXIgVGVz
|
||
dCBHcm91cCBDQS5jcmwwWKBWoFSGUmZpbGU6Ly9cXENFUlRTUlZcQ2VydFNydlxD
|
||
ZXJ0RW5yb2xsXE1pY3Jvc29mdCBDZXJ0aWZpY2F0ZSBTZXJ2ZXIgVGVzdCBHcm91
|
||
cCBDQS5jcmwwCQYDVR0TBAIwADB0BggrBgEFBQcBAQRoMGYwZAYIKwYBBQUHMAKG
|
||
WGh0dHA6Ly9DRVJUU1JWL0NlcnRTcnYvQ2VydEVucm9sbC9DRVJUU1JWX01pY3Jv
|
||
c29mdCBDZXJ0aWZpY2F0ZSBTZXJ2ZXIgVGVzdCBHcm91cCBDQS5jcnQwDQYJKoZI
|
||
hvcNAQEEBQADQQAMUda1ACOj+imFQF3z/7ThA+LEB3Inhy6wX5Dn7gK4+lDXiijo
|
||
qWZOD29ahmYQ+z+Lx6TO0zeVK4SBBbGm6h6fMAkGBSsOAwIdBQADQQCUpydHmmrC
|
||
ukAadubMOJzboBM7fhn0Ip4ketWSOmkZ15Vp39VFMcfXkwupuKe//6WGfqBo4eX5
|
||
f8cpOZ7QDdB+oIIESjCCBEYwggPwoAMCAQICCBm9GeEAAAaxMA0GCSqGSIb3DQEB
|
||
BAUAMIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCV0ExEDAOBgNVBAcTB1JlZG1v
|
||
bmQxEzARBgNVBAoTCldpbmRvd3MgTlQxGzAZBgNVBAsTEkRpc3RyaWJ1dGVkIFN5
|
||
c3RlbTEzMDEGA1UEAxMqTWljcm9zb2Z0IENlcnRpZmljYXRlIFNlcnZlciBUZXN0
|
||
IEdyb3VwIENBMB4XDTk4MDQwNjIxNDEyMFoXDTk4MTAxNDE4MTEyOFowczELMAkG
|
||
A1UEBhMCVVMxEzARBgNVBAgTCldhc2hpbmd0b24xEDAOBgNVBAcTB1JlZG1vbmQx
|
||
EjAQBgNVBAoTCU1pY3Jvc29mdDEMMAoGA1UECxMDSUlTMRswGQYDVQQDExJib3lk
|
||
Lm1pY3Jvc29mdC5jb20wXDANBgkqhkiG9w0BAQEFAANLADBIAkEA/rxVxsv+0pGz
|
||
FHboA4abXpESE+J+g8OTilMoGIAusOyHFnMVJEgGDuEGVW7jKAszdjgLqBqiEN4v
|
||
5P59E/nL2wIDAQABo4ICRTCCAkEwCwYDVR0PBAQDAgA4MB8GA1UdJQQYMBYGCCsG
|
||
AQUFBwMBBgorBgEEAYI3CgMBMIHPBgNVHSMEgccwgcSAFLeFMhG4Flo6JuG3UNmO
|
||
dNSD8iJFoYGZpIGWMIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCV0ExEDAOBgNV
|
||
BAcTB1JlZG1vbmQxEzARBgNVBAoTCldpbmRvd3MgTlQxGzAZBgNVBAsTEkRpc3Ry
|
||
aWJ1dGVkIFN5c3RlbTEzMDEGA1UEAxMqTWljcm9zb2Z0IENlcnRpZmljYXRlIFNl
|
||
cnZlciBUZXN0IEdyb3VwIENBghARE2EAqgD+hRHRRLniKBRjMIG9BgNVHR8EgbUw
|
||
gbIwVqBUoFKGUGh0dHA6Ly9DRVJUU1JWL0NlcnRTcnYvQ2VydEVucm9sbC9NaWNy
|
||
b3NvZnQgQ2VydGlmaWNhdGUgU2VydmVyIFRlc3QgR3JvdXAgQ0EuY3JsMFigVqBU
|
||
hlJmaWxlOi8vXFxDRVJUU1JWXENlcnRTcnZcQ2VydEVucm9sbFxNaWNyb3NvZnQg
|
||
Q2VydGlmaWNhdGUgU2VydmVyIFRlc3QgR3JvdXAgQ0EuY3JsMAkGA1UdEwQCMAAw
|
||
dAYIKwYBBQUHAQEEaDBmMGQGCCsGAQUFBzAChlhodHRwOi8vQ0VSVFNSVi9DZXJ0
|
||
U3J2L0NlcnRFbnJvbGwvQ0VSVFNSVl9NaWNyb3NvZnQgQ2VydGlmaWNhdGUgU2Vy
|
||
dmVyIFRlc3QgR3JvdXAgQ0EuY3J0MA0GCSqGSIb3DQEBBAUAA0EADFHWtQAjo/op
|
||
hUBd8/+04QPixAdyJ4cusF+Q5+4CuPpQ14oo6KlmTg9vWoZmEPs/i8ekztM3lSuE
|
||
gQWxpuoenzGCAQYwggECAgEBMIGgMIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMC
|
||
V0ExEDAOBgNVBAcTB1JlZG1vbmQxEzARBgNVBAoTCldpbmRvd3MgTlQxGzAZBgNV
|
||
BAsTEkRpc3RyaWJ1dGVkIFN5c3RlbTEzMDEGA1UEAxMqTWljcm9zb2Z0IENlcnRp
|
||
ZmljYXRlIFNlcnZlciBUZXN0IEdyb3VwIENBAggZvRnhAAAGsTAJBgUrDgMCGgUA
|
||
MA0GCSqGSIb3DQEBAQUABEDMqxiFfAXZ11mtHC2/qRlbB2jtU4bW8EKOWpzOCkig
|
||
wsztKwHdqXT0fznLWG790nGfFk9IJ440dAnBSGy4P6J0
|
||
|
||
-----END NEW CERTIFICATE REQUEST-----
|
||
|
||
REM Enabling debug
|
||
REM
|
||
REM If using the NT command shell use:
|
||
\\tpophp\public\registry -s -k"HKEY_CURRENT_USER\Software\Microsoft\CertMap\Debug" -n Enabled -v "TRUE"
|
||
\\tpophp\public\registry -s -k"HKEY_CURRENT_USER\Software\Microsoft\CertMap\Debug" -n Mode -v "Aging"
|
||
|
||
REM
|
||
REM If you use mks shell use
|
||
REM registry -s -k"HKEY_CURRENT_USER\\Software\\Microsoft\\CertMap\\Debug" -n Enabled -v "TRUE"
|
||
REM registry -s -k"HKEY_CURRENT_USER\\Software\\Microsoft\\CertMap\\Debug" -n Mode -v "Aging"
|
||
|
||
[D:/work/test] ./mdutil enum w3svc/info
|
||
MajorVersion : [S] (DWORD) 0x4={4}
|
||
MinorVersion : [S] (DWORD) 0x0={0}
|
||
ServerPlatform : [S] (DWORD) 0x1={1}
|
||
Capabilities : [S] (DWORD) 0xfbf={4031} <<===
|
||
ServerConfigurationInfo : [S] (DWORD) 0xe={14}
|
||
KeyType : [S] (STRING) "IIsWebInfo"
|
||
|
||
The Capabilities setting will give us the answer to whether this
|
||
web server is International or Domestic and allow us to Fix the #Bits
|
||
in the key.
|
||
|
||
After running CertWiz you can expect to see this with MDutil. The lines
|
||
with ==> are added by CertWiz
|
||
|
||
D:\work\test>mdutil enum w3svc\1
|
||
ServerSize : [IS] (DWORD) 0x1={Medium}
|
||
Win32Error : [S] (DWORD) 0x0={0}
|
||
6269 : [F] (DWORD) 0x1234={4660}
|
||
ServerState : [S] (DWORD) 0x4={Stopped}
|
||
5534 : [IS] (DWORD) 0x0={0}
|
||
5532 : [IS] (DWORD) 0x352742d0={891765456}
|
||
5533 : [IS] (DWORD) 0xd={13}
|
||
5531 : [IS] (DWORD) 0xd0ddd00d={-790769651}
|
||
ServerComment : [IS] (STRING) "Default Web Site"
|
||
KeyType : [S] (STRING) "IIsWebServer"
|
||
5513 : [IS] (STRING) "Tom"
|
||
5507 ==> : [IS] (STRING) "{9D11875D-D144-E285-0F78-C6732D7E1483}"
|
||
5511 ==> : [IS] (STRING) "MY"
|
||
5506 ==> : [IS] (BINARY) 0xa1 32 6e 8d 3e 4c ea 5c c6 c2 d0 18 65 17 d7 de 3e a3 ed 53
|
||
ServerBindings : [IS] (MULTISZ) ":80:"
|
||
SecureBindings : [IS] (MULTISZ) ":443:"
|
||
|
||
|
||
|
||
SysAllocStringLen can have embedded nulls use:
|
||
|
||
BSTR SysAllocStringLen( OLECHAR FAR* pch, unsigned int cch )
|
||
|
||
|
||
|
||
|
||
This version of MsgBox uses the string resource with the ID [nIDPrompt] to
|
||
display a message in the message box. The associated Help page is found
|
||
through the value of nIDHelp. If the default value of nIDHelp is
|
||
used (<28> 1), the string resource ID, nIDPrompt, is used for the Help context.
|
||
For more information about defining Help contexts, see the article Help
|
||
Topics in Visual C++ Programmer's Guide and Technical Note 28.
|
||
|
||
This version of MsgBox uses the string resource with the ID [nIDPrompt] to
|
||
// when doing key ring import we ran into trouble when we tried to do a ViewCert
|
||
// and passed in the cert pointer: here is the code from NKMuxPg.cpp near ln 1258
|
||
if (pCertContext!=0)
|
||
{
|
||
|
||
if (YesNoMsgBox(
|
||
|
||
Easy::Load(szResourceStr,
|
||
IDS_WOULD_YOU_LIKE_TO_VIEW_THE_CERTIFICATE_THAT_YOU_JUST_IMPORTED
|
||
// "Would you like to view the Certificate that you just imported?"
|
||
)))
|
||
{
|
||
|
||
ViewACert( pCertContext );
|
||
// after hitting break in the debugger we get the following stack dump
|
||
NTDLL! 77f98bb3()
|
||
MSAFD! 77514dd7()
|
||
WS2_32! 7756357b()
|
||
WSOCK32! 775811d7()
|
||
|
||
|
||
// as we call FinCertImport::OnWizardFinish() that will take the filename
|
||
// c:/tmp/newcert318.cer and process it in Xenroll to finalize the OOB
|
||
// this is the stack
|
||
|
||
CFinCertImport::OnWizardFinish() line 212
|
||
MFC42! 5f46f278()
|
||
MFC42! 5f40230b()
|
||
MFC42! 5f402294()
|
||
MFC42! 5f40221f()
|
||
AfxWndProcDllStatic(HWND__ * 0x000c0a0c, unsigned int 78, unsigned int 0, long 1237948) line 57 + 21 bytes
|
||
USER32! 77e753d0()
|
||
USER32! 77e762d5()
|
||
COMCTL32! 779f709a()
|
||
COMCTL32! 77a035a6()
|
||
COMCTL32! 77a30fd1()
|
||
COMCTL32! 77a31e74()
|
||
USER32! 77e87983()
|
||
USER32! 77e8be30()
|
||
USER32! 77e75bc1()
|
||
MFC42! 5f402783()
|
||
MFC42! 5f402322()
|
||
MFC42! 5f402294()
|
||
MFC42! 5f40221f()
|
||
AfxWndProcDllStatic(HWND__ * 0x00350812, unsigned int 273, unsigned int 12325, long 3213652) line 57 + 21 bytes
|
||
USER32! 77e753d0()
|
||
USER32! 77e762d5()
|
||
USER32! 77e8f3d1()
|
||
USER32! 77e91486()
|
||
USER32! 77e7387f()
|
||
USER32! 77e79704()
|
||
USER32! 77e8ddab()
|
||
|
||
|
||
// when we run xenroll to finish an OOB and we get a error this is typically
|
||
// what the call stack will be
|
||
|
||
DisplayError_ErrorReturn(long -2146885628, ADMIN_INFO & {...}, char * 0x00c43854) line 3796
|
||
DisplayError_ErrorReturn(long -2146885628, ADMIN_INFO & {...}, unsigned int 4068, TAGCertStates MD_CERT_ENROLL_RECVED_ERR_FROM_ENROLL) line 3879 + 17 bytes
|
||
callXenroll(char * 0x5f4c86bc, char * 0x0012e0f4, int 4, TAGCertStates MD_CERT_ENROLL_PROCESSING_PKCS7_OUTOFBAND, ADMIN_INFO & {...}) line 1652 + 23 bytes
|
||
Finish_FinishOOBCertWiz(ADMIN_INFO & {...}, CString & {""}) line 519 + 34 bytes
|
||
CFinCertImport::OnWizardFinish() line 263 + 26 bytes
|
||
MFC42! 5f46f278()
|
||
MFC42! 5f40230b()
|
||
MFC42! 5f402294()
|
||
MFC42! 5f40221f()
|
||
AfxWndProcDllStatic(HWND__ * 0x000c0a24, unsigned int 78, unsigned int 0, long 1238152) line 57 + 21 bytes
|
||
USER32! 77e753d0()
|
||
USER32! 77e762d5()
|
||
COMCTL32! 779f709a()
|
||
COMCTL32! 77a035a6()
|
||
COMCTL32! 77a30fd1()
|
||
COMCTL32! 77a31e74()
|
||
USER32! 77e87983()
|
||
USER32! 77e8be30()
|
||
|
||
|
||
|
||
The second form of the function uses the string resource with the ID nIDPrompt to display a message in the message box. The associated Help page is found through the value of nIDHelp. If the default value of nIDHelp is used (<28> 1), the string resource ID, nIDPrompt, is used for the Help context. For more information about defining Help contexts, see the article Help Topics in Visual C++ Programmer's Guide and Technical Note 28.
|
||
|
||
|
||
|
||
|
||
|
||
00125DCC 30 82 04 2D 30 82 03 D7 A0 0<>.-0<>.נ
|
||
00125DD5 03 02 01 02 02 08 06 A6 C6 .......<2E><>
|
||
00125DDE 5C 00 00 05 BD 30 0D 06 09 \...<2E>0..
|
||
00125DE7 2A 86 48 86 F7 0D 01 01 04 *<2A>H<EFBFBD><48>....
|
||
00125DF0 05 00 30 81 93 31 0B 30 09 ..0.<2E>1.0
|
||
00125DF9 06 03 55 04 06 13 02 55 53 ..U....US
|
||
00125E02 31 0B 30 09 06 03 55 04 08 1.0 ..U..
|
||
00125E0B 13 02 57 41 31 10 30 0E 06 ..WA1.0..
|
||
00125E14 03 55 04 07 13 07 52 65 64 .U....Red
|
||
00125E1D 6D 6F 6E 64 31 13 30 11 06 mond1.0..
|
||
00125E26 03 55 04 0A 13 0A 57 69 6E .U....Win
|
||
00125E2F 64 6F 77 73 20 4E 54 31 1B dows NT1.
|
||
00125E38 30 19 06 03 55 04 0B 13 12 0...U....
|
||
00125E41 44 69 73 74 72 69 62 75 74 Distribut
|
||
00125E4A 65 64 20 53 79 73 74 65 6D ed System
|
||
00125E53 31 33 30 31 06 03 55 04 03 1301..U..
|
||
00125E5C 13 2A 4D 69 63 72 6F 73 6F .*Microso
|
||
00125E65 66 74 20 43 65 72 74 69 66 ft Certif
|
||
00125E6E 69 63 61 74 65 20 53 65 72 icate Ser
|
||
00125E77 76 65 72 20 54 65 73 74 20 ver Test
|
||
00125E80 47 72 6F 75 70 20 43 41 30 Group CA0
|
||
|
||
"CertificateAuthority.Request" is the request object that we use in VB
|
||
0012D5E8 F0 F3 AF 98 24 55 D0 11 88 12 00
|
||
0012D5F3 A0 C9 03 B8 3C
|
||
|
||
Using this code:
|
||
if (Util::PeekBool(++cStepCnt > 0) // a failure here will have cnt=1
|
||
&& (hr=E_FAIL) // trick so that we get a nice error code if the bstr extract fails
|
||
&& bstr
|
||
|
||
&& Util::PeekBool(++cStepCnt > 0) // a failure here will have cnt=2, etc...
|
||
&& SUCCEEDED( hr=convertPKCS7_BSTR2Blob( IN /*CComBSTR& */ bstrPKCS7Contents,
|
||
OUT /*CRYPT_DATA_BLOB&*/ PKCS7Blob) )
|
||
|
||
&& Util::PeekBool(++cStepCnt > 0)
|
||
&& SUCCEEDED( hr = x->acceptPKCS7Blob( IN /*PCRYPT_DATA_BLOB*/ &PKCS7Blob))
|
||
|
||
|
||
I am getting a HR of 0x80093009 <-- a failure from the acceptPKCS7Blob
|
||
any ideas? I believe that I imported and decoded
|
||
it properly, I will show the cert below also
|
||
as an attachment.
|
||
>> I think that the code is sound but the Cert Server gave
|
||
>> me a bad cert file. BECAUSE if I click on the pkcs7.cer
|
||
>> file under NT's fileExplorer it says "Invalid Security Cert File"
|
||
|
||
|
||
PKCS7Blob.cbData = 1748 The PKCS7Blob.pbData = 0x00128864
|
||
Here is the first part of my PKCS7Blob:
|
||
|
||
00128864 50 44 FC 77 D8 D1 18 00 00 00 14 PD<50>w<EFBFBD><77>.....
|
||
0012886F 00 E0 D1 18 00 E8 88 12 00 2B E8 .<2E><>..<2E><>..+<2B>
|
||
0012887A FB 77 81 E8 FB 77 48 05 14 00 00 <20>w.<2E><>wH....
|
||
00128885 00 14 00 E0 D1 18 00 50 10 4B 00 ...<2E><>..P.K.
|
||
00128890 38 00 00 00 48 88 12 00 C0 D6 18 8...H<>..<2E><>.
|
||
0012889B 00 3C 89 12 00 50 44 FC 77 68 2D .<<3C>..PD<50>wh-
|
||
001288A6 F9 77 FF FF FF FF 4C 89 12 00 37 <20>w<EFBFBD><77><EFBFBD><EFBFBD>L<EFBFBD>..7
|
||
001288B1 FF FA 77 00 00 14 00 61 00 00 50 <20><>w....a..P
|
||
001288BC 01 D6 18 00 00 00 14 00 70 F3 14 .<2E>......p<>.
|
||
001288C7 00 00 00 00 00 70 89 12 00 00 00 .....p<>....
|
||
001288D2 14 00 AD 00 FB 77 80 F3 14 00 F8 ..<2E>.<2E>w<EFBFBD><77>..<2E>
|
||
|
||
|
||
|
||
|
||
|
||
0018CAD0 30 82 01 74 30 82 01 22 02 01 00 0<>.t0<74>."...
|
||
0018CADB 30 81 85 31 28 30 26 06 03 55 04 0.<2E>1(0&..U.
|
||
0018CAE6 03 13 1F 77 77 77 2E 32 54 50 4F ...www.2TPO
|
||
0018CAF1 50 44 45 4C 4C 2E 64 6E 73 2E 6D PDELL.dns.m
|
||
0018CAFC 69 63 72 6F 73 6F 66 74 2E 63 6F icrosoft.co
|
||
0018CB07 6D 31 12 30 10 06 03 55 04 0A 13 m1.0...U...
|
||
0018CB12 09 4D 69 63 72 6F 73 6F 66 74 31 Microsoft1
|
||
0018CB1D 11 30 0F 06 03 55 04 0B 13 08 49 .0...U....I
|
||
0018CB28 49 53 44 65 76 32 32 31 0B 30 09 ISDev221.0
|
||
0018CB33 06 03 55 04 06 13 02 55 53 31 13 ..U....US1.
|
||
0018CB3E 30 11 06 03 55 04 08 13 0A 57 61 0...U....Wa
|
||
0018CB49 73 68 69 6E 67 74 6F 6E 31 10 30 shington1.0
|
||
0018CB54 0E 06 03 55 04 07 13 07 52 65 64 ...U....Red
|
||
0018CB5F 6D 6F 6E 64 30 5C 30 0D 06 09 2A mond0\0.. *
|
||
0018CB6A 86 48 86 F7 0D 01 01 01 05 00 03 <20>H<EFBFBD><48>.......
|
||
0018CB75 4B 00 30 48 02 41 00 DF 81 A8 A9 K.0H.A.<2E>.<2E><>
|
||
0018CB80 7A 1A E6 0F A9 66 49 6E 6A 65 A1 z.<2E>.<2E>fInje<6A>
|
||
0018CB8B E2 2E A5 8E 89 D5 4D E0 91 3D 6C <20>.<2E><><EFBFBD><EFBFBD>M<EFBFBD><4D>=l
|
||
0018CB96 EE 0B E7 52 43 9E CD 2C 15 E7 48 <20>.<2E>RC<52><43>,.<2E>H
|
||
0018CBA1 85 64 A5 2E BD 14 A7 12 D4 56 90 <20>d<EFBFBD>.<2E>.<2E>.<2E>V.
|
||
0018CBAC 40 98 A9 BB 47 09 77 F2 96 FB 33 @<40><><EFBFBD>G w<><77><EFBFBD>3
|
||
0018CBB7 11 40 B0 A2 B1 02 03 01 00 01 A0 .@<40><><EFBFBD>.....<2E>
|
||
0018CBC2 37 30 35 06 0A 2B 06 01 04 01 82 705..+....<2E>
|
||
0018CBCD 37 02 01 0E 31 27 30 25 30 0E 06 7...1'0%0..
|
||
========================================================================
|
||
ActiveX CertWizard Control DLL : CERTMAP
|
||
========================================================================
|
||
|
||
1. Enabling Debugging
|
||
|
||
/////////////////////////////////////////////////////////////////////
|
||
//
|
||
// If using the NT command shell use:
|
||
// registry -s -k"HKEY_CURRENT_USER\Software\Microsoft\CertMap\Debug" -n Enabled -v "TRUE"
|
||
//
|
||
//
|
||
// All you MKS shell users can enable it by doing:
|
||
// registry -s -k"HKEY_CURRENT_USER\\Software\\Microsoft\\CertMap\\Debug" -n Enabled -v "TRUE"
|
||
//
|
||
// [if you want the aging feature that rescans every 12 calls, then
|
||
// you also need to set MODE=Aging]
|
||
//
|
||
// If using the NT command shell use:
|
||
// registry -s -k"HKEY_CURRENT_USER\Software\Microsoft\CertMap\Debug" -n Mode -v "Aging"
|
||
// All you MKS shell users can enable it by doing:
|
||
// registry -s -k"HKEY_CURRENT_USER\\Software\\Microsoft\\CertMap\\Debug"-n Mode -v "Aging"
|
||
//
|
||
// Similarly for you MKS'sh-ers you can use the following command to test if its enabled:
|
||
// registry -p -k"HKEY_CURRENT_USER\\Software\\Microsoft\\CertMap\\Debug"
|
||
// If it says:
|
||
//
|
||
// HKEY_CURRENT_USER\Software\Microsoft\CertMap\Debug Enabled "TRUE"
|
||
//
|
||
// Its enabled!
|
||
/////////////////////////////////////////////////////////////////////
|
||
//
|
||
//
|
||
// Similarly for you MKS'sh-ers you can use the following command to test if its enabled:
|
||
// registry -p -k"HKEY_CURRENT_USER\\Software\\Microsoft\\CertMap\\Debug"
|
||
// If it says:
|
||
//
|
||
// HKEY_CURRENT_USER\Software\Microsoft\CertMap\Debug Enabled "TRUE"
|
||
|
||
If you dont have MKS just use the command regEdt32 to do it.
|
||
|
||
2. Testing the MS Cert Server Online CA
|
||
You need to install at least a stub in the registry. I do it
|
||
with MKS ksh doing the following operations: We need a Reg Key
|
||
named "${CA}\\${MS}" to exist under HKEY_LOCAL_MACHINE. The following
|
||
code will just create it and install a {name=Enabled value=True} setting
|
||
|
||
MS="Microsoft Certificate Server"
|
||
CA="Software\\Microsoft\\CertMap\\Parameters\\Certificate Authorities"
|
||
registry -s -k"HKEY_LOCAL_MACHINE\\${CA}\\${MS}" -n Enabled -v True
|
||
|
||
If you dont have MKS just use the command regEdt32 to do it.
|
||
|
||
|
||
3. What if CertServer is suspected of having problems or is not running?
|
||
|
||
Here is what we do: ReInstall it by:
|
||
[C:/WINNT50/system32] sysocmgr -i:certmast.inf -n
|
||
Then check if it works by running -- this just prints out the config info
|
||
[C:/WINNT50/system32] ./certutil
|
||
Entry 0:
|
||
Name: `Your Name'
|
||
OrgUnit: `Your Unit'
|
||
Organization: `Your Organization'
|
||
Locality: `Your Locality'
|
||
State: `Your State'
|
||
Country: `US'
|
||
Config: `TPOP_DELL\Your Name'
|
||
SignatureCertificate: `TPOP_DELL_Your Name.crt'
|
||
Description: `Your Description.'
|
||
Server: `TPOP_DELL'
|
||
Authority: `Your Name'
|
||
|
||
For debugging you can fire up a testing tool that starts up a shell
|
||
window so that you can watch CertServer requests/tasks while it works:
|
||
[C:/WINNT50/system32] start certsrv -z
|
||
|
||
Note that if you want to run the above command YOU MUST MAKE SURE THAT
|
||
CERT SERVER IS STOPED FIRST SINCE IT WILL START IT AS A SERVICE AND
|
||
YOU CAN ONLY HAVE 1 CERT SERV SERVICE. Use the following to do it:
|
||
[C:/WINNT50/system32] net stop certsvc
|
||
You might notice that we say certSVC not certSVR as in 'start certsrv -z'
|
||
|
||
========================================================================
|
||
ActiveX Control DLL : CERTMAP
|
||
========================================================================
|
||
|
||
ControlWizard has created this project for your CERTMAP OLE Control DLL,
|
||
which contains 1 control.
|
||
|
||
This skeleton project not only demonstrates the basics of writing an OLE
|
||
Control, but is also a starting point for writing the specific features
|
||
of your control.
|
||
|
||
This file contains a summary of what you will find in each of the files
|
||
that make up your CERTMAP OLE Control DLL.
|
||
|
||
certmap.mak
|
||
The Visual C++ project makefile for building your OLE Control.
|
||
|
||
certmap.h
|
||
This is the main include file for the OLE Control DLL. It
|
||
includes other project-specific includes such as resource.h.
|
||
|
||
certmap.cpp
|
||
This is the main source file that contains code for DLL initialization,
|
||
termination and other bookkeeping.
|
||
|
||
certmap.rc
|
||
This is a listing of the Microsoft Windows resources that the project
|
||
uses. This file can be directly edited with the Visual C++ resource
|
||
editor.
|
||
|
||
certmap.def
|
||
This file contains information about the OLE Control DLL that
|
||
must be provided to run with Microsoft Windows.
|
||
|
||
certmap.clw
|
||
This file contains information used by ClassWizard to edit existing
|
||
classes or add new classes. ClassWizard also uses this file to store
|
||
information needed to generate and edit message maps and dialog data
|
||
maps and to generate prototype member functions.
|
||
|
||
certmap.odl
|
||
This file contains the Object Description Language source code for the
|
||
type library of your control.
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
Certmap control:
|
||
|
||
CertCtl.h
|
||
This file contains the declaration of the CCertmapCtrl C++ class.
|
||
|
||
CertCtl.cpp
|
||
This file contains the implementation of the CCertmapCtrl C++ class.
|
||
|
||
CertPpg.h
|
||
This file contains the declaration of the CCertmapPropPage C++ class.
|
||
|
||
CertPpg.cpp
|
||
This file contains the implementation of the CCertmapPropPage C++ class.
|
||
|
||
CertCtl.bmp
|
||
This file contains a bitmap that a container will use to represent the
|
||
CCertmapCtrl control when it appears on a tool palette. This bitmap
|
||
is included by the main resource file certmap.rc.
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
Other standard files:
|
||
|
||
stdafx.h, stdafx.cpp
|
||
These files are used to build a precompiled header (PCH) file
|
||
named stdafx.pch and a precompiled types (PCT) file named stdafx.obj.
|
||
|
||
resource.h
|
||
This is the standard header file, which defines new resource IDs.
|
||
The Visual C++ resource editor reads and updates this file.
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
Other notes:
|
||
|
||
ControlWizard uses "TODO:" to indicate parts of the source code you
|
||
should add to or customize.
|
||
|
||
/////////////////////////////////////////////////////////////////////////////
|
||
|