none
LoadLibrary 시에 ERROR_NOT_ENOUGH_QUOTA가 발생하는 경우에는 어떤 경우가 있나요ㅠㅠ RRS feed

  • 질문

  • 안녕하세요.

    다름이 아니라 특이한 케이스가 발생하여 질문드립니다.

    유틸리티성 작업을 위해 필요할 때마다 DLL을 로드하여 사용하고 언로드 하는 상황인데요.

    어느 순간이 되면 DLL 로드할 때  ERROR_NOT_ENOUGH_QUOTA를 리턴해버리고 

    화면에는 "응용 프로그램 또는 DLL xxx.dll이(가) 잘못된 Window NT이미지 입니다. 설치 디스켓에서 다시 확입하십시오" 라고 뜹니다...

    이런 경우에는 어떤 부분이 문제가 있어서 발생하는지 알 수 있을까요?ㅠㅠ

    2013년 6월 17일 월요일 오전 7:56

답변

  • 정상적으로 잘 이용하던 DLL 이 일정 시간 또는 횟수를 지나가면 위에 설명하신것처럼

    오류가 난다는 뜻이죠?

    에러 내용으로 보면 해당 프로세스 또는 모듈을 로딩하다가 메모리 부족으로 실패한것 같은데,

    로드/언로드 코드에 문제가 있거나 해당 DLL 내에서 내부적으로 사용하는 핸들 처리에 문제가 있어서

    그럴수도 있습니다. 또한 내부적으로 Virtual Memory 를 직접적으로 핸들링하고 있는 코드가 있다면

    그쪽에 문제가 없는지 확인해보시기 바랍니다.

     

    지금 이야기 하신 내용만으로는 정확한 상태를 추측하기 어렵기 때문에 문제가 된다고 예측되는 부분이나

    DLL의 로드/언로드 쪽 코드를 올려주시면 한번 살펴보도록 하겠습니다.

    2013년 6월 18일 화요일 오전 2:40
    중재자

모든 응답

  • 아래 내용을 참고하시기 바랍니다.

    [ERROR_NOT_ENOUGH_QUOTA 반환이유]

    모든 Microsoft Windows NT, Windows 2000, Windows XP 실행에 속한 어떤 윈도우 스테이션 및 데스크톱 개체 2k 액세스 제어 목록 (ACL)에 제한이 있습니다. 이 제한에 도달 하면 SetUserObjectSecurity ERROR_NOT_ENOUGH_QUOTA를 반환 합니다. 이 2 K 제한을 약 84 또는 85 액세스 제어 항목 (ACE)과 같습니다.

    [해결책]

    이 시스템에 의해 사용 되는 프로세스를 복제 하므로 로그온 보안 식별자 (SID)를 기반으로 ACE를 추가 하는 것이 좋습니다. 이 작업을 수행하는 자세한 방법을 보려면 아래에 있는 Microsoft 기술 자료 문서 번호를 클릭하십시오.
    165194  CreateProcessAsUser() windowstations 및 데스크톱
    이 문제가 발생 하면 다음 옵션을 고려 하십시오.
    • 동일한 보안 컨텍스트 또는 로그온 세션에서 실행 되는 많은 프로세스를 시작 하는 경우, 모든 프로세스에 대 한 ACE 대 한 ACE를 추가 하는 것이 좋습니다.
    • 수 있는 프로세스를 죽을 경우의 추적 하면 프로세스가 종료 된 경우 ACE를 제거 해야 합니다.
    • 프로세스는 죽을 경우 추적할 수 경우 불필요 한 Ace 제거 하려면 사용할 수 있는 몇 가지 절차입니다. 열거 프로세스의 로그온 보안 식별자 (SID) 또는 사용자 SID를 프로세스 토큰에서 읽기 하 고 저장 된 윈도우 스테이션 및 데스크톱 개체의 DACL Ace 이들 중 하나를 비교할 수 있습니다. 이 보안 개체에 사용 되는 ACE 따라 다릅니다. 시스템에서 더 이상 실행 되는 프로세스에 대 한 모든 Ace를 제거 합니다. 참고: 개체에 Ace를 추가 하는 다른 프로세스가 있을 수 있습니다.
    • 여러 프로세스를 실행 하는 경우에 프로세스 로그온 형식을 기반으로 ACE를 추가 하는 것이 좋습니다. 예를 들어, 대화형 또는 배치 SID가 수 있습니다. 동일한 로그온 유형을 사용 모든 프로세스에 대 한 추가 Ace를 추가할 필요가 없습니다.

    2013년 6월 18일 화요일 오전 2:32
    중재자
  • 정상적으로 잘 이용하던 DLL 이 일정 시간 또는 횟수를 지나가면 위에 설명하신것처럼

    오류가 난다는 뜻이죠?

    에러 내용으로 보면 해당 프로세스 또는 모듈을 로딩하다가 메모리 부족으로 실패한것 같은데,

    로드/언로드 코드에 문제가 있거나 해당 DLL 내에서 내부적으로 사용하는 핸들 처리에 문제가 있어서

    그럴수도 있습니다. 또한 내부적으로 Virtual Memory 를 직접적으로 핸들링하고 있는 코드가 있다면

    그쪽에 문제가 없는지 확인해보시기 바랍니다.

     

    지금 이야기 하신 내용만으로는 정확한 상태를 추측하기 어렵기 때문에 문제가 된다고 예측되는 부분이나

    DLL의 로드/언로드 쪽 코드를 올려주시면 한번 살펴보도록 하겠습니다.

    2013년 6월 18일 화요일 오전 2:40
    중재자