| ||||
| ||||
День добрый, Есть такой замечательный интерфейсик IRequest, позволяющий получить доступ к встроенному в IIS объекту Request, а имеено требуется доступ к свойству ClientCertificate. В MSDNе написано, что включив "asptlb.h" в проект, нам будет счастье, однако написав следующее: #include <windows.h> #include <asptlb.h> int main(int argc, char* argv[]) { IRequestDictionary* ppDictReturn; IRequest* i; i-> get_ClientCertificate(&ppDictReturn); return 0; } Мы благополучно вылетаем в Access Violation. Я понимаю, что делаю не правильно. Очень прошу помочь понять, с какой стороны нужно подходить к этой задаче. Заранее Благодарен | ||||
Ответы: | ||||
| ||||
Как минимум надо создать объект который этот IRequest реализует. | ||||
| ||||
Спасибо, забылся =) Однако, есть вопрос: Пишем следующее #define _WIN32_WINNT 0x500 #include <windows.h> #include <Asptlb.h> #include <stdio.h> int main () { IUnknown *P=NULL; IRequest *R=NULL; int x=0; IRequestDictionary* Dict=0; CoInitializeEx(0,COINIT_MULTITHREADED); HRESULT res=CoCreateInstance(CLSID_Request,0,CLSCTX_INPROC_SERVER,IID_IRequest,(LPVOID*)&P); if(res!=S_OK) { printf("error 1 %u", res); goto err; } R=(IRequest *)P; res=R->get_ClientCertificate(&Dict); if(res!=S_OK) { printf("error 2 %u", res); goto err2; } if(!Dict) { printf("error 3\n"); goto err2; } printf("Dict=%p",Dict); Dict->get_Count(&x); printf("x=%d\n",x); Dict->Release(); err2: R->Release(); err: CoUninitialize(); return 0; } Объект IRequest создаеться на ура, но метод get_ClientCertificate ничего не возвращает, т.е. возвращает Dict=0. Здесь в чем может быть подвох? | ||||
| ||||
Он создан, но не инициализирован. Этот объект доступен только в ASP страницах. Вот, например, так (из MSDN) <HTML> <HEAD> </HEAD> <BODY> SECURED DOCUMENT<br><br> <H3>Client certificate</H3> <% For Each key in Request.ClientCertificate Response.Write(key & " = " & Request.ClientCertificate(key) & "<BR>") Next %> </BODY> </HTML> | ||||
| ||||
Понятно, что в асп страницах доступ к этому объекту получить непроблема, так как он родной для аспа. Задача то состоит в том, чтобы получить сертификат клиента не из аспа, а, допустим, из CGI скрипта. | ||||
| ||||
И еще раз здравствуйте, Так есть какая-нибудь возможность получить доступ к объекту IRequest не из аспа, или ее нет? | ||||
| ||||
Судя по тому что пишут в MSDN в разделе "IIS COM API for ASP Built-In Objects" можно вызвать из ASP, ASP.NET, COM и ISAPI application. | ||||