노무현 전 대통령 서거 - 삼가 고인의 명복을 빕니다


'전체'에 해당되는 글 156건

  1. 2010.06.01 UAC 상태에 따라 ActiveX에서 파일 다운로드 받기
  2. 2010.05.12 [UAC] 권한 상승 창이 최소화 되어 뜨지 않도록 하는 방법
  3. 2010.04.25 Let's dive into the sky!!!
  4. 2010.04.12 청첩장입니다.
  5. 2010.03.26 How to close session when closing modeless CDHtmlDialog
  6. 2010.03.25 XMPP over BOSH
  7. 2010.03.19 File encryption with OpenSSL
  8. 2010.03.09 청첩의 변
  9. 2009.12.26 How to load string from resources in C#
  10. 2009.12.09 안전하게 프로세스 종료하는 방법
2010.06.01 00:13

UAC 상태에 따라 ActiveX에서 파일 다운로드 받기

○ UAC 적용 시
 - FOLDERID_LocalAppDataLow

○ UAC 미적용 시
 - FOLDERID_LocalAppData

○ 목적
 - FOLDERID_LocalAppDataLow에 있는 파일은 UAC가 적용되지 않을 경우라도 low integrity로 실행된다.
   그래서, 실행 파일이 관리자 권한을 필요로 할 때 (installer 등) 정상적으로 실행되지 않는다.

* 참고 (UAC 활성화 여부 검사 루틴)

bool CBrokerPath::IsUACOn(void)
{        
DWORD res = ERROR_SUCCESS;
DWORD dwType = REG_DWORD;
DWORD UacOnOff = 0;
DWORD sz = sizeof(DWORD);
res = ::SHGetValue(HKEY_LOCAL_MACHINE,
  TEXT("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"),
  TEXT("EnableLUA"),
  &dwType,
  &UacOnOff,
  &sz);
if (res == ERROR_SUCCESS)
{
if (UacOnOff == 1)
{
return true;
}
}
return false;
}
저작자 표시
신고
Trackback 0 Comment 0
2010.05.12 23:34

[UAC] 권한 상승 창이 최소화 되어 뜨지 않도록 하는 방법

권한 상승이 필요한 어플리케이션이 실행될 때, 권한 상승창이 최소화되어
작업표시줄에서 깜빡거리고 있고, 사용자는 미처 그걸 보지 못하고 다른 작업들을 해서 오류가 나는 경우가 있다.

원인 및 대처 방안은 다음과 같다.

○ 원인
    - CoCreateInstanceAsAdmin 함수 또는 ShellExecuteEx 함수 호출 시 함수 인자의 HWND가 NULL일 경우

○ 조치 방안
    - ::GetForegroundWindow() 함수를 호출하여 최상위 윈도우 핸들을 얻어 함수 인자로 전달

○ 참고 URL
이제 와서 UAC를 고민하게 됐으니 -_-;
저작자 표시
신고
Trackback 0 Comment 0
2010.04.25 12:43

Let's dive into the sky!!!



중간중간 나오는 이상한 영어는, 살아남기 위한 어쩔 수 없는 시도로 생각하셈.
저작자 표시
신고
Trackback 0 Comment 0
2010.04.12 18:07

청첩장입니다.


저작자 표시
신고
Trackback 0 Comment 0
2010.03.26 01:23

How to close session when closing modeless CDHtmlDialog

CDHtmlDialog에서 상속받은 클래스에서 Navigate() method를 통해 웹 사이트에 접속한 후
modeless dialog를 닫을 때, dialog는 닫히지만 실제로 세션은 닫히지 않는다.
(내장된 웹브라우저 컨트롤의 instance가 해제되지 않는다.)

이 경우, 아래와 같이 처리해야 한다.

CDHtmlDialog_Derived::PostNcDestroy()
{
    delete this;
    CDHtmlDialog::PostNcDestroy();
}

CDHtmlDialog_Derived::OnClose()
{
    DestroyModeless();
    return;
}
위와 같이 할 경우 dialog가 닫힐 때 세션이 정리된다.
저작자 표시
신고
Trackback 0 Comment 0
2010.03.25 23:28

