Thursday, November 08, 2007

CreateProcessAsUser Function

Creates a new process and its primary thread. The new process runs in the security context of the user represented by the specified token.

BOOL WINAPI CreateProcessAsUser(
__in HANDLE hToken,
__in LPCTSTR lpApplicationName,
__in LPTSTR lpCommandLine,
__in LPSECURITY_ATTRIBUTES lpProcessAttributes,
__in LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in BOOL bInheritHandles,
__in DWORD dwCreationFlags,
__in LPVOID lpEnvironment,
__in LPCTSTR lpCurrentDirectory,
__in LPSTARTUPINFO lpStartupInfo,
__out LPPROCESS_INFORMATION lpProcessInformation
);

Exchange 메모리 사용과 /3GB 스위치

기본적으로 Windows는 총 4GB의 가상 주소 공간을 주소 지정할 수 있습니다. 기본적으로 이 중 2GB는 커널(운영 체제)용으로 예약되고 나머지 2GB는 Exchange 같은 사용자 모드 프로그램용으로 예약됩니다.

운영 체제의 Boot.ini 파일에 /3GB 스위치를 추가하면 사용자 모드 프로그램에 3GB의 공간을 제공하고 커널을 1GB로 제한하도록 가상 주소 공간 분배가 다시 할당됩니다. /3GB 스위치는 사서함 저장소나 공용 폴더 저장소가 있는 컴퓨터에서만 필요합니다. 사서함 저장소나 공용 폴더 저장소가 없는 컴퓨터에서는 이 스위치를 사용하지 않는 것이 좋습니다.

중요 다음 운영 체제에서만 /3GB 스위치를 사용하십시오.
• Microsoft Windows Server 2003 Datacenter Edition
• Microsoft Windows Server 2003 Enterprise Edition
• Microsoft Windows 2000 Advanced Server
• Microsoft Windows 2000 Datacenter Server
• Microsoft Windows NT 4.0 Enterprise Server
주의 Microsoft는 Active Directory에서 사용할 수 있도록 제작 환경의 Microsoft Windows Server 2003 Standard Edition에서 /3GB 스위치 사용을 지원합니다. 제작 환경에서 이 기능을 사용할 때 Microsoft Exchange Server 2003이 지원됩니다. 그렇지 않은 경우 Windows Server 2003 Standard Edition에서 /3GB 스위치는 개발 및 테스트용으로만 사용됩니다.

다음 운영 체제에서는 /3GB 스위치를 사용하지 마십시오.
• Microsoft Windows 2000 Server
• Microsoft Windows NT 4.0 Server
Windows 2000 Server와 Windows NT 4.0 Server에서는 사용자 모드 프로그램에 최대 2GB만 할당할 수 있습니다. Windows 2000 Server나 Windows NT 4.0 Server에서 /3GB 스위치를 사용하면 커널용으로 1GB와 사용자 모드 프로그램용으로 2GB가 할당되어 1GB의 주소 공간이 손실됩니다.

이런 메모리 부족이 발생하면 가상 메모리 조각화가 발생하여 문제를 information store 서비스가 비정상 동작하게 된다.

관련 성능 카운터
(1) MSExchangeIS - VMLargest Block Size
가상 메모리의 가장 큰 free block 크기를 byte 크기로 알려 줍니다.
이 값이 32MB 이하가 되면 9582 이벤트가 경고로 발생하고
16MB 이하가 되면 에러로 이벤트가 남게 됩니다.
이 값은 32MB 이하로 내려가서는 안 됩니다.
(2) MSExchangeIS – VM Total 16mb Free Blocks
16MB 이상의 가상 메모리 블록의 개수를 나타내고 1 밑으로 값이 떨어져서는 안 됩니다.
(3) MSExchangeIS – VM Total Free Blocks
크기와 상관없이 가용한 가상 메모리 블록크리의 총 개수를 나타냅니다.
역시 1 밑으로 값이 떨어져서는 안 됩니다.
(4) MSExchangeIS – VM Total Largest Free Block Bytes
16MB 이상이ㅡ 크기를 가지는 가상 메모리들만의 총 바이트 입니다.
50MB 밑으로 떨어져서는 안 됩니다.

