2008/10/22 13:07

Windows XP 에서 GDI Handle 갯수 및 크기 늘리기


GDI Handle 누수 감지하기에서 쓴 것처럼 종종 윈도우 어플리케이션에서 GDI Handle 이 새는 경우가 생기는데, 경우에 따라 수정할 때까지 시간을 벌어야 할 때가 있다.(사용자의 컴플레인이 극심한 경우 일단 땜빵해놔야 하기에.. -_-)

GDI Handle 과 관련된 기본설정을 변경하는 방법은 GDI Handle 의 총 사이즈를 변경하는 방법이 있고 GDI Handle 의 총 갯수를 변경하는 방법이 있다. 여기서 주의할건. 둘 다 프로세스 하나에 대한 GDI Handle 의 개수라는 거다.
(GDI Handle 사이즈는 정확히 측정해서 분석을 못해봤지만, 기본 사이즈를 봤을 때, 프로세스 하나에 대한 값이라는 걸 짐작할 수 있다.)

1. GDI Handle 의 메모리 사이즈를 변경하는 방법은 다음과 같다.
regedit 를 실행하고 다음 위치의 값을 열어서 수정하면 된다.

HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/SubSystems/Windows


Windows 의 값은 기본적으로 다음과 같은데, SharedSection 의 값을 변경하면 된다.

%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16

"1024, 3072, 512" 로 설정되어 있는데, 이중 가운데 3072 가 GDI Handle 의 기본 사이즈이다. 단위는 Mega Byte 이며 이값을 10240 정도로 기본값보다 조금 더 늘려주면 된다.

2. GDI Handle 의 갯수를 변경하는 방법은 다음과 같다.
regedit 를 실행하고 다음 위치의 값을 열어서 수정하면 된다.

HKLM/SOFTWARE/Microsoft/Windows NT/CurrentVersion/Windows/GDIProcessHandleQuota


GDIProcessHandleQuota 의 기본값은 십진수 기준으로 1,0000 인데 이 값을 늘려주면 된다. 최대값은 65536 이라고 msdn 에 나와있지만 실제 테스트를 해보니 GDI Handle 메모리 사이즈와 영향이 있는 것 같다.

어찌되었건 요 값을 좀 더 늘려주고 나면 GDI Handle 누수로 인해 모니터가 허옇게 변한다고 사용자의 무서운 눈치를 조금은 피할 시간적 여유를 얻을 수 있다. -_-;;

덧. 레지스트리를 수정하는 방법이기 때문에. 굉장히 주의를 기울여서 작업해야 하며, 만약 수정하다가 잘못될 경우 본인은 책임지지 못함을 알려드린다... -_-;;;

덧2. 레지스트리를 수정했으니까 재부팅은 필수다.
이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 2
2008/10/20 21:19

WinFlashGuard.exe Warm 제거하기


마치 자기가 무슨 flash 관련 프로그램이라도 되는 마냥 떡허니 작업관리자에 당당히도 떠있는 WinFlashGuard.exe 라는 녀석을 엊그제 발견했다.

PC 에 어떤 영향을 주는지는 정확히 모르겠지만, 적어도 내가 수행중인 프로젝트에서 만든 웹 시스템에는 심각한 영향을 준다. 로그인 화면에서 몇몇 파일들을 사용자 PC 에 배포하는데.. 이녀석이 떠있으니, PC가 완전 먹통이 되어 버린다. process explorer 등이 있었으면 좀 더 찾아볼 수 있었겠지만, 아무 툴도 없어서 일단 상황만 파악을 했다. 암튼.. 죽여줘야 하는 녀석임에는 틀림없다.

얼마전에 발견한 pooh.vbs (시간이 되면 요녀석도 제거하는 방법을 좀 써야겠다.)요넘도 참 머리 좀 썩히고 V3로는 감지도 치료도 안되서 홧김에 카스퍼스키 3개월 무료 이용판을 받아 설치했는데, WinFlashGuard 요녀석도 V3로는 감지도 치료도 안되길래 사용자 PC 에서 요 녀석을 업어와 봤다.

음.. 카스퍼스키는 기대를 져버리지 않고 잡아내는구나


암튼, 이렇게 자동으로 치료해 주는 녀석이 있다면 happy 하겠지만, 그렇지 않으면 또, 수작업으로 날려야 한다.
기존에 발견된 pooh.vbs 보다는 제거 과정이 쉽지만, 어쨌건 귀찮은건 사실이다.

일단 WinFlashGuard.exe 라는 녀석이 어디 있는지 로컬디스크에서 찾아보니
무례하게도 C:\Program Files 아래 잠자고 있는 것 아닌가. -_-;; 당황스럽니다.
정말 PC 를 잘 모르면 그러려니 하고 쓸 듯 하다.

암튼 일단 작업관리자에서 해당 프로세스를 죽이고, 관련 파일을 날려주신다.
그리고 regedit 를 실행해서 관련 레지스트리가 있는지 검색해 보니

[ HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\policies\explorer\run ]
Flash Drive Protector = C:\Program Files\WinFlashGuard\WinFlashGuard.exe -run


정말 당당히도 적혀있네..
요녀석도 지워주시면 되겠다. -_-;;

그리고 재부팅하면 상황종료 되겠다.

이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0
2008/10/17 20:46

Internet Explorer 7 에서 자기자신 닫아버리기


다음처럼 window.close() 하면 될지 알았더니...

<html>
<head><title>윈도우 닫기 테스트</title></head>
<body>
    <button id="btn" onclick="javascript:window.close();">닫기</button>
</body>
</html>

다음 처럼 당황스럽게도 안되더라...


웹 서핑을 좀 해봤는데.. 불행하게도 찾아낸건 전부 다 안먹혀서 찾아낸것들을 짬뽕해가다보니..
다음 처럼하니까 Internet Explorer 7 에서도 조용히 닫혀주시더라.. ㅎㅎ

<html>
    <head>
        <title>윈도우 닫기 테스트</title>
        <script type="text/javascript">
            function selfClose() {
                window.opener='X';
                window.open('','_parent','');
                window.close();
            }
        </script>
    </head>
<body>
    <button id="btn" onclick="javascript:selfClose();">닫기</button>
</body>
</html>

당췌 어떤 원리로 opener 를 'X' 로 설정하고 _opener 설정도 저렇게 희안하게 하는지.. 이해불가능이지만.
어쨌건 된다. -_- (사실은 귀찮아서 찾아보기도 싫다.)


이올린에 북마크하기(0) 이올린에 추천하기(0)
크리에이티브 커먼즈 라이선스
Creative Commons License
Trackback 0 Comment 0