XMPP over BOSH

강한 네트워크 보안 정책을 운용하는 환경에 속해 있을 경우,
일부 허용된 포트 (주로 http / https)만 접근이 가능하다.

이런 환경에서 TCP 5222 포트로 서비스하고 있는 XMPP 서버에 접근할 수 없을 경우,
HTTP 프로토콜의 payload에 XMPP 패킷을 올려서 (wrapping) 사용할 수 있다. (아래 참조)

XMPP over BOSH payload



○ 관련 프로토콜 명세: http://xmpp.org/extensions/xep-0124.html

※ 아직 조사가 더 필요하지만, synchronous XMPP 프로토콜 구현이 가능할 경우, 활용 가치가 매우 높다.
저작자 표시 비영리 변경 금지
신고
Trackback 0 Comment 0
2010.03.19 10:01

File encryption with OpenSSL

○ OpenSSL에서 제공하는 EVP cryptography 추상화 계층과 BIO I/O 추상화 계층을 이용하여 파일에 대한 암/복호화를 수행하는 라이브러리
* 마이크로소프트웨어 2004.01월에 발간된 내용 참조

○ 간략한 사용 방법:
int main(int argc, char* argv[])
{
int is_encrypt = 0;
int result = 0;

if (argv[1][0] == 'e')
{
is_encrypt = 1;
}
else if (argv[1][0] == 'd')
{
is_encrypt = 0;
}
else
{
printf("[ERROR] invalid option. Only e (for encryption) and d (for decryption) allowed.\n");
return -1;
}

result = do_encryption(argv[2], argv[3], is_encrypt);
if (result != 0)
{
printf("[ERROR] Failed to encrypt.\n");
}
else
{
printf("[INFO] Successfully done.\n");
}

return 0;
}

○ 첨부된 파일
저작자 표시 변경 금지
신고
Trackback 0 Comment 0
2010.03.09 01:41

청첩의 변

모든 것이 새로워지는 꽃향기 그윽한 봄 햇살 아래
오늘이 있기까지 많은 사랑과 관심을 기울여주신
여러 어르신과 친지분을 모시고
저희 두 사람이 새 인생을 시작하려 합니다.
부디 참석하시어 새 인생의 첫 출발을 축복으로 빛내주시기 바랍니다.

신고
Trackback 0 Comment 0
2009.12.26 12:20

How to load string from resources in C#

namespace ApplicationForm
{
public partial class MainForm : Form
{
ResourceManager resMgr = null;
public MainForm()
{
InitializeComponent();
resMgr = new ResourceManager("ApplicationForm.Properties.Resources", Assembly.GetExecutingAssembly());
TestResourceString();
}

public void TestResourceString()
{
Debug.WriteLine(resMgr.GetString("IDS_MSG_DEBUG"));
}
}
}
신고
Trackback 0 Comment 0
2009.12.09 11:11

안전하게 프로세스 종료하는 방법

일반적으로 프로세스를 종료하는 방법은 다음과 같다.

  1. ::FindWindow() 함수를 이용해 HWND 검색
  2. 해당 HWND가 유효한지 확인한 후 WM_CLOSE 메시지 전송

하지만, 위의 방법을 사용할 수 없거나 (ex. 윈도우가 없는 콘솔 어플리케이션),
즉시 프로세스를 종료해야 할 경우 프로세스 핸들을 얻은 후에 ::TerminateProcess() 함수를 이용한다.

그런데, TerminateProcess 함수를 사용할 경우, 강제 종료되는 프로세스가 사용하던 리소스에 대한 처리가 제대로 이루어지지 않는 문제가 있다.

그래서 사용할 수 있는 대안이, 해당 프로세스에 대해 Remote thread를 실행해서
ExitProcess 함수를 호출해주는 것.

자세한 내용은 아래 링크 참조.
Dr. Dobb's Journal - A Safer Anternative to TerminateProcess()
http://www.ddj.com/windows/184416547


신고
Trackback 0 Comment 0


티스토리 툴바