관련 성능 카운터의 임계치를 넘어서면
이벤트 9582를 발생시킨다. 해당 이벤트를 만나면 서비스를 재시작하여 큰 문제를 막아야 한다.

Tuesday, November 06, 2007

Microsoft Exchange Server 2003 복구 저장소 그룹 사용

Exchange Server 2003에서 복구 저장소 그룹 기능을 사용하면 원래 데이터베이스와 동일한 서버나 같은 Exchange 관리 그룹의 다른 Exchange 서버에 Exchange 사서함 데이터베이스의 추가 복사본을 탑재할 수 있습니다. 이 작업은 원래 데이터베이스가 실행되고 있고 클라이언트를 처리하고 있는 동안에도 수행할 수 있습니다. 복구 저장소 그룹은 재해 복구 시나리오에서도 유용하게 사용될 수 있습니다. 이 설명서에서는 복구 저장소 그룹이 배포 시 유용한지 여부를 확인하는 방법, 복구 저장소 그룹을 설정하는 방법 및 일반적인 문제를 해결하는 방법에 대한 정보를 제공합니다.

Monday, November 05, 2007

How to enable SMTP Authentication using System.Web.Mail

인증을 필요로 하는 SMTP서버를 사용하기 위해서는 코드 수정을 필요로 합니다.

SUMMARY
This article describes how to send e-mails from a .NET application through an SMTP server that requires authentication.
Back to the top

SYMPTOMS
Exchange Server requires, by default, authenticated users to send mail messages via SMTP. If you are developing a .NET application you will find that System.Web.Mail does not contain an API that allows you to provide credentials for connecting to an SMTP server. System.Web.Mail internally calls Microsoft® Collaboration Data Objects CDOSYS. SMTP Authentication is possible by defining configuration settings using the Configuration object associated to the Message CDO object.


Back to the top

MORE INFORMATION
The System.Web.Mail namespace provides an API that enables you to create and send messages using the CDOSYS (Collaboration Data Objects for Windows 2000) message component. The mail message is delivered through an SMTP server.
Most of the SMTP servers installations requires authentication. The main reasoning for this is due to people abusing SMTP servers for SPAMing (i.e., sending out unsolicited junk mail).
The System.Web.Mail namespace classes don't expose an API for providing credentials to an SMPT server. Anyway you can achieve this by defining configuration settings for the Configuration object associated to the Message CDO. Configuration settings are made up of a set of fields (properties) that are simply name/value pairs. Most configuration fields used for messaging are in the http://schemas.microsoft.com/cdo/configuration/ namespace.
You can set fields to the message by adding them to the System.Web.Mail.MailMesage.Fields collection.

CDO Fields for configuring SMTP Authentication
To configure Message objects, you modify fields in the associated Configuration object. Most of the field names reside in the http://schemas.microsoft.com/cdo/configuration/ namespace:
• smtpserver: SMTP server name.
• smtpserverport: SMTP server port (default: 25).
• sendusing: cdoSendUsingPort, value 2, for sending the message using the network.
• smtpauthenticate: Specifies the mechanism used when authenticating to an SMTP service over the network. Possible values are:
- cdoAnonymous, value 0. Do not authenticate.
- cdoBasic, value 1. Use basic clear-text authentication. When using this option you have to provide the user name and password through the sendusername and sendpassword fields.
- cdoNTLM, value 2. The current process security context is used to authenticate with the service.
• sendusername: User name
• sendpassword: Password

How to use the Rule.dll sample to create an inbox rule in Visual Basic

The rules that are added in this sample function review all incoming messages. If the message subject includes the word "test", a reply message is sent and the original message is deleted.

특정 메일 계정으로 오는 메일의 제목에 test 라는 단어가 포함되어 있으면 회신 메세지를 보내고 동시에 수신 메세지를 지워는 규칙을 프로그램을 통해 규칙으로 만들 수 있다.

Friday, January 19, 2007

[Windows Vista] COM Surrogate has Stopped Working

