겸손한 개발을 위한 자양분

__try __finally 내부의

__try __except 는 쉽게 예상가능하듯 다음과 같은 실행 순서를 갖는다.

 

     __try{

        __try{
            //Exception Occured!
        }
        __except(EXCEPTION_EXECUTE_HANDLER){
           
        }

       

    }
    __finally{
       
    }

 

 

__try 문 내의 또다른 __try 문에서 Exception 이 발생하면,

Exception 핸들러가 먼저 호출될까 __finally 구문이 먼저 호출될까?

헷갈릴 수 있지만, __finally 가 먼저 호출된다.

 

     __try{

        __try{
            //Exception Occured!
        }
        __finally{
           
        }

        // 실행되지 않는 라인
    }
    __except(EXCEPTION_EXECUTE_HANDLER){
       
    }

 

 

__try 문 안에서 return 을 하면,

return 에 대한 처리 순서는 다음과 같다.

 

 void fnA()
{
   
}


void main()
{
    __try{
       
        return fnA();

    }
    __finally{
       
    }
}

만약, 동기화객체를 사용하는 함수에서,

동기화를 풀기위해 __finally 구문을 사용하고,

내부에서 (동일한 동기화객체를 사용하는) 다른 함수를 호출하며 리턴한다면

Lock 에 의한 문제가 발생할 수 있으므로 주의해야 한다.

 

 

kd> bp b8fb429d ".if @@(pData->dwMyFlag & 0x00010000) {} .else {gc}"

 

b8fb429d 주소에 브레이크 포인트를 거는데 조건에 따라 걸리게 하고 싶은 상황입니다.

.if {} .else {} 명령을 사용한 조건문입니다.

@@( ) 을 사용하면 괄호 안에서는 C/C++ 소스코드에서 사용하던 표현들을 쓸 수 있습니다.
심볼이 맞아 있으면 위와 같이 소스에서 사용하던 구문 그대로 표현할 수 있습니다.
pData->dwMyFlag 에서 0x00010000 비트가 켜져 있으면 브레이크 하라는 의미입니다.
비트가 켜져 있지 않으면 .else 에 의해서 gc 로 계속 진행합니다.

원문 URL : http://www.driveronline.org/bbs/view.asp?tb=tipbbs&no=91

 

참고 : http://thepassion.tistory.com/90

작업은 관리자 권한의 쉘에서 해야합니다.

 

MakeCert, SignTool 과 같은 Signing Tool 은 Vista 버전 이후의 DDK 에 포함되어있습니다.

 

 

개발 PC

 

1. Test Signing 을 위한 테스트 인증서 생성

 > MakeCert -r -pe -ss MyTestCertStore -n "CN=MyCert" MyCertFile.cer

 

2. 테스트 인증서 설치 

 > CertMgr /add MyCertFile.cer /s /r localMachine root

 

3. Driver Test Signing 

 > SignTool sign /v /s MyTestCertStore /n MyCert /t http://timestamp.verisign.com/scripts/timstamp.dll driver.sys

 

 

테스트 PC

 

1. 개발 PC 에서 생성한 테스트 인증서(MyCertFile.cer) 복사

 

2. 테스트 인증서 설치

 > CertMgr /add MyCertFile.cer /s /r localMachine root

 혹은

 > CertMgr /add MyCertFile.cer /s /r localMachine trustedpublisher

 

3. 테스트 사이닝된 드라이버가 사용 가능하도록 부팅 메니져 설정 

 > Bcdedit -set TESTSIGNING ON

 

4. 재부팅

 

 

 

참고.

http://msdn.microsoft.com/en-us/library/windows/hardware/ff548693(v=vs.85).aspx
http://msdn.microsoft.com/en-us/library/windows/hardware/ff553467(v=vs.85).aspx

http://msdn.microsoft.com/en-us/library/windows/hardware/ff553563(v=vs.85).aspx

Sharepoint Server 2007 에서, 웹 파트 페이지를 생성하고 문서를 만들면
왼쪽에 나타나는 네비게이션(빠른 실행)이 나타나지 않는다.

Sharepoint Designer 를 이용하여, 페이지를 편집하면 나타나게 할 수 있지만
이 방법은 페이지 마다 해주어야 한다.

C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\1042\STS\DOCTEMP\SMARTPGS

폴더의 *.aspx 파일들을 열어서

</asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderPageImage" runat="server"></asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderLeftNavBar" runat="server"></asp:Content>
<asp:Content ContentPlaceHolderId="PlaceHolderNavSpacer" runat="server"></asp:Content>

<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server">

붉은 색으로 표시된 열을 삭제하면, 모든 웹 파트 페이지에서 빠른실행을 볼 수 있게 된다.

마찬가지로,
기본페이지 에 빠른실행을 나타내려면

C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\1042\STS\DOCTEMP\BLANKPGS

의 aspx 파일을 수정하면 된다.