The Windows 구조

The Windows 구조

Windows 플랫폼 전용 기능을 담는 구조예요.

출처: 문서

본문

시놉시스 (Synopsis)

signature WINDOWS (* OPTIONAL *)
structure Windows :> WINDOWS (* OPTIONAL *)

인터페이스 (Interface)

structure Key : sig
include BIT_FLAGS
val allAccess : flags
val createLink : flags
val createSubKey : flags
val enumerateSubKeys : flags
val execute : flags
val notify : flags
val queryValue : flags
val read : flags
val setValue : flags
val write : flags
end
structure Reg : sig
eqtype hkey
val classesRoot : hkey
val currentUser : hkey
val localMachine : hkey
val users : hkey
val performanceData : hkey
val currentConfig : hkey
val dynData : hkey
datatype create_result
= CREATED_NEW_KEY of hkey
| OPENED_EXISTING_KEY of hkey
val createKeyEx : hkey * string * Key.flags
-> create_result
val openKeyEx : hkey * string * Key.flags -> hkey
val closeKey : hkey -> unit
val deleteKey : hkey * string -> unit
val deleteValue : hkey * string -> unit
val enumKeyEx : hkey * int -> string option
val enumValueEx : hkey * int -> string option
datatype value
= SZ of string
| DWORD of SysWord.word
| BINARY of Word8Vector.vector
| MULTI_SZ of string list
| EXPAND_SZ of string
val queryValueEx : hkey * string -> value option
val setValueEx : hkey * string * value -> unit
end
structure Config : sig
val platformWin32s : SysWord.word
val platformWin32Windows : SysWord.word
val platformWin32NT : SysWord.word
val platformWin32CE : SysWord.word
val getVersionEx : unit
-> {
majorVersion : SysWord.word,
minorVersion : SysWord.word,
buildNumber : SysWord.word,
platformId : SysWord.word,
csdVersion : string
}
val getWindowsDirectory : unit -> string
val getSystemDirectory : unit -> string
val getComputerName : unit -> string
val getUserName : unit -> string
end
structure DDE : sig
type info
val startDialog : string * string -> info
val executeString : info * string * int * Time.time
-> unit
val stopDialog : info -> unit
end
val getVolumeInformation : string
-> {
volumeName : string,
systemName : string,
serialNumber : SysWord.word,
maximumComponentLength : int
}
val findExecutable : string -> string option
val launchApplication : string * string -> unit
val openDocument : string -> unit
val simpleExecute : string * string -> OS.Process.status
type ('a,'b) proc
val execute : string * string -> ('a, 'b) proc
val textInstreamOf : (TextIO.instream, 'a) proc
-> TextIO.instream
val binInstreamOf : (BinIO.instream, 'a) proc
-> BinIO.instream
val textOutstreamOf : ('a, TextIO.outstream) proc
-> TextIO.outstream
val binOutstreamOf : ('a, BinIO.outstream) proc
-> BinIO.outstream
val reap : ('a, 'b) proc -> OS.Process.status
structure Status : sig
type status = SysWord.word
val accessViolation : status
val arrayBoundsExceeded : status
val breakpoint : status
val controlCExit : status
val datatypeMisalignment : status
val floatDenormalOperand : status
val floatDivideByZero : status
val floatInexactResult : status
val floatInvalidOperation : status
val floatOverflow : status
val floatStackCheck : status
val floatUnderflow : status
val guardPageViolation : status
val integerDivideByZero : status
val integerOverflow : status
val illegalInstruction : status
val invalidDisposition : status
val invalidHandle : status
val inPageError : status
val noncontinuableException : status
val pending : status
val privilegedInstruction : status
val singleStep : status
val stackOverflow : status
val timeout : status
val userAPC : status
end
val fromStatus : OS.Process.status -> Status.status
val exit : Status.status -> 'a

설명 (Description)

structure Key

Windows 특정 레지스트리·시스템 값에 접근하는 함수를 담아요.

val allAccess : flags

queryValue, enumerateSubKeys, notify, createSubKey, createLink, setValue 플래그의 합집합이에요.

val createLink : flags

심볼릭 링크를 만들 권한이에요. 구조의 나머지가 링크를 지원하지 않으므로 이 값은 완전성을 위해 포함돼요.

val createSubKey : flags

하위 키를 만들 권한이에요.

val enumerateSubKeys : flags

하위 키를 열거할 권한이에요.

val execute : flags

읽기 접근에 대한 권한이에요.

val notify : flags

변경 알림에 대한 권한이에요. 구조의 나머지가 알림을 지원하지 않으므로 이 값은 완전성을 위해 포함돼요.

val queryValue : flags

하위 키 데이터를 조회할 권한이에요.

val read : flags

queryValue, enumerateSubKeys, notify 플래그의 합집합이에요.

val setValue : flags

하위 키 데이터를 설정할 권한이에요.

val write : flags

setValue와 createSubKey 플래그의 합집합이에요.

structure Reg

이 하위구조는 Microsoft Windows 레지스트리 함수를 제공해요.

eqtype hkey

레지스트리 키 값의 타입이에요.

val classesRoot : hkey
val currentUser : hkey
val localMachine : hkey
val users : hkey
val performanceData : hkey
val currentConfig : hkey
val dynData : hkey

이들은 최상위 레지스트리 키에 대한 식별자예요.

createKeyEx (hkey, skey, regsam)

hkey의 하위 키를 이름 skey와 regsam이 지정한 보안 접근으로 열거나 만들어요. 구현 참고: 이는 Win32 호출에 REG_OPTION_NON_VOLATILE 옵션, NULL Class, SECURITY_ATTRIBUTE 인자를 전달해요.

openKeyEx (hkey, skey, regsam)

hkey의 하위 키를 이름 skey와 regsam이 지정한 보안 접근으로 열어요.

closeKey hkey

키 hkey를 닫아요.

deleteKey (hkey, skey)

hkey의 하위 키 skey를 삭제해요.

deleteValue (hkey, valname)

hkey의 값 valname을 삭제해요.

enumKeyEx (hkey, ind)

키 hkey의 인덱스 ind 하위 키를 돌려줘요. 인덱스는 0에서 시작해요. 함수는 정의된 각 하위 키에 대해 문자열의 SOME을 돌려줘요. 모든 하위 키를 열거하려면 인덱스를 0에서 시작해 함수가 NONE을 돌려줄 때까지 증가시켜요. ind가 유효하지 않으면 Subscript 예외를 발생시켜요.

enumValueEx (hkey, ind)

키 hkey의 인덱스 ind 값을 돌려줘요. 인덱스는 0에서 시작해요. 함수는 정의된 각 값에 대해 문자열의 SOME을 돌려줘요. 모든 값을 열거하려면 인덱스를 0에서 시작해 함수가 NONE을 돌려줄 때까지 증가시켜요. ind가 유효하지 않으면 Subscript 예외를 발생시켜요.

datatype value
= SZ of string
| DWORD of SysWord.word
| BINARY of Word8Vector.vector
| MULTI_SZ of string list
| EXPAND_SZ of string

이 타입은 레지스트리에 저장하거나 레지스트리에서 추출할 수 있는 값의 종류를 설명해요. SZ 생성자는 문자열, DWORD는 32비트 숫자, BINARY는 임의 이진 값, MULTI_SZ는 문자열 목록, EXPAND_SZ는 환경 변수를 담고 있는 문자열에 해당해요.

queryValueEx (hkey, name)

열린 레지스트리 키 hkey에서 name과 연관된 데이터를 돌려줘요. value 데이터타입의 더 구체적인 인스턴스에 해당하지 않는 타입의 값은 BINARY 값으로 반환돼요. 키에 값이 없으면 함수는 NONE을 돌려줘요. 레지스트리 키에 대한 충분한 접근 권한이 없는 것 같은 다른 어떤 오류도 OS.SysErr 예외를 발생시키는 결과를 낳아요. 레지스트리 값의 일반적인 용도는 프로그램의 기본 동작을 재정의하는 것이에요. 일반적인 경우는 레지스트리 값이 설정되어 있지 않을 때예요. option 타입을 사용하면 queryValueEx의 결과가 키의 유무를 나타낼 수 있어요.

setValueEx (hkey, name, v)

열린 키 hkey에서 값 v를 name과 연관시켜요.

structure Config

이 하위구조는 운영체제에 관한 정보를 얻는 함수를 담고 있어요.

val platformWin32s : SysWord.word
val platformWin32Windows : SysWord.word
val platformWin32NT : SysWord.word
val platformWin32CE : SysWord.word

이들은 표시된 Microsoft Windows 플랫폼에 해당하는 값이에요.

val getVersionEx : unit
-> {
majorVersion : SysWord.word,
minorVersion : SysWord.word,
buildNumber : SysWord.word,
platformId : SysWord.word,
csdVersion : string
}

이것은 운영체제의 주·부 버전, 빌드 번호, 플랫폼 식별자, 보조 버전 문자열을 돌려줘요. 플랫폼 식별자 platformId는 platformWin32s, platformWin32Windows, platformWin32NT, platformWin32CE 값과 비교해 플랫폼 유형을 결정할 수 있어요. 다른 플랫폼에 대한 추가 값이 반환될 수 있다는 점에 유의하세요. 주·부 버전 번호는 추가 구분을 허용해요. platformId가 platformWin32Windows인 경우: minorVersion 시스템 0 Windows 95

0 Windows 98 platformId가 platformWin32NT인 경우: majorVersion minorVersion 시스템 4 0 Windows NT 5 0 Windows 2000 5 > 0 Windows XP

val getWindowsDirectory : unit -> string

Windows 디렉터리로, 보통 Windows 95에서는 "C:\Windows", Windows NT에서는 "C:\Winnt"예요.

val getSystemDirectory : unit -> string

Windows 시스템 디렉터리로, 보통 "C:\Windows\System" 또는 "C:\Winnt\System32"예요.

val getComputerName : unit -> string

컴퓨터 이름이에요.

val getUserName : unit -> string

현재 사용자 이름이에요.

structure DDE

이 하위구조는 단순 동적 데이터 교환(DDE) 상호작용을 위한 고수준 클라이언트 측 인터페이스를 제공해요. 모든 트랜잭션은 동기식이에요. Advise 루프와 poke 트랜잭션은 이 인터페이스에서 지원되지 않아요.

startDialog (service, topic)

DDE를 시작하고 주어진 서비스와 토픽에 연결해요. 이 연산들이 만든 info 값을 돌려줘요.

executeString (info, cmd, retry, delay)

info 값이 지정한 서비스와 토픽에서 명령 cmd를 실행하려고 시도해요. retry 인자는 서버가 바쁘면 트랜잭션을 시도할 횟수를 지정하며, 각 시도 사이에 delay만큼 멈춰요.

stopDialog info

info 인자가 지정한 서비스와 토픽을 연결 해제하고 연관된 자원을 해제해요.

getVolumeInformation root

루트 경로명 root가 지정한 파일 시스템과 볼륨에 관한 정보를 돌려줘요. volumeName 필드는 볼륨 이름을, systemName 필드는 그 타입(예: "FAT" 또는 "NTFS")을, serialNumber 필드는 일련 번호를, maximumComponentLength 필드는 이 시스템에서 경로명 구성 요소의 최대 길이를 지정해요.

findExecutable name

name과 연관된 전체 실행 파일 이름을 돌려주고, 그런 파일이 없으면 NONE을 돌려줘요.

launchApplication (file, arg)

지정된 실행 파일을 인자 arg를 전달하며 실행해요. file이 실행 가능하지 않거나 실행할 수 없으면 OS.SysErr를 발생시켜요. 구현 참고: 이는 ShellExecute를 사용해 구현해야 하며 기본 API 호출에 SW_SHOWNORMAL을 전달해요.

openDocument file

file을 연관된 응용 프로그램으로 열어요. 구현 참고: 이는 기본 ShellExecute API 호출에 SW_SHOWNORMAL을 전달해야 해요.

simpleExecute (cmd, arg)

cmd가 지정한 프로세스를 문자열 arg로 표현된 명령줄 인자로 생성하고, 표준 입력과 표준 출력을 null 장치로 재지정해요. 그런 다음 하위 프로세스가 종료될 때까지 기다리고 종료 상태를 돌려줘요. OS.Process.system과 비슷하지만 후자가 작동하지 않는 경우에 쓸 수 있고, 그 반환 값은 자식 프로세스의 종료 상태에 대한 더 많은 정보를 제공해요. 구현 참고: 이는 CreateProcess의 사용에 해당해요.

type ('a,'b) proc

execute가 만든 프로세스의 타입이에요. 타입 매개변수들은 반환될 수 있는 스트림 타입에 대한 증인 타입이에요.

execute (cmd, arg)

cmd가 지정한 프로세스를 문자열 arg로 표현된 명령줄 인자로 생성하고 결과 프로세스에 대한 핸들을 돌려줘요. 구현 참고: 이 역시 CreateProcess의 사용에 해당해요. 표준 스트림의 재지정은 STARTUPINFO 매개변수의 hStdInput과 hStdOutput 필드를 사용해 처리할 수 있어요.

textInstreamOf pr

binInstreamOf pr

이 함수들은 프로세스 pr의 표준 출력 스트림에 연결된 텍스트 또는 이진 instream을 돌려줘요. 같은 proc 값에 대한 이 함수들의 여러 호출은 모두 같은 기본 열린 파일 디스크립터를 공유하는 여러 스트림을 만들며, 이는 예측할 수 없는 효과를 낳을 수 있다는 점에 유의하세요.

textOutstreamOf pr

binOutstreamOf pr

이 함수들은 프로세스 pr의 표준 입력 스트림에 연결된 텍스트 또는 이진 outstream을 돌려줘요. 같은 proc 값에 대한 이 함수들의 여러 호출은 모두 같은 기본 열린 파일 디스크립터를 공유하는 여러 스트림을 만들며, 이는 버퍼링 때문에 예측할 수 없는 효과를 낳을 수 있다는 점에 유의하세요.

reap pr

pr과 연관된 표준 스트림을 닫은 다음, pr에 해당하는 시스템 프로세스가 종료될 때까지 현재 프로세스를 일시 중지해요. pr이 종료될 때 준 종료 상태를 돌려줘요. reap를 pr에 다시 적용하면 이전 종료 상태를 즉시 돌려줘야 해요. 구현 참고: 보통 종료된 프로세스의 종료 상태는 한 번 제공된 후에는 기본 운영체제가 다시 제공한다고 신뢰할 수 없어요. 따라서 종료 상태는 아마 캐시해야 해요. 또한 reap는 모니터링 중인 프로세스가 종료될 때까지 반환해서는 안 된다는 점에 유의하세요. 특히 프로세스가 일시 중지된 것뿐이라면 반환하지 않도록 구현이 조심해야 해요.

structure Status

Status 하위구조는 OS.Process.status 값의 가능한 시스템별 해석을 정의해요.

fromStatus s

추상 종료 상태 s를 시스템별 정보로 디코딩해요.

exit st

OS.Process.atExit에 등록된 모든 동작을 실행하고 모든 I/O 스트림을 비우고 닫은 다음, 종료 상태 st로 SML 프로세스를 종료해요.## 더 알아보기 (Learn more)