노트북에 Windows Vista Ultimate를 11월에 설치 했다...
노트북 사양(센트리노 1.1, 1GB 램, 5400RPM 하드)이 떨어져서 포기할까도 싶은데 일단은 그냥 쓰기로 했다. 현재 별도의 작업을 하고 있지 않아 큰 문제는 만나지 못했는 데... 가끔 탐색기를 쓸 때 제목과 같은 문제를 많이 만나게 된다... 별도로 하는 것도 없는 데....^^;

고민을 해 보니 동영상 전용 머신정도이기 때문에...코덱의 문제로 보게 되었다.
Windows Vista의 경우 Shell(?) 에서 미리 해당 동영상을 보여주는 미리보기 기능이 있기 때문에 영화 보려고 해당 파일을 탐색기에서 볼때 문제를 발생시키는 것 같아...

"K-Lite-Codec"을 설치하니 다시는 이런 문제가 보이지 않는 다.

Thursday, January 18, 2007

HTTP 연결을 Outlook Web Access 클라이언트용 HTTPS로 리디렉션하는 방법

How to redirect an HTTP connection to HTTPS for Outlook Web Access clients

OWA 로 접속시 꼭 HTTPS로 사용하게 하고 싶을 때 리다이렉션 페이지를 만들어 구성하는 것이 좋은 방법으로 보인다.

Microsoft의 문서를 보면 HTTP로 오는 경우 403.4 오류 : SSL Require를 발생 시켜 리다이렉션 페이지가 호출되게 하는 것을 소개한다.

OwaHttps.asp 를 작성한다.
<%
If Request.ServerVariables("HTTPS") = "off" Then
Response.Redirect "https://" & Request.ServerVariables("HTTP_HOST") & "/Exchange"
End If
%>

해당 파일 인증및 액세스 제어에서 익명 액세스가 가능하게 한다.


가상 디렉터리 Exchange의 등록정보의 사용자 지정 오류 탭을 눌러 403.4를 새로 추가한 OwaHttps.asp 를 지정한다.(URL) 그리고 보안탭의 보안통신 채널 필요로 하여 SSL을 선택한다.



확인을 누르고
http://owa.abc.com/exchange 하면 SSL Require가 발생하면서 https://owa.abc.com/exchange 로 리다이렉션 된다.

마지막으로 간혹 리다이렉션 페이지를 찾지 못하는 오류가 생길 수 있다.
해당 페이지의 등록 정보를 보면 exprox.dll 이 등록되어 있다. 순수하게 리다이렉션 만을 목적으로 한다면 지워야 이 문제가 해결된다.

How to enable SMTP Authentication using System.Web.Mail

Active Directory에서 그룹 소속원에게 메일을 보낼 수 있다.
하지만 외부에 메일 주소가 노출되면 스팸에 시달리는 것은 시간문제다.

그래서 메일 서버의 그룹 정보에 "인증필요"로 해서 외부의 메일은 거부하게 한다.

여러 시스템이 존재하는 경우 다른 서버에서 메일을 보내오는 경우가 있는 데
이 경우면 기존 설정에 위배되기 때문에 문제가 발생한다.

해서 인증을 넣어 메일을 보내야 한다.(여기서 인증은 아웃룩 쓸때 암호를 넣는 것과 같다.)

C#의 경우
using System;using System.Web.Mail;namespace SMTPAuthentication{ public class SMTPAuthenticationExample {
public static void SendMail()
{
string smtpServer = "smtp.domain.com";
string userName = "johnDoe";
string password = "pass";
int cdoBasic = 1;
int cdoSendUsingPort = 2;
MailMessage msg = new MailMessage();
if (userName.Length > 0) {
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserver", smtpServer);
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 25) ;
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusing", cdoSendUsingPort) ;
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", cdoBasic);
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", userName);
msg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", password);
}
msg.To = "someone@domain.com";
msg.From = "me@domain.com";
msg.Subject = "Subject";
msg.Body = "Message";
SmtpMail.SmtpServer = smtpServer;
SmtpMail.Send(msg); } }}

