none
ShellExecute 에러 질문 RRS feed

  • 질문

  • Mpeg2DecFilter.ax 필터를 CoCreateInstance()를 통해 생성하고 나서 ShellExecute()를 실행해 폴더를 열고자 하면 0xC0000096: Privileged instruction 에러가 발생합니다.

    팟플레이어에서 해당 필터를 연결하고 로고 폴더 열기를 실행 할 경우 같은 에러가 발생합니다. kernel32.dll의 0x76197dd4 위치에서 Exception이 발생합니다.

    그런데 64비트 운영체제나 CreateProcess()를 통해 폴더를 열면 문제가 발생하지 않습니다.

    SHFileOperation()을 통한 폴더 복사도 정상 작동 하는 것으로 보아 ShellExecute()내부에 원인이 있을 것 같아 질문 올립니다.

    2011년 10월 13일 목요일 오전 11:11

모든 응답

  • 안녕하십니까? hyun6

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.

     

    문의 하신 “ShellExecute 에러 질문에 대한 답변을 드리겠습니다.

               

    0xC0000096: Privileged instruction 에러가 발생하는 것으로 보아, 정상적으로 실행되는 상황은 아닌 것으로 보여집니다. , 중간에 hooking 모듈이 끼어있다거나 malware의 간섭으로 그러한 현상이 일어나는 것이 아닐까 의심이 됩니다.

     

    exception시에 발생하는 덤프 파일을 공유해 주시거나, visual C++이나 windbg와 같은 보조툴을 이용해서, 예외가 발생하는 시점의 call stack의 정보 또는 assembly instruction codes를 보여주시면 해결에 도움이 될 것입니다.

     

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    2011년 10월 14일 금요일 오전 4:43
    중재자
  • 안녕하세요.

    Exception 발생 시 어셈 코드와 콜스택 정보 올려 드립니다.

    . 어셈 코드
    77037CDD  ret         20h
    77037CE0  mov         eax,dword ptr [ebp-0DC4h]
    77037CE6  mov         ecx,dword ptr [ebp-0DA0h]
    77037CEC  dec         eax
    77037CED  cmp         dword ptr [ecx+0E4h],1
    77037CF4  mov         ecx,dword ptr [ebp-0DE4h]
    77037CFA  jne         77037D01
    77037CFC  jmp         770672D5
    77037D01  cmp         eax,ecx
    77037D03  jb          77037D0D
    77037D05  cmp         byte ptr [eax],2
    77037D08  ja          77037D0D
    77037D0A  dec         eax
    77037D0B  jmp         77037D01
    77037D0D  mov         ebx,dword ptr [ebp-0D88h]
    77037D13  mov         edx,eax
    77037D15  sub         edx,ecx
    77037D17  add         edx,4
    77037D1A  sub         ebx,esi
    77037D1C  cmp         ebx,edx
    77037D1E  jle         770672EC
    77037D24  cmp         ecx,eax
    77037D26  jbe         77054FE8
    77037D2C  mov         ebx,dword ptr [ebp-0DE8h]
    77037D32  jmp         77037C4E
    77037D37  movzx       eax,dl
    77037D3A  cmp         eax,4
    77037D3D  jle         770388D9
    77037D43  cmp         eax,5
    77037D46  je          770551BE
    77037D4C  cmp         eax,6
    77037D4F  je          770246D6
    77037D55  jle         77037BDF
    77037D5B  cmp         eax,0Ch
    77037D5E  jg          77037BDF
    77037D64  cmp         dword ptr [ebp-0DFCh],0
    77037D6B  jne         77037BDF
    77037D71  mov         edi,dword ptr [ebp-0DB0h]
    77037D77  movzx       eax,word ptr [edi]
    77037D7A  mov         ecx,dword ptr [ebp-0DC8h]
    77037D80  mov         edx,eax
    77037D82  shr         edx,8
    77037D85  mov         byte ptr [ecx],dl
    77037D87  mov         byte ptr [ecx+1],al
    77037D8A  mov         al,byte ptr [edi+2]
    77037D8D  add         ecx,2
    77037D90  mov         dword ptr [ebp-0DC8h],ecx
    77037D96  mov         ecx,dword ptr [ebp-0DC4h]
    77037D9C  mov         byte ptr [ecx],al
    77037D9E  mov         al,byte ptr [edi+3]
    77037DA1  and         al,byte ptr [ebp-0E04h]
    77037DA7  and         al,3Fh
    77037DA9  mov         ecx,dword ptr [ebp-0DC0h]
    77037DAF  mov         byte ptr [ecx],al
    77037DB1  inc         dword ptr [ebp-0DC4h]
    77037DB7  inc         dword ptr [ebp-0DC0h]
    77037DBD  jmp         77037BDF
    77037DC2  nop
    77037DC3  nop
    77037DC4  nop
    77037DC5  nop
    77037DC6  nop
    77037DC7  jmp         dword ptr ds:[76FF1DA0h]
    77037DCD  nop
    77037DCE  nop
    77037DCF  nop
    77037DD0  nop
    77037DD1  nop
    77037DD2  db          e9h
    77037DD3  db          a9h
    77037DD4  in          al,dx   <= Exception 발생 위치 
    77037DD5  pop         ecx
    77037DD6  mov         word ptr [ebp-40161883h],cs
    77037DDC  pop         ebx 


    . 콜 스택 정보

    >     kernel32.dll!77037dd4()    
          [아래 프레임은 올바르지 않거나 누락되었거나 kernel32.dll에 대해 로드된 기호가 없음]   
          kernel32.dll!7703d93e()    
          shlwapi.dll!770eae73()    
          shlwapi.dll!770eae52()    
          shell32.dll!761b4ef8()    
          shell32.dll!7613f97f()    
          shell32.dll!761bef19()    
          shell32.dll!7613f9e3()    
          shell32.dll!761b4f76()    
          shell32.dll!761ae670()    
          shell32.dll!761b4f53()    
          shell32.dll!76124b3b()    
          shell32.dll!7612519b()    
          shell32.dll!76132260()    
          shell32.dll!76132387()    
          shlwapi.dll!770e43c0()    
          kernel32.dll!7703ed6c()    
          ntdll.dll!779c37f5()    
          ntdll.dll!779c37c8() 

    2011년 10월 18일 화요일 오전 5:58
  • 안녕하십니까? hyun6

    Microsoft MSDN Forum 사이트를 방문해 주셔서 감사합니다.

     

    적어주신 에러가 발생한 코드를 살펴보면, 전혀 정상적인 코드가 아님을 알 수 있습니다.

    77037DD2 db e9h

    77037DD3 db a9h

    77037DD4 in al,dx <= Exception 발생 위치

    77037DD5 pop ecx

    77037DD6 mov word ptr [ebp-40161883h],cs

    77037DDC pop ebx

    , 타 위치의 코드에서 0x77037dd4 주소로 call이나 jmp가 이루어졌지만, 이것은 정상적인 함수 호출의 결과가 아니라 알수없는 이유 때문입니다. Call stack에서도 의미있는 정보를 얻을 수는 없어 보입니다. 따라서 다음과 같은 접근이 필요합니다.

     

    - 개발PC가 아닌, PC에서 코드를 테스트 하여 동일한 문제가 재현되는지를 확인합니다

    - Mpeg2DecFilter 필터 자체의 문제일 수 있으므로, 해당 포럼을 검색해 봅니다. 실제로Mpeg2DecFilter exception 과 관련한 여러 검색 결과를 확인할 수 있었습니다.

    - Windbg, Debugdiag와 같은 툴을 사용하여 문제가 발생할 당시의 dump 파일을 수집할 수 있다면, 덤프  분석을 의뢰합니다.

    제가 문제에 대해 더 알아야 할 것이 있다면 응답 주시면 감사하겠습니다.

    제시해 드린 답변이 도움이 되었기를 바랍니다.

    2011년 10월 21일 금요일 오전 9:31
    중재자