2014. 1. 9. 10:24

Get Logon Session (AuthenticationId)

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;

2013. 11. 7. 13:37

run Hyper-V on VMWare

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


2013. 7. 24. 17:38

Convert File Format Using OLE API

<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>

2012. 10. 4. 09:45

resolving C++ Template names

template function 에 break point를 설정하는 경우 bp test<a> ...

'<' 가 redirection character로 인식이 되어 해당 명령이 실패한다.

이 경우 bp @!" test<a> ..." 문자를 이용하면 break point 가 설정이 된다.

물론 x 명령어를 이용하여 해당 function 의 주소값을 입력하는 방안되 있다.

2012. 9. 24. 16:30

JIT Debugging in Session 0

  • 문제
    • JIT 는 target process 와 동일한 session으로 시작한다.
    • Session 0 의 process와 사용자와 interact 가 불가능하므로 해당 debugger도 마찬가지 상황에 직면한다.
  • 해결 방안
    • JIT의 registry 항목에 꼭 실제 debugger 프로그램이 들어가야 하는 것은 아니다.
    • cmd 를 JIT debugger로 설정한다.
    • crash 발생 시 windbg로 target process에 attach 하며 분석을 한다.


2012. 8. 1. 16:04

dynamic create activeX (javascript)

  1. create
    1. new ActiveXObject 를 이용한다.
    2. var object = new  ActiveXObject(progid);
  2. link event
    1. 해당 activeX 가 IProvideClasInfo2 와 IConnnectionPoint 가 구현되어 있어야 한다.
    2. eval("function object::event1( value ) { event_handler(value); }");


2012. 8. 1. 15:57

ATL with IE(HTML)


  1. Implement IObjectSafety
    1. 미 구현 시 script 구간에서 경고 창이 뜬다.
    2. 구현 방법
    3. public IObjectSafetyImpl<Ctest, INTERFACESAFE_FOR_UNTRUSTED_CALLER | INTERFACESAFE_FOR_UNTRUSTED_DATA>,

      COM_INTERFACE_ENTRY(IObjectSafety)

  2. Implement IObjectWithSite
    1. javascript 에서 new ActiveXObject 로 구현 가능하도록 하려면 
    2. 구현 방법
      1. wizard 창에서 선택 가능
  3. Implement IProvideClassInfo2
    1. web page 에서 Event catch 를 위해서 (IConnectionPoint 도 구현해야 된다. wizard 에서 선택 가능)
    2. 구현 방법
      1. public IProvideClassInfo2Impl<&CLSID_<object_name>, NULL,
                                         &LIBID_<project_name>Lib>

         COM_INTERFACE_ENTRY(IProvideClassInfo)
           COM_INTERFACE_ENTRY(IProvideClassInfo2)

    3. url : http://support.microsoft.com/?id=200839>

       



2011. 6. 28. 15:04

problem of InternetReadFile

WinInet 을 사용하는 program 이 문제가 되는 경우가 발생을 하였다.

원인을 파악해 보니

InternetReadlFile(...)

if( GetLastError() == ERROR_IO_PENDING )
...

대략 이런 구조의 코드 였는데 IO PENDING 발생하고 나서 InternetReadFile 의 인자로 되어 있는 buffer와 변수에 Pending 이 완료가 되어도 값이 설정이 안 되는 문제였다.

구현 자체의 문제(Pending 시 처리)로 판단하고 search 를 하였으나 별다른 단서는 찾지 못하고 async 인 경우 InternetReadFile 대신에 InternetReadFileEx 로 변경을 하라는 글들은 찾을 수 있었다.

InternetReadFileEx 인 경우에는 정상적으로 buffer 와 변수가 setting 되었으나 단 하나의 문제의 InternetReadFileExW 를 사용하는 경우에는 구현이 안 되었다는 오류가 나오므로 InternetReadFileExA 만 사용해야 한다. 

 
2011. 3. 30. 13:24

debug diagnostic

http://www.microsoft.com/downloads/en/details.aspx?FamilyID=28bd5941-c458-46f1-b24d-f60151d875a3&displaylang=en

위 링크에서 download 받을 수 있다.

골치 아픈 memory leak 문제가 있었는데, 여러가지 tool 을 사용해 보았다.
하지만 딱히 hint 를 얻지 못한 상태에서 위 tool을 사용하였는데 해결의 실마리를 얻었다.

비단 memory leak 뿐 아니라 postmortem 
 debugging 등 다양한 기능을 제공한다.

detect memory leak 

Leakdiag 와 비교 시 장점은  Report 하는 데이터가 많으며 속도가 빠르다. 특히 LeakDiag는 symbol을 callstack에 매칭하는 작업이 엄청 시간이 걸리는데 반해 이 tool은 그다지 시간 소요가 없다.

  1. 해당 process 선택 하고 context menu 에서 Monitor For Leaks를 선택한다.( 특정 dll을 해당 process로 inject 을 한다.)

     
 2. memory leak 일 발생되는 동작을 반복한다.
 3. 작업이 완료 되면 해당 process를 선택하고 context menu 에서 Create Fumm Userdump 를 선택하여 dump 파일을 생성한다. 
 4. symbol 위치를 설정한다.  Tools -> Options And Settings... (기본적으로 ms symbol 은 설정되는 것 같다. 해당 software의 symbol을 Symbol Search Path For Analysis 에 추가하면 된다.

  5. Advanced Analysis Tab 으로 이동한다.  
Available Analysis Scripts 에서 Memory Pressure Analyzers 를 선택한다.
하단의 Add Data Files 버튼을 클릭하여 아까 생성한 dump 파일을 선택한다.
Start Analysis 버튼을 클릭하면 결과 보고서가 생성된다.


 
2011. 1. 28. 18:45

Install msxml4 Vista by Internet Explorer

msxml4.cab 은 Vista 이상의 OS에서 정상 적으로 설치되지 않는다. MS의 공식적인 자료는 없으나 몇몇 blog 에서 해당 현상의 글을 보았다.
실제 테스트를 해보면 IE가 권리자 권한 인경우 정상동작하나 그렇지 않은 경우 msxml4.dll 이 system32로 복사가 되지 않았다.

msxml6 부터는 cab 파일을 제공하지 않았고,  해당 파일을 cab으로 묶어 테스트 해 보았다. msxml6도 정상 동작하지 않는다.

이 부분을 해결하기 위해서  다른 방법을 사용했다. 

1. IE의 object tag에 EXE를 연결

<body>
<object id="MSXML4"
classid="clsid:88d969c0-f192-11d4-a65f-0040963251e5"
codebase="./msxml4.exe"
STYLE="display: none">
</object>
</body>

위 처럼 작성하면 해당 CLSID 가 존재하지 않는 경우 codebase의 exe를 다운받아 실행한다.

2. NSIS 로 실행파일 제작

RequestExecutionLevel admin
  
  ; Put file there
  File msxml.msi
 
   ExecWait 'msiexec /i $INSTDIR\msxml.msi /passive'   // 자동으로 진행되도록 

   Delete $INSTDIR\msxml.msi
  
SectionEnd ; end the section

NSIS 로 제작한 이유는 admin 권한 획득을 위한 부분 과  msi 를 passive 모드로 실행하기 위함이다.