Telnet의 경우
꼭 아이디와 비번은 Base64로 인코딩해야 한다.
220 ALAN.CP.com Microsoft ESMTP MAIL Service
ehlo
250 ALAN.CP.com Hello [10.10.1.1]
more... verbs
250 OK
auth login
334 VXNlcm5hbWU6
Z3V5dA==
334 UGFzc3dvcmQ6
UGaF1bGluZTEz
235 2.7.0 Authentication successful.

mail from: guyt@exchguy.com
250 2.1.0 guyt@exchguy.com....Sender OK
rcpt to: administrator@cp.com
250 2.1.5 administrator@cp.com
data
354 Start mail input; end with .
Please send cheque soonest
.
250 2.6.0 Queued mail for delivery

PL/SQL의 경우 구글 검색 결과
utl_smtp.helo(l_connection, 'ALAN.CP.com');

-- SMTP AUTH Login
utl_smtp.command ( l_connection, 'ehlo' );
utl_smtp.command ( l_connection, 'auth login' );
utl_smtp.command ( l_connection, utl_raw.cast_to_varchar2 (utl_encode.base64_encode@hddrts (utl_raw.cast_to_raw ( v_username ))));
utl_smtp.command ( l_connection,utl_raw.cast_to_varchar2 (utl_encode.base64_encode@hddrts (utl_raw.cast_to_raw ( v_password ))));

utl_smtp.mail(l_connection, p_from);
utl_smtp.rcpt(l_connection, p_to);

그 외는 검색하면 나올 것이다.

Friday, January 12, 2007

Download Virtual Server 2005 R2 for Free

Virtual Server 2005 R2 가 무료로 공개되고 있다니...VMWARE가 무료로 바뀌었다고 하는 데 무섭구나...

The full software for 32-bit and 64-bit versions is available as a free download. Register to pre-order a CD (available May 2006) or to download the full software.

Related Resources

Virtual Server Downloads

Register for Virtual Server 2005 R2 Enterprise Edition Redistribution Rights

Download or Order Virtual Server 2005 R2 Enterprise Edition for Free

Virtual Server 2005 R2 - Enterprise Edition

Active Directory User 최근 암호 변경일 가져 오기

메일 서버를 관리하다 보니 이상한 요구 사항을 많이 받게 된다. 물론 최근 암호 변경일 확인은 이상한 요구는 아니지만 해 보면서 왜 이렇게 저장을 했을 까 하는 의문이 생긴다.
AD에 사용자의 정보를 보기 위해 ADSIEDIT를 사용하게 되는 데 글을 안올린 동안 많이 쓸 기회가 생겼다. Microsoft SQL 2000에 쿼리분석기(SQL Query Analyzer)가 있다면 Active Directory에는 ADSIEDIT….?
ADSIEDIT는 Windows 설치 CD의 SUPPORT\TOOLS 폴더에 있는 SUPTOOLS.MSI를 실행하여 Windows Support Tools을 설치 하면 된다.

SQL> SELECT * FROM USER_TABLE WHERE PwdLastSet > ‘2007-01-12’
LDAP> (&(objectCategory=user)(pwdLastSet<=128126880000000000))

위와 같이 LDAP쿼리를 던지면 조건에 맞는 마지막 비밀번호 변경일을 확인 할 수 있다.
여기서 AD의 사용자 Attribute에 들어가는 pwdLastSet은 Windows 파일 시간이 들어가며 MSDN에는 아래와 같이 설명하고 있다.

Windows 파일 시간은 UTC(지역 표준시) 서기 1601년 1월 1일 자정(12:00) 이후로 경과한 100나노초 간격 수를 나타내는 64비트 값입니다. Windows는 파일 시간을 사용하여 응용 프로그램에서 파일을 만들고, 액세스하고, 쓴 시간을 기록합니다.

마지막으로 코드상에서 비교를 원하는 시간은 아래 코드와 같이 해서 가져올 수 있다.

Dim CompareDate As DateTime
CompareDate = CType(args(0), DateTime)

Dim fTime As Long
fTime = CompareDate.ToFileTimeUtc

Console.WriteLine("DateTime : " & CompareDate.ToShortDateString())
Console.WriteLine("FileTimeUTC : " & fTime.ToString())