'text'에 해당되는 글 62건
- 2014.01.09 Get Logon Session (AuthenticationId)
- 2013.11.07 run Hyper-V on VMWare
- 2013.07.24 Convert File Format Using OLE API
- 2012.10.04 resolving C++ Template names
- 2012.09.24 JIT Debugging in Session 0
- 2012.08.01 dynamic create activeX (javascript)
- 2012.08.01 ATL with IE(HTML)
- 2011.06.28 problem of InternetReadFile
- 2011.03.30 debug diagnostic
- 2011.01.28 Install msxml4 Vista by Internet Explorer
Process Explorer를 보면 Logon Session 이란 항목이 존재한다.
하나의 Session 내의 다수의 Logon 계정이 동시 존재할 수 있으며, 그 때마다 다른 Logon Session을 부여 받는다.
RunAs 인 경우가 대표적인 경우이다.
해당 값을 구하는 코드는 다음과 같다.
TOKEN_STATISTICS 구조체의 AuthenticationId member에 해당 값이 존재한다.
PTOKEN_STATISTICS pStatic
if(!::GetTokenInformation(hToken, TokenStatistics, pStatic, buf.size(), &dwLength))
LUID luid = pStatic->AuthenticationId;
1. install Windows 8 on VMWare
2. check "Virtualize Intel VT-x/EPT or AMD-V/RVI" item ( VMware setting / Processors )
3. add hypervisor.cpuid.v0 = "FALSE" item in .vmx
<html>
<head>
<script language="javascript">
var vHwpCtrl;
function PDF_Print()
{
var app = new ActiveXObject("AcroExch.App");
var doc = new ActiveXObject("AcroExch.PDDoc");
doc.open("c:\\Docs\\01\\TestPdf.pdf");
var jso = doc.GetJSObject(); // retun javascript object (only used by javascript)
jso.addWatermarkFromText("aa");
var avDoc = doc.OpenAVDoc("print"); //print pdf file
avDoc.PrintPages(0, 1, 2, 0, 0);
}
function WORD_TO_PDF()
{
var wdExportFormatPDF= 17;
var wordApp = new ActiveXObject("Word.Application");
var wordDocs = wordApp.Documents;
var wordDoc = wordDocs.Open("d:\\test\\TestDoc.doc");
wordDoc.ExportAsFixedFormat("d:\\test\\TestDoc.pdf", wdExportFormatPDF);
}
function EXCEL_TO_PDF()
{
var xlTypePDF = 0;
var excelApp = new ActiveXObject("Excel.Application");
var excelWorkBooks = excelApp.WorkBooks;
var excelWorkBook = excelWorkBooks.Open("d:\\test\\TestXls.xls");
excelWorkBook.ExportAsFixedFormat(xlTypePDF, "d:\\test\\TestXls.pdf");;;
}
function PPT_TO_PDF()
{
var ppFixedFormatTypePDF = 2;
var ppFixedFormatIntentPrint = 2;
var ppSaveAsPDF = 32;
var ppSaveAsPNG = 18;
var pptApp = new ActiveXObject("PowerPoint.Application");
var pptPresentations = pptApp.Presentations;
var pptPresentation = pptPresentations.Open("d:\\test\\TestPpt.ppt");
pptPresentation.SaveAs("d:\\test\\TestPpt.pdf", ppSaveAsPDF ); //convert pdf
pptPresentation.SaveAs("d:\\test\\TestPpt.png", ppSaveAsPNG ); //convert image
//pptPresentation.ExportAsFixedFormat("d:\\test\\TestPpt.pdf", ppFixedFormatTypePDF, ppFixedFormatIntentPrint ); // not working, not find the cause.
}
function HWP_PRINT()
{
hwpCtrl.Open("d:\\test\\TestHwp.hwp");
var vPrintAct = hwpCtrl.CreateAction("Print");
var vPrintSet = vPrintAct.CreateSet();
var vWaterMarkSet = vPrintSet.CreateItemSet("PrintWatermark", "PrintWatermark");
vPrintAct.GetDefault(vPrintSet);
vPrintSet.SetItem("Device", 0);
vWaterMarkSet.SetItem("String" , "bdc");
vPrintAct.Execute(vPrintSet);
}
</script>
</head>
<body onload >
<form name = "HwpControl">
<input type="button" value='PDF' name="job" onclick='PDF_Print()' >
<input type="button" value='WORD' name="job" onclick='WORD_TO_PDF()' >
<input type="button" value='EXCEL' name="job" onclick='EXCEL_TO_PDF()' >
<input type="button" value='PPT' name="job" onclick='PPT_TO_PDF()' >
<input type="button" value='HWP' name="job" onclick='HWP_PRINT()' >
</form>
<object id=hwpCtrl style="left: 0px; top: 0px" height=80% width=80% align=center classid='CLSID:BD9C32DE-3155-4691-8972-097D53B10052' / >
</body>
</html>
template function 에 break point를 설정하는 경우 bp test<a> ...
'<' 가 redirection character로 인식이 되어 해당 명령이 실패한다.
이 경우 bp @!" test<a> ..." 문자를 이용하면 break point 가 설정이 된다.
물론 x 명령어를 이용하여 해당 function 의 주소값을 입력하는 방안되 있다.
- 문제
- JIT 는 target process 와 동일한 session으로 시작한다.
- Session 0 의 process와 사용자와 interact 가 불가능하므로 해당 debugger도 마찬가지 상황에 직면한다.
- 해결 방안
- JIT의 registry 항목에 꼭 실제 debugger 프로그램이 들어가야 하는 것은 아니다.
- cmd 를 JIT debugger로 설정한다.
- crash 발생 시 windbg로 target process에 attach 하며 분석을 한다.
- create
- new ActiveXObject 를 이용한다.
- var object = new ActiveXObject(progid);
- link event
- 해당 activeX 가 IProvideClasInfo2 와 IConnnectionPoint 가 구현되어 있어야 한다.
- eval("function object::event1( value ) { event_handler(value); }");
- Implement IObjectSafety
- 미 구현 시 script 구간에서 경고 창이 뜬다.
- 구현 방법
public IObjectSafetyImpl<Ctest, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>,
COM_INTERFACE_ENTRY(IObjectSafety)
- Implement IObjectWithSite
- javascript 에서 new ActiveXObject 로 구현 가능하도록 하려면
- 구현 방법
- wizard 창에서 선택 가능
- Implement IProvideClassInfo2
- web page 에서 Event catch 를 위해서 (IConnectionPoint 도 구현해야 된다. wizard 에서 선택 가능)
- 구현 방법
public IProvideClassInfo2Impl<&CLSID_<object_name>, NULL,
&LIBID_<project_name>Lib>COM_INTERFACE_ENTRY(IProvideClassInfo)
COM_INTERFACE_ENTRY(IProvideClassInfo2)url : http://support.microsoft.com/?id=200839>
원인을 파악해 보니
InternetReadlFile(...)
if( GetLastError() == ERROR_IO_PENDING )
...
대략 이런 구조의 코드 였는데 IO PENDING 발생하고 나서 InternetReadFile 의 인자로 되어 있는 buffer와 변수에 Pending 이 완료가 되어도 값이 설정이 안 되는 문제였다.
구현 자체의 문제(Pending 시 처리)로 판단하고 search 를 하였으나 별다른 단서는 찾지 못하고 async 인 경우 InternetReadFile 대신에 InternetReadFileEx 로 변경을 하라는 글들은 찾을 수 있었다.
InternetReadFileEx 인 경우에는 정상적으로 buffer 와 변수가 setting 되었으나 단 하나의 문제의 InternetReadFileExW 를 사용하는 경우에는 구현이 안 되었다는 오류가 나오므로 InternetReadFileExA 만 사용해야 한다.
위 링크에서 download 받을 수 있다.
골치 아픈 memory leak 문제가 있었는데, 여러가지 tool 을 사용해 보았다.
하지만 딱히 hint 를 얻지 못한 상태에서 위 tool을 사용하였는데 해결의 실마리를 얻었다.
비단 memory leak 뿐 아니라 postmortem debugging 등 다양한 기능을 제공한다.
detect memory leak
Leakdiag 와 비교 시 장점은 Report 하는 데이터가 많으며 속도가 빠르다. 특히 LeakDiag는 symbol을 callstack에 매칭하는 작업이 엄청 시간이 걸리는데 반해 이 tool은 그다지 시간 소요가 없다.
- 해당 process 선택 하고 context menu 에서 Monitor For Leaks를 선택한다.( 특정 dll을 해당 process로 inject 을 한다.)
3. 작업이 완료 되면 해당 process를 선택하고 context menu 에서 Create Fumm Userdump 를 선택하여 dump 파일을 생성한다.
4. symbol 위치를 설정한다. Tools -> Options And Settings... (기본적으로 ms symbol 은 설정되는 것 같다. 해당 software의 symbol을 Symbol Search Path For Analysis 에 추가하면 된다.
하단의 Add Data Files 버튼을 클릭하여 아까 생성한 dump 파일을 선택한다.
Start Analysis 버튼을 클릭하면 결과 보고서가 생성된다.