# HG changeset patch # User marton@basel.hu # Date 1302029041 -7200 # Node ID 4a9dcbd9e54f72cfa98014ca33c75f4450629557 # Parent 586e4a64964224c5b17aa304393727e2e9de13b0 -files of 0.13 beta -fixes so that it now compiles with the current dmd version diff -r 586e4a649642 -r 4a9dcbd9e54f bin/ddbg.exe Binary file bin/ddbg.exe has changed diff -r 586e4a649642 -r 4a9dcbd9e54f ddbgcompile.bat --- a/ddbgcompile.bat Tue Apr 05 20:35:59 2011 +0200 +++ b/ddbgcompile.bat Tue Apr 05 20:44:01 2011 +0200 @@ -1,7 +1,7 @@ REM This is an example how to compile it d: -cd D:\src\ddbg\ -D:\standalone\apaged-0.4.2-beta\bin\apaged.exe D:\src\ddbg\src\expression\expression.apd D:\src\ddbg\src\expression\expression_apd.d +cd D:\src\ddbg_continued\ +D:\standalone\apaged-0.4.2-beta\bin\apaged.exe D:\src\ddbg_continued\src\expression\expression.apd D:\src\ddbg_continued\src\expression\expression_apd.d D:\standalone\dmd.1.066\dmd\windows\bin\bud.exe -CFPATHD:\standalone\dmd.1.066\dmd\windows\bin -DCPATHD:\standalone\dmd.1.066\dmd\windows\bin -I. -Isrc -Jsrc -JD:\src\ddbg\src\cli -version=Windows2000 -version=WindowsNTonly -full -release -O -inline -odobj -ofbin\ddbg.exe udis86-1.4\libudis86\*.obj src\main diff -r 586e4a649642 -r 4a9dcbd9e54f src/breakpoint.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/breakpoint.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,199 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ +module breakpoint; + +import std.string; +import std.c.string; + +import dbgthread; +import codeview.codeview; +import dbgprocess; +import util; + +import win32.windef; + +enum StepMode { + e_in, e_over, e_out +} + +/************************************************************************************************** + Represents a software breakpoint. +**************************************************************************************************/ +class Breakpoint +{ + //--------------------------------------------------------------------------------------------- + // constants + const ubyte BREAKPOINT_OPCODE = 0xccu; + + //--------------------------------------------------------------------------------------------- + // variables + byte old_opcode; + bool active, + temporary, + deactivate_d_exception_handler, + propagate, /// when hit on a jmp/call/ret instruction, shall be reactivated on it's destination + hardware; + Breakpoint foreach_end; + Location location; + size_t frame_ptr, + threadId, + old_dr_value; + ubyte dr_index; + + //--------------------------------------------------------------------------------------------- + // properties + string file() { return location is null?null:location.file; } + uint line() { return location is null?0:location.line; } + uint address() { return location is null?0:location.address; } + + + //--------------------------------------------------------------------------------------------- + // construction + this(Location loc, bool temp, uint _threadId, bool _hardware=false) + { + hardware = _hardware; + threadId = _threadId; + temporary = temp; + location = loc; + } + + + //--------------------------------------------------------------------------------------------- + // methods + + /** + * + */ + string toString() + { + string tmp; + tmp.length = 100; + tmp.length = 0; + if ( location.path.length > 0 ) + tmp ~= format("%s ", location.path); + if ( file.length > 0 ) + tmp ~= format("%s:%d ", file, line); + if ( location.address > 0 ) + tmp ~= format("0x%x ", location.address); + if ( hardware ) + tmp ~= "hw "; + if ( threadId > 0 ) + tmp ~= format("thread %s", threadId); + else + tmp ~= format("all threads"); + return tmp; + } + + /********************************************************************************************** + Restores the opcode that has been overwritten for the given breakpoint. + Returns success. + **********************************************************************************************/ + bool deactivate(DbgProcess proc) + { + if ( !active ) + return true; + if ( proc is null ) + return false; + + if ( hardware ) + { + if ( threadId == 0 ) + { + foreach ( thread; proc.threads.values ) + clearHWBP(thread, 0); + } + else + clearHWBP(proc.threads[threadId], 0); + } + else if( !proc.writeProcessMemory(location.address, &old_opcode, ubyte.sizeof)) + { + DbgIO.println("restoreBreakpoint(): Failed to write original opcode at 0x%x", location.address); + return false; + } + + active = false; + return true; + } + + /********************************************************************************************** + Writes an int 3 opcode at the address of this breakpoint, saving the overwritten code. + Returns success. + **********************************************************************************************/ + bool activate(DbgProcess proc) + { + if( active ) + return true; + if( location.address == 0 || proc is null ) + return false; + + debug DbgIO.println("activating bp at 0x%x", location.address); + + if ( hardware ) + { + if ( threadId == 0 ) + { + foreach ( thread; proc.threads.values ) + setHWBP(thread, location.address, 0); + } + else + setHWBP(proc.threads[threadId], location.address, 0); + } + else + { + uint oldprot, oldprot2; + ubyte ccByte = cast(ubyte)0xcc; + + if( ubyte.sizeof > proc.readProcessMemory(location.address, &old_opcode, ubyte.sizeof) ) { + DbgIO.println( "readProcessMemory(): failed to read breakpoint opcode at 0x%08x", location.address ); + return false; + } + + ubyte opcode = BREAKPOINT_OPCODE; + if( ubyte.sizeof > proc.writeProcessMemory(location.address, &opcode, ubyte.sizeof) ) { + DbgIO.println("writeProcessMemory(): Failed to write breakpoint at 0x%08x", location.address ); + return false; + } + } + + active = true; + return true; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void setHWBP(DbgThread thread, size_t address, ubyte index) + { + assert(index < 4); + + CONTEXT ctx; + thread.getContext(ctx, CONTEXT_DEBUG_REGISTERS); + DbgIO.println("Dr0 = %x\nDr1 = %x\nDr2 = %x\nDr3 = %x\nDr7 = %x\n", ctx.Dr0, ctx.Dr1, ctx.Dr2, ctx.Dr3, ctx.Dr7); + + old_dr_value = *(&ctx.Dr0 + index); + *(&ctx.Dr0 + index) = address+thread.getDsBase; + dr_index = index; + + ctx.Dr7 |= 1<<10 | (1 << index) | (15 << (16+index*4)); + DbgIO.println("Dr0 = %x\nDr1 = %x\nDr2 = %x\nDr3 = %x\nDr7 = %x\n", ctx.Dr0, ctx.Dr1, ctx.Dr2, ctx.Dr3, ctx.Dr7); + thread.setContext(ctx); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void clearHWBP(DbgThread thread, ubyte index) + { + assert(index < 4); + + CONTEXT ctx; + thread.getContext(ctx, CONTEXT_DEBUG_REGISTERS); + DbgIO.println("Dr0 = %x\nDr1 = %x\nDr2 = %x\nDr3 = %x\nDr7 = %x\n", ctx.Dr0, ctx.Dr1, ctx.Dr2, ctx.Dr3, ctx.Dr7); + + ctx.Dr7 &= ~((1 << index) | (15 << (16+index*4))); + DbgIO.println("Dr0 = %x\nDr1 = %x\nDr2 = %x\nDr3 = %x\nDr7 = %x\n", ctx.Dr0, ctx.Dr1, ctx.Dr2, ctx.Dr3, ctx.Dr7); + thread.setContext(ctx); + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/callstack.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/callstack.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,114 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +import util; +import codeview.codeview; +import expression.evaluationcontext; + +import std.string; + +/************************************************************************************************** + Wraps the raw stack data with functions for unwinding it. +**************************************************************************************************/ +class CallStack +{ + ubyte[] data; + uint base_ptr, // the "base" of the stack, i.e. the largest address + top_ptr, // the current top of the stack = Esp + frame_ptr; // the current frame pointer + + /********************************************************************************************** + Initializes the object with pointers to base, top (esp) and frame (ebp) + of the stack. Resizes the data array to the required size. + **********************************************************************************************/ + this(uint base_ptr_, uint top_ptr_, uint frame_ptr_) + { + base_ptr = base_ptr_; + top_ptr = top_ptr_; + frame_ptr = frame_ptr_; + data.length = base_ptr-top_ptr; + } + + /********************************************************************************************** + Calculates the first frame. + Params: prev_index = first byte of previous frame pointer + Returns: Array covering the frame. + **********************************************************************************************/ + ubyte[] firstFrame(out uint prev_index) + { + prev_index = frame_ptr-top_ptr; + if ( prev_index >= data.length ) + return data; + return data[0..prev_index]; + } + + /********************************************************************************************** + Calculates the previous frame. + Params: + frame_index = start of desired frame in data array + prev_index = start of previous to desired frame in data array + Returns: Array covering the previous frame. + **********************************************************************************************/ + ubyte[] prevFrame(in uint frame_index, out uint prev_index) + { + if ( frame_index >= data.length-4 ) + return null; + + uint prev_frame_ptr = (cast(uint[])data)[frame_index>>2]; + if ( prev_frame_ptr < top_ptr || prev_frame_ptr > base_ptr ) + return null; + + prev_index = prev_frame_ptr-top_ptr; + assert( prev_index > frame_index && prev_index <= data.length ); + return data[frame_index..prev_index]; + } + + /********************************************************************************************** + + **********************************************************************************************/ + ubyte[] getFrame(uint frame_level) + { + uint prev_frame_idx; + ubyte[] frame = firstFrame(prev_frame_idx); + for ( ; frame_level > 0; --frame_level ) + frame = prevFrame(prev_frame_idx, prev_frame_idx); + return frame; + } + + /********************************************************************************************** + Loads data from the stack for a given symbol. + Returns: Array of bytes continaing the data + **********************************************************************************************/ + bool loadSymbolData(StackSymbol sym, SymbolData symdata, uint frame_level=0) + { + if ( sym is null ) + return false; + uint prev_frame_idx; + ubyte[] frame = firstFrame(prev_frame_idx); + for ( ; frame_level > 0; --frame_level ) + frame = prevFrame(prev_frame_idx, prev_frame_idx); + + symdata.defered_load = true; + + bool loadSymbolData(uint offset) + { + // index is in this frame + if ( offset <= frame.length-sym.size ) { + symdata.len = sym.size; + symdata.ptr = top_ptr + (frame.ptr - data.ptr) + offset; + return true; + } + assert( offset >= frame.length ); + // consider previous frame + offset -= frame.length; + frame = prevFrame(prev_frame_idx, prev_frame_idx); + if ( frame !is null ) + return loadSymbolData(offset); + return false; + } + + return loadSymbolData(frame.length+sym.cvdata.offset); + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/cli/ddbg_help.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cli/ddbg_help.txt Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,72 @@ + Running +----------------------------------------------------------------------------- +in step into at source level +ov step over at source level +out step out at source level +r run/continue the program + Breakpoints +----------------------------------------------------------------------------- +bp [:[#]] [ind] set breakpoint #index at given file:line + optionally only for the given thread id + optionally with the given breakpoint index +dbp [:|#index|*] delete breakpoint by index, line or all +lbp list breakpoints +ltbp list temporary breakpoints + Stack/Memory/Registers +----------------------------------------------------------------------------- +dm dump memory (start in hex, length in dec) +dr [cpu] [fpu] [mmx] [sse] dump registers [toggle register groups] +ds dump stack (last line is top) +lsv list variables in current scope +mi [free] [rsrv] memory information. lists blocks in state + commit and optionally free and reserve +us unwind stack, prints full stacktrace + Expressions +----------------------------------------------------------------------------- += evaluate expression +ed set max depth of implicit evaluation of + recursive structures +el set max number of array elements to print +er toggle between ed 0 and previous ed +f select frame for evaluation. + default: current frame = 0 +t type of expression + Source +----------------------------------------------------------------------------- +jkf toggle whether to switch to stack frame of + last known source location on exception +lsm [substring] list source modules +lsp list source search paths +ps [count] print count lines of source before + and after current location +sp add source search path + Disassembly +----------------------------------------------------------------------------- +da [start] disassemble from start + (default = function start) to next ret +dal [#lines] disassemble to/from +/- source lines + Threads +----------------------------------------------------------------------------- +lt list threads +st select thread to be evaluation context + Minidumps +----------------------------------------------------------------------------- +rmd read minidump from file +wmd write minidump to file + Miscellaneous +----------------------------------------------------------------------------- +arg set command line arguments +ii print image information +ldll list loaded DLLs +lm [substring] list debug modules +ld [substring] list data symbols +lf [substring] list function symbols +lg [substring] list global symbols +lp [substring] list global publics +ls [substring] list all symbols +nc toggle new console for process +onex on exception execute list of commands +onterm on termination execute list of commands +q quit debugger + +return repeats the last command diff -r 586e4a649642 -r 4a9dcbd9e54f src/cli/ddbgcli.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cli/ddbgcli.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1380 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ +module cli.ddbgcli; + +import std.string; +static import std.regexp; +import std.c.stdio : sscanf; +import std.c.string; +import std.demangle; + +import minidump; +import container; +import util; +import codeview.codeview; +import breakpoint; +import debugger; +import disasm; +import callstack; +import dbgprocess; +import dbgthread; +import expression.expression_apd; +import expression.datahandler : SymbolValue, DataHandler; +import expression.evaluationcontext; +import cli.userinterface; + +import win32.winbase; +import win32.winuser; +import win32.winnt; +import win32.dbghelp; + +/************************************************************************************************** + +**************************************************************************************************/ +class DdbgCLI : UserInterfaceBase +{ + const int PRINT_SOURCE_LINES = 3; + + string[] lastcmd, + onexCommands, + ontermCommands; + string debuggee, + command_line; + + uint current_frame_level; + + bool quit; + + const ubyte CPU_REGISTERS = 1, + FPU_REGISTERS = 2, + MMX_REGISTERS = 4, + SSE_REGISTERS = 8; + ubyte dump_registers = CPU_REGISTERS; + + uint lastEvaluationDepth = 1; + + bool auto_find_scope_frame, /// find frame of last active scope if current frame has no source/symbols + jump_to_last_known_location_on_exception = true; + + /********************************************************************************************** + + **********************************************************************************************/ + void init(string[] args) + { + DbgIO.println(WELCOME_STRING); + if ( args.length < 2 ) + throw new DebuggerException("Usage: ddbg [-cli=] [-cmd=] [arguments]"); + + debuggee = args[1]; + foreach ( inout arg; args ) + { + if ( find(arg, ' ') >= 0 ) + arg = "\""~arg~"\""; + } + command_line = join(args[1..$], " "); + + dbg = new Debugger(debuggee, this); + } + + int start() + { + while ( !quit ) + { + debug + readCommand(); + else + { + try readCommand(); + catch ( Exception e ) + DbgIO.println(e.msg); + } + } + return 0; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void singleStep() + { + DbgIO.println(describeLocation(dbg.current_address)); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void exitProcess() + { + DbgIO.println("Process terminated"); + cmdQueue ~= ontermCommands; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void loadedDLL(DLL dll) + { + if( dll !is null && dll.image.name.length ) { + DbgIO.write(dll.image.name); + DbgIO.println(" loaded at 0x%08x", dll.base); + } + else + DbgIO.writeln("unknown DLL loaded"); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void win32exception(uint threadId, EXCEPTION_RECORD* exrec) + { + DbgIO.println( + "Unhandled Exception: %s(0x%x) at %s thread(%d)", + getExceptionName(exrec.ExceptionCode), exrec.ExceptionCode, describeLocation(dbg.current_address), threadId + ); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void exception(uint threadId, string class_name, string msg, size_t obj_ptr) + { + if ( jump_to_last_known_location_on_exception ) + { + uint index; + current_frame_level = 0; + Location loc = dbg.images.findLocation(dbg.current_address); + + if ( loc.codeblock is null ) + { + dbg.stack.firstFrame(index); + ubyte[] frame = dbg.stack.prevFrame(index, index); + while ( loc.codeblock is null && frame !is null ) + { + uint ret_adr = (cast(uint[])frame)[1]; + loc = dbg.images.findLocation(ret_adr); + frame = dbg.stack.prevFrame(index, index); + ++current_frame_level; + } + } + } + + DbgIO.println("Unhandled D Exception (%s", class_name); + DbgIO.write(msg.length>0?" \""~msg~"\"":""); + DbgIO.println(") at %s thread(%d)", describeLocation(dbg.current_address), threadId); + cmdQueue ~= onexCommands; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void userInterrupt() + { + DbgIO.println("User interrupt at %s", describeLocation(dbg.current_address)); + } + + /********************************************************************************************** + + **********************************************************************************************/ + bool breakpoint(int index, Breakpoint bp, DbgThread thread) + { + if ( bp.hardware ) + { + DbgIO.println("Hardware breakpoint for 0x%x hit at %s thread(%d)", + bp.address, describeLocation(dbg.current_address), thread.id + ); + } + else if ( bp.file is null || bp.line == 0 ) + DbgIO.println("Unknown breakpoint hit at %s thread(%d)", describeLocation(bp.address), thread.id); + else + { + string[] source = dbg.getSourceFile(bp.file); + string source_line; + if ( source !is null && bp.line <= source.length ) + source_line = source[bp.line-1]; + + if ( !bp.temporary ) + DbgIO.print("Breakpoint %d hit at ", index); + DbgIO.println("%s:%d 0x%x thread(%d)", bp.file, bp.line, bp.address, thread.id); + if ( source_line.length > 0 ) + DbgIO.writeln(source_line); + } + return true; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void debugString(string str) + { + printf("OUTPUT DEBUG STRING:\n%s\n", toStringz(str)); + } + + /********************************************************************************************** + Command line parser. Gets called when debuggee is suspended. + **********************************************************************************************/ + bool parseCommand(string input) + { + if ( strip(input).length > 0 ) + { + auto r = std.regexp.RegExp("(([^\" \\t]+)|(\"[^\"]+\"))+"); + lastcmd.length = 0; + foreach ( m; r.search(input) ) + lastcmd ~= r.match(0); + } + if ( lastcmd.length <= 0 ) + return false; + + switch ( lastcmd[0] ) + { + case "help": + case "h": + case "?": + DbgIO.write(import("ddbg_help.txt")); + break; + case "=": + if ( !dbg.process_loaded && dbg.miniDump is null ) + break; + if ( lastcmd.length > 1 ) + { + try DbgIO.writeln(symbolValueToString(dbg.handleData(dbg.evaluateExpression(lastcmd[1], current_frame_level), false))); + catch ( EvaluationException e ) { + DbgIO.writeln(e.toString); + } + } + break; + case "arg": + if ( dbg.process_loaded ) + DbgIO.println("Warning: process already started"); + command_line = debuggee~" "~join(lastcmd[1..$], " "); + break; + // add breakpoint + case "bp": + int index; + if ( lastcmd.length < 2 ) { + DbgIO.println("invalid syntax - see help for details"); + break; + } + + int pos = find(lastcmd[1], '#'); + uint threadId; + if ( pos > 0 ) + { + threadId = cast(uint)atoi(lastcmd[1][pos+1..$]); + lastcmd[1] = lastcmd[1][0..pos]; + } + Location loc = new Location(lastcmd[1]); + loc.bind(dbg.images, dbg.source_search_paths); + if ( lastcmd.length > 2 ) + index = cast(int)atoi(lastcmd[2]); + + Breakpoint bp; + if ( index <= 0 && dbg.breakpoints.length > 0 ) + index = dbg.breakpoints.keys.dup.sort[$-1]+1; + bp = dbg.setBreakpoint(loc, index, threadId); + DbgIO.println("Breakpoint set: %s", bp.toString); + break; + // delete breakpoint + case "dbp": + if ( lastcmd.length > 1 ) + { + if ( lastcmd[1] == "*" ) + { + foreach ( uint i; dbg.breakpoints.keys ) + dbg.removeBreakpoint(i); + } + else if ( isNumeric(lastcmd[1]) ) + { + if ( !dbg.removeBreakpoint(cast(uint)atoi(lastcmd[1])) ) + DbgIO.println("invalid breakpoint index: %s",lastcmd[1]); + } + else + { + Location loc = new Location(lastcmd[1]); + loc.bind(dbg.images, dbg.source_search_paths); + if ( loc !is null ) + { + int bp_index; + dbg.getBreakpoint(loc, bp_index); + if ( bp_index >= 0 && !dbg.removeBreakpoint(bp_index) ) + DbgIO.println("No breakpoint set at "~lastcmd[1]); + } + else + DbgIO.println("dbp [:|#index|*]"); + } + } + else + DbgIO.println("dbp [:|#index|*]"); + break; + // set evaluation depth + case "er": + lastcmd.length = 1; + if ( dbg.evaluationDepth > 1 ) { + lastEvaluationDepth = dbg.evaluationDepth; + lastcmd ~= "1"; + } + else + lastcmd ~= .toString(lastEvaluationDepth); + case "ed": + if ( lastcmd.length < 2 || !isNumeric(lastcmd[1]) ) + DbgIO.println("Usage: ed "); + else { + dbg.evaluationDepth = cast(int)atoi(lastcmd[1]); + DbgIO.println("Expression evaluation depth is %d", dbg.evaluationDepth); + } + break; + case "el": + if ( lastcmd.length < 2 || !isNumeric(lastcmd[1]) ) + DbgIO.println("Usage: el "); + else { + DataHandler.max_elem_count = cast(int)atoi(lastcmd[1]); + DbgIO.println("Array evaluation length is %d", DataHandler.max_elem_count); + } + break; + // select frame + case "f": + if ( lastcmd.length > 1 ) + current_frame_level = cast(uint)atoi(lastcmd[1]); + DbgIO.println("Current frame level is %d", current_frame_level); + break; + // image base address + case "ii": + foreach ( img; dbg.images.images ) + { + uint ibase = img.imageBase; + DbgIO.println("ImageBase\t0x%x", ibase); + DbgIO.println("CodeBase\t0x%x", img.getCodeBase); + DbgIO.println("Sections:\nname\t\taddress\t\tsize\t\tcharacteristics"); + foreach ( s; img.sections ) + with ( *s.header ) DbgIO.println("%s\t0x%08x\t0x%08x\t0x%08x", cast(char[8])Name, ibase+VirtualAddress, Misc.VirtualSize, Characteristics); + } + break; + // jump to last known source frame + case "jkf": + jump_to_last_known_location_on_exception = !jump_to_last_known_location_on_exception; + DbgIO.println("%s to from of last known source location on exception", + jump_to_last_known_location_on_exception?"Jumping":"Not jumping" + ); + break; + // walk memory + case "mi": + if ( !dbg.process_loaded ) + break; + uint filteredStates = MEM_COMMIT; + foreach ( lc; lastcmd[1..$] ) + { + switch ( lc ) + { + case "free": filteredStates |= MEM_FREE; break; + case "rsrv": filteredStates |= MEM_RESERVE; break; + default: + } + } + + MEMORY_BASIC_INFORMATION[] mbis = dbg.process.walkMemory; + + DbgIO.println("Base AlcBase AlcProt RgnSize Stat Protect Type"); + foreach ( mbi; mbis ) + { + if ( (mbi.State & filteredStates) == 0 ) + continue; + + string state; + switch ( mbi.State ) + { + case MEM_COMMIT: state = "comt"; break; + case MEM_FREE: state = "free"; break; + case MEM_RESERVE: state = "rsrv"; break; + default: state = "unkn"; break; + } + + string type; + switch ( mbi.Type ) + { + case MEM_IMAGE: type = "imag"; break; + case MEM_MAPPED: type = "mapd"; break; + case MEM_PRIVATE: type = "priv"; break; + default: type = "unkn"; break; + } + + string protectName(uint prot) + { + string protStr; + switch ( prot & 0xff ) + { + case 0: protStr = "?"; break; + case PAGE_EXECUTE: protStr = "x"; break; + case PAGE_EXECUTE_READ: protStr = "xr"; break; + case PAGE_EXECUTE_READWRITE: protStr = "xrw"; break; + case PAGE_EXECUTE_WRITECOPY: protStr = "xwc"; break; + case PAGE_NOACCESS: protStr = "na"; break; + case PAGE_READONLY: protStr = "ro"; break; + case PAGE_READWRITE: protStr = "rw"; break; + case PAGE_WRITECOPY: protStr = "wc"; break; + default: protStr = format("%02x", prot & 0xff); break; + } + protStr ~= " "; + if ( prot & PAGE_GUARD ) + protStr ~= "g"; + if ( prot & PAGE_NOCACHE ) + protStr ~= "nc"; + return protStr; + } + + DbgIO.println("%08x %08x %- 7s %08x %s %- 7s %s", + cast(size_t)mbi.BaseAddress, cast(size_t)mbi.AllocationBase, protectName(mbi.AllocationProtect), + mbi.RegionSize, state, protectName(mbi.Protect), type + ); + } + break; + // list breakpoints + case "lbp": + if ( dbg.breakpoints.length <= 0 ) + DbgIO.println("no breakpoints set"); + foreach ( uint i, bp; dbg.breakpoints ) + DbgIO.println("%d %s", i, bp.toString); + break; + // ldll + case "ldll": + if ( !dbg.process_loaded ) + break; + DbgIO.println("Base Name"); + foreach ( dll; dbg.process.loaded_dlls ) + DbgIO.println("%08x %s", dll.base, dll.image.name); + break; + // list temporary breakpoints + case "ltbp": + if ( dbg.temp_breakpoints.empty ) + DbgIO.println("no temporary breakpoints set"); + foreach ( bp; dbg.temp_breakpoints ) + DbgIO.writeln(bp.value.toString); + break; + // list debug modules + case "lm": + Module[] modules_noinfo; + foreach ( img; dbg.images.images ) + { + foreach ( m; img.codeView.modulesByIndex ) + { + string name = m.name; + + if ( m.header.iLib > 0 ) + name ~= " from "~img.codeView.libraries[m.header.iLib]; + + if ( lastcmd.length > 1 && find(name, lastcmd[1]) < 0 ) + continue; + + bool has_info = false; + with ( m.symbols ) + { + if ( proc_symbols.length+stack_symbols.length+data_symbols.length > 0 ) + { + DbgIO.println( + "%s\n\tSymbols: %d proc %d stack %d data", + name, proc_symbols.length, stack_symbols.length, data_symbols.length + ); + has_info = true; + } + } + if ( m.source_module !is null ) + { + DbgIO.println("\tSource files:"); + has_info = true; + foreach ( sf; m.source_module.files ) + DbgIO.println("\t\t%s", sf.name); + } + if ( !has_info ) + modules_noinfo ~= m; + } + } + if ( modules_noinfo.length > 0 ) + { + DbgIO.println("Modules without debug information:"); + foreach ( img; dbg.images.images ) + { + foreach ( m; modules_noinfo ) + { + string name = m.name; + + if ( m.header.iLib > 0 ) + name ~= " from "~img.codeView.libraries[m.header.iLib]; + + DbgIO.println("%s #segs=%d", name, m.seginfos.length); + if ( m.source_module !is null ) + { + DbgIO.println("\tSource files:"); + foreach ( sf; m.source_module.files ) + DbgIO.println("\t\t%s", sf.name); + } + } + } + } + break; + // list source modules + case "lsm": + uint[string] line_counters; + uint[string] seg_counters; + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + foreach ( m; img.codeView.modulesByIndex ) + { + if ( m.source_module is null ) + continue; + foreach ( sf; m.source_module.files ) + { + if ( lastcmd.length > 1 && find(sf.name, lastcmd[1]) < 0 ) + continue; + uint lines = sf.lines.length; + if ( (sf.name in line_counters) is null ) { + seg_counters[sf.name] = sf.segments.length; + line_counters[sf.name] = lines; + } + else { + seg_counters[sf.name] += sf.segments.length; + line_counters[sf.name] += lines; + } + } + } + } + string[] lc_keys = line_counters.keys.dup; + lc_keys.sort; + foreach ( key; lc_keys ) + DbgIO.println("%s\t\tsegs=%d lines=%d", key, seg_counters[key], line_counters[key]); + break; + // list source lines per module + case "lsl": + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + foreach ( m; img.codeView.modulesByIndex ) + { + if ( m.source_module is null ) + continue; + DbgIO.println("module %s", m.name); + foreach ( sf; m.source_module.files ) + { + DbgIO.println("file %s", sf.name); + if ( lastcmd.length > 1 && find(sf.name, lastcmd[1]) < 0 ) + continue; + foreach ( l; sf.lines.reverse ) + { + DbgIO.println("line %d", l); + } + } + } + } + break; + // list all symbols + case "ls": +/* + void dumpSymbolAVL(AVLNode!(NamedSymbol) node, uint indent=0) + { + string indentstr = new char[indent*2]; + indentstr[0..indent*2] = ' '; + DbgIO.println("%s%s", indentstr, node.value.name_notype); + if ( node.left !is null ) + dumpSymbolAVL(node.left, indent+1); + if ( node.right !is null ) + dumpSymbolAVL(node.right, indent+1); + } + DbgIO.println("AVL dump:"); + dumpSymbolAVL(dbg.image.codeView.globalNamedSymbols.root); +*/ + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + printSymbols(img.codeView, img.codeView.global_pub.named_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.global_sym.named_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.static_sym.named_symbols, lastcmd.length>1?lastcmd[1]:null); + foreach ( m; img.codeView.modulesByIndex ) + printSymbols(img.codeView, m.symbols.named_symbols, lastcmd.length>1?lastcmd[1]:null); + } + break; + // list source search paths + case "lsp": + foreach ( s; dbg.source_search_paths ) + DbgIO.writeln(s); + break; + // list function symbols + case "lf": + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + printSymbols(img.codeView, img.codeView.global_pub.proc_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.global_sym.proc_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.static_sym.proc_symbols, lastcmd.length>1?lastcmd[1]:null); + foreach ( m; img.codeView.modulesByIndex ) + printSymbols(img.codeView, m.symbols.proc_symbols, lastcmd.length>1?lastcmd[1]:null); + } + break; + // list data symbols + case "ld": + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + printSymbols(img.codeView, img.codeView.global_pub.data_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.global_sym.data_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.static_sym.data_symbols, lastcmd.length>1?lastcmd[1]:null); + foreach ( m; img.codeView.modulesByIndex ) + printSymbols(img.codeView, m.symbols.data_symbols, lastcmd.length>1?lastcmd[1]:null); + } + break; + // list global symbols + case "lg": + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + printSymbols(img.codeView, img.codeView.global_pub.named_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.global_sym.named_symbols, lastcmd.length>1?lastcmd[1]:null); + } + break; + // list global publics + case "lp": + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + printSymbols(img.codeView, img.codeView.global_pub.named_symbols, lastcmd.length>1?lastcmd[1]:null); + } + break; + // list scope variables + case "lsv": + if ( dbg.process_loaded || dbg.miniDump !is null ) + evalScopeSymbols(); + break; + // list threads + case "lt": + if ( dbg.miniDump !is null ) + { + DbgIO.println(" id pri sus location"); + MINIDUMP_THREAD[] threads = dbg.miniDump.threads; + foreach ( thread; threads ) + { + CONTEXT* ctx; + ctx = cast(CONTEXT*)dbg.miniDump.rvaToVa(thread.ThreadContext.Rva); + Location loc = dbg.images.findLocation(ctx.Eip); + + DbgIO.println("%s%s%- 6d %- 3d %- 2d %s", + thread.ThreadId==dbg.thread_id?">":" ", thread.ThreadId==dbg.miniDump.threadInfo.mainThreadId?"*":" ", + thread.ThreadId, thread.Priority, thread.SuspendCount, describeLocation(loc) + ); + } + } + else + { + DbgIO.println(" id pri sus creation exit kernel user location"); + foreach ( t; dbg.process.threads.values ) + { + // id name location pri pri-boost start-info times + ulong creation, + exit, + kernel, + user; + + t.times(creation, exit, kernel, user); + + CONTEXT ctx; + t.getContext(ctx); + Location loc = dbg.images.findLocation(ctx.Eip); + + DbgIO.println("%s%s%- 6d %- 3d%s %- 2d %s %s %s %s %s", + t.id==dbg.thread_id?">":" ", t.id==dbg.process.mainThreadId?"*":" ", t.id, + t.priority, t.priorityBoost?"b":" ", t.suspendCount, + formatTicks(creation), formatTicks(exit), formatTicks(kernel), formatTicks(user), + describeLocation(loc) + ); + } + } + break; + // no console + case "nc": + dbg.create_new_console = !dbg.create_new_console; + DbgIO.println("Starting debuggee in %s console", dbg.create_new_console?"new":"this"); + break; + // on exception + case "onex": + if ( lastcmd.length < 2 ) + { + foreach ( cmd; onexCommands ) + DbgIO.writeln(cmd[0..$-1]); + } + else + { + onexCommands = null; + string cmdList; + foreach ( cmd; lastcmd[1..$] ) + { + if ( cmd[0] == '"' && cmd[$-1] == '"' ) + cmdList ~= " "~cmd[1..$-1]; + else + cmdList ~= " "~cmd; + } + foreach ( cmd; split(cmdList, ";") ) + onexCommands ~= strip(cmd)~";"; + } + break; + // on termination + case "onterm": + if ( lastcmd.length < 2 ) + { + foreach ( cmd; ontermCommands ) + DbgIO.writeln(cmd[0..$-1]); + } + else + { + ontermCommands = null; + string cmdList; + foreach ( cmd; lastcmd[1..$] ) + { + if ( cmd[0] == '"' && cmd[$-1] == '"' ) + cmdList ~= " "~cmd[1..$-1]; + else + cmdList ~= " "~cmd; + } + foreach ( cmd; split(cmdList, ";") ) + ontermCommands ~= strip(cmd)~";"; + } + break; + // print source + case "ps": + Location loc; + string[] source; + + do + { + if ( current_frame_level > 0 ) + { + auto frame = dbg.stack.getFrame(current_frame_level); + if ( frame is null ) + goto Lnotfound; + uint ret_adr = (cast(uint[])frame)[1]; + loc = dbg.images.findLocation(ret_adr); + } + else + loc = dbg.images.findLocation(dbg.current_address); + debug DbgIO.println("found location %s", loc.file); + + source = dbg.getSourceFile(loc.file); + if ( source !is null ) + break; + if ( auto_find_scope_frame ) { + ++current_frame_level; + continue; + } + Lnotfound: + DbgIO.writeln("Source file for current location unknown"); + break; + } + while( source is null ); + + int start_line, end_line; + if ( lastcmd.length > 1 ) { + start_line = cast(uint)atoi(lastcmd[1]); + end_line = loc.line + start_line; + start_line = loc.line - start_line; + } + else if ( loc.scope_sym !is null ) + { + ProcedureSymbol psym = cast(ProcedureSymbol)loc.scope_sym; + auto start_address = loc.getCodeBase + psym.cvdata.offset; + auto start_loc = dbg.images.findLocation(start_address); + auto end_loc = dbg.images.findLocation(start_address+psym.cvdata.proc_length-1); + debug DbgIO.println("address range: 0x%x 0x%x", start_address, start_address+psym.cvdata.proc_length-1); + debug DbgIO.println("lines before prev: %d - %d", start_loc.line, end_loc.line); + end_loc = dbg.images.findPrevSrcLine(end_loc); + start_line = start_loc.line; + if ( end_loc !is null ) + end_line = end_loc.line; + } + if ( end_line == 0 ) { + start_line = loc.line - PRINT_SOURCE_LINES; + end_line = loc.line + PRINT_SOURCE_LINES; + } + + debug DbgIO.println("lines: %d - %d", start_line, end_line); + for ( int l = dmax(0, start_line-1); l < dmin(cast(int)source.length, end_line); ++l ) + { + if ( l+1 == loc.line ) + DbgIO.write(">"); + DbgIO.writeln(source[l]); + } + break; + // quit + case "q": + dbg.abort = true; + quit = true; + return true; + // run/continue + case "r": + if ( dbg.miniDump !is null ) { + DbgIO.println("Command not valid in post-mortem mode"); + break; + } + if ( dbg.process_loaded ) { + dbg.resume; + return true; + } + else { + dbg.start(command_line); + return true; + } + // single-step + case "s": + if ( dbg.miniDump !is null ) { + DbgIO.println("Command not valid in post-mortem mode"); + break; + } + if ( dbg.process_loaded ) { + dbg.single_step = true; + dbg.activateSingleStep(true); + } + return true; + // add source search path + case "sp": + if ( lastcmd.length > 1 ) + { + string sp = lastcmd[1].dup; + if ( sp[$-1] != '\\' ) + sp ~= '\\'; + dbg.source_search_paths ~= sp; + } + else + DbgIO.println("usage: sp "); + break; + // switch thread + case "st": + if ( lastcmd.length < 2 ) { + DbgIO.writeln("Usage: st "); + break; + } + size_t threadId = cast(size_t)atoi(lastcmd[1]); + if ( dbg.miniDump !is null ) + { + foreach ( thread; dbg.miniDump.threads ) + { + if ( threadId == thread.ThreadId ) { + dbg.selectThread(threadId); + break; + } + } + } + else + { + foreach ( t; dbg.process.threads.values ) + { + if ( threadId == t.id ) { + dbg.selectThread(threadId); + break; + } + } + } + break; + // step over + case "ov": + if ( dbg.miniDump !is null ) { + DbgIO.println("Command not valid in post-mortem mode"); + break; + } + if ( dbg.process_loaded && dbg.step(StepMode.e_over) ) + { + debug foreach ( bp; dbg.temp_breakpoints ) + DbgIO.writeln(bp.value.toString); + return true; + } + break; + // step into + case "in": + if ( dbg.miniDump !is null ) { + DbgIO.println("Command not valid in post-mortem mode"); + break; + } + if ( dbg.process_loaded && dbg.step(StepMode.e_in) ) + { + debug foreach ( bp; dbg.temp_breakpoints ) + DbgIO.writeln(bp.value.toString); + return true; + } + break; + // step out + case "out": + if ( dbg.miniDump !is null ) { + DbgIO.println("Command not valid in post-mortem mode"); + break; + } + if ( dbg.process_loaded && dbg.step(StepMode.e_out) ) + { + debug foreach ( bp; dbg.temp_breakpoints ) + DbgIO.writeln(bp.value.toString); + return true; + } + break; + // disassemble + case "da": + if ( !dbg.process_loaded ) + break; + + uint start_address; + if ( current_frame_level > 0 ) { + auto frame = dbg.stack.getFrame(current_frame_level); + start_address = (cast(uint[])frame)[1]; + } + else + start_address = dbg.current_address; + + if ( lastcmd.length > 1 ) + sscanf(toStringz(lastcmd[1]), "%x", &start_address); + else + { + Location loc = dbg.images.findLocation(dbg.current_address); + if ( loc.scope_sym !is null ) { + ProcedureSymbol psym = cast(ProcedureSymbol)loc.scope_sym; + start_address = loc.getCodeBase + psym.cvdata.offset; + DisAsm.disasm(dbg.process, start_address, start_address+psym.cvdata.proc_length, &printDisassembly); + break; + } + } + DisAsm.disasm(dbg.process, start_address, 0, &printDisassembly); + break; + // disassemble line + case "dal": + if ( !dbg.process_loaded ) + break; + + int num_lines = 1; + if ( lastcmd.length > 1 ) + { + sscanf(toStringz(lastcmd[1]), "%d", &num_lines); + if ( num_lines < 0 ) + --num_lines; + } + + uint start_address; + if ( current_frame_level > 0 ) { + auto frame = dbg.stack.getFrame(current_frame_level); + start_address = (cast(uint[])frame)[1]; + } + else + start_address = dbg.current_address; + + for ( ; num_lines != 0; num_lines<0?++num_lines:--num_lines ) + { + Location loc = dbg.images.findLocation(start_address); + if ( loc is null ) { + DbgIO.println("No source line information available"); + break; + } + DisAsm.disasm( + dbg.process, + loc.getCodeBase+loc.codeblock.start, + loc.getCodeBase+loc.codeblock.end, + &printDisassembly + ); + } + break; + // dump registers + case "dr": + if ( lastcmd.length > 1 ) + { + foreach ( lc; lastcmd[1..$] ) + { + switch ( lc ) + { + case "cpu": dump_registers |= CPU_REGISTERS; break; + case "fpu": dump_registers |= FPU_REGISTERS; break; + case "mmx": dump_registers |= MMX_REGISTERS; break; + case "sse": dump_registers |= SSE_REGISTERS; break; + default: + DbgIO.println("Unknown register set \"%s\"", lc); + } + } + } + if ( dump_registers == 0 ) { + DbgIO.println("No register set selected. See help for usage of \"dr\""); + break; + } + if ( dbg.miniDump !is null ) + printRegisterDump(dbg.miniDump.getContext); + else if ( dbg.process_loaded ) + printRegisterDump(dbg.process.threads[dbg.thread_id]); + break; + // dump stack + case "ds": + if ( !dbg.process_loaded ) + break; + + int dump_length; + if ( lastcmd.length > 1 ) + dump_length = cast(int)atoi(lastcmd[1])*4; + else + { + CONTEXT ctx; + if ( dbg.process.threads[dbg.thread_id].getContext(ctx, CONTEXT_CONTROL) ) + dump_length = ctx.Ebp-ctx.Esp+8; + if ( dump_length <= 0 ) + dump_length = 16*4; + } + int top = dbg.stack.data.length>dump_length?dump_length:dbg.stack.data.length; + dumpMemory(dbg.stack.top_ptr, top, dbg.stack.data); + break; + case "dm": + if ( !dbg.process_loaded ) + break; + + if ( lastcmd.length < 3 ) { + DbgIO.println("usage: dm "); + break; + } + uint start; + sscanf(toStringz(lastcmd[1]), "%x", &start); + dumpMemory(start, cast(uint)atoi(lastcmd[2])); + break; + case "hwbp": + int index; + if ( lastcmd.length < 2 ) { + DbgIO.println("invalid syntax - see help for details"); + break; + } + + int pos = find(lastcmd[1], '#'); + uint threadId; + if ( pos > 0 ) + { + threadId = cast(uint)atoi(lastcmd[1][pos+1..$]); + lastcmd[1] = lastcmd[1][0..pos]; + } + + Location loc; + + size_t address; + sscanf(toStringz(lastcmd[1]), "%x", &address); + if ( address > 0 ) + loc = new Location(address); + else + loc = new Location(lastcmd[1]); + loc.bind(dbg.images, dbg.source_search_paths); + if ( lastcmd.length > 2 ) + index = cast(int)atoi(lastcmd[2]); + + Breakpoint bp; + if ( index <= 0 && dbg.breakpoints.length > 0 ) + index = dbg.breakpoints.keys.dup.sort[$-1]+1; + bp = dbg.setBreakpoint(loc, index, threadId, true); + DbgIO.println("Hardware Breakpoint set: %s", bp.toString); + break; + // type of expression + case "t": + if ( dbg.process_loaded && lastcmd.length > 1 ) + { + SymbolData sd; + try { + sd = dbg.evaluateExpression(lastcmd[1], current_frame_level); + string type = demangle("_D0"~sd.type); + DbgIO.println("%s\n%s", sd.type, type); + } + catch ( EvaluationException e ) { + DbgIO.writeln(e.toString); + } + } + break; + // unwind stack + case "us": + if ( dbg.process_loaded || dbg.miniDump !is null ) + unwindStack(); + break; + // write minidump + case "wmd": + if ( dbg.miniDump !is null ) { + DbgIO.println("Command not valid in post-mortem mode"); + break; + } + if ( !dbg.process_loaded ) + break; + if ( !MiniDump.haveMiniDump ) { + DbgIO.println("DbgHelp.dll required for MiniDump support.\nInstall the Microsoft Platform SDK or Windows XP."); + break; + } + if ( lastcmd.length < 2 ) { + DbgIO.println("Usage: wmd "); + break; + } + dbg.writeMiniDump(lastcmd[1]); + break; + // read minidump + case "rmd": + if ( dbg.process_loaded ) { + DbgIO.println("For post-mortem debugging, the process must not be started"); + break; + } + if ( !MiniDump.haveMiniDump ) { + DbgIO.println("DbgHelp.dll required for MiniDump support.\nInstall the Microsoft Platform SDK or Windows XP."); + break; + } + if ( lastcmd.length < 2 ) { + DbgIO.println("Usage: rmd "); + break; + } + dbg.readMiniDump(lastcmd[1]); + break; + // unknown command + default: + DbgIO.println("Unknown command '%s' ignored!", lastcmd[0]); + break; + } + + return false; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void dumpMemory(uint start, uint length, ubyte[] _data=null) + { + ubyte[] data; + if ( _data is null ) + { + data.length = length; + if ( !dbg.process.readProcessMemory(start, data.ptr, data.length) ) + return; + } + else + data = _data; + for ( uint i = 0; i < length; ++i ) + { + if ( i % (4*4) == 0 ) + { + if ( i > 0 ) + DbgIO.println(""); + DbgIO.print("%08x:", start+i); + } + if ( i % 4 == 0 ) + DbgIO.print(" "); + DbgIO.print("%02x", data[i]); + } + DbgIO.println(""); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void evalScopeSymbols() + { + uint scope_address = dbg.getScopeAddress(current_frame_level); + + ScopeSymbol scope_sym = dbg.images.findProcedureSymbol(scope_address); + if ( scope_sym is null ) { + DbgIO.println("No valid scope active"); + return; + } + + for ( ; scope_sym !is null; scope_sym = scope_sym.parent_scope ) + { + DbgIO.println("Scope: %s, parent: %x", scope_sym.name_type, cast(void*)scope_sym.parent_scope); + + StackSymbol[] locals_args = scope_sym.symbols.stack_symbols; + auto psym = cast(ProcedureSymbol)scope_sym; + if ( psym !is null ) + locals_args ~= psym.arguments.stack_symbols; + foreach ( sym; locals_args.sort ) + { + string name = sym.mangled_name; + DbgIO.print("%s = ", name); +// DbgIO.print("%s = [ebp%s%d] ", name, sym.cvdata.offset>0?"+":"", sym.cvdata.offset); + try DbgIO.writeln(symbolValueToString(dbg.handleData(dbg.evaluateExpression(name, current_frame_level, sym), true))); + catch ( EvaluationException e ) { + DbgIO.println(e.msg); + } + } + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + void printAsmLine(uint address, string bytes, string asmsource, string symbol, string location, string source) + { + bool nl = false; + if ( location !is null ) { + DbgIO.print("%s ", location); + nl = true; + } + if ( source !is null ) { + DbgIO.write(source); + nl = true; + } + if ( nl ) + DbgIO.println; + + // align next column + char[] indent; + int indcount = 2*12-bytes.length; + if ( indcount > 0 ) { + indent.length = indcount; + indent[0..indcount] = ' '; + } + // print aligned asm source + assert(asmsource !is null); + assert(bytes !is null); + DbgIO.print("%08x: ", address, bytes, indent, asmsource); + + if ( symbol !is null ) + DbgIO.write(symbol); + DbgIO.println; + } + + /********************************************************************************************** + Prints the register contents of the given thread's context. + **********************************************************************************************/ + void printRegisterDump(DbgThread thread) + { + CONTEXT ctxMem; + uint context_flags; + if ( dump_registers & CPU_REGISTERS ) + context_flags |= CONTEXT_FULL; + if ( dump_registers & FPU_REGISTERS ) + context_flags |= CONTEXT_FLOATING_POINT; + if ( dump_registers & (MMX_REGISTERS|SSE_REGISTERS) ) + context_flags |= CONTEXT_EXTENDED_REGISTERS; + if ( thread.getContext(ctxMem, context_flags) ) + printRegisterDump(&ctxMem); + else + DbgIO.println("ERROR: Couldn't get main thread's context"); + } + + void printRegisterDump(CONTEXT* ctx) + { + assert ( ctx !is null ); + + bool first = true; + + if ( dump_registers & CPU_REGISTERS ) + { + DbgIO.println("EAX = %08x\tEBX = %08x\tECX = %08x\tEDX = %08x", ctx.Eax, ctx.Ebx, ctx.Ecx, ctx.Edx); + DbgIO.println("EDI = %08x\tESI = %08x\tEBP = %08x\tESP = %08x", ctx.Edi, ctx.Esi, ctx.Ebp, ctx.Esp); + DbgIO.println("EIP = %08x\tEFL = %08x", ctx.Eip, ctx.EFlags); + DbgIO.println(" CS = %08x\t DS = %08x\t ES = %08x\t FS = %08x", ctx.SegCs, ctx.SegDs, ctx.SegEs, ctx.SegFs); + DbgIO.println(" GS = %08x\t SS = %08x", ctx.SegGs, ctx.SegSs); + first = false; + } + + if ( dump_registers & FPU_REGISTERS ) + { + if ( !first ) + DbgIO.println(); + DbgIO.println("FCW = %04x\tFSW = %04x\tFTW = %04x\tFOP = %04x", + cast(ushort)ctx.FloatSave.ControlWord, cast(ushort)ctx.FloatSave.StatusWord, + cast(ushort)ctx.FloatSave.TagWord, (cast(ushort[])ctx.ExtendedRegisters)[3] + ); + DbgIO.println("IP = %08x\tCS = %04x\tDP = %08x\tDS = %04x", + (cast(uint[])ctx.ExtendedRegisters)[2], (cast(ushort[])ctx.ExtendedRegisters)[6], + (cast(uint[])ctx.ExtendedRegisters)[4], (cast(ushort[])ctx.ExtendedRegisters)[10] + ); + for ( int i = 0; i < 8; ++i ) + DbgIO.println("ST%d = % .16e", i, (cast(real[])ctx.FloatSave.RegisterArea)[i]); + first = false; + } + + if ( dump_registers & MMX_REGISTERS ) + { + if ( !first ) + DbgIO.println(); + for ( int i = 0; i < 8; ++i ) + { + DbgIO.println("MM%d = %016x", i, (cast(long[])ctx.ExtendedRegisters)[4+i*2]); + DbgIO.println(" = [%.6g, %.6g]", + (cast(float[])ctx.ExtendedRegisters)[8+i*4], + (cast(float[])ctx.ExtendedRegisters)[8+i*4+1] + ); + } + first = false; + } + + if ( dump_registers & SSE_REGISTERS ) + { + if ( !first ) + DbgIO.println(); + DbgIO.println("MXCSR = %08x", (cast(uint[])ctx.ExtendedRegisters)[6]); + for ( int i = 0; i < 8; ++i ) + { + DbgIO.println("XMM%d = %016x%016x", i, (cast(long[])ctx.ExtendedRegisters)[20+i*2+1], (cast(long[])ctx.ExtendedRegisters)[20+i*2]); + DbgIO.println(" = [%.6g, %.6g, %.6g, %.6g]", + (cast(float[])ctx.ExtendedRegisters)[40+i*4], + (cast(float[])ctx.ExtendedRegisters)[40+i*4+1], + (cast(float[])ctx.ExtendedRegisters)[40+i*4+2], + (cast(float[])ctx.ExtendedRegisters)[40+i*4+3] + ); + DbgIO.println(" = [%.12g, %.12g]", + (cast(double[])ctx.ExtendedRegisters)[20+i*2], + (cast(double[])ctx.ExtendedRegisters)[20+i*2+1] + ); + } + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + string symbolValueToString(SymbolValue val) + { + return symbolValueToString(val,""); + } + + string symbolValueToString(SymbolValue val, string indent) + { + string str; + if ( val.name !is null ) + str = val.name~" = "; + if ( val.value !is null ) + str ~= val.value; + else + { + if ( val.children.length > 0 ) + { + str ~= "{"; + bool first = true; + foreach ( c; val.children ) + { + if ( first ) + first = false; + else + str ~= ","; + str ~= "\n "~indent~symbolValueToString(c, indent~" "); + } + str ~= "\n"~indent~"}"; + } + else + str ~= "{}"; + } + return str; + } + + /********************************************************************************************** + Read command and call CLI supplied parser function. + Gets called when debuggee is suspended. + **********************************************************************************************/ + bool readCommand() + { + if ( cmdQueue.length <= 0 ) { + DbgIO.write("->"); + string input = DbgIO.readln(); + cmdQueue ~= input; + } + if ( cmdQueue.length <= 0 ) + return false; + + string cmd = strip(cmdQueue[0]); + cmdQueue = cmdQueue[1..$]; + if ( cmd.length > 0 && cmd[$-1] == ';' ) { + cmd = cmd[0..$-1]; + DbgIO.writeln("->"~cmd); + } + return parseCommand(cmd); + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/cli/gdbcli.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cli/gdbcli.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,832 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ +module cli.gdbcli; + +import std.string; +static import std.regexp; +import std.c.stdio : sscanf; +import std.c.string; +import std.demangle; + +import util; +import codeview.codeview; +import breakpoint; +import debugger; +import disasm; +import callstack; +import dbgprocess; +import dbgthread; +import expression.expression_apd; +import expression.datahandler : SymbolValue; +import expression.evaluationcontext; +import cli.userinterface; + +import win32.winbase; +import win32.winuser; +import win32.winnt; + +/************************************************************************************************** + +**************************************************************************************************/ +class GDBCLI : UserInterfaceBase +{ + string[] lastcmd; + + uint current_frame_level; + + string prompt, + command_line, + debuggee; + bool fullname = false, + quit; + + /********************************************************************************************** + + **********************************************************************************************/ + this() + { + prompt = "(gdb) "; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void init(string[] args) + { + DbgIO.println(WELCOME_STRING); + if ( args.length < 2 ) + throw new DebuggerException("Usage: ddbg -cli=gdb [-cmd=] [-fullname] -args [arguments]"); + + bool read_args = false; + Lfe: foreach ( int i, a; args ) + { + switch ( a ) + { + case "-fullname": + case "--fullname": + fullname = true; + break; + case "-args": + case "--args": + read_args=true; + break; + default: + debuggee = a; + if ( read_args ) + { + if ( find(a, ' ') >= 0 ) + command_line = "\""~a~"\""; + else + command_line = a; + if ( args.length > i+1 ) + command_line ~= " "~join(args[i+1..$], " "); + break Lfe; + } + } + } + + dbg = new Debugger(debuggee, this); + dbg.create_new_console = true; + } + + int start() + { + while ( !quit ) + { + try readCommand(); + catch ( Exception e ) + DbgIO.println(e.msg); + } + return 0; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void singleStep() + { + DbgIO.println(describeLocation(dbg.current_address)); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void exitProcess() + { + DbgIO.println("Program exited"); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void loadedDLL(DLL dll) + { + if( dll !is null && dll.image.name.length ) + DbgIO.writeln(dll.image.name~" loaded"); + else + DbgIO.writeln("unknown DLL loaded"); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void win32exception(uint threadId, EXCEPTION_RECORD* exrec) + { + DbgIO.println( + "Program received signal SIG Unhandled Exception: %s(0x%x) at 0x%x", + getExceptionName(exrec.ExceptionCode), exrec.ExceptionCode, exrec.ExceptionAddress //describeLocation(dbg.current_address) + ); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void exception(uint threadId, string class_name, string msg, size_t obj_ptr) + { + DbgIO.println( + "Program received signal SIG Unhandled D Exception (%s%s) at %s", + class_name, msg.length>0?" \""~msg~"\"":"", describeLocation(dbg.current_address) + ); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void userInterrupt() + { + DbgIO.println("User interrupt at %s", describeLocation(dbg.current_address)); + } + + /********************************************************************************************** + + **********************************************************************************************/ + bool breakpoint(int index, Breakpoint bp, DbgThread thread) + { + if ( bp.file is null || bp.line == 0 ) + DbgIO.println("Unknown breakpoint hit at %s", describeLocation(bp.address)); + else + DbgIO.println("\032\032%s:%d:0:begmidl:0x%08x", fullname?dbg.getFullSourcePath(bp.file):bp.file, bp.line, bp.address); + return true; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void debugString(string str) + { + printf("Error OUTPUT DEBUG STRING:\n%s\n", toStringz(str)); + } + + /********************************************************************************************** + Command line parser. Gets called when debuggee is suspended. + **********************************************************************************************/ + bool parseCommand(string input) + { + if ( strip(input).length > 0 ) + { + auto r = std.regexp.RegExp("(([^\" \\t]+)|(\"[^\"]+\"))+"); + lastcmd.length = 0; + foreach ( m; r.search(strip(input)) ) + lastcmd ~= r.match(0); + } + if ( lastcmd.length <= 0 ) + return false; + + int slash_pos = find(lastcmd[0], '/'); + if ( slash_pos >= 0 ) { + lastcmd ~= lastcmd[0]; + lastcmd[0] = lastcmd[0][0..slash_pos]; + } + + switch ( lastcmd[0] ) + { + case "help": + DbgIO.println("GDB emulation mode - no help available, yet"); + break; + case "delete": + if ( lastcmd.length < 2 ) + DbgIO.println("Warning: too few arguments for set"); + else switch ( lastcmd[1] ) + { + case "breakpoints": + if ( lastcmd.length < 3 ) + { + foreach ( uint i; dbg.breakpoints.keys ) + dbg.removeBreakpoint(i); + } + else if ( !isNumeric(lastcmd[2]) ) + DbgIO.println("Warning: invalid breakpoint index '%s'", lastcmd[2]); + else + dbg.removeBreakpoint(cast(uint)atoi(lastcmd[2])); + break; + default: + DbgIO.println("Warning: unknown argument %s", lastcmd[1]); + } + break; + case "set": + if ( lastcmd.length < 2 ) + DbgIO.println("Warning: too few arguments for set"); + else switch ( lastcmd[1] ) + { + case "prompt": + if ( lastcmd.length < 3 ) + DbgIO.println("Warning: too few arguments for set prompt"); + else + prompt = lastcmd[2]; + break; + case "args": + if ( dbg.process_loaded ) + DbgIO.println("Warning: process already started"); + command_line = debuggee~" "~join(lastcmd[2..$], " "); + break; + default: + DbgIO.println("Warning: unknown variable %s", lastcmd[1]); + } + break; + case "info": + if ( lastcmd.length < 2 ) + DbgIO.println("Warning: too few arguments for info"); + else + { + switch ( lastcmd[1] ) + { + case "locals": + if ( dbg.process_loaded ) + { + uint scope_address = dbg.getScopeAddress(current_frame_level); + ScopeSymbol scope_sym = dbg.images.findProcedureSymbol(scope_address); + for ( ; scope_sym !is null; scope_sym = scope_sym.parent_scope ) + { + if ( scope_sym is null ) + DbgIO.println("No valid scope active"); + else + evalStackSymbols(scope_sym.symbols.stack_symbols); + } + } + break; + case "args": + if ( dbg.process_loaded ) + { + uint scope_address = dbg.getScopeAddress(current_frame_level); + ScopeSymbol scope_sym = dbg.images.findProcedureSymbol(scope_address); + for ( ; scope_sym !is null; scope_sym = scope_sym.parent_scope ) + { + if ( scope_sym is null ) + DbgIO.println("No valid scope active"); + else + { + auto psym = cast(ProcedureSymbol)scope_sym; + if ( psym !is null ) + evalStackSymbols(psym.arguments.stack_symbols); + } + } + } + break; + case "registers": + printRegisterDump(dbg.process.threads[dbg.thread_id]); + break; + case "frame": + uint scope_address = dbg.getScopeAddress(current_frame_level); + ubyte[] frame = dbg.stack.getFrame(current_frame_level); + Location loc = dbg.images.findLocation(scope_address); + DbgIO.print("Stack level %d, frame at ", current_frame_level); + if ( loc.scope_sym !is null ) { + ProcedureSymbol psym = cast(ProcedureSymbol)loc.scope_sym; + DbgIO.println("0x%x:", loc.getCodeBase + psym.cvdata.offset + psym.cvdata.debug_start); + } + else + DbgIO.println("0x%x:", dbg.current_address); + + DbgIO.print(" eip = 0x%x in %s (", + loc.address, loc.scope_sym is null?"??":loc.scope_sym.name_notype + ); + + if ( loc.codeblock !is null ) + DbgIO.print("%s:%d", loc.file, loc.line); + else if ( loc.mod !is null ) + DbgIO.write(loc.mod.name); + else + { + DLL dll = dbg.process.findDLL(loc.address); + if ( dll !is null ) + DbgIO.write(dll.image.name); + } + + DbgIO.println("); saved eip 0x%x", (cast(uint[])frame)[1]); + break; + default: + DbgIO.println("Warning: unknown argument %s", lastcmd[1]); + } + } + break; + // select frame + case "select-frame": + if ( lastcmd.length > 1 ) + current_frame_level = cast(uint)atoi(lastcmd[1]); + DbgIO.println("Current frame level is %d", current_frame_level); + break; + // add breakpoint + case "tbreak": + case "clear": + case "break": + int index; + if ( lastcmd.length < 2 ) { + DbgIO.println("invalid syntax - see help for details"); + break; + } + Location loc = new Location(lastcmd[1]); + loc.bind(dbg.images, dbg.source_search_paths); + if ( loc is null ) + break; + if ( lastcmd.length > 2 ) + index = cast(int)atoi(lastcmd[2]); + + if ( lastcmd[0] == "clear" ) + { + Breakpoint bp = dbg.getBreakpoint(loc, index); + dbg.removeBreakpoint(index); + } + else + { + Breakpoint bp; + if ( lastcmd[0] == "tbreak" ) + index = -1; + else if ( index <= 0 && dbg.breakpoints.length > 0 ) + index = dbg.breakpoints.keys.dup.sort[$-1]+1; + bp = dbg.setBreakpoint(loc, index, 0); + DbgIO.println("Breakpoint %d at 0x%08x", index, bp.address); + } + break; + // add source search path + case "directory": + if ( lastcmd.length > 1 ) + { + string sp = lastcmd[1].dup; + if ( find(sp, '/') >= 0 ) + sp = replace(sp, "/", "\\"); + if ( sp[$-1] != '\\' ) + sp ~= '\\'; + dbg.source_search_paths ~= sp; + } + else + DbgIO.println("usage: ssp "); + break; + // quit + case "quit": + case "q": + dbg.abort = true; + quit = true; + return true; + // run/continue + case "cont": + case "run": + case "start": + if ( dbg.process_loaded ) { + dbg.single_step = false; + dbg.paused = false; + return true; + } + else { + dbg.start(command_line); + return true; + } + // single-step + case "nexti": + dbg.single_step = true; + dbg.activateSingleStep(true); + return true; + // step over + case "next": + if ( dbg.step(StepMode.e_over) ) + return true; + break; + // step into + case "step": + if ( dbg.step(StepMode.e_in) ) + return true; + break; + // step out + case "finish": + if ( dbg.step(StepMode.e_out) ) + return true; + break; + // unwind stack + case "bt": + unwindStack(); + break; + case "print": + case "output": + if ( dbg.process_loaded && lastcmd.length > 1 ) + { + string expr; + if ( lastcmd[1][0] == '/' ) + expr = lastcmd[2]; + else + expr = lastcmd[1]; + try DbgIO.println(symbolValueToString(dbg.handleData(dbg.evaluateExpression(expr), false))); + catch ( EvaluationException e ) { + DbgIO.writeln(e.toString); + } + } + break; + case "disassemble": + if ( !dbg.process_loaded ) + break; + + uint start_address = dbg.current_address; + if ( lastcmd.length > 1 ) + sscanf(toStringz(lastcmd[1]), "%x", &start_address); + else + { + Location loc = dbg.images.findLocation(dbg.current_address); + if ( loc.scope_sym !is null ) { + ProcedureSymbol psym = cast(ProcedureSymbol)loc.scope_sym; + start_address = loc.getCodeBase + psym.cvdata.offset; + DisAsm.disasm(dbg.process, start_address, start_address+psym.cvdata.proc_length, &printDisassembly); + break; + } + } + DisAsm.disasm(dbg.process, start_address, 0, &printDisassembly); + break; + case "x": + uint start_address; + if ( lastcmd.length > 2 ) + { + if ( lastcmd[1].length > 2 && lastcmd[1][0..2] == "0x" ) + lastcmd[1] = lastcmd[1][2..$]; + sscanf(toStringz(lastcmd[1]), "%x", &start_address); + string count_str = lastcmd[$-1][2..$-2]; + uint count = cast(uint)atoi(count_str); + + dumpMemory(start_address, count); + } + else + DbgIO.println("Warning: too few arguments for x"); + break; + case "whatis": + if ( dbg.process_loaded && lastcmd.length > 1 ) + { + SymbolData sd = dbg.evaluateExpression(lastcmd[1], current_frame_level); + string type = demangle("_D0"~sd.type); + try DbgIO.println("type = %s", type); + catch ( EvaluationException e ) { + DbgIO.writeln(e.toString); + } + } + break; + + + // list source search paths + case "lsp": + foreach ( s; dbg.source_search_paths ) + DbgIO.writeln(s); + break; + // list breakpoints + case "lbp": + if ( dbg.breakpoints.length <= 0 ) + DbgIO.println("no breakpoints set"); + foreach ( uint i, bp; dbg.breakpoints ) + DbgIO.println("%d %s", i, bp.toString); + break; + // list temporary breakpoints + case "ltbp": + if ( dbg.temp_breakpoints.empty ) + DbgIO.println("no temporary breakpoints set"); + foreach ( bp; dbg.temp_breakpoints ) + DbgIO.writeln(bp.value.toString); + break; + // list debug modules + case "lm": + string[] modules_noinfo; + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + foreach ( m; img.codeView.modulesByIndex ) + { + string name = m.name; + + if ( m.header.iLib > 0 ) + name ~= " from "~img.codeView.libraries[m.header.iLib]; + + if ( lastcmd.length > 1 && find(name, lastcmd[1]) < 0 ) + continue; + + bool has_info = false; + with ( m.symbols ) if ( proc_symbols.length+stack_symbols.length+data_symbols.length > 0 ) + { + DbgIO.println( + "%s\n\tSymbols: %d proc %d stack %d data", + name, proc_symbols.length, stack_symbols.length, data_symbols.length + ); + has_info = true; + } + if ( m.source_module !is null ) + { + DbgIO.println("\tSource files:"); + has_info = true; + foreach ( sf; m.source_module.files ) + DbgIO.println("\t\t%s", sf.name); + } + if ( !has_info ) + modules_noinfo ~= name; + } + } + if ( modules_noinfo.length > 0 ) + { + DbgIO.println("Modules without debug information:"); + foreach ( m; modules_noinfo ) + DbgIO.println("%s ", m); + } + break; + // list source modules + case "lsm": + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + foreach ( m; img.codeView.modulesByIndex ) + { + if ( m.source_module !is null ) + { + foreach ( sf; m.source_module.files ) + { + if ( lastcmd.length > 1 && find(sf.name, lastcmd[1]) < 0 ) + continue; + DbgIO.writeln(sf.name); + } + } + } + } + break; + // list all symbols + case "ls": + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + printSymbols(img.codeView, img.codeView.global_pub.named_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.global_sym.named_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.static_sym.named_symbols, lastcmd.length>1?lastcmd[1]:null); + foreach ( m; img.codeView.modulesByIndex ) + printSymbols(img.codeView, m.symbols.named_symbols, lastcmd.length>1?lastcmd[1]:null); + } + break; + // list function symbols + case "lf": + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + printSymbols(img.codeView, img.codeView.global_pub.proc_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.global_sym.proc_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.static_sym.proc_symbols, lastcmd.length>1?lastcmd[1]:null); + foreach ( m; img.codeView.modulesByIndex ) + printSymbols(img.codeView, m.symbols.proc_symbols, lastcmd.length>1?lastcmd[1]:null); + } + break; + // list data symbols + case "ld": + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + printSymbols(img.codeView, img.codeView.global_pub.data_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.global_sym.data_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.static_sym.data_symbols, lastcmd.length>1?lastcmd[1]:null); + foreach ( m; img.codeView.modulesByIndex ) + printSymbols(img.codeView, m.symbols.data_symbols, lastcmd.length>1?lastcmd[1]:null); + } + break; + // list global symbols + case "lg": + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + printSymbols(img.codeView, img.codeView.global_pub.named_symbols, lastcmd.length>1?lastcmd[1]:null); + printSymbols(img.codeView, img.codeView.global_sym.named_symbols, lastcmd.length>1?lastcmd[1]:null); + } + break; + // list global publics + case "lp": + foreach ( img; dbg.images.images ) + { + if ( img.codeView is null ) + continue; + printSymbols(img.codeView, img.codeView.global_pub.named_symbols, lastcmd.length>1?lastcmd[1]:null); + } + break; + // delete breakpoint + case "dbp": + if ( lastcmd.length > 1 ) + { + if ( lastcmd[1] == "*" ) + { + foreach ( uint i, bp; dbg.breakpoints ) + { + bp.deactivate(dbg.process); + dbg.breakpoints.remove(i); + } + } + else if ( isNumeric(lastcmd[1]) ) + { + if ( !dbg.removeBreakpoint(cast(uint)atoi(lastcmd[1])) ) + DbgIO.println("invalid breakpoint index: %s",lastcmd[1]); + } + else + { + Location loc = new Location(lastcmd[1]); + loc.bind(dbg.images, dbg.source_search_paths); + if ( loc !is null ) + { + int bp_index; + dbg.getBreakpoint(loc, bp_index); + if ( bp_index >= 0 && !dbg.removeBreakpoint(bp_index) ) + DbgIO.println("No breakpoint set at "~lastcmd[1]); + } + else + DbgIO.println("Usage: dbp [|]"); + } + } + else + DbgIO.println("Usage: bp :"); + break; + // dump stack + case "ds": + int dump_length; + if ( lastcmd.length > 1 ) + dump_length = cast(int)atoi(lastcmd[1])*4; + else + { + CONTEXT ctx; + if ( dbg.process.threads[dbg.thread_id].getContext(ctx, CONTEXT_CONTROL) ) + dump_length = ctx.Ebp-ctx.Esp+8; + if ( dump_length <= 0 ) + dump_length = 16*4; + } + int top = dbg.stack.data.length>dump_length?dump_length:dbg.stack.data.length; + dumpMemory(dbg.stack.top_ptr, top, dbg.stack.data); + break; + case "dm": + if ( lastcmd.length < 3 ) { + DbgIO.println("usage: dm "); + break; + } + uint start; + sscanf(toStringz(lastcmd[1]), "%x", &start); + dumpMemory(start, cast(uint)atoi(lastcmd[2])); + break; + + // unknown command + default: + DbgIO.println("Warning: Unknown command '%s' ignored!", lastcmd[0]); + break; + } + + return false; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void dumpMemory(uint start, uint length, ubyte[] _data=null) + { + ubyte[] data; + if ( _data is null ) + { + data.length = length; + if ( !dbg.process.readProcessMemory(start, data.ptr, data.length) ) + return; + } + else + data = _data; + for ( uint i = 0; i < length; ++i ) + { + if ( i % (8*4) == 0 ) + { + if ( i > 0 ) + DbgIO.println(""); + DbgIO.print("0x%08x:", start+i); + } + DbgIO.print(" 0x%02x", data[i]); + } + DbgIO.println(""); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void evalStackSymbols(StackSymbol[] symbols) + { + foreach ( sym; symbols ) + { + string name = sym.mangled_name; + DbgIO.print("%s = ", name); + try DbgIO.writeln(symbolValueToString(dbg.handleData(dbg.evaluateExpression(name, current_frame_level, sym), true))); + catch ( EvaluationException e ) { + DbgIO.println(e.msg); + } + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + void printAsmLine(uint address, string bytes, string asmsource, string symbol, string location, string source) + { + bool nl = false; + if ( location !is null ) { + DbgIO.print("0x%08x : // ", address); + DbgIO.write(location); + nl = true; + } + if ( source !is null ) + { + if ( !nl ) + DbgIO.print("0x%08x : // ", address); + DbgIO.write(source); + nl = true; + } + if ( nl ) + DbgIO.println; + + assert(asmsource !is null); + DbgIO.print("0x%08x : ", address, asmsource); + + if ( symbol !is null ) + DbgIO.write(symbol); + DbgIO.println; + } + + /********************************************************************************************** + Prints the register contents of the given thread's context. + **********************************************************************************************/ + void printRegisterDump(DbgThread thread) + { + CONTEXT ctx; + if ( thread.getContext(ctx) ) + { + DbgIO.println("eax\t0x%x -\nebx\t0x%x -\necx\t0x%x -\nedx\t0x%x -", ctx.Eax, ctx.Ebx, ctx.Ecx, ctx.Edx); + DbgIO.println("cs\t0x%x -\nds\t0x%x -\nes\t0x%x -\nfs\t0x%x -", ctx.SegCs, ctx.SegDs, ctx.SegEs, ctx.SegFs); + DbgIO.println("gs\t0x%x -\nss\t0x%x -\nedi\t0x%x -\nesi\t0x%x -", ctx.SegGs, ctx.SegSs, ctx.Edi, ctx.Esi); + DbgIO.println("ebp\t0x%x -\nesp\t0x%x -\neip\t0x%x -\neflags\t0x%x -", ctx.Ebp, ctx.Esp, ctx.Eip, ctx.EFlags); + } + else + DbgIO.println("Warning: Couldn't get main thread's context"); + } + + /********************************************************************************************** + + **********************************************************************************************/ + string symbolValueToString(SymbolValue val) + { + string str; + if ( val.name !is null ) + str = val.name~" = "; + if ( val.value !is null ) + str ~= val.value; + else + { + if ( val.children.length > 0 ) + { + str ~= "{"; + bool first = true; + foreach ( c; val.children ) + { + if ( first ) + first = false; + else + str ~= ","; + str ~= symbolValueToString(c); + } + str ~= "}"; + } + else + str ~= "{}"; + } + return str; + } + + /********************************************************************************************** + Read command and call CLI supplied parser function. + Gets called when debuggee is suspended. + **********************************************************************************************/ + bool readCommand() + { + if ( cmdQueue.length > 0 ) + { + string cmd = strip(cmdQueue[0]); + cmdQueue = cmdQueue[1..$]; + DbgIO.writeln(prompt~cmd); + return parseCommand(cmd); + } + else { + DbgIO.write(prompt); + string input = DbgIO.readln(); + return parseCommand(input); + } + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/cli/gdbmicli.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cli/gdbmicli.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,88 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ +module cli.gdbmicli; + +import cli.userinterface; +import breakpoint; +import dbgprocess; +import dbgthread; +import expression.datahandler; + +import util; + +import win32.winnt; + +class GDBMICLI : UserInterfaceBase +{ + void init(string[] args) + { + } + + int start() + { + return 0; + } + + bool parseCommand(string input) + { + return false; + } + + void debugString(string str) + { + } + + bool breakpoint(int index, Breakpoint bp, DbgThread thread) + { + return false; + } + + void userInterrupt() + { + } + + void exception(uint thread_id, string class_name, string msg, size_t obj_ptr) + { + } + + void win32exception(uint threadId, EXCEPTION_RECORD* exrec) + { + } + + void loadedDLL(DLL dll) + { + } + + void exitProcess() + { + } + + void singleStep() + { + } + + /********************************************************************************************** + + **********************************************************************************************/ + void printAsmLine(uint address, string bytes, string asmsource, string symbol, string location, string source) + { + } + + string symbolValueToString(SymbolValue val) + { + return ""; + } + + /********************************************************************************************** + Read command and call CLI supplied parser function. + Gets called when debuggee is suspended. + **********************************************************************************************/ + bool readCommand() + { + DbgIO.print("->"); + string input = DbgIO.readln(); + return parseCommand(input); + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/cli/userinterface.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cli/userinterface.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,344 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ +module cli.userinterface; + +import breakpoint; +import dbgprocess; +import dbgthread; +import debugger; +import expression.datahandler; +import codeview.codeview; +import util; +import disasm; +import codeview.coff; + +import win32.winnt; + +import std.string; +import std.c.string; +import std.utf; + +interface UserInterface +{ + void init(string[] args); + int start(); + + bool readCommand(); + bool parseCommand(string cmd); + void runCommands(string cmdstr); + + void debugString(string str); + bool breakpoint(int index, Breakpoint bp, DbgThread thread); + void userInterrupt(); + void exception(uint threadId, string class_name, string msg, size_t obj_ptr); + void win32exception(uint threadId, EXCEPTION_RECORD* exrec); + void loadedDLL(DLL dll); + void exitProcess(); + void singleStep(); +} + +struct StackTraceEntry +{ + uint index; + Location loc; + uint frame_level; + CodeBlock last_known_cb; + + void describe(UserInterfaceBase ui) + { + DbgIO.print("#%d ", index); + if ( loc is null ) { + DbgIO.println(""); + return; + } + if ( index > 0 ) + DbgIO.print("0x%08x in ", loc.address); + if ( loc.scope_sym !is null ) + { + ProcedureSymbol psym = cast(ProcedureSymbol)loc.scope_sym; + + string argstr; + bool first = true; + foreach_reverse ( argsym; psym.arguments.stack_symbols ) + { + string name = argsym.name_notype; + if ( !first ) + argstr ~= ", "; + else + first = false; + argstr ~= argsym.name_notype; + try { + SymbolValue symval = ui.dbg.handleData(ui.dbg.evaluateExpression(name, frame_level), false); + argstr ~= " = "~ui.symbolValueToString(symval); + } + catch ( Exception e ) { + } + } + int end = find(psym.name_type, '('), + start = find(psym.name_type, ' '); + if ( end < 0 ) + end = psym.name_type.length; + if ( start < 0 ) + start = 0; + if ( end-start < 2 ) + start = 0; + DbgIO.print("%s (", psym.name_type[start..end]); + DbgIO.write(argstr~") "); + } + else if ( loc.data_sym !is null ) + DbgIO.print(loc.data_sym.name_type, " () "); + else + DbgIO.print("?? () "); + if ( loc.codeblock !is null ) + DbgIO.print("at %s:%d", loc.file, loc.line); + else + { + if ( last_known_cb !is null && last_known_cb.segment !is null ) + DbgIO.print("at %s:%d ", last_known_cb.segment.file.name, last_known_cb.line); + if ( loc.mod !is null ) + DbgIO.print("from %s", loc.mod.name); + else if ( ui.dbg.process !is null ) + { + DLL dll = ui.dbg.process.findDLL(loc.address); + if ( dll !is null ) + DbgIO.print("from %s", dll.image.name); + } + } + DbgIO.println(""); + } +} + +abstract class UserInterfaceBase : UserInterface +{ + CodeBlock last_codeblock; + Module last_module; + DLL last_dll; + + Debugger dbg; + + string[] cmdQueue; + + void printAsmLine(uint address, string bytes, string asmsource, string symbol, string location, string source); + string symbolValueToString(SymbolValue val); + + /********************************************************************************************** + + **********************************************************************************************/ + void unwindStack() + { + StackTraceEntry[] entries; + + uint index, + counter, + frame_level; + debug DbgIO.println("Stack: base 0x%x top 0x%x frame 0x%x", dbg.stack.base_ptr, dbg.stack.top_ptr, dbg.stack.frame_ptr); + Location loc = dbg.images.findLocation(dbg.current_address); + if ( loc is null ) + loc = new Location(dbg.current_address, null); + entries ~= StackTraceEntry(counter++, loc, frame_level); + + dbg.stack.firstFrame(index); + ubyte[] frame = dbg.stack.prevFrame(index, index); + size_t next_frame=1; + while ( frame !is null ) + { + uint ret_adr = (cast(uint[])frame)[1]; + loc = dbg.images.findLocation(ret_adr); + if ( loc is null ) + loc = new Location(ret_adr, null); + frame = dbg.stack.prevFrame(index, index); + ++frame_level; + if ( next_frame >= entries.length ) + entries.length = entries.length*2+1; + entries[next_frame++] = StackTraceEntry(counter++, loc, frame_level); + } + entries.length = next_frame; + + CodeBlock last_known_cb; + foreach_reverse ( ref ste; entries ) + { + if ( ste.loc !is null && ste.loc.codeblock !is null ) + last_known_cb = ste.loc.codeblock; + else + ste.last_known_cb = last_known_cb; + } + + foreach ( ste; entries ) + ste.describe(this); + } + + /********************************************************************************************** + Prints an instruction with looked up symbols if existant. + **********************************************************************************************/ + bool printDisassembly(ud_t* ud_obj) + { + // first call + if ( ud_obj is null ) { + last_codeblock = null; + return true; + } + + uint address = cast(uint)ud_insn_off(ud_obj); + string source, location; + + // check whether we have symbols here + Location loc = dbg.images.findLocation(address); + if ( loc.codeblock !is null ) + { + if ( last_codeblock !is loc.codeblock ) + { + last_codeblock = loc.codeblock; + string[] source_file = dbg.getSourceFile(loc.file); + location = format("%s:%d", loc.file, loc.line); + if ( source_file !is null && loc.line <= source_file.length ) + source = source_file[loc.line-1]; + } + } + else + { + CodeView cv; + CodeBlock cb = dbg.images.findCodeBlockRel(address, cv); + if ( cb !is null ) + { + if ( last_codeblock !is cb ) + last_codeblock = cb; + } + else + { + uint seg; + Module mod = dbg.images.findModule(address, seg); + if ( mod !is null && last_module !is mod ) { + last_module = mod; + location = mod.name; + } + else + { + DLL dll = dbg.process.findDLL(address); + if ( dll !is null && last_dll !is dll ) { + last_dll = dll; + location = dll.image.name; + } + } + } + } + + string symbol; + bool is_imm=true; + uint jmp_dest = DisAsm.calcJumpDestination(dbg.process, dbg.process.threads[dbg.thread_id], ud_obj, is_imm); + if ( is_imm && jmp_dest>0 ) + symbol = "\t"~describeLocation(jmp_dest, false); + + char* hex = ud_insn_hex(ud_obj); + uint hexlen = strlen(hex); + char* ins = ud_insn_asm(ud_obj); + + printAsmLine(address, hex[0..hexlen], ins[0..strlen(ins)], symbol, location, source); + return true; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void printSymbols(CodeView cv, NamedSymbol[] syms, string substring=null, uint indent=0) + { + foreach ( ns; syms ) + { + if ( substring.length > 0 && find(ns.name_notype, substring)<0 ) + continue; + + char[] indent_str; + indent_str.length = indent*2; + indent_str[0..indent*2] = ' '; + ClassInfo cs = ns.classinfo; + if ( cs == ProcedureSymbol.classinfo ) + { + ProcedureSymbol ps = cast(ProcedureSymbol)ns; + size_t start = ps.cvdata.offset+cv.getCodeBase; + DbgIO.println("%s%s %d arguments, entry 0x%x, debug start 0x%x, debug end 0x%x", + indent_str, ps.name_type, ps.arguments.symbols.length, start, + start+ps.cvdata.debug_start, start+ps.cvdata.debug_end + ); + } + else if ( cs == StackSymbol.classinfo ) { + StackSymbol ss = cast(StackSymbol)ns; + DbgIO.println("%s%s stack (%s) %x ebp%s%d", indent_str, ns.name_type, ns.mangled_name, ss.cvtype, ss.offset>=0?"+":"", ss.offset); + } + else if ( cs == DataSymbol.classinfo ) + { + DataSymbol ds = cast(DataSymbol)ns; + DbgIO.println("%s%s (%s) data offset: 0x%x size: 0x%x segment: 0x%x type: 0x%x (%s)", indent_str, ds.name_type, ds.name_notype, + ds.offset, ds.size, ds.cvdata.segment, ds.cvdata.type, dbg.images.mangleCVtype(ds.cvdata.type) + ); + } + else + DbgIO.println("%s%s %s", indent_str, ns.name_type, cs.name); + ScopeSymbol scs = cast(ScopeSymbol)ns; + if ( scs !is null ) + printSymbols(cv, scs.symbols.named_symbols, substring, indent+1); + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + string describeLocation(uint vaddress, bool with_address=true) + { + Location loc = dbg.images.findLocation(vaddress); + return describeLocation(loc, with_address); + } + + /********************************************************************************************** + + **********************************************************************************************/ + string describeLocation(Location loc, bool with_address=true) + { + string desc; + + if ( loc is null ) + return "unknown"; + + if ( loc.codeblock !is null ) + desc = format("%s:%d", loc.file, loc.line); + if ( with_address ) + desc ~= (desc.length>0?" ":"")~format("(0x%08x)", loc.address); + + if ( loc.scope_sym !is null ) + return loc.scope_sym.name_notype~" "~desc; + if ( loc.data_sym !is null ) + return loc.data_sym.name_notype~" "~desc; + if ( loc.mod !is null ) + return loc.mod.name~" "~desc; + if ( dbg.process !is null ) + { + DLL dll = dbg.process.findDLL(loc.address); + if ( dll !is null ) + return dll.image.name~" "~desc; + } + + return desc; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void runCommands(string cmd_string) + { + cmd_string = replace(cmd_string, "\\\"", "\""); + auto r = std.regexp.RegExp("(([^;\" \\t]+)|(\"[^\"]+\"))+|;"); + string cmd; + string[] cmds; + foreach ( m; r.search(cmd_string) ) + { + if ( m.match(0) == ";" ) { + cmdQueue ~= cmd~";"; + cmd = null; + } + else + cmd ~= " "~m.match(0); + } + if ( cmd !is null ) + cmdQueue ~= cmd~";"; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/codeview/codeview.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/codeview/codeview.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,927 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +module codeview.codeview; + +import std.ctype; +import std.string; +import std.math; + +import util; +import container; +import codeview.coff; +import codeview.decl; + +public import codeview.debuginfo; + +//================================================================================================= +// classes for accessing CodeView data + +abstract class Symbol +{ + SymbolIndex symbol_index; + + this(SymbolIndex si) { symbol_index = si; } +} + +class ReturnSymbol : Symbol +{ + CVReturnSymbol* cvdata; + ubyte[] registers; + + this(CVReturnSymbol* cv) { super(SymbolIndex.S_RETURN); cvdata = cv; } +} + +class StringWrap +{ + string str; + + this(string _str) { str = _str; } + + int opCmp(Object o) + { + NamedSymbol ns = cast(NamedSymbol)o; + if ( ns !is null ) + return -ns.opCmp(this); + + StringWrap sw = cast(StringWrap)o; + if ( sw is null ) + return -1; + if ( str == sw.str ) + return 0; + if ( str < sw.str ) + return -1; + return 1; + } +} + +abstract class NamedSymbol : Symbol +{ + string mangled_name, + name_type, + name_notype; + + this(SymbolIndex si) { super(si); } + + int opCmp(Object o) + { + string str; + NamedSymbol ns = cast(NamedSymbol)o; + if ( ns is null ) + { + StringWrap sw = cast(StringWrap)o; + if ( sw is null ) + return -1; + str = sw.str; + } + else + str = ns.name_notype; + if ( name_notype == str ) + return 0; + if ( name_notype < str ) + return -1; + return 1; + } +} + +class StackSymbol : NamedSymbol +{ + CVStackSymbol* cvdata; + int size; + + this(CVStackSymbol* cv) + { + super(SymbolIndex.S_BPREL32); + cvdata=cv; + } + + uint offset() { return cvdata.offset; } + uint cvtype() { return cvdata.type; } +} + +class DataSymbol : NamedSymbol +{ + CVDataSymbol* cvdata; + uint size; + + this(SymbolIndex si, CVDataSymbol* cv) + { + super(si); + cvdata=cv; + } + + uint offset() { return cvdata.offset; } + uint cvtype() { return cvdata.type; } +} + +abstract class ScopeSymbol : NamedSymbol +{ + ScopeSymbol parent_scope; + SymbolSet symbols; + uint lfo; + + this(SymbolIndex si, uint _lfo) { super(si); lfo = _lfo; symbols = new SymbolSet; } +} + +class ProcedureSymbol : ScopeSymbol +{ + CVProcedureSymbol* cvdata; + SymbolSet arguments; + ReturnSymbol return_sym; + + this(SymbolIndex si, uint lfo, CVProcedureSymbol* cvd) + { + super(si,lfo); + cvdata = cvd; + arguments = new SymbolSet; + } +} + +class SymbolSet +{ + ProcedureSymbol[] proc_symbols; + StackSymbol[] stack_symbols; + DataSymbol[] data_symbols; + NamedSymbol[] named_symbols; + Symbol[] symbols; + + void opCatAssign(SymbolSet s) + { + symbols ~= s.symbols; + named_symbols ~= s.named_symbols; + data_symbols ~= s.data_symbols; + stack_symbols ~= s.stack_symbols; + proc_symbols ~= s.proc_symbols; + } + + void add(Symbol s) + { + NamedSymbol ns = cast(NamedSymbol)s; + if ( ns is null ) { + symbols ~= s; + return; + } + named_symbols ~= ns; + ClassInfo ci = s.classinfo; + if ( ci == ProcedureSymbol.classinfo ) + proc_symbols ~= cast(ProcedureSymbol)s; + else if ( ci == StackSymbol.classinfo ) + stack_symbols ~= cast(StackSymbol)s; + else if ( ci == DataSymbol.classinfo ) + data_symbols ~= cast(DataSymbol)s; + } + + /********************************************************************************************** + Find procedure symbol covering the given address. + **********************************************************************************************/ + ProcedureSymbol findProcedureSymbol(uint address) + { + foreach ( ps; proc_symbols ) + if ( address >= ps.cvdata.offset && address < ps.cvdata.offset+ps.cvdata.proc_length ) + return ps; + return null; + } + + /********************************************************************************************** + Find data symbol covering the given address. + **********************************************************************************************/ + DataSymbol findDataSymbol(uint address, uint segment) + { + foreach ( ds; data_symbols ) + { + if ( segment > 0 && ds.cvdata.segment != segment ) + continue; + if ( address == ds.cvdata.offset ) + return ds; + } + return null; + } + + /********************************************************************************************** + Find data symbol by name. + **********************************************************************************************/ + DataSymbol findDataSymbol(string name) + { + foreach ( ds; data_symbols ) + { + if ( ds.name_notype == name ) + return ds; + } + return null; + } + + /********************************************************************************************** + Find nearest data symbol to the given address. + **********************************************************************************************/ + DataSymbol findNearestDataSymbol(uint address, inout uint min_dist, uint segment) + { + DataSymbol min_ds; + foreach ( ds; data_symbols ) + { + if ( address < ds.cvdata.offset || ds.cvdata.segment != segment ) + continue; + uint dist = abs(cast(int)address-cast(int)ds.cvdata.offset); + if ( dist < min_dist ) { + min_dist = dist; + min_ds = ds; + } + } + return min_ds; + } +} + +class Module +{ + ModuleHeader* header; + SegInfo[] seginfos; + string name; + ushort pe_section; + + SymbolSet symbols; + + SourceModule source_module; + + CodeView codeview; + + this(CodeView cv) + { + symbols = new SymbolSet; + codeview = cv; + } +} + +class Location +{ + string path; + + ScopeSymbol scope_sym; + DataSymbol data_sym; + Module mod; + CodeBlock codeblock; + CodeView codeview; + uint address; + + this(uint addr, CodeView cv) + { + codeview = cv; + address = addr; + } + + this(uint addr) + { + address = addr; + } + + this(string p) + { + path = p; + } + + uint line() + { + if ( codeblock is null ) + return 0; + return codeblock.line; + } + + string file() + { + if ( codeblock is null || codeblock.segment is null ) + return null; + return codeblock.segment.file.name; + } + + size_t getCodeBase() + { + return mod.codeview.image.getCodeBase; + } + + bool bind(ImageSet images, string[] source_search_paths) + { + if ( path is null ) + return false; + + if ( find(path, '"') >= 0 ) + path = replace(path, "\"", ""); + + string[] file_line = split(path, ":"); + if ( file_line is null || file_line.length < 2 || !isNumeric(file_line[$-1]) ) { + DbgIO.println("Invalid location format. Use :"); + return false; + } + + string file = join(file_line[0..$-1], ":"), + line = file_line[$-1]; + + if ( find(file, '/') >= 0 ) + file = replace(file, "/", "\\"); + + SourceFile[] sfs = images.findSrcFiles(file); + if ( sfs.length == 0 ) + sfs = images.findSrcFiles(file, source_search_paths); + if ( sfs.length == 0 ) { + DbgIO.println("Source file \"%s\" not found", file); + return false; + } + + uint linenum = cast(uint)atoi(line); + Location loc; + foreach ( sf; sfs ) + { + debug DbgIO.println("searching sf %s", sf.name); + auto loc2 = images.findSrcLine(sf, linenum); + if ( loc is null ) + loc = loc2; + else if ( loc2 !is null && loc2.line < loc.line ) + loc = loc2; + } + if ( loc is null ) + DbgIO.println("Line %d in \"%s\" not found", linenum, sfs[0].name); + + scope_sym = loc.scope_sym; + data_sym = loc.data_sym; + mod = loc.mod; + codeblock = loc.codeblock; + address = loc.address; + path = null; + return true; + } +} + +class UserDefinedType +{ + ushort type_index; + string name; +} + +/************************************************************************************************** + Represents the CodeView information of an executable image. Provides methods to browse the + information. Objects of this class get created by CodeViewParser.parse. +**************************************************************************************************/ +class CodeView : DebugInfo +{ + Module[string] modulesByName; + Module[] modulesByIndex; + + SymbolSet global_pub, + global_sym, + static_sym; + UserDefinedType[] udtypes; + Leaf[][] type_strings; + + Leaf[string] UDTsByName; + + string[] libraries, + segnames; + + COFFImage image; + + AVLTree!(NamedSymbol) globalNamedSymbols; + + size_t getCodeBase() + { + return image.getCodeBase; + } + + /********************************************************************************************** + Find the module and segment covering the given address. + **********************************************************************************************/ + Module findModule(uint vaddress, out uint segment) + { + uint address = vaddress-image.getCodeBase; + foreach ( m; modulesByIndex ) + { + foreach ( s; m.seginfos ) + { + if ( address < s.offset ) + continue; + if ( address-s.offset < s.cbSeg ) { + segment = s.Seg; + return m; + } + } + } + return null; + } + + /********************************************************************************************** + Find next source line from the given location. + **********************************************************************************************/ + Location findNextSrcLine(Location loc) + { + if ( loc is null || loc.codeblock is null || loc.codeblock.segment is null ) + return null; + Location nextloc = findLocation(loc.codeblock.end+image.getCodeBase); + return nextloc; + } + + /********************************************************************************************** + Find previous source line from location that isn't covered by a source codeblock. + **********************************************************************************************/ + Location findPrevSrcLine(Location loc) + { + if ( loc is null ) + return null; + if ( loc.codeblock !is null ) + return loc; + + AVLNode!(CodeBlock) node; + if ( !codeblocks.find(loc.address-1+image.getCodeBase, node) ) + { + if ( node.value.start > loc.address ) + { + if ( !node.findPrev(node) ) + return null; + } + } + Location prevloc = new Location(node.value.start, this); + prevloc.codeblock = node.value; + findSymbolForLocation(prevloc); + assert(prevloc.line != 0); + return prevloc; + } + + /********************************************************************************************** + Find first source line in the given file that has a line number >= line + and a start address >= min_start. + **********************************************************************************************/ + Location findSrcLine(SourceFile sf, uint min_line, size_t min_start=0) + { + if ( sf is null ) + return null; + + pragma(msg, TODO(__FILE__,__LINE__,"use binary search here")); + foreach ( l; sf.lines ) + { + if ( l < min_line ) + continue; + foreach ( cb; sf.blocks_by_line[l] ) + { + if ( cb.start < min_start || cb.end <= cb.start ) + continue; + Location loc = new Location(cb.start+image.getCodeBase, this); + loc.codeblock = cb; + findSymbolForLocation(loc); + return loc; + } + } + return null; + } + + /********************************************************************************************** + Find all debug information available for the given address. + **********************************************************************************************/ + Location findLocation(uint vaddress) + { + Location loc = new Location(vaddress, this); + CodeBlock cb = findCodeBlockAbs(vaddress); + loc.codeblock = cb; + findSymbolForLocation(loc); + return loc; + } + + /********************************************************************************************** + Fill out symbol information (as opposed to source line information) in the given location. + **********************************************************************************************/ + void findSymbolForLocation(Location loc) + { + ProcedureSymbol psym = findProcedureSymbol(loc.address); + if ( psym !is null ) + loc.scope_sym = psym; + else + { + DataSymbol dsym = findDataSymbol(loc.address, 2); + if ( dsym !is null ) + loc.data_sym = dsym; + } + + uint seg; + Module mod = findModule(loc.address, seg); + if ( mod !is null ) + { + loc.mod = mod; + if ( loc.data_sym is null ) + { + uint min_dist = uint.max; + loc.data_sym = global_sym.findNearestDataSymbol(loc.address-image.getCodeBase, min_dist, image.code_section_index+1); + if ( loc.data_sym is null ) + loc.data_sym = global_pub.findNearestDataSymbol(loc.address-image.getCodeBase, min_dist, image.code_section_index+1); + } + } + } + + /********************************************************************************************** + Find procedure symbol covering the given address. + **********************************************************************************************/ + ProcedureSymbol findProcedureSymbol(uint vaddress) + { + uint address = vaddress-image.getCodeBase; + ProcedureSymbol ps; + foreach ( m; modulesByIndex ) + { + ps = m.symbols.findProcedureSymbol(address); + if ( ps !is null ) + return ps; + } + ps = global_sym.findProcedureSymbol(address); + if ( ps is null ) + ps = static_sym.findProcedureSymbol(address); + if ( ps is null ) + ps = global_pub.findProcedureSymbol(address); + return ps; + } + + /********************************************************************************************** + Find data symbol covering the given address. + **********************************************************************************************/ + DataSymbol findDataSymbol(uint vaddress, uint segment=0) + { + uint address = vaddress-image.getCodeBase; + DataSymbol ps; + foreach ( m; modulesByIndex ) + { + ps = m.symbols.findDataSymbol(address, segment); + if ( ps !is null ) + break; + } + ps = global_sym.findDataSymbol(address, segment); + if ( ps is null ) + ps = static_sym.findDataSymbol(address, segment); + if ( ps is null ) + ps = global_pub.findDataSymbol(address, segment); + return ps; + } + + /********************************************************************************************** + Creates a D mangled name from a CodeView symbol. + Uses available mangled type info if available, mangles CodeView type info else. + Returns: Symbol name with mangled type info. + **********************************************************************************************/ + string mangle(NamedSymbol s) + { + // use mangled typeinfo if available + if ( s.mangled_name !is null && s.mangled_name.length > 2 && s.mangled_name[0..2] == "_D" && isdigit(s.mangled_name[2]) ) + return s.mangled_name; + + return "_D"~mangleName(s.name_type)~mangleType(s); + } + + /********************************************************************************************** + Creates the type part of a D mangled name for a CodeView symbol. + **********************************************************************************************/ + string mangleType(Symbol s) + { + DataSymbol ds = cast(DataSymbol)s; + ushort cvtype; + if ( ds !is null ) + cvtype = ds.cvdata.type; + else + { + StackSymbol ss = cast(StackSymbol)s; + if ( ss !is null ) + cvtype = ss.cvdata.type; + else { + pragma(msg, TODO(__FILE__,__LINE__,"implement procedure symbol mangling")); + } + } + return mangleCVtype(cvtype); + } + + /********************************************************************************************** + Creates the type part of a D mangled name for a CodeView type index. + **********************************************************************************************/ + string mangleCVtype(ushort cvtype) + { + if ( cvtype >= 0x1000 ) + { + uint typeindex = cvtype-0x1000; + if ( typeindex >= type_strings.length ) { + debug DbgIO.println("undefined complex type 0x%x largest known type 0x%x", cvtype, type_strings.length-1); + return null; + } + Leaf[] typestring = type_strings[typeindex]; + + while ( typestring.length > 0 ) + { + switch ( typestring[0].leaf_index ) + { + case LF_MODIFIER_16t: + LeafModifer lm = cast(LeafModifer)typestring[0]; + assert ( lm !is null ); + return mangleCVtype(lm.index); + case LF_POINTER_16t: + LeafPointer lp = cast(LeafPointer)typestring[0]; + assert ( lp !is null ); + return "P"~mangleCVtype(lp.type); + // do not insert new cases here + case LF_CLASS_16t: + LeafClassStruc lcs = cast(LeafClassStruc)typestring[0]; + assert ( lcs !is null ); + return "C"~mangleName(lcs.name); + case LF_ARRAY_16t: + LeafArray la = cast(LeafArray)typestring[0]; + assert ( la !is null ); + debug(cvparser) DbgIO.println("Static array elemtype 0x%x idxtype 0x%x length %d", la.elemtype, la.idxtype, la.length.getUint); + uint count = la.length.getUint, + elmsize = sizeofCV(la.elemtype); + if ( elmsize > 0 ) { + count /= elmsize; + assert(la.length.getUint % sizeofCV(la.elemtype) == 0); + } + else + debug DbgIO.println("WARNING: elm size == 0"); + return "G"~.toString(count)~mangleCVtype(la.elemtype); + case LF_OEM_16t: + LeafDynArray lda = cast(LeafDynArray)typestring[0]; + if ( lda !is null ) + return "A"~mangleCVtype(lda.elem_type); + LeafAssocArray laa = cast(LeafAssocArray)typestring[0]; + if ( laa !is null ) + return "H"~mangleCVtype(laa.key_type)~mangleCVtype(laa.elem_type); + LeafDelegate ld = cast(LeafDelegate)typestring[0]; + if ( ld !is null ) + return "D"~mangleCVtype(ld.func_type); + assert(0); + + case LF_STRUCTURE_16t: + LeafClassStruc lcs = cast(LeafClassStruc)typestring[0]; + assert ( lcs !is null ); + return "S"~mangleName(lcs.name); + case LF_PROCEDURE_16t: + case LF_METHODLIST_16t: + debug(cvparser) DbgIO.println("unmangled procedure or methodlist in complex type"); + return ""; + case LF_UNION_16t: + LeafUnion lu = cast(LeafUnion)typestring[0]; + return "S"~mangleName(lu.name); + default: + DbgIO.println("mangleCVtype: unsupported type leaf 0x%x", typestring[0].leaf_index); + typestring = typestring[1..$]; + } + } + return null; + } + + switch ( cvtype ) + { + case T_NOTYPE: + return null; + case T_VOID: + return "v"; + case T_PVOID: case T_PFVOID: case T_PHVOID: case T_32PVOID: case T_32PFVOID: + return "Pv"; + + case T_CHAR: + return "g"; + case T_UCHAR: + return "h"; + case T_RCHAR: + return "a"; + case T_WCHAR: + return "u"; + case T_DCHAR: + return "w"; + case T_32PDCHAR: case T_32PFDCHAR: + return "Pw"; + case T_PFRCHAR: case T_PHRCHAR: case T_32PRCHAR: case T_32PFRCHAR: case T_PRCHAR: + return "Pa"; + case T_PFWCHAR: case T_PHWCHAR: case T_32PWCHAR: case T_32PFWCHAR: case T_PWCHAR: + return "Pu"; + case T_PFCHAR: case T_PHCHAR: case T_32PCHAR: case T_32PFCHAR: case T_PCHAR: + return "Pg"; + case T_PFUCHAR: case T_PHUCHAR: case T_32PUCHAR: case T_32PFUCHAR: case T_PUCHAR: + return "Ph"; + + case T_SHORT: case T_INT2: + return "s"; + case T_USHORT: case T_UINT2: + return "t"; + case T_PINT2: case T_PSHORT: case T_32PSHORT: + return "Ps"; + case T_PUSHORT: case T_PUINT2: case T_32PUSHORT: + return "Pt"; + case T_INT4: + case T_LONG: + return "i"; + case T_UINT4: + case T_ULONG: + return "k"; + case T_32PINT4: case T_PINT4: + return "Pi"; + case T_32PUINT4: case T_PUINT4: + return "Pk"; + case T_QUAD: + return "l"; + case T_UQUAD: + return "m"; + case T_32PQUAD: case T_PQUAD: + return "Pl"; + case T_32PUQUAD: case T_PUQUAD: + return "Pm"; + case T_REAL32: + return "f"; + case T_32PREAL32: case T_PREAL32: + return "Pf"; + case T_REAL64: + return "d"; + case T_32PREAL64: case T_PREAL64: + return "Pd"; + case T_REAL80: + return "e"; + case T_PREAL80: case T_PFREAL80: case T_PHREAL80: case T_32PREAL80: case T_32PFREAL80: + return "Pe"; + case T_BOOL08: + return "b"; + case T_32PBOOL08: case T_32PFBOOL08: + return "Pb"; + case T_CPLX80: + return "c"; + case T_CPLX64: + return "r"; + case T_CPLX32: + return "q"; + case T_32PCPLX80: case T_32PFCPLX80: + return "Pc"; + case T_32PCPLX64: case T_32PFCPLX64: + return "Pr"; + case T_32PCPLX32: case T_32PFCPLX32: + return "Pq"; + default: + debug DbgIO.println("mangleCVtype: unknown codeview type 0x%x", cvtype); + } + return null; + } + + + /************************************************************************************************** + Returns: size of demangled type + **************************************************************************************************/ + uint sizeofMangled(string m) + { + assert(m.length > 0); + switch ( m[0] ) + { + case 'A': return ulong.sizeof; + case 'G': + string n = m[1..$]; + size_t count = parseNumber(n); + return count*sizeofMangled(n); + case 'P': return size_t.sizeof; + case 'H': return size_t.sizeof; + case 'v': return void.sizeof; + case 'b': return bit.sizeof; + case 'x': return bool.sizeof; + case 'g': return byte.sizeof; + case 'h': return ubyte.sizeof; + case 's': return short.sizeof; + case 't': return ushort.sizeof; + case 'i': return int.sizeof; + case 'k': return uint.sizeof; + case 'l': return long.sizeof; + case 'm': return ulong.sizeof; + case 'f': return float.sizeof; + case 'd': return double.sizeof; + case 'e': return real.sizeof; + case 'o': return ifloat.sizeof; + case 'p': return idouble.sizeof; + case 'j': return ireal.sizeof; + case 'q': return cfloat.sizeof; + case 'r': return cdouble.sizeof; + case 'c': return creal.sizeof; + case 'a': return char.sizeof; + case 'u': return wchar.sizeof; + case 'w': return dchar.sizeof; + case 'C': + case 'S': + string mangled_name = m[1..$], + name = demangleNameSkip(mangled_name); + if ( name in UDTsByName ) { + LeafClassStruc lcs = cast(LeafClassStruc)UDTsByName[name]; + if ( lcs !is null ) + return lcs.length.getUint; + LeafUnion lu = cast(LeafUnion)UDTsByName[name]; + if ( lu !is null ) + return lu.length.getUint; + } + assert(0, "unknown struct in sizeofMangled: "~name); + default: + assert(0, "unknown type in sizeofMangled: "~m); + } + return 0; + } + + + /********************************************************************************************** + Calculates the size of the type specified by a CodeView type index. + **********************************************************************************************/ + uint sizeofCV(uint cvtype) + { + if ( cvtype >= 0x1000 ) + { + uint typeindex = cvtype-0x1000; + if ( typeindex >= type_strings.length ) { + debug DbgIO.println("sizeofCV: undefined complex type 0x%x", cvtype); + return 0; + } + Leaf[] typestring = type_strings[typeindex]; + while ( typestring.length > 0 ) + { + switch ( typestring[0].leaf_index ) + { + case LF_MODIFIER_16t: + LeafModifer lm = cast(LeafModifer)typestring[0]; + assert ( lm !is null ); + return sizeofCV(lm.index); + case LF_ARRAY_16t: + LeafArray la = cast(LeafArray)typestring[0]; + assert ( la !is null ); + return la.length.getUint; + case LF_POINTER_16t: + case LF_CLASS_16t: + return 4; + case LF_STRUCTURE_16t: + LeafClassStruc lcs = cast(LeafClassStruc)typestring[0]; + assert ( lcs !is null ); + return lcs.length.getUint; + case LF_PROCEDURE_16t: + case LF_METHODLIST_16t: + debug DbgIO.println("unmangled procedure or methodlist in complex type"); + return 0; + case LF_UNION_16t: + LeafUnion lu = cast(LeafUnion)typestring[0]; + return lu.length.getUint; + case LF_OEM_16t: + LeafDynArray lda = cast(LeafDynArray)typestring[0]; + if ( lda !is null ) + return size_t.sizeof*2; + LeafAssocArray laa = cast(LeafAssocArray)typestring[0]; + if ( laa !is null ) + return size_t.sizeof; + LeafDelegate ld = cast(LeafDelegate)typestring[0]; + if ( ld !is null ) + return size_t.sizeof*2; + assert(0); + + default: + DbgIO.println("sizeofCV: unsupported complex type leaf 0x%x", typestring[0].leaf_index); + typestring = typestring[1..$]; + } + } + return 0; + } + + switch ( cvtype ) + { + case T_NOTYPE: + return 0; + case T_VOID: + case T_CHAR: + case T_UCHAR: + case T_RCHAR: + case T_BOOL08: + return 1; + case T_SHORT: case T_INT2: + case T_USHORT: case T_UINT2: + case T_WCHAR: + return 2; + case T_PVOID: case T_PFVOID: case T_PHVOID: case T_32PVOID: case T_32PFVOID: + case T_DCHAR: case T_32PDCHAR: case T_32PFDCHAR: + case T_PFCHAR: case T_PHCHAR: case T_32PCHAR: case T_32PFCHAR: case T_PCHAR: + case T_PFUCHAR: case T_PHUCHAR: case T_32PUCHAR: case T_32PFUCHAR: case T_PUCHAR: + case T_PRCHAR: case T_PFRCHAR: case T_PHRCHAR: case T_32PRCHAR: case T_32PFRCHAR: + case T_PWCHAR: case T_PFWCHAR: case T_PHWCHAR: case T_32PWCHAR: case T_32PFWCHAR: + case T_PINT2: case T_PSHORT: case T_32PSHORT: + case T_PUSHORT: case T_PUINT2: case T_32PUSHORT: + case T_32PBOOL08: case T_32PFBOOL08: + case T_INT4: + case T_UINT4: + case T_32PINT4: case T_PINT4: + case T_32PUINT4: case T_PUINT4: + case T_32PQUAD: case T_PQUAD: + case T_32PUQUAD: case T_PUQUAD: + case T_ULONG: + case T_REAL32: + case T_32PREAL32: case T_PREAL32: + case T_32PREAL64: case T_PREAL64: + case T_PREAL80: case T_PFREAL80: case T_PHREAL80: case T_32PREAL80: case T_32PFREAL80: + case T_CPLX32: + case T_32PCPLX32: case T_32PFCPLX32: + case T_32PCPLX64: case T_32PFCPLX64: + case T_32PCPLX80: case T_32PFCPLX80: + return 4; + case T_QUAD: + case T_UQUAD: + case T_REAL64: + case T_CPLX64: + return 8; + case T_CPLX80: + case T_REAL80: + return 10; + default: + debug DbgIO.println("sizeofCV: unknown codeview type 0x%x", cvtype); + } + return 0; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/codeview/coff.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/codeview/coff.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,227 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +module codeview.coff; + +import std.file; +import std.stdio; +import std.c.string; + +import util; +import codeview.parser; +import codeview.codeview; + +import win32.winnt; + +/************************************************************************************************** + Type indeces for COFF debug sections. +**************************************************************************************************/ +enum DebugType +{ + UNKNOWN = 0, + COFF, + CODEVIEW +} + +/************************************************************************************************** + Represents a COFF section. +**************************************************************************************************/ +class Section +{ + PIMAGE_SECTION_HEADER header; + ubyte[] data; + + this(PIMAGE_SECTION_HEADER csh, DataReader dr) + { + uint old_cursor = dr.cursor; + header = csh; + assert(dr.data.length>=csh.PointerToRawData+csh.SizeOfRawData); + data = dr.data[csh.PointerToRawData .. csh.PointerToRawData+csh.SizeOfRawData]; + dr.seek(old_cursor); + } +} + +/************************************************************************************************** + Represents a COFF executable image file. +**************************************************************************************************/ +class COFFImage +{ + private PIMAGE_FILE_HEADER header; + private PIMAGE_OPTIONAL_HEADER opt_header; + private IMAGE_DEBUG_DIRECTORY[] debug_dirs; + Section[] sections; + CodeView[] codeview_data; + + size_t codebase, + code_section_index; + + string name; + + size_t imageSize() + { + assert(opt_header !is null); + return opt_header.SizeOfImage; + } + + size_t imageBase() + { + assert(opt_header !is null); + return opt_header.ImageBase; + } + + CodeView codeView() + { + if ( codeview_data.length == 0 ) + return null; + return codeview_data[0]; + } + + void load(string filename) + { + load(cast(ubyte[])read(filename), filename); + } + + /********************************************************************************************** + Very dirty, preliminary COFF image reader to extract codeview data + **********************************************************************************************/ + void load(ubyte[] data, string filename=null) + { + DataReader dr = new DataReader(data); + + dr.seek(0x3c); + uint pe_offset; + dr.read(pe_offset); + + uint pe_sig; + dr.seek(pe_offset); + dr.read(pe_sig); + if ( pe_sig != 0x4550 ) + throw new Exception("File is not an COFF PE executable"); + + ubyte[] buf; + assert ( IMAGE_FILE_HEADER.sizeof == 5*4); + dr.readA(buf, IMAGE_FILE_HEADER.sizeof); + header = cast(PIMAGE_FILE_HEADER)buf.ptr; + if ( header.Machine != 0x14c ) + throw new Exception("Unsupported machine Id in COFF file"); + uint headersize = header.SizeOfOptionalHeader; + + assert(headersize>=IMAGE_OPTIONAL_HEADER.sizeof); + headersize -= IMAGE_OPTIONAL_HEADER.sizeof; + dr.readA(buf, IMAGE_OPTIONAL_HEADER.sizeof); + opt_header = cast(PIMAGE_OPTIONAL_HEADER)buf.ptr; + if ( opt_header.Magic != IMAGE_NT_OPTIONAL_HDR_MAGIC ) + throw new Exception("Unknown optional header magic"); + + assert ( IMAGE_SIZEOF_SHORT_NAME+8*4 == IMAGE_SECTION_HEADER.sizeof); + for ( int i = 0; i < header.NumberOfSections; ++i ) + { + dr.readA(buf, IMAGE_SECTION_HEADER.sizeof); + sections ~= new Section(cast(PIMAGE_SECTION_HEADER)buf.ptr, dr); + } + + dr.seek(fileOffsetFromRVA(opt_header.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].VirtualAddress)); + assert ( IMAGE_DEBUG_DIRECTORY.sizeof == 7*4); + dr.readA(debug_dirs, opt_header.DataDirectory[IMAGE_DIRECTORY_ENTRY_DEBUG].Size/IMAGE_DEBUG_DIRECTORY.sizeof); + + foreach ( IMAGE_DEBUG_DIRECTORY dd; debug_dirs ) + { + if ( dd.Type == DebugType.CODEVIEW ) + { + auto cv = CodeViewParser.parse(this, dr.data[dd.PointerToRawData..dd.PointerToRawData+dd.SizeOfData]); + if ( cv !is null ) + codeview_data ~= cv; + } + else { + debug DbgIO.println("Unsupported COFF Debug Information format 0x%x", dd.Type); + } + } + + if ( opt_header.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].Size > 0 ) + { + dr.seek(fileOffsetFromRVA(opt_header.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress)); + assert ( IMAGE_EXPORT_DIRECTORY.sizeof == 10*4 ); + dr.readA(buf, IMAGE_EXPORT_DIRECTORY.sizeof); + PIMAGE_EXPORT_DIRECTORY export_dir = cast(PIMAGE_EXPORT_DIRECTORY)buf.ptr; + dr.seek(fileOffsetFromRVA(export_dir.Name)); + + char c; + for ( dr.read(c); c != '\0'; dr.read(c) ) + name ~= c; + } + if ( name is null && filename !is null ) + name = filename; + if ( codeview_data.length > 0 ) + { + if ( name !is null ) + DbgIO.println("Loading symbols from %s", name is null?filename:name); + else + DbgIO.println("Loading symbols"); + } + else + { + if ( name !is null ) + DbgIO.println("No symbols available from %s", name is null?filename:name); + else + DbgIO.println("No symbols available"); + } + } + + /********************************************************************************************** + Calculates the file offset from a given virtual address. + **********************************************************************************************/ + private uint fileOffsetFromRVA(uint rva) + { + foreach ( Section s; sections ) + { + with ( *s.header ) + { + if( rva >= VirtualAddress && rva <= VirtualAddress+Misc.VirtualSize ) + return rva-VirtualAddress+PointerToRawData; + } + } + return 0; + } + + /********************************************************************************************** + Calculates the virtual base address where code from this image is loaded to. + **********************************************************************************************/ + size_t getCodeBase() + { + if ( codebase == 0 ) + { + assert ( opt_header !is null ); + Section s = findSection(0x20000000, code_section_index); + assert ( s !is null ); + codebase = opt_header.ImageBase + s.header.VirtualAddress; + } + return codebase; + } + + /********************************************************************************************** + Calculates the base address for the given section. + **********************************************************************************************/ + uint getSectionBase(uint section) + { + if ( section > sections.length ) + return opt_header.ImageBase; + return opt_header.ImageBase + sections[section-1].header.VirtualAddress; + } + + /********************************************************************************************** + Finds a section with the given characteristics. + **********************************************************************************************/ + private Section findSection(uint characteristics, out uint index) + { + foreach( int i, s; sections ) + { + if( (s.header.Characteristics & characteristics) == characteristics ) { + index = i; + return s; + } + } + return null; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/codeview/debuginfo.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/codeview/debuginfo.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,354 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +module codeview.debuginfo; + +import container; +import util; +import codeview.coff; +import codeview.codeview; + +import std.string; + +class SourceModule +{ + SourceFile[] files; +} + +class SourceFile +{ + SourceModule source_module; + string name; + SourceSegment[] segments; + CodeBlock[][uint] blocks_by_line; + uint[] lines; +} + +class SourceSegment +{ + SourceFile file; + size_t start, + end; +} + +class CodeBlock +{ + size_t start, + end; + uint line; + SourceSegment segment; + + this(size_t s, uint l, SourceSegment seg) + { + start = s; + line = l; + segment = seg; + } + + /********************************************************************************************** + Check if block contains offset + **********************************************************************************************/ + int opCmp(size_t offset) + { + if ( start > offset ) + return 1; + if ( end <= offset ) + return -1; + return 0; + } + + /********************************************************************************************** + Compare by start address. + **********************************************************************************************/ + int opCmp(ref CodeBlock cb) + { + if ( start > cb.start ) + return 1; + if ( start < cb.start ) + return -1; + return 0; + } + + string toString() + { + return format("%s:%d 0x%x-0x%x in 0x%x-0x%x", segment.file.name, line, start, end, segment.start, segment.end); + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +abstract class DebugInfo +{ + SourceModule[] source_modules; + AVLTree!(CodeBlock) codeblocks; /// contains all blocks from all modules + + this() + { + codeblocks = new AVLTree!(CodeBlock); + } + + size_t getCodeBase(); + + void updateCodeblocks() + { + bool findEnd(AVLNode!(CodeBlock) n) + { + AVLNode!(CodeBlock) n2; + if ( n.findNext(n2) && (n2.value.segment is n.value.segment || n.value.segment.end == n.value.start) ) + n.value.end = n2.value.start; + else + n.value.end = n.value.segment.end; + return true; + } + codeblocks.traverseDepthLeft(&findEnd); + } + + /********************************************************************************************** + + **********************************************************************************************/ + CodeBlock findCodeBlockRel(uint address) + { + CodeBlock cb; + if ( !codeblocks.find(address, cb) ) + return null; + return cb; + } + + CodeBlock findCodeBlockAbs(uint address) + { + CodeBlock cb; + if ( !codeblocks.find(address-getCodeBase, cb) ) + return null; + return cb; + } + + /********************************************************************************************** + Find the source files that correspond to the given filepath. + That path can be relative to one of the search_paths. + **********************************************************************************************/ + SourceFile[] findSrcFiles(string filepath, string[] search_paths) + { + string fullpath = getFullPath(filepath); + if ( fullpath is null ) + return null; + + SourceFile[] sfs; + foreach ( sm; source_modules ) + { + foreach ( sf; sm.files ) + { + foreach ( sp; search_paths ) + { + string path = getFullPath(sp~sf.name); + if ( path !is null && icmp(path, fullpath) == 0 ) + sfs ~= sf; + } + } + } + + return sfs; + } + + /********************************************************************************************** + Find source files that contain the given substring in it's path. + **********************************************************************************************/ + SourceFile[] findSrcFiles(string filename_substring) + { + SourceFile[] sfs; + foreach ( sm; source_modules ) + { + foreach ( sf; sm.files ) + { + if ( find(sf.name, filename_substring) >= 0 ) + sfs ~= sf; + } + } + return sfs; + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +class ImageSet +{ + COFFImage[] images; + + void opCatAssign(COFFImage image) + { + images ~= image; + } + + void remove(COFFImage image) + { + foreach ( i, img; images ) + { + if ( img is image ) + { + images = images[0..i]~images[i+1..$]; + break; + } + } + } + + Location findLocation(uint vaddress) + { + foreach ( img; images ) + { + if ( img.codeView !is null ) + { + auto loc = img.codeView.findLocation(vaddress); + if ( loc !is null ) + return loc; + } + } + return null; + } + + CodeBlock findCodeBlockAbs(uint address, out CodeView cv) + { + foreach ( img; images ) + { + if ( img.codeView !is null ) + { + auto cb = img.codeView.findCodeBlockAbs(address); + if ( cb !is null ) { + cv = img.codeView; + return cb; + } + } + } + return null; + } + + CodeBlock findCodeBlockRel(uint address, out CodeView cv) + { + foreach ( img; images ) + { + if ( img.codeView !is null ) + { + auto cb = img.codeView.findCodeBlockRel(address); + if ( cb !is null ) { + cv = img.codeView; + return cb; + } + } + } + return null; + } + + Module findModule(uint vaddress, out uint segment) + { + foreach ( img; images ) + { + if ( img.codeView !is null ) + { + auto mod = img.codeView.findModule(vaddress, segment); + if ( mod !is null ) + return mod; + } + } + return null; + } + + string mangleCVtype(ushort cvtype) + { + foreach ( img; images ) + { + if ( img.codeView !is null ) + { + auto t = img.codeView.mangleCVtype(cvtype); + if ( t !is null ) + return t; + } + } + return null; + } + + SourceFile[] findSrcFiles(string filename_substring) + { + foreach ( img; images ) + { + if ( img.codeView !is null ) + { + auto t = img.codeView.findSrcFiles(filename_substring); + if ( t !is null ) + return t; + } + } + return null; + } + + SourceFile[] findSrcFiles(string filepath, string[] search_paths) + { + foreach ( img; images ) + { + if ( img.codeView !is null ) + { + auto t = img.codeView.findSrcFiles(filepath, search_paths); + if ( t !is null ) + return t; + } + } + return null; + } + + Location findSrcLine(SourceFile sf, uint min_line, size_t min_start=0) + { + foreach ( img; images ) + { + if ( img.codeView !is null ) + { + auto t = img.codeView.findSrcLine(sf, min_line, min_start); + if ( t !is null ) + return t; + } + } + return null; + } + + Location findNextSrcLine(Location loc) + { + foreach ( img; images ) + { + if ( img.codeView !is null ) + { + auto t = img.codeView.findNextSrcLine(loc); + if ( t !is null ) + return t; + } + } + return null; + } + + Location findPrevSrcLine(Location loc) + { + foreach ( img; images ) + { + if ( img.codeView !is null ) + { + auto t = img.codeView.findPrevSrcLine(loc); + if ( t !is null ) + return t; + } + } + return null; + } + + ProcedureSymbol findProcedureSymbol(uint vaddress) + { + foreach ( img; images ) + { + if ( img.codeView !is null ) + { + auto t = img.codeView.findProcedureSymbol(vaddress); + if ( t !is null ) + return t; + } + } + return null; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/codeview/decl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/codeview/decl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,723 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ +module codeview.decl; + +//================================================================================================= +// structs corresponding to the CodeView 4 file format specification NB09 + +align(1) struct DirHeader +{ + ushort cbDirHeader, + cbDirEntry; + uint cDir, + lfoNextDir, + flags; +} + +align(1) struct DirEntry +{ + ushort subsection, + iMod; + uint lfo, + cb; +} + +enum +{ + sstModule = 0x120, + sstTypes, + sstPublic, + sstPublicSym, + sstSymbols, + sstAlignSym, + sstSrcLnSeg, + sstSrcModule, + sstLibraries, + sstGlobalSym, + sstGlobalPub, + sstGlobalTypes, + sstMPC, + sstSegMap, + sstSegName, + sstPreComp, + sstPreCompMap, + sstOffsetMap16, + sstOffsetMap32, + sstFileIndex, + sstStaticSym +} + +align(1) struct ModuleHeader +{ + ushort ovlNumber, + iLib, + cSeg, + Style; +} + +align(1) struct SegInfo +{ + ushort Seg, + pad; + uint offset, + cbSeg; +} + +enum SymbolIndex +{ + S_COMPILE = 1, + S_REGISTER, + S_CONSTANT, + S_UDT, + S_SSEARCH, + S_END, + S_SKIP, + S_CVRESERVE, + S_OBJNAME, + S_ENDARG, + S_COBOLUDT, + S_MANYREG, + S_RETURN, + S_ENTRYTHIS, + + S_BPREL16 = 0x100, + S_LDATA16, + S_GDATA16, + S_PUB16, + S_LPROC16, + S_GPROC16, + S_THUNK16, + S_BLOCK16, + S_WITH16, + S_LABEL16, + S_CEXMODEL16, + S_VFTPATH16, + S_REGREL16, + + S_BPREL32 = 0x200, + S_LDATA32, + S_GDATA32, + S_PUB32, + S_LPROC32, + S_GPROC32, + S_THUNK32, + S_BLOCK32, + S_WITH32, + S_LABEL32, + S_CEXMODEL32, + S_VFTPATH32, + S_REGREL32, + S_LTHREAD32, + S_GTHREAD32, + + S_PROCREF = 0x400, + S_DATAREF, + S_ALIGN, +} + +align(1) struct CVProcedureSymbol +{ + uint pParent, + pEnd, + pNext, + proc_length, + debug_start, + debug_end, + offset; + ushort segment, + proctype; + ubyte flags; +} + +align(1) struct CVReturnSymbol +{ + ushort flags; + ubyte style; +} + +align(1) struct CVStackSymbol +{ + int offset; + ushort type; +} + +align(1) struct CVDataSymbol +{ + uint offset; + ushort segment, + type; +} + +align(1) struct PackedSymbolsHeader +{ + ushort symhash, + addrhash; + uint cbSymbol, + cbSymHash, + cbAddrHash; +} + +//================================================================================================= +// D recOEM's + +const uint OEM_DIGITALMARS = 0x0042; +const uint D_DYN_ARRAY = 0x0001; +const uint D_ASSOC_ARRAY = 0x0002; +const uint D_DELEGATE = 0x0003; + +//================================================================================================= +// leaf indeces + +const uint LF_MODIFIER_16t = 0x0001; +const uint LF_POINTER_16t = 0x0002; +const uint LF_ARRAY_16t = 0x0003; +const uint LF_CLASS_16t = 0x0004; +const uint LF_STRUCTURE_16t = 0x0005; +const uint LF_UNION_16t = 0x0006; +const uint LF_ENUM_16t = 0x0007; +const uint LF_PROCEDURE_16t = 0x0008; +const uint LF_MFUNCTION_16t = 0x0009; +const uint LF_VTSHAPE = 0x000a; +const uint LF_COBOL0_16t = 0x000b; +const uint LF_COBOL1 = 0x000c; +const uint LF_BARRAY_16t = 0x000d; +const uint LF_LABEL = 0x000e; +const uint LF_NULL = 0x000f; +const uint LF_NOTTRAN = 0x0010; +const uint LF_DIMARRAY_16t = 0x0011; +const uint LF_VFTPATH_16t = 0x0012; +const uint LF_PRECOMP_16t = 0x0013; +const uint LF_ENDPRECOMP = 0x0014; +const uint LF_OEM_16t = 0x0015; +const uint LF_TYPESERVER = 0x0016; + +const uint LF_MODIFIER = 0x1001; +const uint LF_POINTER = 0x1002; +const uint LF_ARRAY = 0x1003; +const uint LF_CLASS = 0x1004; +const uint LF_STRUCTURE = 0x1005; +const uint LF_UNION = 0x1006; +const uint LF_ENUM = 0x1007; +const uint LF_PROCEDURE = 0x1008; +const uint LF_MFUNCTION = 0x1009; +const uint LF_COBOL0 = 0x100a; +const uint LF_BARRAY = 0x100b; +const uint LF_DIMARRAY = 0x100c; +const uint LF_VFTPATH = 0x100d; +const uint LF_PRECOMP = 0x100e; +const uint LF_OEM = 0x100f; + +const uint LF_SKIP_16t = 0x0200; +const uint LF_ARGLIST_16t = 0x0201; +const uint LF_DEFARG_16t = 0x0202; +const uint LF_LIST = 0x0203; +const uint LF_FIELDLIST_16t = 0x0204; +const uint LF_DERIVED_16t = 0x0205; +const uint LF_BITFIELD_16t = 0x0206; +const uint LF_METHODLIST_16t= 0x0207; +const uint LF_DIMCONU_16t = 0x0208; +const uint LF_DIMCONLU_16t = 0x0209; +const uint LF_DIMVARU_16t = 0x020a; +const uint LF_DIMVARLU_16t = 0x020b; +const uint LF_REFSYM = 0x020c; + +const uint LF_SKIP = 0x1200; +const uint LF_ARGLIST = 0x1201; +const uint LF_DEFARG = 0x1202; +const uint LF_FIELDLIST = 0x1203; +const uint LF_DERIVED = 0x1204; +const uint LF_BITFIELD = 0x1205; +const uint LF_METHODLIST = 0x1206; +const uint LF_DIMCONU = 0x1207; +const uint LF_DIMCONLU = 0x1208; +const uint LF_DIMVARU = 0x1209; +const uint LF_DIMVARLU = 0x120a; + +const uint LF_BCLASS_16t = 0x0400; +const uint LF_VBCLASS_16t = 0x0401; +const uint LF_IVBCLASS_16t = 0x0402; +const uint LF_ENUMERATE = 0x0403; +const uint LF_FRIENDFCN_16t = 0x0404; +const uint LF_INDEX_16t = 0x0405; +const uint LF_MEMBER_16t = 0x0406; +const uint LF_STMEMBER_16t = 0x0407; +const uint LF_METHOD_16t = 0x0408; +const uint LF_NESTTYPE_16t = 0x0409; +const uint LF_VFUNCTAB_16t = 0x040a; +const uint LF_FRIENDCLS_16t = 0x040b; +const uint LF_ONEMETHOD_16t = 0x040c; +const uint LF_VFUNCOFF_16t = 0x040d; +const uint LF_NESTTYPEEX_16t= 0x040e; +const uint LF_MEMBERMODIFY_16t = 0x040f; + +const uint LF_BCLASS = 0x1400; +const uint LF_VBCLASS = 0x1401; +const uint LF_IVBCLASS = 0x1402; +const uint LF_FRIENDFCN = 0x1403; +const uint LF_INDEX = 0x1404; +const uint LF_MEMBER = 0x1405; +const uint LF_STMEMBER = 0x1406; +const uint LF_METHOD = 0x1407; +const uint LF_NESTTYPE = 0x1408; +const uint LF_VFUNCTAB = 0x1409; +const uint LF_FRIENDCLS = 0x140a; +const uint LF_ONEMETHOD = 0x140b; +const uint LF_VFUNCOFF = 0x140c; +const uint LF_NESTTYPEEX = 0x140d; +const uint LF_MEMBERMODIFY = 0x140e; + +const uint LF_NUMERIC = 0x8000; +const uint LF_CHAR = 0x8000; +const uint LF_SHORT = 0x8001; +const uint LF_USHORT = 0x8002; +const uint LF_LONG = 0x8003; +const uint LF_ULONG = 0x8004; +const uint LF_REAL32 = 0x8005; +const uint LF_REAL64 = 0x8006; +const uint LF_REAL80 = 0x8007; +const uint LF_REAL128 = 0x8008; +const uint LF_QUADWORD = 0x8009; +const uint LF_UQUADWORD = 0x800a; +const uint LF_REAL48 = 0x800b; +const uint LF_COMPLEX32 = 0x800c; +const uint LF_COMPLEX64 = 0x800d; +const uint LF_COMPLEX80 = 0x800e; +const uint LF_COMPLEX128 = 0x800f; +const uint LF_VARSTRING = 0x8010; +const uint LF_UCHAR = 0x8011; + +//================================================================================================= +// Primitive Types + +// Special Types +const uint T_NOTYPE = 0x0000; +const uint T_ABS = 0x0001; +const uint T_SEGMENT = 0x0002; +const uint T_VOID = 0x0003; +const uint T_PVOID = 0x0103; +const uint T_PFVOID = 0x0203; +const uint T_PHVOID = 0x0303; +const uint T_32PVOID = 0x0403; +const uint T_32PFVOID = 0x0503; +const uint T_CURRENCY = 0x0004; +const uint T_NBASICSTR = 0x0005; +const uint T_FBASICSTR = 0x0006; +const uint T_NOTTRANS = 0x0007; +const uint T_BIT = 0x0060; +const uint T_PASCHAR = 0x0061; + +// Character Types +const uint T_CHAR = 0x0010; +const uint T_UCHAR = 0x0020; +const uint T_PCHAR = 0x0110; +const uint T_PUCHAR = 0x0120; +const uint T_PFCHAR = 0x0210; +const uint T_PFUCHAR = 0x0220; +const uint T_PHCHAR = 0x0310; +const uint T_PHUCHAR = 0x0320; +const uint T_32PCHAR = 0x0410; +const uint T_32PUCHAR = 0x0420; +const uint T_32PFCHAR = 0x0510; +const uint T_32PFUCHAR = 0x0520; + +// Real Character Types +const uint T_RCHAR = 0x0070; +const uint T_PRCHAR = 0x0170; +const uint T_PFRCHAR = 0x0270; +const uint T_PHRCHAR = 0x0370; +const uint T_32PRCHAR = 0x0470; +const uint T_32PFRCHAR = 0x0570; + +// Wide Character Types +const uint T_WCHAR = 0x0071; +const uint T_PWCHAR = 0x0171; +const uint T_PFWCHAR = 0x0271; +const uint T_PHWCHAR = 0x0371; +const uint T_32PWCHAR = 0x0471; +const uint T_32PFWCHAR = 0x0571; + +// Double Wide Character Types - D enhancement +const uint T_DCHAR = 0x0078; +const uint T_32PDCHAR = 0x0478; +const uint T_32PFDCHAR = 0x0578; + +// Real 16-bit Integer Types +const uint T_INT2 = 0x0072; +const uint T_UINT2 = 0x0073; +const uint T_PINT2 = 0x0172; +const uint T_PUINT2 = 0x0173; +const uint T_PFINT2 = 0x0272; +const uint T_PFUINT2 = 0x0273; +const uint T_PHINT2 = 0x0372; +const uint T_PHUINT2 = 0x0373; +const uint T_32PINT2 = 0x0472; +const uint T_32PUINT2 = 0x0473; +const uint T_32PFINT2 = 0x0572; +const uint T_32PFUINT2 = 0x0573; + +// 16-bit Short Types +const uint T_SHORT = 0x0011; +const uint T_USHORT = 0x0021; +const uint T_PSHORT = 0x0111; +const uint T_PUSHORT = 0x0121; +const uint T_PFSHORT = 0x0211; +const uint T_PFUSHORT = 0x0221; +const uint T_PHSHORT = 0x0311; +const uint T_PHUSHORT = 0x0321; +const uint T_32PSHORT = 0x0411; +const uint T_32PUSHORT = 0x0421; +const uint T_32PFSHORT = 0x0511; +const uint T_32PFUSHORT = 0x0521; + +// Real 32-bit Integer Types +const uint T_INT4 = 0x0074; +const uint T_UINT4 = 0x0075; +const uint T_PINT4 = 0x0174; +const uint T_PUINT4 = 0x0175; +const uint T_PFINT4 = 0x0274; +const uint T_PFUINT4 = 0x0275; +const uint T_PHINT4 = 0x0374; +const uint T_PHUINT4 = 0x0375; +const uint T_32PINT4 = 0x0474; +const uint T_32PUINT4 = 0x0475; +const uint T_32PFINT4 = 0x0574; +const uint T_32PFUINT4 = 0x0575; + +// 32-bit Long Types +const uint T_LONG = 0x0012; +const uint T_ULONG = 0x0022; +const uint T_PLONG = 0x0112; +const uint T_PULONG = 0x0122; +const uint T_PFLONG = 0x0212; +const uint T_PFULONG = 0x0222; +const uint T_PHLONG = 0x0312; +const uint T_PHULONG = 0x0322; +const uint T_32PLONG = 0x0412; +const uint T_32PULONG = 0x0422; +const uint T_32PFLONG = 0x0512; +const uint T_32PFULONG = 0x0522; + +// Real 64-bit int Types +const uint T_INT8 = 0x0076; +const uint T_UINT8 = 0x0077; +const uint T_PINT8 = 0x0176; +const uint T_PUINT8 = 0x0177; +const uint T_PFINT8 = 0x0276; +const uint T_PFUINT8 = 0x0277; +const uint T_PHINT8 = 0x0376; +const uint T_PHUINT8 = 0x0377; +const uint T_32PINT8 = 0x0476; +const uint T_32PUINT8 = 0x0477; +const uint T_32PFINT8 = 0x0576; +const uint T_32PFUINT8 = 0x0577; + +// 64-bit Integral Types +const uint T_QUAD = 0x0013; +const uint T_UQUAD = 0x0023; +const uint T_PQUAD = 0x0113; +const uint T_PUQUAD = 0x0123; +const uint T_PFQUAD = 0x0213; +const uint T_PFUQUAD = 0x0223; +const uint T_PHQUAD = 0x0313; +const uint T_PHUQUAD = 0x0323; +const uint T_32PQUAD = 0x0413; +const uint T_32PUQUAD = 0x0423; +const uint T_32PFQUAD = 0x0513; +const uint T_32PFUQUAD = 0x0523; + +// 32-bit Real Types +const uint T_REAL32 = 0x0040; +const uint T_PREAL32 = 0x0140; +const uint T_PFREAL32 = 0x0240; +const uint T_PHREAL32 = 0x0340; +const uint T_32PREAL32 = 0x0440; +const uint T_32PFREAL32 = 0x0540; + +// 48-bit Real Types +const uint T_REAL48 = 0x0044; +const uint T_PREAL48 = 0x0144; +const uint T_PFREAL48 = 0x0244; +const uint T_PHREAL48 = 0x0344; +const uint T_32PREAL48 = 0x0444; +const uint T_32PFREAL48 = 0x0544; + +// 64-bit Real Types +const uint T_REAL64 = 0x0041; +const uint T_PREAL64 = 0x0141; +const uint T_PFREAL64 = 0x0241; +const uint T_PHREAL64 = 0x0341; +const uint T_32PREAL64 = 0x0441; +const uint T_32PFREAL64 = 0x0541; + +// 80-bit Real Types +const uint T_REAL80 = 0x0042; +const uint T_PREAL80 = 0x0142; +const uint T_PFREAL80 = 0x0242; +const uint T_PHREAL80 = 0x0342; +const uint T_32PREAL80 = 0x0442; +const uint T_32PFREAL80 = 0x0542; + +// 128-bit Real Types +const uint T_REAL128 = 0x0043; +const uint T_PREAL128 = 0x0143; +const uint T_PFREAL128 = 0x0243; +const uint T_PHREAL128 = 0x0343; +const uint T_32PREAL128 = 0x0443; +const uint T_32PFREAL128 = 0x0543; + +// 32-bit Complex Types +const uint T_CPLX32 = 0x0050; +const uint T_PCPLX32 = 0x0150; +const uint T_PFCPLX32 = 0x0250; +const uint T_PHCPLX32 = 0x0350; +const uint T_32PCPLX32 = 0x0450; +const uint T_32PFCPLX32 = 0x0550; + +// 64-bit Complex Types +const uint T_CPLX64 = 0x0051; +const uint T_PCPLX64 = 0x0151; +const uint T_PFCPLX64 = 0x0251; +const uint T_PHCPLX64 = 0x0351; +const uint T_32PCPLX64 = 0x0451; +const uint T_32PFCPLX64 = 0x0551; + +// 80-bit Complex Types +const uint T_CPLX80 = 0x0052; +const uint T_PCPLX80 = 0x0152; +const uint T_PFCPLX80 = 0x0252; +const uint T_PHCPLX80 = 0x0352; +const uint T_32PCPLX80 = 0x0452; +const uint T_32PFCPLX80 = 0x0552; + +// 128-bit Complex Types +const uint T_CPLX128 = 0x0053; +const uint T_PCPLX128 = 0x0153; +const uint T_PFCPLX128 = 0x0253; +const uint T_PHCPLX128 = 0x0353; +const uint T_32PCPLX128 = 0x0453; +const uint T_32PFCPLX128 = 0x0553; + +// Boolean Types +const uint T_BOOL08 = 0x0030; +const uint T_BOOL16 = 0x0031; +const uint T_BOOL32 = 0x0032; +const uint T_BOOL64 = 0x0033; +const uint T_PBOOL08 = 0x0130; +const uint T_PBOOL16 = 0x0131; +const uint T_PBOOL32 = 0x0132; +const uint T_PBOOL64 = 0x0133; +const uint T_PFBOOL08 = 0x0230; +const uint T_PFBOOL16 = 0x0231; +const uint T_PFBOOL32 = 0x0232; +const uint T_PFBOOL64 = 0x0233; +const uint T_PHBOOL08 = 0x0330; +const uint T_PHBOOL16 = 0x0331; +const uint T_PHBOOL32 = 0x0332; +const uint T_PHBOOL64 = 0x0333; +const uint T_32PBOOL08 = 0x0430; +const uint T_32PBOOL16 = 0x0431; +const uint T_32PBOOL32 = 0x0432; +const uint T_32PBOOL64 = 0x0433; +const uint T_32PFBOOL08 = 0x0530; +const uint T_32PFBOOL16 = 0x0531; +const uint T_32PFBOOL32 = 0x0532; +const uint T_32PFBOOL64 = 0x0533; + +//================================================================================================= +// classes for representing types + +class Leaf +{ + ushort leaf_index; +} + +class LeafModifer : Leaf +{ + ushort attribute, index; +} + +class LeafPointer : Leaf +{ + ushort attribute, + type; +} + +class LeafArgList : Leaf +{ + ushort argcount; + ushort[] indeces; +} + +class LeafProcedure : Leaf +{ + ushort rvtype; + ubyte call, + reserved; + ushort cParms, + arglist; +} + +class LeafMFunction : Leaf +{ + ushort rvtype, + _class, + _this; + ubyte call, + reserved; + ushort cParms, + arglist; + uint thisadjust; +} + +class LeafNumeric : Leaf +{ + union { + char c; + ubyte uc; + short s; + ushort us; + int i; + uint ui; + long l; + ulong ul; + float f; + double d; + real r; + cfloat cf; + cdouble cd; + creal cr; + string str; + } + + uint getUint() + { + switch ( leaf_index ) + { + case LF_USHORT: return us; + case LF_ULONG: return cast(uint)ul; + case LF_UCHAR: return uc; + default: + assert ( 0, "unsupported numeric leaf" ); + } + return 0; + } +} + +class LeafClassStruc : Leaf +{ + ushort count, + field, + property, + dList, + vshape, + type; + LeafNumeric length; + string name; +} + +class LeafVTShape : Leaf +{ + ubyte[] descriptor; +} + +class LeafFieldList : Leaf +{ + Leaf[] fields; +} + +class LeafMethodList : Leaf +{ +} + +class LeafDerived : Leaf +{ + ushort[] types; +} + +class LeafBaseClass : Leaf +{ + ushort type, + attribute; + LeafNumeric offset; +} + +class LeafMember : Leaf +{ + ushort type, + attribute; + LeafNumeric offset; + string name; +} + +class LeafMethod : Leaf +{ + ushort count, + mList; + string name; +} + +class LeafArray : Leaf +{ + ushort elemtype, + idxtype; + LeafNumeric length; + string name; +} + +class LeafEnum : Leaf +{ + ushort count, + type, + field, + property; + string name; +} + +class LeafEnumNameValue : Leaf +{ + ushort attribute; + LeafNumeric value; + string name; +} + +class LeafNestedType : Leaf +{ + ushort index; + string name; +} + +class LeafStaticDataMember : Leaf +{ + ushort type, + attribute; + string name; +} + +class LeafUnion : Leaf +{ + ushort count, + field, + property; + LeafNumeric length; + string name; +} + +class LeafDynArray : Leaf +{ + ushort index_type, + elem_type; +} + +class LeafAssocArray : Leaf +{ + ushort key_type, + elem_type; +} + +class LeafDelegate : Leaf +{ + ushort this_type, + func_type; +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/codeview/parser.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/codeview/parser.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,862 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +module codeview.parser; + +import codeview.codeview; +import codeview.decl; +import codeview.coff; + +import util; +import container; + +import std.demangle; +import std.string; + +class CodeViewException : Exception +{ + this(string msg) { super(msg); } +} + +class CodeViewParser +{ + const uint cv_nb09_sig = intFromStr("NB09"); + +static: + /********************************************************************************************** + Parses the given CodeView section data from the given COFF image. + **********************************************************************************************/ + CodeView parse(COFFImage img, ubyte[] data) + { + if ( data.length <= 0 ) + return null; + CodeView cv = new CodeView; + + cv.image = img; + cv.global_pub = new SymbolSet; + cv.global_sym = new SymbolSet; + cv.static_sym = new SymbolSet; + + DataReader dr = new DataReader(data); + uint sig; + dr.read(sig); + if ( sig != cv_nb09_sig ) { + char[4] sigstr; + sigstr[] = (cast(char*)&sig)[0..4]; + debug DbgIO.println("Unsupported CodeView version %s", sigstr); + return null; + } + + uint lfoDir; + dr.read(lfoDir); + dr.seek(lfoDir); + + ubyte[] buf; + dr.readA(buf, DirHeader.sizeof); + DirHeader* head = cast(DirHeader*)buf.ptr; + assert(head.cbDirHeader==DirHeader.sizeof); + assert(head.cbDirEntry==DirEntry.sizeof); + + DirEntry[] entries; + dr.readA(entries, head.cDir); + + foreach ( DirEntry entry; entries ) + { + ubyte[] section_data; + dr.seek(entry.lfo); + dr.readA(section_data, entry.cb); + + switch ( entry.subsection ) + { + case sstModule: + Module mod = parseModule(cv, section_data); + assert ( entry.iMod-1 == cv.modulesByIndex.length ); + cv.modulesByIndex ~= mod; + cv.modulesByName[mod.name] = mod; + debug(cvsections) DbgIO.println("sstModule section \"%s\"", mod.name); + break; + case sstAlignSym: + debug(cvsections) DbgIO.println("sstAlignSym section"); + assert ( entry.iMod <= cv.modulesByIndex.length ); + Module mod = cv.modulesByIndex[entry.iMod-1]; + parseSymbols(cv, section_data, mod.symbols, true, mod); + break; + case sstSrcModule: + debug(cvsections) DbgIO.println("sstSrcModule section"); + assert( entry.iMod <= cv.modulesByIndex.length ); + parseSrcModule(cv, section_data, cv.modulesByIndex[entry.iMod-1]); + break; + case sstLibraries: + debug(cvsections) DbgIO.println("sstLibraries section"); + parseLibraries(cv, section_data); + break; + case sstGlobalSym: + debug(cvsections) DbgIO.println("sstGlobalSym section"); + parsePackedSymbols(cv, section_data, cv.global_sym); + break; + case sstGlobalPub: + debug(cvsections) DbgIO.println("sstGlobalPub section"); + parsePackedSymbols(cv, section_data, cv.global_pub); + break; + case sstStaticSym: + debug(cvsections) DbgIO.println("sstStaticSym section"); + parsePackedSymbols(cv, section_data, cv.static_sym); + break; + case sstGlobalTypes: + debug(cvsections) DbgIO.println("sstGlobalTypes section"); + parseGlobalTypes(cv, section_data, entry.lfo); + break; + case sstSegMap: + debug(cvsections) DbgIO.println("sstSegMap section"); + break; + case sstSegName: + debug(cvsections) DbgIO.println("sstSegName section"); + break; + case sstFileIndex: + debug(cvsections) DbgIO.println("sstFileIndex section"); + break; + case sstSymbols: + case sstTypes: + case sstPublic: + case sstPublicSym: + case sstSrcLnSeg: + case sstMPC: + case sstPreComp: + case sstPreCompMap: + case sstOffsetMap16: + case sstOffsetMap32: + debug DbgIO.println("Unprocessed CV section 0x%x", entry.subsection); + break; + default: + debug DbgIO.println("Unknown CV section 0x%x", entry.subsection); + } + } + + updateSymbols(cv, cv.global_pub.named_symbols); + updateSymbols(cv, cv.global_sym.named_symbols); + updateSymbols(cv, cv.static_sym.named_symbols); + foreach ( m; cv.modulesByIndex ) + updateSymbols(cv, m.symbols.named_symbols); + + cv.globalNamedSymbols = new AVLTree!(NamedSymbol); + foreach ( ns; cv.global_sym.named_symbols ) + cv.globalNamedSymbols.insert(ns); + foreach ( ns; cv.global_pub.named_symbols ) + cv.globalNamedSymbols.insert(ns); + foreach ( ns; cv.static_sym.named_symbols ) + cv.globalNamedSymbols.insert(ns); + + cv.updateCodeblocks(); + + return cv; + } + +private: + T min(T)(T a, T b) + { + return a dr.data.length ) { + debug DbgIO.println("WARNING: length %d for symbol exceeds block size %d - skipping section", length, dr.data.length); + if ( mod !is null ) + debug DbgIO.println("in module %s", mod.name); + return; + } + dr.read(index); + + ubyte[] buf; + switch ( index ) + { + case SymbolIndex.S_COMPILE: + ubyte machine, + language; + ushort flags; + dr.read(machine); + dr.read(language); + dr.read(flags); + string version_string; + dr.read(version_string); + debug(cvsymbols) DbgIO.println("machine: 0x%x, language: %d, flags: 0x%x, version: %s", machine, language, flags, version_string); + break; + case SymbolIndex.S_SSEARCH: + dr.read(sym_off); + ushort pe_section; + dr.read(pe_section); + if ( mod !is null ) + mod.pe_section = pe_section; + break; + case SymbolIndex.S_END: + debug(cvsymbols) DbgIO.println("S_END"); + if ( parent_scope !is null ) + { + if ( parent_scope.parent_scope !is null ) + parent_scope = parent_scope.parent_scope; + else + parent_scope = null; + } + else { + debug DbgIO.println("S_END with no active parent scope"); + } + expecting_arguments = false; + break; + case SymbolIndex.S_ENDARG: + expecting_arguments = false; + break; + case SymbolIndex.S_RETURN: + dr.readA(buf, CVReturnSymbol.sizeof); + ReturnSymbol rsym = new ReturnSymbol(cast(CVReturnSymbol*)buf.ptr); + if ( rsym.cvdata.style == 1 ) { + ubyte count; + dr.read(count); + dr.readA!(ubyte)(rsym.registers, count); + } + ProcedureSymbol psym = cast(ProcedureSymbol)parent_scope; + assert(psym !is null); + psym.return_sym = rsym; + break; + case SymbolIndex.S_LPROC32: + case SymbolIndex.S_GPROC32: + dr.readA(buf, CVProcedureSymbol.sizeof); + ProcedureSymbol psym = new ProcedureSymbol(cast(SymbolIndex)index, symbol_start, cast(CVProcedureSymbol*)buf.ptr); + dr.read(psym.mangled_name); + psym.name_notype = demangleName(psym.mangled_name); + psym.name_type = demangle(psym.mangled_name); + debug(cvsymbols) DbgIO.println("PROC32 %s (%s) s:%x o:%x", psym.name_type, psym.name_notype, psym.cvdata.segment, psym.cvdata.offset); + scope_syms[symbol_start] = psym; + addSymbol(psym); + assert ( parent_scope is null || psym.cvdata.pParent==parent_scope.lfo ); + if ( psym.cvdata.pParent in scope_syms ) + { + psym.parent_scope = scope_syms[psym.cvdata.pParent]; + psym.parent_scope.symbols.add(psym); + } + parent_scope = psym; + expecting_arguments = true; + break; + case SymbolIndex.S_BPREL32: + dr.readA(buf, CVStackSymbol.sizeof); + StackSymbol stsym = new StackSymbol(cast(CVStackSymbol*)buf.ptr); + dr.read(stsym.mangled_name); + stsym.name_notype = demangleName(stsym.mangled_name); + stsym.name_type = demangle(stsym.mangled_name); + debug(cvsymbols) DbgIO.println( + "BPREL32 %s%s [%s] 0x%x o:%d", parent_scope !is null?"("~parent_scope.name_type~") ":"", + stsym.name_type, stsym.name_notype, stsym.cvtype, cast(int)stsym.cvdata.offset + ); + addSymbol(stsym); + break; + case SymbolIndex.S_LDATA32: + case SymbolIndex.S_GDATA32: + case SymbolIndex.S_PUB32: + dr.readA(buf, CVDataSymbol.sizeof); + DataSymbol dsym = new DataSymbol(cast(SymbolIndex)index, cast(CVDataSymbol*)buf.ptr); + dr.read(dsym.mangled_name); + dsym.name_notype = demangleName(dsym.mangled_name); + dsym.name_type = demangle(dsym.mangled_name); + debug(cvsymbols) DbgIO.println("[LG]DATA|PUB32 %s (%s) s:%x o:%x t:0x%x", dsym.name_type, dsym.name_notype, dsym.cvdata.segment, dsym.offset, dsym.cvtype); + addSymbol(dsym); + break; + case SymbolIndex.S_ALIGN: + debug(cvsymbols) DbgIO.println("ALIGN"); + break; + case SymbolIndex.S_UDT: + UserDefinedType udt = new UserDefinedType; + dr.read(udt.type_index); + dr.read(udt.name); + cv.udtypes ~= udt; + break; + case SymbolIndex.S_PROCREF: + case SymbolIndex.S_DATAREF: + break; + case SymbolIndex.S_REGISTER: + case SymbolIndex.S_CONSTANT: + case SymbolIndex.S_SKIP: + case SymbolIndex.S_CVRESERVE: + case SymbolIndex.S_OBJNAME: + case SymbolIndex.S_COBOLUDT: + case SymbolIndex.S_MANYREG: + case SymbolIndex.S_ENTRYTHIS: + case SymbolIndex.S_BPREL16: + case SymbolIndex.S_LDATA16: + case SymbolIndex.S_PUB16: + case SymbolIndex.S_LPROC16: + case SymbolIndex.S_GPROC16: + case SymbolIndex.S_THUNK16: + case SymbolIndex.S_BLOCK16: + case SymbolIndex.S_WITH16: + case SymbolIndex.S_LABEL16: + case SymbolIndex.S_CEXMODEL16: + case SymbolIndex.S_VFTPATH16: + case SymbolIndex.S_REGREL16: + case SymbolIndex.S_GDATA16: + case SymbolIndex.S_THUNK32: + case SymbolIndex.S_BLOCK32: + case SymbolIndex.S_WITH32: + case SymbolIndex.S_LABEL32: + case SymbolIndex.S_CEXMODEL32: + case SymbolIndex.S_VFTPATH32: + case SymbolIndex.S_REGREL32: + case SymbolIndex.S_LTHREAD32: + case SymbolIndex.S_GTHREAD32: + debug DbgIO.println("unprocessed symbol index 0x%x", index); + break; + default: + debug DbgIO.println("unknown symbol index 0x%x", index); + } + + dr.seek(next_symbol); + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + void parseSrcModule(CodeView cv, ubyte[] data, Module mod) + { + if ( data.length <= 0 ) + throw new CodeViewException("parseSrcModule on empty data"); + DataReader dr = new DataReader(data); + ushort cFile, cSeg; + dr.read(cFile); + dr.read(cSeg); + + SourceModule smod = new SourceModule; + mod.source_module = smod; + cv.source_modules ~= smod; + + uint[] baseSrcFile, + start_end; + ushort[] seginds; + dr.readA(baseSrcFile, cast(uint)cFile); + dr.readA(start_end, cast(uint)cSeg*2); + dr.readA(seginds, cast(uint)cSeg); + debug(cvparser) DbgIO.println("Module %s files=%d segs=%d", mod.name, cFile, cSeg); + + foreach ( fileoffset; baseSrcFile ) + { + dr.seek(fileoffset); + dr.read(cSeg); + ushort pad; + dr.read(pad); + + SourceFile file = new SourceFile; + file.source_module = smod; + uint[] baseSrcLn; + dr.readA(baseSrcLn, cast(uint)cSeg); + start_end = null; + dr.readA(start_end, cast(uint)cSeg*2); + dr.read(file.name); + debug(cvparser) DbgIO.println("\tFile %s segs=%d", file.name, cSeg); + smod.files ~= file; + + foreach ( int i, segoff; baseSrcLn ) + { + dr.seek(segoff); + SourceSegment seg = new SourceSegment; + file.segments ~= seg; + seg.file = file; + + seg.start = start_end[i*2]; + seg.end = start_end[i*2+1]; + + dr.read(pad); // segment index + ushort cPair; + dr.read(cPair); + debug(cvparser) DbgIO.println("\t\tSegment %d lines=%d", file.segments.length-1, cPair); + + uint[] offset; + ushort[] linenumber; + dr.readA(offset, cast(uint)cPair); + dr.readA(linenumber, cast(uint)cPair); + + foreach ( int j, l; linenumber ) { + CodeBlock cb = new CodeBlock(offset[j], l, seg); + file.blocks_by_line[l] ~= cb; + debug(cvparser) + { + bool inserted = cv.codeblocks.insert(cb); + if ( !inserted ) + DbgIO.println("failed to insert block %s, already exists", cb); + } + else + cv.codeblocks.insert(cb); + } + } + + file.lines = file.blocks_by_line.keys.dup.sort; + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + void parseLibraries(CodeView cv, ubyte[] data) + { + if ( data.length <= 0 ) + throw new CodeViewException("parseLibraries on empty data"); + DataReader dr = new DataReader(data); + while ( dr.available ) { + string lib; + dr.read(lib); + cv.libraries ~= lib; + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + void parsePackedSymbols(CodeView cv, ubyte[] data, SymbolSet symbols) + { + if ( data.length <= 0 ) + throw new CodeViewException("parsePackedSymbols on empty data"); + DataReader dr = new DataReader(data); + + ubyte[] buf; + dr.readA(buf, PackedSymbolsHeader.sizeof); + PackedSymbolsHeader* gsh = cast(PackedSymbolsHeader*)buf.ptr; + + dr.readA(buf, gsh.cbSymbol); + parseSymbols(cv, buf, symbols); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void parseGlobalTypes(CodeView cv, ubyte[] data, uint absolute_offset) + { + DataReader dr = new DataReader(data); + uint flags, + cType; + uint[] offType; + dr.read(flags); + dr.read(cType); + dr.readA(offType, cType); + + uint base = dr.cursor; + foreach ( off; offType ) + { + dr.seek(base+off); + ushort len; + dr.read(len); + ubyte[] buf; + dr.readA(buf, cast(uint)len); + cv.type_strings ~= parseTypeString(cv, buf); + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + Leaf[] parseTypeString(CodeView cv, ubyte[] data) + { + debug(cvdump) foreach ( b; data ) + DbgIO.print("%02x ", b); + debug(cvdump) DbgIO.println(""); + DataReader dr = new DataReader(data); + Leaf[] leafs; + bool first = true; + while ( dr.available ) + { + ushort leaf_index; + dr.read(leaf_index); + Leaf l; +// debug(cvparser) DbgIO.println("parsing 0x%x", leaf_index); + switch ( leaf_index ) + { + case LF_MODIFIER_16t: + LeafModifer lm = new LeafModifer; + l = lm; + dr.read(lm.attribute); + dr.read(lm.index); + break; + case LF_POINTER_16t: + LeafPointer lp = new LeafPointer; + l = lp; + dr.read(lp.attribute); + dr.read(lp.type); + switch ( lp.attribute&0x1f ) + { + case 0: + case 10: + break; + default: + debug DbgIO.println("unprocessed pointer type: 0x%x", lp.attribute); + assert(0); + } + break; + case LF_ARRAY_16t: + LeafArray la = new LeafArray; + l = la; + dr.read(la.elemtype); + dr.read(la.idxtype); + la.length = parseNumericLeaf(dr); + dr.read(la.name); + debug(cvparser) DbgIO.println("LF_ARRAY: %d 0x%x", la.length.getUint, 0x1000+cv.type_strings.length); + break; + case LF_PROCEDURE_16t: + LeafProcedure lp = new LeafProcedure; + l = lp; + dr.read(lp.rvtype); + dr.read(lp.call); + dr.read(lp.reserved); + dr.read(lp.cParms); + dr.read(lp.arglist); + break; + case LF_MFUNCTION_16t: + LeafMFunction lmf = new LeafMFunction; + l = lmf; + dr.read(lmf.rvtype); + dr.read(lmf._class); + dr.read(lmf._this); + dr.read(lmf.call); + dr.read(lmf.reserved); + dr.read(lmf.cParms); + dr.read(lmf.arglist); + dr.read(lmf.thisadjust); + break; + case LF_VTSHAPE: + LeafVTShape lvts = new LeafVTShape; + l = lvts; + ushort count; + dr.read(count); + dr.readA(lvts.descriptor, cast(uint)(count+1)>>1); + // skip rest of typestring + dr.seek(dr.data.length); + break; + case LF_CLASS_16t: + case LF_STRUCTURE_16t: + LeafClassStruc lcs = new LeafClassStruc; + l = lcs; + dr.read(lcs.count); + dr.read(lcs.field); + dr.read(lcs.property); + dr.read(lcs.dList); + dr.read(lcs.vshape); + lcs.length = parseNumericLeaf(dr); + dr.read(lcs.name); + lcs.type = cast(ushort)(0x1000+cv.type_strings.length); + debug(cvparser) DbgIO.println( + "%s 0x%x '%s' fl: 0x%x prop: 0x%x, length=0x%x", leaf_index==LF_CLASS_16t?"class":"struct", + lcs.type, lcs.name, lcs.field, lcs.property, lcs.length.getUint + ); + + cv.UDTsByName[lcs.name] = lcs; + break; + case LF_ENUM_16t: + LeafEnum le = new LeafEnum; + l = le; + dr.read(le.count); + dr.read(le.type); + dr.read(le.field); + dr.read(le.property); + dr.read(le.name); + debug(cvparser) DbgIO.println( + "enum 0x%x '%s' type: 0x%x fl: 0x%x prop: 0x%x", 0x1000+cv.type_strings.length, le.name, le.type, le.field, le.property + ); + cv.UDTsByName[le.name] = le; + break; + case LF_UNION_16t: + LeafUnion lu = new LeafUnion; + l = lu; + dr.read(lu.count); + dr.read(lu.field); + dr.read(lu.property); + lu.length = parseNumericLeaf(dr); + dr.read(lu.name); + // skip rest of typestring + dr.seek(dr.data.length); + debug(cvparser) DbgIO.println("Union '%s' count %d fields 0x%x length 0x%x", lu.name, lu.count, lu.field, lu.length.getUint); + cv.UDTsByName[lu.name] = lu; + break; + case LF_OEM_16t: + ushort oem; + dr.read(oem); + assert(oem == OEM_DIGITALMARS); + dr.read(oem); + ushort count; + dr.read(count); + assert(count == 2); + switch ( oem ) + { + case D_DYN_ARRAY: + LeafDynArray lda = new LeafDynArray; + l = lda; + dr.read(lda.index_type); + dr.read(lda.elem_type); + debug(cvparser) DbgIO.println("Dynamic array index_type 0x%x elem_type 0x%x", lda.index_type, lda.elem_type); + break; + case D_ASSOC_ARRAY: + LeafAssocArray laa = new LeafAssocArray; + l = laa; + dr.read(laa.key_type); + dr.read(laa.elem_type); + debug(cvparser) DbgIO.println("Associativ array key_type 0x%x elem_type 0x%x", laa.key_type, laa.elem_type); + break; + default: + LeafDelegate ld = new LeafDelegate; + l = ld; + dr.read(ld.this_type); + dr.read(ld.func_type); + debug(cvparser) DbgIO.println("Delegate this_type 0x%x func_type 0x%x", ld.this_type, ld.func_type); + break; + } + break; + + case LF_ARGLIST_16t: + LeafArgList lal = new LeafArgList; + l = lal; + dr.read(lal.argcount); + dr.readA(lal.indeces, cast(uint)lal.argcount); + break; + case LF_FIELDLIST_16t: + debug(cvparser) DbgIO.println("fieldlist 0x%x", 0x1000+cv.type_strings.length); + LeafFieldList lfl = new LeafFieldList; + l = lfl; + while ( dr.available ) + lfl.fields ~= parseSubfield(dr); + // skip rest of typestring + dr.seek(dr.data.length); + break; + case LF_DERIVED_16t: + LeafDerived ld = new LeafDerived; + l = ld; + ushort count; + dr.read(count); + dr.readA(ld.types, cast(uint)count); + break; + case LF_METHODLIST_16t: + LeafMethodList lml = new LeafMethodList; + l = lml; + // skip rest of typestring + dr.seek(dr.data.length); + break; + default: + debug DbgIO.println("unprocessed leaf index 0x%x at 0x%x", leaf_index, dr.cursor-2); + l = new Leaf; + } + assert ( l !is null ); + l.leaf_index = leaf_index; + leafs ~= l; + } + return leafs; + } + + /********************************************************************************************** + + **********************************************************************************************/ + Leaf parseSubfield(DataReader dr) + { + ushort leaf_index; + dr.read(leaf_index); + Leaf l; + switch ( leaf_index ) + { + case LF_BCLASS_16t: + LeafBaseClass lbc = new LeafBaseClass; + l = lbc; + dr.read(lbc.type); + dr.read(lbc.attribute); + lbc.offset = parseNumericLeaf(dr); + debug(cvparser) DbgIO.println("SFbclass"); + break; + case LF_MEMBER_16t: + LeafMember lm = new LeafMember; + l = lm; + dr.read(lm.type); + dr.read(lm.attribute); + lm.offset = parseNumericLeaf(dr); + dr.read(lm.name); + debug(cvparser) DbgIO.println("SFmember: %s", lm.name); + break; + case LF_METHOD_16t: + LeafMethod lm = new LeafMethod; + l = lm; + dr.read(lm.count); + dr.read(lm.mList); + dr.read(lm.name); + debug(cvparser) DbgIO.println("SFmethod: %d 0x%x %s", lm.count, lm.mList, lm.name); + break; + case LF_ENUMERATE: + LeafEnumNameValue le = new LeafEnumNameValue; + l = le; + dr.read(le.attribute); + le.value = parseNumericLeaf(dr); + dr.read(le.name); + debug(cvparser) DbgIO.println("SFenumerate: %s %d", le.name, le.value.getUint); + break; + case LF_NESTTYPE_16t: + LeafNestedType ln = new LeafNestedType; + l = ln; + dr.read(ln.index); + dr.read(ln.name); + debug(cvparser) DbgIO.println("SFnesttype: %s", ln.name); + break; + case LF_STMEMBER_16t: + LeafStaticDataMember ls = new LeafStaticDataMember; + l = ls; + dr.read(ls.type); + dr.read(ls.attribute); + dr.read(ls.name); + debug(cvparser) DbgIO.println("SFstmember: %s", ls.name); + break; + case LF_SKIP_16t: + dr.seek(dr.data.length); + debug(cvparser) DbgIO.println("SFskip"); + break; + default: + debug DbgIO.println("unprocessed subfield index 0x%x", leaf_index); + l = new Leaf; + } + if ( dr.available ) + { + ubyte pad; + dr.peek(pad); + if ( pad > 0xf0 ) + dr.relseek(pad&0xf); + } + assert ( l !is null ); + l.leaf_index = leaf_index; + return l; + } + + /********************************************************************************************** + + **********************************************************************************************/ + LeafNumeric parseNumericLeaf(DataReader dr) + { + LeafNumeric nl = new LeafNumeric; + dr.read(nl.leaf_index); + if ( nl.leaf_index < 0x8000 ) { + nl.us = cast(ushort)nl.leaf_index; + nl.leaf_index = LF_USHORT; + } + else switch ( nl.leaf_index ) + { + case LF_VARSTRING: dr.read(nl.str); break; + case LF_CHAR: dr.read(nl.c); break; + case LF_SHORT: dr.read(nl.s); break; + case LF_USHORT: dr.read(nl.us); break; + case LF_LONG: dr.read(nl.i); break; + case LF_ULONG: dr.read(nl.ui); break; + case LF_REAL32: dr.read(nl.f); break; + case LF_REAL64: dr.read(nl.d); break; + case LF_REAL80: dr.read(nl.r); break; + case LF_QUADWORD: dr.read(nl.l); break; + case LF_UQUADWORD: dr.read(nl.ul); break; + case LF_COMPLEX32: dr.read(nl.cf); break; + case LF_COMPLEX64: + case LF_COMPLEX80: + case LF_REAL48: + case LF_COMPLEX128: + case LF_REAL128: + default: + debug DbgIO.println("unknown leaftype %x", nl.leaf_index); + } + return nl; + } + + /********************************************************************************************** + Updates symbol size fields and mangled_names. Since both can only + be determined fully after sstGlobalTypes have been read. + **********************************************************************************************/ + void updateSymbols(CodeView cv, NamedSymbol[] syms) + { + foreach ( s; syms ) + { + if ( s.mangled_name is null || s.mangled_name.length <= 0 ) + s.mangled_name = cv.mangle(s); + + ScopeSymbol scs = cast(ScopeSymbol)s; + if ( scs !is null ) + updateSymbols(cv, scs.symbols.named_symbols); + ProcedureSymbol ps = cast(ProcedureSymbol)s; + if ( ps !is null ) + updateSymbols(cv, ps.arguments.named_symbols); + + string type = cv.mangleType(s); + if ( type is null ) + continue; + + DataSymbol ds = cast(DataSymbol)s; + if ( ds !is null ) + ds.size = cv.sizeofCV(ds.cvdata.type); + else + { + StackSymbol ss = cast(StackSymbol)s; + if ( ss !is null ) + ss.size = cv.sizeofCV(ss.cvdata.type); + } + } + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/codeview/symboldb.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/codeview/symboldb.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,19 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +module codeview.symboldb; + +import codeview.codeview; +import codeview.coff; + +abstract class SymbolDatabase +{ + COFFImage[] images; + + void addImage(COFFImage image); + void removeImage(COFFImage image); + Location findLocation(uint vaddress); + +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/container.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/container.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,459 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +import std.string; +debug import std.stdio; + +/******************************************************************************* + Double linked list +*******************************************************************************/ +class List(T) +{ + class Element + { + T value; + Element prev, + next; + + this(T v) + { + value = v; + } + } + + Element head, + tail; + + List opCatAssign(T v) + { + if ( tail is null ) + head = tail = new Element(v); + else { + tail.next = new Element(v); + tail.next.prev = tail; + tail = tail.next; + } + return this; + } + + bool empty() + { + return head is null; + } + + void clear() + { + head = null; + tail = null; + } + + void remove(Element e) + { + if ( e is null ) + return; + assert(e !is null); + if ( e.prev is null ) + head = e.next; + else + e.prev.next = e.next; + if ( e.next is null ) + tail = e.prev; + else + e.next.prev = e.prev; + } + + int opApply(int delegate(inout Element) dg) + { + for ( Element e=head; e !is null; e = e.next ) + { + int ret = dg(e); + if ( ret ) + return ret; + } + return 0; + } + + int opApplyReverse(int delegate(inout Element) dg) + { + for ( Element e=tail; e !is null; e = e.prev ) + { + int ret = dg(e); + if ( ret ) + return ret; + } + return 0; + } +} + +/************************************************************************************************** + AVL Tree that balances itself after each insertion +**************************************************************************************************/ +class AVLTree(T) +{ + alias AVLNode!(T) node_t; + node_t root; + bool rebalance; + + bool insert(T v) + { + if ( root is null ) { + root = new AVLNode!(T)(v); + return true; + } + else { + rebalance = false; + return insert(root, v); + } + } + + bool find(VT,RT)(VT v, out RT res) + { + if ( root is null ) + return false; + return root.find(v, res); + } + + void traverseDepthLeft(RT)(bool delegate(RT v) proc) + { + if ( root !is null ) + root.traverseDepthLeft(proc); + } + + private bool insert(node_t n, T v) + { + void updateParents(node_t top=null) + { + with ( n ) + { + if ( top is null ) + top = n; + + balance = 0; + parent.balance = 0; + + node_t pp = parent.parent; + if ( pp is null ) + root = top; + else + { + if ( parent is pp.left ) + pp.left = top; + else + pp.right = top; + } + parent.parent = top; + top.parent = pp; + if ( top !is n ) + parent = top; + } + } + + with ( n ) + { + if ( v < value ) + { + if ( left is null ) + { + left = new node_t(v, n); + --balance; + if ( balance != 0 ) + rebalance = true; + } + else if ( !insert(left, v) ) + return false; + } + else if ( v > value ) + { + if ( right is null ) + { + right = new node_t(v, n); + ++balance; + if ( balance != 0 ) + rebalance = true; + } + else if ( !insert(right, v) ) + return false; + } + else + return false; + + if ( rebalance && parent !is null ) + { + assert(balance != 0); + if ( n is parent.left ) + { + if ( parent.balance > 0 ) + --parent.balance; + else if ( parent.balance == 0 ) { + --parent.balance; + return true; + } + else + { + // single rotation to the right + if ( balance < 0 ) + { + parent.left = right; + if ( right !is null ) + right.parent = parent; + right = parent; + updateParents; + } + // double rotation to the right + else + { + assert(right !is null); + node_t r = right; + parent.left = r.right; + if ( parent.left !is null ) + parent.left.parent = parent; + right = r.left; + if ( right !is null ) + right.parent = n; + r.right = parent; + r.left = n; + updateParents(r); + } + } + } + else + { + if ( parent.balance < 0 ) + ++parent.balance; + else if ( parent.balance == 0 ) { + ++parent.balance; + return true; + } + else + { + // single rotation to the left + if ( balance > 0 ) + { + parent.right = left; + if ( left !is null ) + left.parent = parent; + left = parent; + updateParents; + } + // double rotation to the left + else + { + assert(left !is null); + node_t l = left; + parent.right = l.left; + if ( parent.right !is null ) + parent.right.parent = parent; + left = l.right; + if ( left !is null ) + left.parent = n; + + l.left = parent; + l.right = n; + updateParents(l); + } + } + } + } + rebalance = false; + return true; + } + } +} + +class AVLNode(T) +{ + alias AVLNode!(T) node_t; + node_t parent, left, right; + byte balance; + + T value; + + this(T v, node_t p = null) + { + value = v; + parent = p; + } + + void traverseDepthLeft(RT)(bool delegate(RT v) proc) + { + if ( left !is null ) + left.traverseDepthLeft(proc); + + static if ( is(RT == AVLNode!(T)) ) + { + if ( !proc(this) ) + return; + } + static if ( is(RT == T) ) + { + if ( !proc(value) ) + return; + } + static if ( !is(RT == AVLNode!(T)) && !is(RT == T) ) + static assert(0, "invalid result type for tree traversal"); + + if ( right !is null ) + right.traverseDepthLeft(proc); + } + + bool findNext(RT)(inout RT res) + { + node_t n; + if ( right is null ) + { + bool found=false; + for ( n = this; n.parent !is null; n = n.parent ) + { + if ( n.parent.left is n ) + { + static if ( is(T : Object) ) + assert(n.parent.value > n.value, "\n"~n.parent.value.toString~" parent of "~n.value.toString~"\n"); + assert(n.parent.value > n.value); + n = n.parent; + found = true; + break; + } + assert(n.parent.value <= n.value); + } + if ( !found ) + return false; + } + else + { + assert(right.value >= value); + n = right; + while ( n.left !is null ) + { + static if ( is(T : Object) ) + assert(n.left.value < n.value, "\n"~n.left.value.toString~"\tleft of\t"~n.value.toString~"\n"); + assert(n.left.value < n.value); + n = n.left; + } + } + + static if ( is(RT == AVLNode!(T)) ) + res = n; + static if ( is(RT == T) ) + res = n.value; + static if ( !is(RT == AVLNode!(T)) && !is(RT == T) ) + static assert(0, "invalid result type for next node search"); + return true; + } + + bool findPrev(RT)(inout RT res) + { + node_t n; + if ( left is null ) + { + bool found=false; + for ( n = this; n.parent !is null; n = n.parent ) + { + if ( n.parent.right is n ) + { + static if ( is(T : Object) ) + assert(n.parent.value > n.value, "\n"~n.parent.value.toString~" parent of "~n.value.toString~"\n"); + assert(n.parent.value <= n.value); + n = n.parent; + found = true; + break; + } + assert(n.parent.value <= n.value); + } + if ( !found ) + return false; + } + else + { + assert(left.value < value); + n = left; + while ( n.right !is null ) + { + static if ( is(T : Object) ) + assert(n.right.value < n.value, "\n"~n.right.value.toString~"\tleft of\t"~n.value.toString~"\n"); + assert(n.right.value < n.value); + n = n.right; + } + } + + static if ( is(RT == AVLNode!(T)) ) + res = n; + static if ( is(RT == T) ) + res = n.value; + static if ( !is(RT == AVLNode!(T)) && !is(RT == T) ) + static assert(0, "invalid result type for prev node search"); + return true; + } + + bool find(VT,RT)(VT v, inout RT res) + { + bool suc; + if ( value > v ) + { + if ( left !is null ) + return left.find(v, res); + } + else if ( value < v ) + { + if ( right !is null ) + return right.find(v, res); + } + else + suc = true; + static if ( is(RT == AVLNode!(T)) ) + res = this; + static if ( is(RT == T) ) + res = value; + static if ( !is(RT == AVLNode!(T)) && !is(RT == T) ) + static assert(0, "invalid result type for tree search"); + return suc; + } +} + +unittest +{ + AVLTree!(int) tree = new AVLTree!(int); + for ( int i = 0; i < 100; ++i ) + tree.insert(i); + + bool checkOrder(AVLNode!(int) n) + { + if ( n.left !is null ) { + assert(n.left.parent is n); + assert(n.left.value < n.value); + } + if ( n.right !is null ) { + assert(n.right.parent is n); + assert(n.right.value >= n.value); + } + return true; + } + + tree.traverseDepthLeft(&checkOrder); + + // check next + for ( int i = 0; i < 99; ++i ) + { + AVLNode!(int) n; + assert(tree.find(i, n)); + assert(n.value == i); + assert(n.findNext(n)); + assert(n.value == i+1, .toString(i+1)~" expected, "~.toString(n.value)~" found"); + } + + tree = new AVLTree!(int); + for ( int i = 99; i >= 0; --i ) + tree.insert(i); + tree.traverseDepthLeft(&checkOrder); + + // check next + for ( int i = 0; i < 99; ++i ) + { + AVLNode!(int) n; + assert(tree.find(i, n)); + assert(n.value == i); + assert(n.findNext(n)); + assert(n.value == i+1, .toString(i+1)~" expected, "~.toString(n.value)~" found"); + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/dbgprocess.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/dbgprocess.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,221 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ +module dbgprocess; + +import win32.winbase; +import win32.windef; + +import std.string; +import std.c.string; + +import util; +import breakpoint; +import dbgthread; +import callstack; +import codeview.coff; + +/************************************************************************************************** + +**************************************************************************************************/ +class DbgProcess +{ +public: + HANDLE process_handle; + uint processId, + mainThreadId; + DLL[] loaded_dlls; + + DbgThread[uint] threads; + + /********************************************************************************************** + + **********************************************************************************************/ + DLL loadDLL(LOAD_DLL_DEBUG_INFO* lddi) + { + DLL dll = new DLL; + dll.filehandle = lddi.hFile; + dll.base = cast(uint)lddi.lpBaseOfDll; + dll.debug_info_offset = lddi.dwDebugInfoFileOffset; + dll.debug_info_size = lddi.nDebugInfoSize; + loaded_dlls ~= dll; + + size_t filesize = GetFileSize(lddi.hFile, null); + if ( filesize == 0 ) + { + debug DbgIO.println("Couldn't get DLL %s image size: %s", dll.image.name, lastError); + return dll; + } + + ubyte[] buf; + buf.length = filesize; + if ( !ReadFile(lddi.hFile, cast(void*)buf.ptr, buf.length, &filesize, null) || filesize != buf.length ) + { + debug DbgIO.println("Couldn't read DLL image for %s: %s", dll.image.name, lastError); + return dll; + } + dll.image = new COFFImage; + dll.image.load(buf); + + return dll; + } + + /********************************************************************************************** + + **********************************************************************************************/ + DLL findDLL(size_t vaddress) + { + foreach ( dll; loaded_dlls ) + { + if ( vaddress < dll.base ) + continue; + assert( dll !is null ); + assert( dll.image !is null ); + uint size_image = dll.image.imageSize; + if ( vaddress-dll.base > size_image ) + continue; + return dll; + } + return null; + } + + /********************************************************************************************** + Loads the given thread's stack and the index of the current frame pointer (ebp). + Returns: Arrays of uints. + **********************************************************************************************/ + CallStack loadStack(DbgThread thread) + { + CONTEXT ctx; + if ( !thread.getContext(ctx, CONTEXT_CONTROL) ) + throw new Exception("Couldn't get thread's context"); + + CallStack stack = new CallStack(thread.stack_base, ctx.Esp, ctx.Ebp); + uint read = readProcessMemory(ctx.Esp, stack.data.ptr, stack.data.length); + if ( read == 0 ) + throw new Exception("Couldn't read thread's stack memory"); + else if ( read < stack.data.length ) + stack.data.length = read; + return stack; + } + + /********************************************************************************************** + Read from debuggee's memory. + Returns: #bytes read + **********************************************************************************************/ + size_t readProcessMemory(size_t address, void* data, size_t size, bool changeProtect=false) + { + uint oldprot; + if( changeProtect && !VirtualProtectEx(process_handle, cast(void*)address, size, PAGE_READONLY, &oldprot) ) { + debug DbgIO.println("readProcessMemory(): Failed to obtain read access to page at 0x%08x: %s", address, lastError); + return false; + } + + size_t numbytes; + if( !ReadProcessMemory(process_handle, cast(void*)address, data, size, &numbytes) ) { + debug DbgIO.println("ReadProcessMemory() returned false reading address 0x%08x: %s", address, lastError); + return 0; + } + if ( numbytes != size ) { + debug DbgIO.println("readProcessMemory(): Failed to read at address 0x%08x: %s", address, lastError); + } + + if( changeProtect && !VirtualProtectEx(process_handle, cast(void*)address, size, oldprot, &oldprot) ) { + DbgIO.println("writeProcessMemory(): Failed to restore access to page at 0x%08x: %s", address, lastError); + return 0; + } + + return numbytes; + } + + /********************************************************************************************** + Write to debuggee's memory. + Returns success. + **********************************************************************************************/ + size_t writeProcessMemory(size_t address, void* data, size_t size) + { + uint oldprot; + + if( !VirtualProtectEx(process_handle, cast(void*)address, size, PAGE_EXECUTE_READWRITE, &oldprot) ) + { + DbgIO.println("writeProcessMemory(): Failed to obtain write access to page at 0x%08x: %s", address, lastError); + return false; + } + + size_t numbytes; + if( !WriteProcessMemory(process_handle, cast(void*)address, data, size, &numbytes) ) + DbgIO.println("writeProcessMemory(): Failed to write byte at 0x%08x: %s", address, lastError); + + if( !VirtualProtectEx(process_handle, cast(void*)address, size, oldprot, &oldprot) ) + { + DbgIO.println("writeProcessMemory(): Failed to restore access to page at 0x%08x: %s", address, lastError); + return false; + } + + if ( !FlushInstructionCache(process_handle, cast(void*)address, numbytes) ) + { + DbgIO.println("writeProcessMemory(): FlushInstructionCache failed for 0x%08x: %s", address, lastError()); + return false; + } + + return numbytes; + } + + /********************************************************************************************** + + **********************************************************************************************/ + ClassInfo getClassInfo(size_t obj_ptr) + { + uint vtbl, + ci_ptr; + readProcessMemory(obj_ptr, &vtbl, size_t.sizeof); + readProcessMemory(vtbl, &ci_ptr, size_t.sizeof); + ubyte[] data; + data.length = ClassInfo.classinfo.init.length; + readProcessMemory(ci_ptr, data.ptr, data.length); + return cast(ClassInfo)data.ptr; + } + + /********************************************************************************************** + simple check for invalidity of a memory block + **********************************************************************************************/ + const size_t MEMCHECK_MIN = 0x1000; + bool isInvalidMem(size_t ptr, size_t len) + { + uint tmp; + if ( uint.sizeof != readProcessMemory(ptr, &tmp, uint.sizeof) + || uint.sizeof != readProcessMemory(ptr+len-uint.sizeof, &tmp, uint.sizeof) ) + return true; + return false; + } + + /********************************************************************************************** + + **********************************************************************************************/ + MEMORY_BASIC_INFORMATION[] walkMemory() + { + SYSTEM_INFO si; + MEMORY_BASIC_INFORMATION[] mbis; + GetSystemInfo(&si); + for ( void* ptr = si.lpMinimumApplicationAddress; ptr < si.lpMaximumApplicationAddress; ) + { + mbis.length = mbis.length + 1; + VirtualQueryEx(process_handle, ptr, &mbis[$-1], MEMORY_BASIC_INFORMATION.sizeof); + ptr = mbis[$-1].BaseAddress + mbis[$-1].RegionSize; + } + return mbis; + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +class DLL +{ +public: + HANDLE filehandle; + uint base, + debug_info_offset, + debug_info_size; + COFFImage image; +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/dbgthread.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/dbgthread.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,135 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ +module dbgthread; + +import util; + +import win32.winbase; +import win32.windef; + +/************************************************************************************************** + +**************************************************************************************************/ +class DbgThread +{ + HANDLE handle; + uint id, + stack_base; + + /********************************************************************************************** + + **********************************************************************************************/ + this(HANDLE h, uint i) + { + handle = h; + id = i; + + // get current esp as stack base + CONTEXT ctx; + if ( getContext(ctx, CONTEXT_CONTROL) ) + stack_base = ctx.Esp; + } + + int priority() + { + return GetThreadPriority(handle); + } + + bool priorityBoost() + { + int boost; + GetThreadPriorityBoost(handle, &boost); + return cast(bool)boost; + } + + void times(out ulong creation, out ulong exit, out ulong kernel, out ulong user) + { + GetThreadTimes(handle, cast(FILETIME*)&creation, cast(FILETIME*)&exit, cast(FILETIME*)&kernel, cast(FILETIME*)&user); + } + + uint suspendCount() + { + uint count = suspend; + resume; + return count; + } + + uint suspend() + { + return SuspendThread(handle); + } + + uint resume() + { + return ResumeThread(handle); + } + + /********************************************************************************************** + + **********************************************************************************************/ + bool getContext(out CONTEXT ctx, uint flags=CONTEXT_FULL) + { + ctx.ContextFlags = flags; + suspend; + bool res = cast(bool)GetThreadContext(handle, &ctx); + resume; + return res; + } + + /********************************************************************************************** + + **********************************************************************************************/ + bool setContext(ref CONTEXT ctx) + { + suspend; + auto res = cast(bool)SetThreadContext(handle, &ctx); + resume; + return res; + } + + /********************************************************************************************** + + **********************************************************************************************/ + size_t getDsBase() + { + CONTEXT ctx; + getContext(ctx); + + LDT_ENTRY sel_entry; + GetThreadSelectorEntry(handle, ctx.SegDs, &sel_entry); + return (cast(size_t)sel_entry.BaseHi << 24) | (cast(size_t)sel_entry.BaseMid << 16) | cast(size_t)sel_entry.BaseLow; + } + + /********************************************************************************************** + Wrapper function for changing the thread's context. Calls the + modify(ctx) delegate that can do the actual change. + Returns: success + **********************************************************************************************/ + bool changeContext(void delegate(ref CONTEXT ctx) modify, uint flags=CONTEXT_FULL) + { +// if ( 0 > SuspendThread(thread) ) +// { +// DbgIO.println("ERROR: Couldn't SuspendThread to reset instruction pointer: %s", getLastError); +// return false; +// } + + CONTEXT ctx; + if ( getContext(ctx, flags) ) + { + modify(ctx); + if ( !SetThreadContext(handle, &ctx) ) + DbgIO.println("ERROR: Couldn't SetThreadContext to reset instruction pointer: %s", lastError); + } else + DbgIO.println("ERROR: Couldn't GetThreadContext to reset instruction pointer: %s", lastError); + +// if ( 0 > ResumeThread(thread) ) +// { +// DbgIO.println("ERROR: Couldn't ResumeThread to reset instruction pointer: %s", getLastError); +// return false; +// } + + return true; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/debugger.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/debugger.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1378 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +/************************************************************************************************** + The main debugger code. Handles win32 debugging events, + manages breakpoints, calls the disassembler, etc. +**************************************************************************************************/ + +import std.file; +import std.string; +import std.format; + +import win32.winbase; +import win32.winuser; +import win32.winnt; +import win32.dbghelp; + +import minidump; +import container; +import util; +import breakpoint; +import dbgprocess; +import dbgthread; +import disasm; +import callstack; +import expression.evaluationcontext; +import expression.expression_apd; +import expression.datahandler; +import codeview.coff; +import codeview.codeview; +import cli.userinterface; + +const uint VERSION_MAJOR = 0, + VERSION_MINOR = 12, + VERSION_PATCH = 0; +const string VERSION_STRING = "Ddbg "~itoa(VERSION_MAJOR)~"."~itoa(VERSION_MINOR) + ~(VERSION_PATCH>0?"."~itoa(VERSION_PATCH):"")~" beta", + WELCOME_STRING = VERSION_STRING~" - D Debugger\n"~ + "Copyright (c) 2007 Jascha Wetzel\n"~ + "see http://ddbg.mainia.de/doc.html for documentation\n"; + +class DebuggerException : Exception +{ + this(...) + { + string str; + + void putc(dchar c) + { + str ~= c; + } + + doFormat(&putc, _arguments, _argptr); + super(str); + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +class Debugger +{ + const uint STATUS_DIGITAL_MARS_D_EXCEPTION = (3 << 30) | (1 << 29) | (0 << 28) | ('D' << 16) | 1; + + //============================================================================================= + // variables + bool paused, + process_loaded, + abort, + single_step; + + size_t current_address; + uint last_line; + + string[][string] source_files; + string[] source_search_paths; + + string main_image_file; + COFFImage main_image; + ImageSet images; + + Breakpoint[uint] breakpoints; + List!(Breakpoint) temp_breakpoints; + Breakpoint passing_breakpoint; + DbgProcess process; + MiniDump miniDump; + + CallStack current_stack; + + EXCEPTION_RECORD* exceptionRecord; + DEBUG_EVENT debug_event; + uint process_id, + thread_id; + + UserInterface ui; + + uint evaluationDepth = 1; + bool create_new_console; + + //============================================================================================= + // construction + + /********************************************************************************************** + Uses the debugger's CLI arguments for the debuggee. + Example: debugger debuggee arg0 arg1 ... + **********************************************************************************************/ + this(string debuggee, UserInterface _ui) + { + assert(_ui !is null); + images = new ImageSet; + ui = _ui; + openImage(debuggee); + source_search_paths ~= ".\\"; + temp_breakpoints = new List!(Breakpoint); + } + + CallStack stack() + { + if ( current_stack is null ) + { + if ( process !is null ) + current_stack = process.loadStack(process.threads[thread_id]); + else if ( miniDump !is null ) { + CONTEXT* ctx = miniDump.getContext; + // TODO: where does that 4-byte offset come from + ubyte[] data = miniDump.getMemory(miniDump.thread.Stack.Memory)[4..$]; + current_stack = new CallStack(cast(size_t)miniDump.thread.Stack.StartOfMemoryRange+data.length, ctx.Esp, ctx.Ebp); + current_stack.data = data; + } + } + return current_stack; + } + + /********************************************************************************************** + + **********************************************************************************************/ + bool step(StepMode mode) + { + if ( !process_loaded ) + return false; + Location loc = images.findLocation(current_address); + + int bpi=-1; + Breakpoint bp; + + switch ( mode ) + { + //------------------------------------------------------------------------------------- + case StepMode.e_in: + Location next_loc = images.findNextSrcLine(loc); + if ( next_loc !is null ) + { + bp = setBreakpoint(next_loc, bpi, thread_id); + if ( bp !is null ) + addForeachBreakpoint(bp); + } + + size_t disasm_end; + if ( loc.codeblock !is null ) + disasm_end = loc.codeblock.end+loc.getCodeBase; + DisAsm.disasm( + process, current_address, disasm_end, + (ud_t* ud_obj) { return setBranchBreakpoints(ud_obj,StepMode.e_in); } + ); + break; + //------------------------------------------------------------------------------------- + case StepMode.e_out: + uint ret_adr = getReturnAddress(loc); + if ( ret_adr > 0 ) { + debug DbgIO.println("setting step-out to 0x%08x", ret_adr); + bp = setBreakpoint(ret_adr, bpi, thread_id); + if ( bp !is null ) + bp.frame_ptr = getFramePointer(loc, 1); + } + else + { + debug DbgIO.println("no scope found - falling back on disasm-step-out"); + DisAsm.disasm( + process, current_address, 0, + (ud_t* ud_obj) { return setBranchBreakpoints(ud_obj,StepMode.e_out); } + ); + } + break; + //------------------------------------------------------------------------------------- + case StepMode.e_over: + Location next_loc = images.findNextSrcLine(loc); + if ( next_loc !is null ) + { + bp = setBreakpoint(next_loc, bpi, thread_id); + if ( bp !is null ) + { + bp.frame_ptr = getFramePointer(loc); + debug DbgIO.println("FP for step over is 0x%x", bp.frame_ptr); + addForeachBreakpoint(bp); + } + } + + size_t disasm_end; + if ( loc.codeblock !is null ) + disasm_end = loc.codeblock.end+loc.getCodeBase; + DisAsm.disasm( + process, current_address, disasm_end, + (ud_t* ud_obj) { return setBranchBreakpoints(ud_obj,StepMode.e_over); } + ); + break; + default: + assert(0); + } + + return true; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void addForeachBreakpoint(Breakpoint foreach_end) + { + CodeView cv; + CodeBlock cb = images.findCodeBlockAbs(current_address, cv); + if ( cb !is null ) + { + CodeBlock cbs[] = cb.segment.file.blocks_by_line[cb.line]; + if ( cbs.length > 1 && cb is cbs[0] ) + { + Location loc = images.findLocation(cbs[1].start+cv.getCodeBase); + if ( loc.scope_sym !is null && find(loc.scope_sym.mangled_name, "__foreachbody") >= 0 ) + { + int bpi; + if ( getBreakpoint(loc.address, bpi) is null ) { + Breakpoint bp = new Breakpoint(loc, true, thread_id); + bp.foreach_end = foreach_end; + foreach_end.foreach_end = foreach_end; + addBreakpoint(bp, -1); + } + } + } + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + uint getReturnAddress(Location loc) + { + ProcedureSymbol psym = cast(ProcedureSymbol)loc.scope_sym; + if ( psym !is null ) + { + uint index; + ubyte[] frame = stack.firstFrame(index); + + if ( frame is null ) + throw new DebuggerException("getReturnAddress: null frame"); + + uint adr = current_address-psym.cvdata.offset-loc.getCodeBase; + if ( adr >= psym.cvdata.debug_start && adr < psym.cvdata.debug_end ) { + frame = stack.prevFrame(index, index); + if ( frame.length >= 8 ) + return (cast(uint[])frame)[1]; + } + } + return 0; + } + + /********************************************************************************************** + + **********************************************************************************************/ + uint getFramePointer(Location loc, uint level=0) + { + ProcedureSymbol psym = cast(ProcedureSymbol)loc.scope_sym; + if ( psym !is null ) + { + uint frame_ptr; + if ( level > 0 ) + { + uint index, + l; + ubyte[] frame = stack.firstFrame(index); + if ( frame is null ) + throw new DebuggerException("getCurrenFramePointer: null frame"); + + for ( l = 0; l < level && frame !is null; ++l ) + frame = stack.prevFrame(index, index); + if ( frame is null ) + throw new DebuggerException("getCurrenFramePointer: null frame at level %d", l); + + frame_ptr = (cast(uint[])frame)[0]; + } + else + frame_ptr = stack.frame_ptr; + + uint adr = current_address-psym.cvdata.offset-loc.getCodeBase; + if ( adr >= psym.cvdata.debug_start && adr < psym.cvdata.debug_end ) + return frame_ptr; + } + return 0; + } + + /********************************************************************************************** + + **********************************************************************************************/ + SymbolData evaluateExpression(string expr, uint frame_level=0, NamedSymbol symbol=null) + { + SyntaxTree* root; + bool success; + try success = parse("", expr, root, true); + catch( ParserException e ) + throw new EvaluationException("Parser: "~e.toString); + if ( !success ) + throw new EvaluationException("Parser: Invalid expression!"); + + string elmtype; + uint scope_address; + if ( frame_level == 0 ) + scope_address = current_address; + else { + ubyte[] frame = stack.getFrame(frame_level); + scope_address = (cast(uint[])frame)[1]; + } + + SymbolData sd; + auto loc = images.findLocation(current_address); + if ( loc.codeview is null ) + throw new EvaluationException("No debug symbols available"); + root.Expr(new EvaluationContext( + loc.codeview, scope_address, + miniDump, process, process is null?null:process.threads[thread_id], + stack, frame_level), sd + ); + return sd; + } + + /********************************************************************************************** + + **********************************************************************************************/ + SymbolValue handleData(SymbolData sd, bool decreaseED) + { + auto loc = images.findLocation(current_address); + if ( loc.codeview is null ) + throw new EvaluationException("No debug symbols available"); + EvaluationContext ctx = new EvaluationContext( + loc.codeview, 0, + miniDump, process, process is null?null:process.threads[thread_id], + stack, 0 + ); + + ubyte[] data = sd.getData(ctx); + if ( data.length <= 0 ) + throw new EvaluationException("Expression evaluated to empty data"); + + uint ed = evaluationDepth; + if ( decreaseED ) + --ed; + SymbolValue val = DataHandler.handle(ctx, sd.type, data, ed); + if ( val is null ) + throw new EvaluationException("No DataHandler for type "~sd.type); + return val; + } + + + /********************************************************************************************** + + **********************************************************************************************/ + uint getScopeAddress(uint frame_level) + { + uint scope_address; + if ( frame_level == 0 ) + scope_address = current_address; + else { + ubyte[] frame = stack.getFrame(frame_level); + if ( frame !is null ) + scope_address = (cast(uint[])frame)[1]; + } + return scope_address; + } + + + //============================================================================================= + // process & thread handling + + /********************************************************************************************** + + **********************************************************************************************/ + void selectThread(size_t threadId) + { + thread_id = threadId; + current_stack = null; + + if ( process !is null ) { + CONTEXT ctx; + if ( !process.threads[threadId].getContext(ctx) ) + throw new DebuggerException("Couldn't get thread's context"); + current_address = ctx.Eip; + } + else if ( miniDump !is null ) { + miniDump.selectThread(threadId); + CONTEXT* ctx = miniDump.getContext; + current_address = ctx.Eip; + } + else + throw new DebuggerException("Invalid debugger state"); + } + + /********************************************************************************************** + Loads and parses the PE image. + Returns: success + **********************************************************************************************/ + void openImage(string filename) + { + assert(filename.length); + filename = strip(filename); + if ( !exists(filename) ) + filename ~= ".exe"; + if ( !exists(filename) ) + throw new DebuggerException("Couldn't open \"%s\"", filename[0..$-4]); + main_image_file = filename.dup; + + main_image = new COFFImage; + main_image.load(main_image_file); +// catch ( Exception e ) { +// throw new DebuggerException("Failed to load COFF image \""~main_image_file~"\": "~e.msg); +// } + if ( main_image.codeView is null ) + DbgIO.println("WARNING: No debugging symbols found in main image, try compiling and linking with -g"); + images ~= main_image; + // return true; + } + + /********************************************************************************************** + Creates the child process for the debuggee. + Returns: success + **********************************************************************************************/ + bool createDebugProcess(string command_line) + { + // initialiZe process startup information + STARTUPINFOA* startInfo = new STARTUPINFOA; + startInfo.cb = STARTUPINFO.sizeof; + startInfo.dwFlags = STARTF_FORCEONFEEDBACK | STARTF_USESHOWWINDOW; + startInfo.wShowWindow = SW_SHOWNORMAL; + + PROCESS_INFORMATION procInfo; // process info + + // create process + uint flags = DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS; + if ( create_new_console ) + flags |= CREATE_NEW_CONSOLE; + + bool suc = cast(bool)CreateProcessA( + toStringz(main_image_file), toStringz(command_line), cast(LPSECURITY_ATTRIBUTES)null, + cast(LPSECURITY_ATTRIBUTES)null, false, flags, null, cast(char*)null, + cast(LPSTARTUPINFOA)startInfo, cast(LPPROCESS_INFORMATION)&procInfo + ); + if( !suc ) + throw new DebuggerException("CreateProcess failed on %s", main_image_file); + assert(procInfo.dwProcessId); + + // open process for all access + HANDLE hChildProcess = OpenProcess(PROCESS_ALL_ACCESS, false, procInfo.dwProcessId); + if( hChildProcess == null ) { + TerminateProcess(procInfo.hProcess, 0); + throw new DebuggerException("OpenProcess failed"); + } + process_id = procInfo.dwProcessId; + + CloseHandle(procInfo.hProcess); + return true; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void resume() + { + single_step = false; + paused = false; + } + + //============================================================================================= + // exception handling + + /********************************************************************************************** + Debugger's main loop. Handles win32 debugging events. + **********************************************************************************************/ + void start(string command_line) + { + createDebugProcess(command_line); + + while( !abort ) + { + if( WaitForDebugEvent(&debug_event, win32.winbase.INFINITE) ) + { + if( debug_event.dwProcessId != process_id ) { + debug DbgIO.println("WARNING: Exception for unhandled process received: PID=%d", debug_event.dwProcessId); + ContinueDebugEvent(debug_event.dwProcessId, debug_event.dwThreadId, DBG_CONTINUE); + continue; + } + + current_stack = null; + thread_id = debug_event.dwThreadId; + exceptionRecord = null; + + bool exception_handled = true; + switch( debug_event.dwDebugEventCode ) + { + case OUTPUT_DEBUG_STRING_EVENT: + char[] debug_string; + paused = false; + + debug_string.length = debug_event.DebugString.nDebugStringLength; + process.readProcessMemory(cast(uint)debug_event.DebugString.lpDebugStringData, debug_string.ptr, debug_string.length); + if ( debug_event.DebugString.fUnicode ) + DbgIO.println("WARNING: Unicode debug strings not implemented, yet. Output might be corrupted"); + + if ( debug_string.length > 3 && debug_string[0..4] == "DDL:" ) + { + string cmdStr = debug_string[4..$]; + if ( strip(cmdStr).length > 0 ) + { + auto r = std.regexp.RegExp("(([^\" \\t]+)|(\"[^\"]+\"))+"); + string[] cmd; + foreach ( m; r.search(strip(cmdStr)) ) + cmd ~= r.match(0); + switch ( cmd[0] ) + { + case "load": + DbgIO.println("loadImage not implemented, yet: %s %s", cmd[1], cmd[2]); + break; + default: + DbgIO.println("WARNING: Unknown DDL command recieved: %s", cmdStr); + break; + } + } + } + else if ( debug_string.length > 5 && debug_string[0..5] == "Ddbg:" ) + { + ui.runCommands(debug_string[5..$]); + paused = true; + } + else + ui.debugString(debug_string); + break; + + case EXCEPTION_DEBUG_EVENT: + exceptionRecord = &debug_event.Exception.ExceptionRecord; + exception_handled = handleExceptionEvent(exceptionRecord); + break; + + case LOAD_DLL_DEBUG_EVENT: + DLL dll = process.loadDLL(&debug_event.LoadDll); + if ( dll.image !is null ) + { + images ~= dll.image; + foreach ( bp; breakpoints ) + { + if ( bp.location.address == 0 ) + { + debug DbgIO.println("binding bp %s", bp.toString); + if ( bp.location.bind(images, source_search_paths) ) { + debug DbgIO.println("activating bp %s", bp.toString); + bp.activate(process); + } + } + } + } + ui.loadedDLL(dll); + paused = false; + break; + + case UNLOAD_DLL_DEBUG_EVENT: +// DebugDLL* dll = process.findDLL(cast(uint)debug_event.LoadDll.lpBaseOfDll); +// ui.unloadedDLL(dll); +// images.remove(dll.image); + paused = false; + break; + + case CREATE_THREAD_DEBUG_EVENT: + process.threads[debug_event.dwThreadId] = new DbgThread(debug_event.CreateThread.hThread, debug_event.dwThreadId); + paused = false; + break; + + case EXIT_THREAD_DEBUG_EVENT: + process.threads.remove(debug_event.dwThreadId); + paused = false; + break; + + case CREATE_PROCESS_DEBUG_EVENT: + process = new DbgProcess; + process.processId = process_id; + process.process_handle = debug_event.CreateProcessInfo.hProcess; + process.mainThreadId = debug_event.dwThreadId; + process.threads[debug_event.dwThreadId] = new DbgThread(debug_event.CreateProcessInfo.hThread, debug_event.dwThreadId); + process_loaded = true; + + if ( main_image !is null && main_image.codeView !is null ) + { + DataSymbol mainds; + if ( main_image.codeView.global_pub !is null ) + mainds = main_image.codeView.global_pub.findDataSymbol("_main"); + if ( mainds !is null ) + { + int bpi=-1; + Breakpoint bp = setBreakpoint(mainds.offset+main_image.getCodeBase, bpi, 0, true); + bp.deactivate_d_exception_handler = true; + } + } + + foreach ( bp; breakpoints ) + { + if ( bp.location.address != 0 && !bp.activate(process) ) + throw new DebuggerException("Error: couldn't write breakpoint opcode at %s:%d", bp.file, bp.line); + } + foreach ( bp; temp_breakpoints ) + { + debug DbgIO.println("tbp activated %s", bp.value); + if ( bp.value.location.address != 0 && !bp.value.activate(process) ) + throw new DebuggerException("Error: couldn't write breakpoint opcode at %s:%d", bp.value.file, bp.value.line); + } + break; + + case EXIT_PROCESS_DEBUG_EVENT: + process_loaded = false; + delete process; + paused = true; + single_step = false; + ui.exitProcess; + break; + + case RIP_EVENT: + debug DbgIO.println("DebugEvent: "~getEventName(debug_event.dwDebugEventCode)); + paused = true; + break; + + default: + throw new DebuggerException("Win32Debugger ERROR - unknown debug event: %d", debug_event.dwDebugEventCode); + } + + if ( single_step ) + { + ui.singleStep(); + paused = true; + activateSingleStep(true); + } + + if ( paused ) + { + bool cont=false; + while ( !cont ) + { + debug + cont = ui.readCommand(); + else + { + try cont = ui.readCommand(); + catch ( Exception e ) + DbgIO.println("%s", e.msg); + } + } + paused = false; + } + + if ( !abort ) + { + exceptionRecord = null; + ContinueDebugEvent( + debug_event.dwProcessId, debug_event.dwThreadId, + exception_handled?DBG_CONTINUE:DBG_EXCEPTION_NOT_HANDLED + ); + } + } + else + throw new DebuggerException("ERROR: WaitForDebugEvent failed: %s", lastError); + } + } + + /********************************************************************************************** + Activates single step execution by setting the trap flag in + the eflags register of the currently considered thread. + **********************************************************************************************/ + void activateSingleStep(bool enable) + { + if ( !(thread_id in process.threads) ) + return; + if ( enable ) + process.threads[thread_id].changeContext(delegate(ref CONTEXT ctx){ ctx.EFlags |= 1<<8; }); + else if ( !enable ) + process.threads[thread_id].changeContext(delegate(ref CONTEXT ctx){ ctx.EFlags &= ~(1<<8); }); + single_step = enable; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void getExceptionNameMessage(size_t objPtr, out char[] class_name, out char[] msg) + { + // get thrown object's class name + ClassInfo ci = process.getClassInfo(objPtr); + class_name.length = ci.name.length; + process.readProcessMemory(cast(uint)ci.name.ptr, class_name.ptr, class_name.length); + + // get object's data + uint[] objdata; + objdata.length = ci.init.length; + process.readProcessMemory(objPtr, objdata.ptr, objdata.length*uint.sizeof); + + char[] name; + name ~= class_name; + do + { + if ( name == "object.Exception" ) + { + msg.length = objdata[2]; + process.readProcessMemory(objdata[3], msg.ptr, msg.length); + break; + } + + ubyte[] data; + data.length = ClassInfo.classinfo.init.length; + process.readProcessMemory(cast(uint)cast(void*)ci.base, data.ptr, data.length); + ci = cast(ClassInfo)data.ptr; + name.length = ci.name.length; + process.readProcessMemory(cast(uint)ci.name.ptr, name.ptr, name.length); + } + while ( ci.base !is null ); + } + + /********************************************************************************************** + + **********************************************************************************************/ + bool handleExceptionEvent(EXCEPTION_RECORD* exrec) + { + current_address = cast(uint)exrec.ExceptionAddress; + Lswitch: switch ( exrec.ExceptionCode ) + { + case EXCEPTION_BREAKPOINT: + debug DbgIO.println("EXCEPTION_BREAKPOINT"); + int bp_index; + Breakpoint bp = getBreakpoint(current_address, bp_index); + if ( bp !is null ) { + handleBreakpoint(bp, bp_index); + last_line = bp.line; + } + else + ui.breakpoint(-1, new Breakpoint(images.findLocation(cast(uint)exrec.ExceptionAddress), false, 0, false), process.threads[thread_id]); + break; + case EXCEPTION_SINGLE_STEP: + debug DbgIO.println("EXCEPTION_SINGLE_STEP"); + // check whether this is a HWBP or real single step + CONTEXT ctx; + process.threads[thread_id].getContext(ctx, CONTEXT_DEBUG_REGISTERS); + + if ( (ctx.Dr6 & 0xf) > 0 ) + { + debug DbgIO.println("Hardware breakpoint"); + size_t dr = void; + if ( ctx.Dr6 & 1 ) + dr = ctx.Dr0; + else if ( ctx.Dr6 & 2 ) + dr = ctx.Dr1; + else if ( ctx.Dr6 & 4 ) + dr = ctx.Dr2; + else if ( ctx.Dr6 & 8 ) + dr = ctx.Dr3; + int bp_index; + foreach( i, bp; breakpoints ) + { + if( !bp.hardware ) + continue; + if ( dr == bp.address ) { + handleBreakpoint(bp, i); + break Lswitch; + } + } + + ui.breakpoint(-1, new Breakpoint(images.findLocation(dr), false, 0, false), process.threads[thread_id]); + } + else + { + debug DbgIO.println("Single Step exception"); + // pause if interactive single step is active + paused = single_step; + + if ( passing_breakpoint !is null ) + { + debug DbgIO.println("passing breakpoint"); + activateSingleStep(false); + paused = false; + if ( process !is null && !passing_breakpoint.activate(process) ) + throw new DebuggerException("ERROR: Failed to write breakpoint opcode at %s:%d", passing_breakpoint.file, passing_breakpoint.line); + passing_breakpoint = null; + } + } + break; + // ctrl+c + case DBG_CONTROL_C: + ui.userInterrupt(); + paused = true; + break; + // D exceptions + case STATUS_DIGITAL_MARS_D_EXCEPTION: + // normal non-post-mortem mode + if ( process !is null && !debug_event.Exception.dwFirstChance ) + { + char[] class_name, msg; + getExceptionNameMessage(exrec.ExceptionInformation[0], class_name, msg); + ui.exception(thread_id, class_name, msg, exrec.ExceptionInformation[0]); + paused = true; + return false; + } + // minidump mode + else if ( miniDump !is null ) + { + string className, + message; + className = (cast(char*)exrec.ExceptionInformation[1])[0..exrec.ExceptionInformation[0]]; + message = (cast(char*)exrec.ExceptionInformation[3])[0..exrec.ExceptionInformation[2]]; + ui.exception(thread_id, className, message, 0); + paused = true; + return false; + } + paused = false; + return false; + default: + ui.win32exception(thread_id, exrec); + paused = true; + single_step = false; + return false; + } + return true; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void handleBreakpoint(Breakpoint bp, uint bp_index) + { + CONTEXT ctx; + if ( !process.threads[thread_id].getContext(ctx) ) + throw new DebuggerException("Error: Couldn't GetThreadContext to reset instruction pointer: %s", lastError); + + if ( !bp.hardware ) + { + if ( process !is null && !bp.deactivate(process) ) + throw new DebuggerException("ERROR: Failed to write opcode for breakpoint at %s:%d", bp.file, bp.line); + + // adjust for "int 3" instruction byte + --ctx.Eip; + if ( !process.threads[thread_id].setContext(ctx) ) + throw new DebuggerException("Error: Couldn't SetThreadContext to reset instruction pointer: %s", lastError); + } + + // check if we have a constrained thread + if ( bp.threadId > 0 && thread_id != bp.threadId ) + { + debug DbgIO.println("skipping bp in incorrect thread %d", thread_id); + if ( !bp.hardware ) { + passing_breakpoint = bp; + activateSingleStep(true); + } + } + // check if breakpoint requires a certain frame + else if ( bp.frame_ptr > 0 && bp.frame_ptr != ctx.Ebp ) + { + debug DbgIO.println("skipping bp in incorrect frame, Ebp=0x%x required=0x%x", ctx.Ebp, bp.frame_ptr); + if ( !bp.hardware ) { + passing_breakpoint = bp; + activateSingleStep(true); + } + } + // restore non-temporary breakpoints + else if ( !bp.temporary ) + { + ui.breakpoint(bp_index, bp, process.threads[thread_id]); + paused = true; + if ( !bp.hardware ) { + passing_breakpoint = bp; + activateSingleStep(true); + } + } + // propagate breakpoints to jmp/call/ret destination + else if ( bp.propagate ) + { + debug DbgIO.println("propagate"); + foreach ( tbp; temp_breakpoints ) + { + if ( tbp.value is bp ) { + temp_breakpoints.remove(tbp); + break; + } + } + DisAsm.disasm(process, current_address, 0, (ud_t* ud_obj){return setPropagatedBreakpoint(ud_obj,bp);}); + } + // temporary breakpoints + else + { + if ( bp.deactivate_d_exception_handler ) { + debug DbgIO.println("deactivateDExceptionHandler"); + deactivateDExceptionHandler(); + } + else { + clearTemporaryBreakpoints(); + paused = ui.breakpoint(-1, bp, process.threads[thread_id]); + } + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + void deactivateDExceptionHandler() + { + if ( main_image is null || main_image.codeView is null ) + return; + + // deactivate default D exception handling + bool found=false; + foreach ( ds; main_image.codeView.global_pub.data_symbols ) + { + if ( ds.name_notype == "_no_catch_exceptions" ) { + uint address = ds.offset+main_image.getSectionBase(ds.cvdata.segment); + bool nce = true; + process.writeProcessMemory(address, &nce, bool.sizeof); + found = true; + break; + } + else if ( ds.name_notype == "_cr_trapExceptions" + || ds.name_notype == "_rt_trapExceptions" ) + { + uint address = ds.offset+main_image.getSectionBase(ds.cvdata.segment); + bool nce = false; + process.writeProcessMemory(address, &nce, bool.sizeof); + found = true; + break; + } + } + if ( !found ) { + debug DbgIO.println("Neither Phobos nor Tango exception handler switch not found"); + } + } + + //============================================================================================= + // source&symbol handling + + /********************************************************************************************** + Searches the cache for the given source file and loads it if nessecary. + Tries to load the source file from all source_search_paths. + Returns: Array of lines of the source file. + **********************************************************************************************/ + string[] getSourceFile(string filename) + { + if ( filename is null || filename.length <= 0 ) + return null; + if ( !(filename in source_files) ) + { + string full = getFullSourcePath(filename); + if ( full is null || !exists(full) ) + return null; + auto lines = splitlines(cast(string)read(full)); + source_files[filename] = lines; + } + return source_files[filename]; + } + + /********************************************************************************************** + Tries to find the source file in all source_search_paths. + Returns: Full path of the file + **********************************************************************************************/ + string getFullSourcePath(string filename) + { + string full = getFullPath(filename); + if ( exists(full) ) + return full; + foreach ( string sp; source_search_paths ) + { + full = getFullPath(sp~filename); + if ( exists(full) ) + return full; + } + return filename; + } + + + //============================================================================================= + // breakpoint handling + + /********************************************************************************************** + + **********************************************************************************************/ + bool setPropagatedBreakpoint(ud* ud_obj, Breakpoint prev_bp) + { + if ( ud_obj is null ) + return true; + + int bpi=-1; + Breakpoint bp; + if ( DisAsm.isConditionalJump(ud_obj.mnemonic) + || ud_obj.mnemonic == ud_mnemonic_code.UD_Ijmp + || ud_obj.mnemonic == ud_mnemonic_code.UD_Icall ) + { + bool is_imm=false; + uint jmp_dest = DisAsm.calcJumpDestination(process, process.threads[thread_id], ud_obj, is_imm); + assert(!is_imm); + debug DbgIO.println("propagating jmp/call bp to 0x%x", jmp_dest); + Location loc = images.findLocation(jmp_dest); + if ( loc.file !is null ) + bp = setBreakpoint(jmp_dest, bpi, thread_id); + else { + debug DbgIO.println("not source info available - checking for unconditional jmp at destination"); + DisAsm.disasm(process, jmp_dest, 0, (ud_t* ud_obj){return propagateUncondJmp(ud_obj, prev_bp);}); + } + if ( bp !is null ) + bp.frame_ptr = prev_bp.frame_ptr; + } + else if ( ud_obj.mnemonic == ud_mnemonic_code.UD_Iret || ud_obj.mnemonic == ud_mnemonic_code.UD_Iretf ) + { + uint index; + size_t ret_adr = (cast(uint[])stack.data)[0]; + Location loc = images.findLocation(ret_adr); + if ( loc.file !is null ) + bp = setBreakpoint(ret_adr, bpi, thread_id); + else + debug DbgIO.println("not setting BP on unknown ret address 0x%x", ret_adr); + if ( bp !is null ) + bp.frame_ptr = prev_bp.frame_ptr; + } + else { + debug DbgIO.println("unknown instruction for propagating breakpoint"); + assert(0); + } + + return false; + } + + /********************************************************************************************** + Propagate breakpoint if unconditional jump is found. + Used for virtual functions with redirectors. + **********************************************************************************************/ + bool propagateUncondJmp(ud* ud_obj, Breakpoint prev_bp) + { + if ( ud_obj is null ) + return true; + + int bpi=-1; + Breakpoint bp; + if ( DisAsm.isConditionalJump(ud_obj.mnemonic) + || ud_obj.mnemonic == ud_mnemonic_code.UD_Icall ) + { + debug DbgIO.println("aborting propagateUncondJmp: condJmp or call"); + return false; + } + else if ( ud_obj.mnemonic == ud_mnemonic_code.UD_Ijmp ) + { + bool is_imm=false; + uint jmp_dest = DisAsm.calcJumpDestination(process, process.threads[thread_id], ud_obj, is_imm); + debug DbgIO.println("propagating bp to 0x%x", jmp_dest); + Location loc = images.findLocation(jmp_dest); + if ( loc.file !is null ) + bp = setBreakpoint(jmp_dest, bpi, thread_id); + else { + debug DbgIO.println("not source info available - checking for unconditional jmp at destination"); + } + if ( bp !is null ) + bp.frame_ptr = prev_bp.frame_ptr; + + return false; + } + else if ( ud_obj.mnemonic == ud_mnemonic_code.UD_Iret || ud_obj.mnemonic == ud_mnemonic_code.UD_Iretf ) { + debug DbgIO.println("aborting propagateUncondJmp: ret"); + return false; + } + else + return true; + } + + /********************************************************************************************** + If the opcode is an immediate jump or a call, sets a temporary breakpoint + at it's destination. If it's a memory call, sets a call-propagating breakpoint at + the call instruction. + **********************************************************************************************/ + bool setBranchBreakpoints(ud_t* ud_obj, StepMode mode) + { + // first call + if ( ud_obj is null ) + return true; + + int bpi=-1; + Breakpoint bp; + + if ( DisAsm.isConditionalJump(ud_obj.mnemonic) || ud_obj.mnemonic == ud_mnemonic_code.UD_Ijmp ) + { + if ( mode!=StepMode.e_out ) + { + bool is_imm=true; + uint jmp_dest = DisAsm.calcJumpDestination(process, process.threads[thread_id], ud_obj, is_imm); + if ( is_imm ) + bp = setBreakpoint(jmp_dest, bpi, thread_id, false); + else + { + // set propagating breakpoint + bp = setBreakpoint(cast(size_t)ud_obj.insn_offset, bpi, thread_id, true); + if ( bp !is null ) + bp.propagate = true; + } + } + } + else if ( ud_obj.mnemonic == ud_mnemonic_code.UD_Icall ) + { + if ( mode==StepMode.e_in ) + { + bool is_imm=true; + uint jmp_dest = DisAsm.calcJumpDestination(process, process.threads[thread_id], ud_obj, is_imm); + if ( is_imm ) + { + Location loc = images.findLocation(jmp_dest); + if ( loc.file !is null ) + bp = setBreakpoint(jmp_dest, bpi, thread_id, false); + else + debug DbgIO.println("not setting BP on unknown call destination 0x%x", jmp_dest); + } + else + { + // set propagating breakpoint + bp = setBreakpoint(cast(size_t)ud_obj.insn_offset, bpi, thread_id, true); + if ( bp !is null ) + bp.propagate = true; + } + } + } + else if ( ud_obj.mnemonic == ud_mnemonic_code.UD_Iret || ud_obj.mnemonic == ud_mnemonic_code.UD_Iretf ) + { + if ( mode!=StepMode.e_out ) + { + Location loc = images.findLocation(current_address); + if ( loc.scope_sym !is null && find(loc.scope_sym.mangled_name, "__foreachbody") >= 0 ) + { + ProcedureSymbol ps = cast(ProcedureSymbol)loc.scope_sym; + if ( ps !is null ) + { + setBreakpoint(ps.cvdata.offset+loc.getCodeBase, bpi, thread_id); + uint ret_adr = getReturnAddress(images.findLocation(getReturnAddress(loc))); + if ( ret_adr > 0 ) + setBreakpoint(ret_adr, bpi, thread_id); + } + } + if ( mode != StepMode.e_over || loc.scope_sym is null || find(loc.scope_sym.mangled_name, "__foreachbody") < 0 ) + { + uint ret_adr = getReturnAddress(loc); + if ( ret_adr > 0 ) + { + debug DbgIO.println("setBranchBPs: using return address from frame"); + loc = images.findLocation(ret_adr); + if ( loc.file !is null ) + bp = setBreakpoint(ret_adr, bpi, thread_id, true); + else + debug DbgIO.println("not setting BP on unknown ret address 0x%x", ret_adr); + } + else + { + bp = setBreakpoint(cast(size_t)ud_obj.insn_offset, bpi, thread_id, true); + if ( bp !is null ) + bp.propagate = true; + } + } + } + else + { + bp = setBreakpoint(cast(size_t)ud_obj.insn_offset, bpi, thread_id, true); + if ( bp !is null ) + bp.propagate = true; + } + } + return true; + } + + /********************************************************************************************** + Removes breakpoint from list and deactivates it. + Returns: success + **********************************************************************************************/ + bool removeBreakpoint(uint bp_index) + { + if ( bp_index in breakpoints ) + { + Breakpoint bp = breakpoints[bp_index]; + if ( process !is null && !bp.deactivate(process) ) + throw new DebuggerException("ERROR: Failed to write breakpoint opcode at %s:%d", bp.file, bp.line); + breakpoints.remove(bp_index); + if ( passing_breakpoint is bp ) { + passing_breakpoint = null; + activateSingleStep(false); + } + delete bp; + return true; + } + return false; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void clearTemporaryBreakpoints() + { + debug DbgIO.println("clearing temporary breakpoints"); + if ( process !is null ) + { + foreach ( bp; temp_breakpoints ) + { + if ( bp.value.foreach_end !is null && bp.value.foreach_end.address != current_address ) + { + if ( !bp.value.hardware ) + passing_breakpoint = bp.value; + activateSingleStep(true); + continue; + } + if ( !bp.value.deactivate(process) ) + throw new DebuggerException("ERROR: Failed to restore opcode for breakpoint at %s:%d", bp.value.file, bp.value.line); + temp_breakpoints.remove(bp); + } + } + } + + /********************************************************************************************** + Creates a breakpoint at the given location and adds it with the given index. + Overwrites the breakpoint at the same index if existant. + Adds a temporary breakpoint instead if index < 0. + Reaturns: Existing breakpoint at the location or new breakpoint. + **********************************************************************************************/ + Breakpoint setBreakpoint(Location loc, inout int new_index, uint threadId, bool hardware=false) + { + if ( loc is null ) + return null; + + // lookup existing breakpoint + Breakpoint bp; + if ( new_index >= 0 ) + { + int bp_index; + bp = getBreakpoint(loc, bp_index); + if( bp !is null ) { + new_index = bp_index; + return bp; + } + } + + // create a breakpoint + bp = new Breakpoint(loc, new_index<0, threadId, hardware); + addBreakpoint(bp, new_index); + return bp; + } + + /********************************************************************************************** + Creates a breakpoint at the given address and adds it with the given index. + Overwrites the breakpoint at the same index if existant. + Adds a temporary breakpoint instead if index < 0. + Reaturns: Existing breakpoint at the address or new breakpoint. + **********************************************************************************************/ + Breakpoint setBreakpoint(size_t address, inout int new_index, uint threadId, bool set_on_current_line=false, bool hardware=false) + { + Location loc = images.findLocation(address); + + Breakpoint bp; + int bp_index; + bp = getBreakpoint(address, bp_index); + if( bp !is null ) { + debug DbgIO.println("instead 0x%08x using existing breakpoint at 0x%08x", address, bp.address); + new_index = bp_index; + return bp; + } + + if ( !set_on_current_line && loc.codeblock !is null && current_address == loc.codeblock.start+loc.getCodeBase ) { + debug DbgIO.println("not setting bp at current 0x%08x", address); + return null; + } + bp = new Breakpoint(loc, new_index<0, threadId, hardware); + addBreakpoint(bp, new_index); + return bp; + } + + /********************************************************************************************** + Adds the given breakpoint with at the given index. + Adds it as temporary breakpoint if new_index < 0. + Activates the breakpoint. + **********************************************************************************************/ + void addBreakpoint(Breakpoint bp, int new_index) + { + // add to breakpoint list + if ( bp.temporary ) + temp_breakpoints ~= bp; + else + breakpoints[new_index] = bp; + + // set breakpoing as active in debugger + if ( process !is null && !bp.activate(process) ) + throw new DebuggerException("ERROR: Failed to write breakpoint opcode at %s:%d", bp.file, bp.line); + } + + /********************************************************************************************** + Searches the breakpoints for one that is set at the given source + location. + Returns: Index of the breakpoint in the breakpoints array. + **********************************************************************************************/ + Breakpoint getBreakpoint(Location loc, out int bp_index) + { + foreach( uint i, Breakpoint bp; breakpoints ) + { + if( !bp.hardware && bp.file == loc.file && bp.line == loc.line + || bp.hardware && bp.address == loc.address ) + { + bp_index = i; + return bp; + } + } + foreach( bp; temp_breakpoints ) + { + if( !bp.value.hardware && bp.value.file == loc.file && bp.value.line == loc.line + || bp.value.hardware && bp.value.address == loc.address ) + { + bp_index = -1; + return bp.value; + } + } + return getBreakpoint(loc.address, bp_index); + } + + /********************************************************************************************** + Searches for a breakpoint at the given address. + Returns: Index of breakpoint in breakpoints array. + **********************************************************************************************/ + Breakpoint getBreakpoint(uint address, out int bp_index) + { + foreach ( uint i, Breakpoint bp; breakpoints ) + { + if ( bp.address == address ) { + bp_index = i; + return bp; + } + } + foreach ( bp; temp_breakpoints ) + { + if ( bp.value.address == address ) { + bp_index = -1; + return bp.value; + } + } + return null; + } + + //============================================================================================= + // Minidumps + + void writeMiniDump(string filename) + { + char[] class_name, msg; + if ( exceptionRecord !is null + && exceptionRecord.ExceptionCode != EXCEPTION_BREAKPOINT + && exceptionRecord.ExceptionCode != EXCEPTION_SINGLE_STEP + && exceptionRecord.ExceptionCode != DBG_CONTROL_C ) + { + getExceptionNameMessage(exceptionRecord.ExceptionInformation[0], class_name, msg); + } + MiniDump.writeMiniDump(filename, process, thread_id, exceptionRecord, class_name, msg); + } + + void readMiniDump(string filename) + { + try { + miniDump = new MiniDump(filename); + selectThread(miniDump.threads[miniDump.selectedThread].ThreadId); + if ( miniDump.exceptionRecord !is null ) + handleExceptionEvent(miniDump.exceptionRecord); + else + thread_id = miniDump.threadInfo.currentThreadId; + //miniDump.threadInfo.mainThreadId + } + catch ( Exception e ) + DbgIO.writeln("Error: "~e.msg); + //return miniDump !is null; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/disasm.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/disasm.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,162 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +import util; +import dbgprocess; +import dbgthread; +public import udis86; +import util; + +import std.string; + +import win32.winnt; + +class DisAsm +{ + /********************************************************************************************** + Calculates the absolute destination address of a jxx or call instruction. + Params: is_imm = if true, only JIMM destinations will be considered. Out value is whether destination was JIMM + **********************************************************************************************/ + static int calcJumpDestination(DbgProcess process, DbgThread thread, ud_t* ud_obj, inout bool is_imm) + { + if ( !isConditionalJump(ud_obj.mnemonic) + && ud_obj.mnemonic != ud_mnemonic_code.UD_Icall + && ud_obj.mnemonic != ud_mnemonic_code.UD_Ijmp ) + return 0; + + uint address, destination; + if ( ud_obj.operand[0].type == ud_type.UD_OP_MEM || ud_obj.operand[0].type == ud_type.UD_OP_REG ) + { + if ( is_imm ) { + is_imm = false; + return 0; + } + is_imm = false; + CONTEXT ctx; + thread.getContext(ctx, CONTEXT_FULL); + switch ( ud_obj.operand[0].base ) + { + case ud_type.UD_NONE: break; + case ud_type.UD_R_EAX: address = ctx.Eax; break; + case ud_type.UD_R_EBX: address = ctx.Ebx; break; + case ud_type.UD_R_ECX: address = ctx.Ecx; break; + case ud_type.UD_R_EDX: address = ctx.Edx; break; + case ud_type.UD_R_ESI: address = ctx.Esi; break; + case ud_type.UD_R_EDI: address = ctx.Edi; break; + default: + DbgIO.println("WARNING: yet unsupported register 0x%x used in jmp/call destination", ud_obj.operand[0].base); + break; + } + if ( ud_obj.operand[0].type == ud_type.UD_OP_MEM ) + { + switch ( ud_obj.operand[0].offset ) + { + case 8: address += ud_obj.operand[0].lval._ubyte; break; + case 16: address += ud_obj.operand[0].lval.uword; break; + case 32: address += ud_obj.operand[0].lval.udword; break; + default: + DbgIO.println("WARNING: yet unsupported offset size used in jmp/call destination"); + break; + } + process.readProcessMemory(address, &destination, uint.sizeof); + } + else + destination = address; + } + else if ( ud_obj.operand[0].type == ud_type.UD_OP_JIMM ) + { + is_imm = true; + address = cast(uint)ud_insn_off(ud_obj); + destination = address+ud_insn_len(ud_obj); + switch ( ud_obj.operand[0].size ) + { + case 8: + destination += ud_obj.operand[0].lval.sbyte; + break; + case 16: + destination += ud_obj.operand[0].lval.sword; + break; + case 32: + destination += ud_obj.operand[0].lval.sdword; + break; + case 48: + DbgIO.println("WARNING: 48bit immediate jump destinations not implemented, yet"); + break; + case 64: + DbgIO.println("WARNING: 64bit immediate jump destinations not implemented, yet"); + break; + default: + assert(0); + } + } + else + DbgIO.println("yet unsupported jmp/call destination"); + return destination; + } + + /********************************************************************************************** + Test if given mnemonic a a conditional jump (i.e. jxx, not jmp). + **********************************************************************************************/ + static bool isConditionalJump(ud_mnemonic_code opcode) + { + if ( ud_mnemonic_code.UD_Ijmp == opcode ) + return false; + if ( ud_mnemonic_code.UD_Ijcxz <= opcode && ud_mnemonic_code.UD_Ijnle >= opcode ) + return true; + if ( ud_mnemonic_code.UD_Ija <= opcode && ud_mnemonic_code.UD_Ijnc >= opcode ) + return true; + if ( ud_mnemonic_code.UD_Iloop <= opcode && ud_mnemonic_code.UD_Iloopz >= opcode ) + return true; + return false; + } + + /********************************************************************************************** + Wrapper function for disassembly. Calls the delegate callback for each instruction. + **********************************************************************************************/ + static void disasm(DbgProcess process, uint start, uint stop, bool delegate(ud_t*) callback) + { + ubyte[] code; + + bool disasm(uint length, bool abort_at_ret) + { + ud_t ud_obj; + ud_init(&ud_obj); + ud_set_pc(&ud_obj, start); + ud_set_input_buffer(&ud_obj, code.ptr, length); + ud_set_mode(&ud_obj, 32); + ud_set_syntax(&ud_obj, &ud_translate_intel); + + // init callback + callback(cast(ud_t*)null); + + while ( ud_disassemble(&ud_obj) ) + { + if ( !callback(&ud_obj) ) + return false; + if ( abort_at_ret && (ud_obj.mnemonic == ud_mnemonic_code.UD_Iret || ud_obj.mnemonic == ud_mnemonic_code.UD_Iretf) ) + return false; + } + return true; + } + + if ( stop > 0 && stop <= start ) { + DbgIO.println("ERROR: invalid address range: Eip=0x%x >= 0x%x", start, stop); + return; + } + + code.length = stop>0?stop-start:512; + bool more; + uint read; + do + { + read = process.readProcessMemory(start, code.ptr, code.length); + if ( read == 0 ) + DbgIO.println("ERROR: Couldn't read from process' memory for disassembly: %s", lastError); + if ( read > 0 ) + more = disasm(read, stop==0); + start += code.length; + } while ( stop == 0 && more && read > 0 ); + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/expression/datahandler.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/expression/datahandler.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,599 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ +module expression.datahandler; + +import std.string; +import std.utf; + +import codeview.codeview; +import codeview.decl; +import dbgprocess; +import util; +import minidump; +import expression.evaluationcontext; + +import internal.aaA; + +T min(T)(T a, T b) +{ + return a 1 && handler is null ) + handler = type[0..2]~"*" in s_dataHandlerRegistry; + if ( handler is null ) + handler = type[0]~"*" in s_dataHandlerRegistry; + + SymbolValue val; + if ( handler !is null ) { + debug(datahandler) DbgIO.println("%s is handling data", handler.classinfo.name); + val = handler.toString(ctx, type, data, depth); + } + return val; + } + + abstract SymbolValue toString(EvaluationContext ctx, string mangled_type, ubyte[] data, int depth); +} + +/************************************************************************************************** + +**************************************************************************************************/ +class DataHandler_H : DataHandler +{ + SymbolValue toString(EvaluationContext ctx, string mangled_type, ubyte[] data, int depth) + { + SymbolValue val = new SymbolValue; + + size_t ptr = (cast(size_t[])data)[0]; + if ( ptr == 0 ) { + val.value = "null"; + return val; + } + + if ( depth == 0 ) { + val.value = "..."; + return val; + } + + int i; + pragma(msg, TODO(__FILE__,__LINE__,"allow named types (C,S,D,F, etc.)")); + for ( i = 1; i < mangled_type.length && find(lowercase, mangled_type[i]) < 0; ++i ) {} + + string key_type = mangled_type[1..i+1], + val_type = mangled_type[i+1..$]; + size_t val_tsize = ctx.codeView.sizeofMangled(val_type), + key_tsize = ctx.codeView.sizeofMangled(key_type); + + if ( key_type.length == 0 ) { + val.value = "invalid key type "~key_type; + return val; + } + if ( val_type.length == 0 ) { + val.value = "invalid val type "~val_type; + return val; + } + + bool evalaaA(void* ptr) + { + if ( ptr is null ) + return true; + ubyte[] data; + size_t len = aaA.sizeof+key_tsize+val_tsize; + data = ctx.readMemory(cast(size_t)ptr, len); + if ( data is null ) + return false; + + uint i=aaA.sizeof; + SymbolValue k = handle(ctx, key_type, data[i..i+key_tsize], depth>0?depth-1:depth); + i += key_tsize; + SymbolValue v = handle(ctx, val_type, data[i..i+val_tsize], depth>0?depth-1:depth); + v.name = k.value; + val.children ~= v; + return true; + } + + bool evalBB(uint ptr) + { + ubyte[] data = ctx.readMemory(cast(size_t)ptr, BB.sizeof); + if ( data is null ) + return false; + + BB* bb = cast(BB*)data.ptr; + size_t blen = bb.b.length*size_t.sizeof; + debug DbgIO.println("%d nodes, bb.b.length=%d", bb.nodes, bb.b.length); + + data = ctx.readMemory(cast(size_t)bb.b.ptr, blen); + if ( data is null ) + return false; + bb.b = cast(aaA*[])data; + + foreach ( a; bb.b ) + { + if ( !evalaaA(a) ) + return false; + } + return true; + } + + if ( !evalBB(ptr) ) + val.value = format("invalid AA pointer 0x%x", ptr); + + return val; + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +class DataHandler_E : DataHandler +{ + SymbolValue toString(EvaluationContext ctx, string mangled_type, ubyte[] data, int depth) + { + SymbolValue val = new SymbolValue; + string mangled = mangled_type[1..$].dup, + name; + name = demangleNameSkip(mangled); + if ( (name in ctx.codeView.UDTsByName) !is null ) + { + LeafEnum lf = cast(LeafEnum)ctx.codeView.UDTsByName[name]; + if ( lf is null ) { + val.value = "invalid codeview information for enum type "~name; + return val; + } + uint index = lf.field-0x1000; + if ( index >= ctx.codeView.type_strings.length ) { + val.value = "invalid codeview information for enum type "~name; + return val; + } + LeafFieldList fields = cast(LeafFieldList)ctx.codeView.type_strings[lf.field-0x1000][0]; + if ( fields is null ) { + val.value = "invalid codeview information for enum type "~name; + return val; + } + assert(data.length >= 4); + uint value = (cast(uint[])data)[0]; + foreach ( f; fields.fields ) + { + LeafEnumNameValue ef = cast(LeafEnumNameValue)f; + assert(ef !is null); + if ( ef.value.getUint == value ) { + val.value = ef.name; + return val; + } + } + val.value = "invalid enum value"; + } + else + val.value = "unknown enum type "~name; + return val; + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +class DataHandler_SCU : DataHandler +{ + SymbolValue toString(EvaluationContext ctx, string mangled_type, ubyte[] data, int depth) + { + SymbolValue val = new SymbolValue; + + string scu_name_mangled, + scu_name; + if ( mangled_type[0] == 'P' ) + { + assert(data.length==size_t.sizeof); + if ( *cast(size_t*)data.ptr == 0 ) { + val.value = "null"; + return val; + } + scu_name_mangled = mangled_type[2..$].dup; + } + else + scu_name_mangled = mangled_type[1..$].dup; + scu_name = demangleNameSkip(scu_name_mangled); + + if ( depth == 0 ) { + val.value = "..."; + return val; + } + + if ( (scu_name in ctx.codeView.UDTsByName) is null ) { + val.value = format("unknown type %s", scu_name); + return val; + } + + LeafClassStruc lcs; + LeafUnion lu; + + LeafFieldList lfl; + uint type_length; + + lcs = cast(LeafClassStruc)ctx.codeView.UDTsByName[scu_name]; + debug DbgIO.println("%s %x", scu_name, lcs.field); + if ( lcs !is null && lcs.field-0x1000 < ctx.codeView.type_strings.length ) { + lfl = cast(LeafFieldList)ctx.codeView.type_strings[lcs.field-0x1000][0]; + type_length = lcs.length.getUint(); + } + else + { + lu = cast(LeafUnion)ctx.codeView.UDTsByName[scu_name]; + if ( lu !is null && lu.field-0x1000 < ctx.codeView.type_strings.length ) { + lfl = cast(LeafFieldList)ctx.codeView.type_strings[lu.field-0x1000][0]; + type_length = lu.length.getUint(); + } + } + + if ( lfl is null ) { + val.value = "{no debug symbols available}"; + return val; + } + + ubyte[] tmpdata; + if ( mangled_type[0] == 'P' || mangled_type[0] == 'C' ) + { + assert(data.length==size_t.sizeof); + debug(datahandler) DbgIO.println("dereferencing class/struct reference at 0x%x", *cast(size_t*)data.ptr); + tmpdata = ctx.readMemory(*cast(size_t*)data.ptr, type_length); + if ( tmpdata is null ) { + val.value = format("invalid class pointer 0x%08x", *cast(size_t*)data.ptr); + return val; + } + } + else + tmpdata = data; + + void listMembers(LeafFieldList lfl, SymbolValue root) + { + foreach ( l; lfl.fields ) + { + if ( l.leaf_index == LF_BCLASS_16t ) + { + LeafBaseClass lbc = cast(LeafBaseClass)l; + assert ( lbc !is null ); + if ( lbc.type-0x1000 >= ctx.codeView.type_strings.length ) { + root.children ~= new SymbolValue("unknown base class "~format("0x%04x", lbc.type)); + continue; + } + LeafClassStruc lcs = cast(LeafClassStruc)ctx.codeView.type_strings[lbc.type-0x1000][0]; + assert ( lcs !is null ); + if ( lcs.field == 0 ) + continue; + if ( lcs.field-0x1000 >= ctx.codeView.type_strings.length ) { + root.children ~= new SymbolValue("unknown field list "~format("0x%04x", lcs.field)); + continue; + } + Leaf[] fields = ctx.codeView.type_strings[lcs.field-0x1000]; + debug(datahandler) DbgIO.println("processing base class ", lcs.name); + + SymbolValue v = new SymbolValue; + v.name = lcs.name; + listMembers(cast(LeafFieldList)fields[0], v); + root.children ~= v; + } + else if ( l.leaf_index == LF_MEMBER_16t ) + { + LeafMember lm = cast(LeafMember)l; + assert ( lm !is null ); + uint size = ctx.codeView.sizeofCV(lm.type), + offset = lm.offset.getUint; + + LeafPointer lp; + bool seen_type; + if ( lm.type >= 0x1000 && lm.type-0x1000 < ctx.codeView.type_strings.length ) + lp = cast(LeafPointer)ctx.codeView.type_strings[lm.type-0x1000][0]; + if ( depth > 0 ) + { + debug(datahandler) DbgIO.println("processing member %s cvtype 0x%x mangled %s", lm.name, lm.type, ctx.codeView.mangleCVtype(lm.type)); + if ( offset+size > tmpdata.length ) + root.children ~= new SymbolValue(lm.name, format("invalid: offset=0x%x size=%d", offset, size)); + else + { + SymbolValue v = handle(ctx, ctx.codeView.mangleCVtype(lm.type), tmpdata[offset..offset+size], depth>0?depth-1:depth); + if ( v !is null ) { + v.name = lm.name; + root.children ~= v; + } + else + root.children ~= new SymbolValue(lm.name, "null"); + } + } + } + } + } + + listMembers(lfl, val); + return val; + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +class DataHandler_A : DataHandler +{ + SymbolValue toString(EvaluationContext ctx, string mangled_type, ubyte[] data, int depth) + { + SymbolValue val = new SymbolValue; + size_t[] idata = cast(size_t[])data; + + if ( idata[1] == 0 ) { + val.value = "null"; + return val; + } + + if ( depth == 0 ) { + val.value = "..."; + return val; + } + + mangled_type = mangled_type[1..$]; + uint elm_size = ctx.codeView.sizeofMangled(mangled_type); + size_t alen = min(idata[0],max_elem_count)*elm_size; + + ubyte[] tmpdata = ctx.readMemory(idata[1], alen); + if ( tmpdata is null ) + val.value = format("invalid array: ptr=0x%08x $=%d", idata[1], idata[0]); + else + { + uint off_end = tmpdata.length; + for ( uint i = 0, off=0; off < off_end; ++i, off+=elm_size ) { + SymbolValue v = handle(ctx, mangled_type, tmpdata[off..off+elm_size], depth>0?depth-1:depth); + if ( v is null ) + val.children ~= new SymbolValue("["~.toString(i)~"]", "null"); + else { + v.name = "["~.toString(i)~"]"; + val.children ~= v; + } + } + if ( idata[0] > max_elem_count ) + val.children ~= new SymbolValue("... $", format("%d", idata[0])); + } + return val; + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +class DataHandler_G : DataHandler +{ + SymbolValue toString(EvaluationContext ctx, string mangled_type, ubyte[] data, int depth) + { + SymbolValue val = new SymbolValue; + + if ( depth == 0 ) { + val.value = "..."; + return val; + } + + mangled_type = mangled_type[1..$]; + uint count = parseNumber(mangled_type), + elm_size = ctx.codeView.sizeofMangled(mangled_type), + off_end = min(count,max_elem_count)*elm_size; + if ( count*elm_size != data.length ) + throw new EvaluationException("unexpected data length: have "~.toString(data.length)~" should be "~.toString(count*elm_size)); + for ( uint i = 0, off=0; off < off_end; ++i, off+=elm_size ) { + SymbolValue v = handle(ctx, mangled_type, data[off..off+elm_size], depth>0?depth-1:depth); + if ( v is null ) + val.children ~= new SymbolValue("["~.toString(i)~"]", "null"); + else { + v.name = "["~.toString(i)~"]"; + val.children ~= v; + } + } + if ( count > max_elem_count ) + val.children ~= new SymbolValue("... $", format("%d", count)); + return val; + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +class DataHandler_string : DataHandler +{ + SymbolValue toString(EvaluationContext ctx, string mangled_type, ubyte[] data, int depth) + { + SymbolValue val = new SymbolValue; + + string str; + uint[] idata = cast(uint[])data; + if ( idata[1] == 0 ) { + val.value = "null"; + return val; + } + + assert(mangled_type[0] == 'A'); + + switch ( mangled_type[1] ) + { + case 'a': + str = cast(string)ctx.readMemory(idata[1], idata[0]); + if ( str is null ) { + val.value = format("invalid string: ptr=0x%08x $=%d", idata[1], idata[0]); + return val; + } + break; + case 'u': + wstring wstr; + size_t len = idata[0]*wchar.sizeof; + + wstr = cast(wstring)ctx.readMemory(idata[1], len); + if ( wstr is null ) { + val.value = format("invalid string: ptr=0x%08x $=%d", idata[1], idata[0]); + return val; + } + str = toUTF8(wstr); + break; + case 'w': + dstring dstr; + size_t len = idata[0]*dchar.sizeof; + + dstr = cast(dstring)ctx.readMemory(idata[1], len); + if ( dstr is null ) { + val.value = format("invalid string: ptr=0x%08x $=%d", idata[1], idata[0]); + return val; + } + str = toUTF8(dstr); + break; + default: + assert(0); + } + val.value = "\""~replace(replace(str, "\\", "\\\\"), "\"", "\\\"")~"\""; + return val; + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +class DataHandler_num : DataHandler +{ + SymbolValue toString(EvaluationContext ctx, string mangled_type, ubyte[] data, int depth) + { + SymbolValue val = new SymbolValue; + switch ( mangled_type[0] ) + { + case 'a': + val.value = (cast(char[])data)[0..1]; + break; + //~ case 'u': + //~ val.value = toUTF8((cast(wchar[])data)[0..1]); + //~ break; + case 'w': + val.value = toUTF8((cast(dchar[])data)[0..1]); + break; + case 'g': + val.value = format("%d", (cast(byte[])data)[0]); + break; + case 'h': + val.value = format("%d", (cast(ubyte[])data)[0]); + break; + case 's': + val.value = format("%d", (cast(short[])data)[0]); + break; + case 't': + case 'u': + val.value = format("%d", (cast(ushort[])data)[0]); + break; + case 'i': + val.value = format("%d", (cast(int[])data)[0]); + break; + case 'P': + case 'v': + case 'k': + val.value = format("0x%08x", (cast(uint[])data)[0]); + break; + case 'l': + val.value = format("%d", (cast(long[])data)[0]); + break; + case 'm': + val.value = format("%d", (cast(ulong[])data)[0]); + break; + case 'f': + val.value = format("% .6g", (cast(float[])data)[0]); + break; + case 'd': + val.value = format("% .12g", (cast(double[])data)[0]); + break; + case 'e': + val.value = format("% .16g", (cast(real[])data)[0]); + break; + case 'x': + case 'b': + val.value = format("%s", (cast(bool[])data)[0]?"true":"false"); + break; + default: + assert(0, mangled_type); + } + return val; + } +} + + +/************************************************************************************************** + +**************************************************************************************************/ +class DataHandler_bool : DataHandler +{ + SymbolValue toString(EvaluationContext ctx, string mangled_type, ubyte[] data, int depth) + { + SymbolValue val = new SymbolValue; + assert(mangled_type[0]=='b'); + val.value = format("%s", (cast(bool[])data)[0]); + return val; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/expression/evaluationcontext.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/expression/evaluationcontext.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,320 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ +module expression.evaluationcontext; + +import container; +import codeview.decl; +import codeview.codeview; +import minidump; +import dbgprocess; +import dbgthread; +import callstack; +import util; +import expression.datahandler; + +import std.string; + +import win32.winnt; + +class EvaluationException : Exception +{ + this(string m) { super(m); } +} + +/************************************************************************************************** + +**************************************************************************************************/ +class SymbolData +{ + string type; + bool defered_load; + + union + { + ubyte[] data; + struct { + size_t len, + ptr; + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + ubyte[] getData(EvaluationContext ctx) + { + if ( defered_load ) + { + debug(eval) DbgIO.println("defered load: ptr=%x len=%d", ptr, len); + defered_load = false; + data = ctx.readMemory(ptr, len); + } + return data; + } + + /********************************************************************************************** + + **********************************************************************************************/ + bool loadElementSlice(size_t start, size_t end, CodeView cv) + { + assert(end>=start); + size_t size = cv.sizeofMangled(type); + start *= size; + end *= size; + if ( defered_load ) + { + if ( end > len ) + return false; + ptr += start; + len = end-start; + } + else + { + if ( end > data.length ) + return false; + data = data[start..end]; + } + return true; + } + + /********************************************************************************************** + + **********************************************************************************************/ + bool loadByteSlice(size_t start, size_t end) + { + assert(end>=start); + if ( defered_load ) + { + if ( end > len ) + return false; + ptr += start; + len = end-start; + } + else + { + if ( end > data.length ) + return false; + data = data[start..end]; + } + return true; + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +class EvaluationContext +{ + CodeView codeView; + MiniDump miniDump; + DbgProcess process; + DbgThread thread; + + uint frameLevel; + CallStack stack; + ScopeSymbol scopeSym; + + NamedSymbol[] scopeSymbols; + + /********************************************************************************************** + + **********************************************************************************************/ + this(CodeView _cv, + uint _current_address, + MiniDump _miniDump, + DbgProcess _process, + DbgThread _thread, + CallStack _stack, + uint _frame_level=0 + ) + { + miniDump = _miniDump; + thread = _thread; + codeView = _cv; + process = _process; + stack = _stack; + frameLevel = _frame_level; + + uint segment; + scopeSym = codeView.findProcedureSymbol(_current_address); + for ( ; scopeSym !is null; scopeSym = scopeSym.parent_scope ) + { + scopeSymbols ~= scopeSym.symbols.named_symbols; + ProcedureSymbol psym = cast(ProcedureSymbol)scopeSym; + if ( psym !is null ) + scopeSymbols ~= psym.arguments.named_symbols; + } + } + + bool getContext(out CONTEXT ctx, uint context_flags) + { + if ( process !is null ) + return thread.getContext(ctx, context_flags); + else if ( miniDump !is null ) { + CONTEXT* ptr = miniDump.getContext; + if ( ptr !is null ) { + ctx = *ptr; + return true; + } + } + return false; + } + + /********************************************************************************************** + + **********************************************************************************************/ + NamedSymbol findSymbol(string name, inout NamedSymbol[] symbols) + { + if ( symbols is null ) + { + StringWrap sw = new StringWrap(name); + AVLNode!(NamedSymbol) res; + if ( codeView.globalNamedSymbols.find(sw, res) ) + { + NamedSymbol ns = res.value; + ScopeSymbol scopesym = cast(ScopeSymbol)ns; + if ( scopesym is null ) + return ns; + symbols = scopesym.symbols.named_symbols; + return null; + } + foreach ( ns; scopeSymbols ) + { + if ( name == ns.name_notype ) + { + debug(findSymbol) DbgIO.println("%s == %s", name, ns.name_notype); + ScopeSymbol scopesym = cast(ScopeSymbol)ns; + if ( scopesym is null ) + return ns; + symbols = scopesym.symbols.named_symbols; + return null; + } + } + } + else + { + foreach ( ns; symbols ) + { + if ( name == ns.name_notype ) + { + debug(findSymbol) DbgIO.println("%s == %s", name, ns.name_notype); + ScopeSymbol scopesym = cast(ScopeSymbol)ns; + if ( scopesym is null ) + return ns; + symbols = scopesym.symbols.named_symbols; + return null; + } + } + } + return null; + } + + /********************************************************************************************** + + **********************************************************************************************/ + SymbolData loadSymbolData(NamedSymbol symbol) + { + StackSymbol stacksym = cast(StackSymbol)symbol; + SymbolData symdata = new SymbolData; + if ( stacksym !is null ) + { + if ( stacksym.size == 0 ) + stacksym.size = codeView.sizeofCV(stacksym.cvdata.type); + debug(eval) DbgIO.println("reading stack symbol size=%d cv type 0x%x", stacksym.size, stacksym.cvdata.type); + if ( !stack.loadSymbolData(stacksym, symdata, frameLevel) ) + throw new EvaluationException("Couldn't load stack symbol "~symbol.name_notype); + } + else + { + DataSymbol datasym = cast(DataSymbol)symbol; + if ( datasym !is null ) + { + if ( datasym.size == 0 ) + datasym.size = codeView.sizeofCV(datasym.cvdata.type); + debug(eval) DbgIO.println("reading global symbol size=%d cv type 0x%x", datasym.size, datasym.cvdata.type); + + symdata.ptr = codeView.image.getSectionBase(datasym.cvdata.segment)+datasym.cvdata.offset; + symdata.len = datasym.size; + symdata.defered_load = true; + } + else + throw new EvaluationException("Can only evaluate Data and Stack Data Symbols, yet"); + } + + symdata.type = codeView.mangleType(symbol); + if ( symdata.type is null ) + throw new EvaluationException("Symbol "~symbol.name_notype~" has unknown CV type"); + return symdata; + } + + /********************************************************************************************** + + **********************************************************************************************/ + bool findMember(string ident, LeafFieldList lfl, inout size_t size, inout size_t offset, inout string type) + { + if ( lfl is null ) + return false; + foreach ( l; lfl.fields ) + { + if ( l.leaf_index == LF_BCLASS_16t ) + { + LeafBaseClass lbc = cast(LeafBaseClass)l; + assert ( lbc !is null ); + if ( lbc.type-0x1000 >= codeView.type_strings.length ) + { + throw new EvaluationException( + "unknown base class "~format("0x%04x", lbc.type)~" in type information for expression" + ); + } + LeafClassStruc lcs = cast(LeafClassStruc)codeView.type_strings[lbc.type-0x1000][0]; + assert ( lcs !is null ); + if ( lcs.field == 0 ) + continue; + if ( lcs.field-0x1000 >= codeView.type_strings.length ) + { + throw new EvaluationException( + "unknown field list "~format("0x%04x", lcs.field)~" in type information for expression" + ); + } + Leaf[] fields = codeView.type_strings[lcs.field-0x1000]; + if ( findMember(ident, cast(LeafFieldList)fields[0], size, offset, type) ) + return true; + } + else if ( l.leaf_index == LF_MEMBER_16t ) + { + LeafMember lm = cast(LeafMember)l; + assert ( lm !is null ); + if ( lm.name != ident ) + continue; + type = codeView.mangleCVtype(lm.type); + size = codeView.sizeofCV(lm.type); + offset = lm.offset.getUint; + return true; + } + } + + return false; + } + + /********************************************************************************************** + + **********************************************************************************************/ + ubyte[] readMemory(size_t ptr, size_t len) + { + if ( miniDump !is null ) + return miniDump.readMemory(ptr, len); + + if ( process is null ) + return null; + + if ( len > process.MEMCHECK_MIN && process.isInvalidMem(ptr, len) ) + return null; + ubyte data[] = new ubyte[len]; + if ( len != process.readProcessMemory(ptr, data.ptr, data.length) ) + return null; + return data; + } +} + diff -r 586e4a649642 -r 4a9dcbd9e54f src/expression/expression.apd --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/expression/expression.apd Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1075 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +APDProperties +{ + parser_type = lr +} + +APDDeclaration +{ +module expression.expression_apd; + +import codeview.decl; +import codeview.codeview; +import expression.evaluationcontext; +import expression.datahandler; +import util; + +//import internal.aaA; + + struct aaA + { + aaA *left; + aaA *right; + hash_t hash; + /* key */ + /* value */ + } + + struct BB + { + aaA*[] b; + size_t nodes; // total number of aaA nodes + } + +import std.demangle; +import std.stdio; + +import win32.winnt; + +/********************************************************************************************** + +**********************************************************************************************/ +bool castArrayIndex(ubyte[] data, string type, out size_t index) +{ + assert(type.length>0); + switch ( type[0] ) + { + case 'a': + if ( *cast(char*)data.ptr < 0 ) + throw new EvaluationException("Cannot access array with negative index"); + case 'h': + index = *cast(ubyte*)data.ptr; + return true; + case 's': + if ( *cast(short*)data.ptr < 0 ) + throw new EvaluationException("Cannot access array with negative index"); + case 't': + index = *cast(ushort*)data.ptr; + return true; + case 'i': + if ( *cast(int*)data.ptr < 0 ) + throw new EvaluationException("Cannot access array with negative index"); + case 'k': + index = *cast(uint*)data.ptr; + return true; + case 'l': + if ( *cast(long*)data.ptr < 0 ) + throw new EvaluationException("Cannot access array with negative index"); + case 'm': + index = cast(size_t)*cast(ulong*)data.ptr; + return true; + default: + } + return false; +} + +/********************************************************************************************** + +**********************************************************************************************/ +// debug = parser; +unittest +{ + bool test(string expr) + { + SyntaxTree* root; + bool success; + try success = parse(expr, root); + catch ( ParserException e ) { + debug(parser) writefln("%s", e.toString); + return false; + } + return success; + } + + assert(test("a.bc")); + assert(test("bc[def..ghij]")); + assert(!test("\"a\\\"\\\u2f85qwe '\"")); + assert(test("a.bc[def..ghij].klmno.pqrstu[0..'a'][\"a\\\"\\u2f85qwe '\"]")); + assert(!test("a.bc.[def..ghij]")); + assert(!test("[def..ghij]")); + assert(!test("a.")); + assert(test("asdf[0][i].qwer")); + assert(test("cast(uint)asdf")); + assert(test("(cast(mystruct)asdf).qwer")); + assert(test("(cast(string[])asdf)[0][2..13]")); + assert(test("(cast(char[string])asdf)[\"qwer\"]")); + assert(!test("(cast(mystruct)asdf).(cast(char[][])qwer)[0]")); + assert(test("cast(float)asdf.qwer")); + assert(!test("cast.qwer")); + assert(!test("cast(uint).qwer")); + assert(!test("cast(asdf.qwer).qwer")); + assert(test("(cast(string)mystruct.tzui)[0..4]")); + assert(test("cast(Vec!(float,3))mystruct")); + assert(test("cast(Vec!(float,3,\"asdf\",Vec!(float)))mystruct")); + assert(test("vertices[inds[10193]].y")); + assert(test("*cast(uint*)#eax")); +} + +} + +Whitespace +{ + regexp("[\\t\\n\\r ]+"); +} + + +/************************************************************************************************** + Expressions +**************************************************************************************************/ +Expr(EvaluationContext ctx, out SymbolData symdata) +{ + Deref Cast DotChain + { + DotChain(ctx, symdata); + Cast(ctx, symdata); + Deref(ctx, symdata); + } +} + +Deref(EvaluationContext ctx, ref SymbolData symdata) +{ + "*" Deref + { + if ( symdata is null ) + throw new EvaluationException("Invalid data for dereferencing"); + if ( symdata.type[0] != 'P' ) + throw new EvaluationException("Cannot dereference non-pointer of type "~demangleType(symdata.type)); + symdata.type = symdata.type[1..$]; + assert(symdata.type.length>0); + ubyte[] data = symdata.getData(ctx); + if ( data.length != size_t.sizeof ) { + throw new EvaluationException("Invalid pointer data size = "~.toString(data.length)); + } + symdata.ptr = (cast(size_t[])data)[0]; + symdata.len = ctx.codeView.sizeofMangled(symdata.type); + symdata.defered_load = true; + + Deref(ctx, symdata); + } + + epsilon; +} + +DotChain(EvaluationContext ctx, out SymbolData symdata) +{ + Register + { + Register(ctx, symdata); + } + + "(" !("(%d) Expression expected after (") + Expr !("(%d) ) expected") + ")" + RefExpr + { + Expr(ctx, symdata); + RefExpr(ctx, null, null, "", symdata); + } + + Ident + RefExpr + { + string id; + Ident(id); + + NamedSymbol[] symbols; + NamedSymbol symbol = ctx.findSymbol(id, symbols); + if ( symbol !is null ) + symdata = ctx.loadSymbolData(symbol); + else + debug DbgIO.println("symbol %s not found", id); + RefExpr(ctx, symbol, symbols, id, symdata); + } + + Lit + { Lit(symdata); } +} + +RefExpr(EvaluationContext ctx, NamedSymbol symbol, NamedSymbol[] symbols, string prefix, ref SymbolData symdata) +{ + //------------------------------------------------------------------------- + // . Operator + //------------------------------------------------------------------------- + "." Ident RefExpr + { + string id; + Ident(id); + prefix ~= "."~id; + + if ( symdata is null ) + { + symbol = ctx.findSymbol(prefix, symbols); + if ( symbol !is null ) + symdata = ctx.loadSymbolData(symbol); + } + else + { + switch ( symdata.type[0] ) + { + //--------------------------------------------------------------------------------- + // primitive types + case 'v': case 'b': case 'x': case 'g': case 'h': case 's': case 't': case 'i': case 'k': case 'l': case 'm': case 'f': + case 'd': case 'e': case 'o': case 'p': case 'j': case 'q': case 'r': case 'c': case 'a': case 'u': case 'w': + throw new EvaluationException( + "Type mismatch - unexpected . operator in expression of type "~demangleType(symdata.type) + ); + //--------------------------------------------------------------------------------- + // array properties + case 'G': + switch ( id ) + { + case "length": + symdata.type = symdata.type[1..$]; + size_t len = parseNumber(symdata.type); + symdata.type = "k"; + symdata.data = (cast(ubyte*)&len)[0..size_t.sizeof].dup; + symdata.defered_load = false; + break; + case "ptr": + // TODO: can this always be guaranteed? + assert(symdata.defered_load); + size_t ptr = symdata.ptr; + symdata.data = (cast(ubyte*)&ptr)[0..size_t.sizeof]; + symdata.defered_load = false; + symdata.type = symdata.type[1..$]; + parseNumber(symdata.type); + symdata.type = "P"~symdata.type; + break; + default: + throw new EvaluationException( + "Type mismatch - invalid property "~id~" after expression of type "~demangleType(symdata.type) + ); + } + break; + case 'A': + switch ( id ) + { + case "length": + ubyte[] data = symdata.getData(ctx); + symdata.type = "k"; + size_t len = (cast(size_t[])data)[0]; + symdata.data = (cast(ubyte*)&len)[0..size_t.sizeof].dup; + symdata.defered_load = false; + break; + case "ptr": + ubyte[] data = symdata.getData(ctx); + symdata.type = "k"; + size_t len = (cast(size_t[])data)[1]; + symdata.data = (cast(ubyte*)&len)[0..size_t.sizeof].dup; + symdata.defered_load = false; + break; + default: + throw new EvaluationException( + "Type mismatch - invalid property "~id~" after expression of type "~demangleType(symdata.type) + ); + } + break; + case 'H': + switch ( id ) + { + case "length": + ubyte[] data = symdata.getData(ctx); + symdata.ptr = *cast(size_t*)data.ptr; + symdata.len = BB.sizeof; + symdata.defered_load = true; + data = symdata.getData(ctx); + BB* bb = cast(BB*)data.ptr; + + symdata.type = "k"; + symdata.data = (cast(ubyte*)&bb.nodes)[0..size_t.sizeof].dup; + symdata.defered_load = false; + break; + default: + throw new EvaluationException( + "Type mismatch - invalid property "~id~" after expression of type "~demangleType(symdata.type) + ); + } + break; + //--------------------------------------------------------------------------------- + // references to structs/classes + case 'P': + symdata.type = symdata.type[1..$]; + if ( symdata.type[0] != 'C' && symdata.type[0] != 'S' ) + { + throw new EvaluationException( + "Type mismatch - unexpected . operator after expression of type "~demangleType("P"~symdata.type) + ); + } + + ubyte[] data = symdata.getData(ctx); + if ( symdata.data.length <= 0 ) + throw new EvaluationException("Subexpression evaluated to empty data"); + symdata.ptr = (cast(uint[])data)[0]; + symdata.len = ctx.codeView.sizeofMangled(symdata.type); + symdata.defered_load = true; + + if ( symdata.ptr == 0 ) + throw new EvaluationException("pointer is null"); + // fall through to struct handling + + //--------------------------------------------------------------------------------- + // classes/structs + case 'C': + case 'S': + symdata.type = symdata.type[1..$]; + string scu_name = demangleNameSkip(symdata.type); + assert ( symdata.type.length <= 0 ); + if ( (scu_name in ctx.codeView.UDTsByName) is null ) + throw new EvaluationException("unknown type \""~scu_name~"\""); + + LeafClassStruc lcs = cast(LeafClassStruc)ctx.codeView.UDTsByName[scu_name]; + LeafUnion lu; + LeafFieldList lfl; + uint type_length; + + if ( lcs !is null && lcs.field-0x1000 < ctx.codeView.type_strings.length ) { + Leaf[] fields = ctx.codeView.type_strings[lcs.field-0x1000]; + lfl = cast(LeafFieldList)fields[0]; + type_length = lcs.length.getUint(); + } + else + { + lu = cast(LeafUnion)ctx.codeView.UDTsByName[scu_name]; + if ( lu !is null && lu.field-0x1000 < ctx.codeView.type_strings.length ) { + Leaf[] fields = ctx.codeView.type_strings[lu.field-0x1000]; + lfl = cast(LeafFieldList)fields[0]; + type_length = lu.length.getUint(); + } + } + if ( lfl is null ) + throw new EvaluationException("invalid struct/class debug symbols"); + + size_t size, + offset; + if ( !ctx.findMember(id, lfl, size, offset, symdata.type) ) + throw new EvaluationException("struct \""~scu_name~"\" has no element \""~id~"\""); + assert ( symdata.type.length > 0 ); + debug(eval) DbgIO.println("member: type=%s size=%d offset=%d", symdata.type, size, offset); + + if ( !symdata.loadByteSlice(offset, offset+size) ) + throw new EvaluationException("invalid offset into struct for member \""~id~"\""); + break; + //--------------------------------------------------------------------------------- + // unsupported + default: + throw new EvaluationException("yet unsupported type "~demangleType(symdata.type)~" in expression"); + } + } + + RefExpr(ctx, symbol, symbols, prefix, symdata); + } + + //------------------------------------------------------------------------- + // [] Operator + //------------------------------------------------------------------------- + "[" !("(%d) Arguments expected after [") + Args !("(%d) ] expected") + "]" + RefExpr + { + if ( symdata is null ) + throw new EvaluationException("Unknown symbol "~prefix); + + SymbolData argdata; + size_t start, end; + Args(ctx, argdata, start, end); + + bool isIndex = argdata is null; + if ( !isIndex && castArrayIndex(argdata.getData(ctx), argdata.type, start) ) { + isIndex = true; + end = start+1; + } + + switch ( symdata.type[0] ) + { + //--------------------------------------------------------------------------------- + // primitive types + case 'v': case 'b': case 'x': case 'g': case 'h': case 's': case 't': case 'i': case 'k': case 'l': case 'm': case 'f': + case 'd': case 'e': case 'o': case 'p': case 'j': case 'q': case 'r': case 'c': case 'a': case 'u': case 'w': + // pointers, classes/structs + case 'P': case 'C': case 'S': + throw new EvaluationException( + "Type mismatch - unexpected [] operator after expression of type "~demangleType(symdata.type) + ); + //--------------------------------------------------------------------------------- + // static arrays + case 'G': + if ( !isIndex ) + throw new EvaluationException("Cannot access static array with index type "~demangleType(argdata.type)); + + symdata.type = symdata.type[1..$]; + size_t count = parseNumber(symdata.type); + assert(symdata.type.length>0); + + if ( end-start > 1 ) + { + if ( end > count ) + throw new EvaluationException("Array index out of bounds: "~.toString(start)~".."~.toString(end)~" ($="~.toString(count)~")"); + size_t size = ctx.codeView.sizeofMangled(symdata.type); + if ( symdata.defered_load ) { + symdata.ptr += start * size; + symdata.len = (end-start) * size; + } + else + symdata.data = symdata.data[start*size .. end*size]; + symdata.type = "G"~.toString(end-start)~symdata.type; + } + else + { + if ( !symdata.loadElementSlice(start, end, ctx.codeView) ) + throw new EvaluationException("Array index out of bounds: "~.toString(start)~".."~.toString(end)~" ($="~.toString(count)~")"); + } + break; + //--------------------------------------------------------------------------------- + // dynamic arrays + case 'A': + if ( !isIndex ) + throw new EvaluationException("Cannot access dynamic array with index type "~demangleType(argdata.type)); + + ubyte[] data = symdata.getData(ctx); + if ( data.length < 8 ) + throw new EvaluationException("Subexpression evaluated to empty data"); + + if ( end-start > 1 ) + { + if ( end > (cast(size_t[])data)[0] ) + throw new EvaluationException("Array index out of bounds: "~.toString(start)~".."~.toString(end)~" ($="~.toString(symdata.len)~")"); + size_t size = ctx.codeView.sizeofMangled(symdata.type[1..$]); + (cast(size_t[])data)[1] += start * size, + (cast(size_t[])data)[0] = end-start; + } + else + { + symdata.type = symdata.type[1..$]; + assert(symdata.type.length>0); + symdata.ptr = (cast(size_t[])data)[1]; + symdata.len = (cast(size_t[])data)[0] * ctx.codeView.sizeofMangled(symdata.type); + symdata.defered_load = true; + + if ( !symdata.loadElementSlice(start, end, ctx.codeView) ) + throw new EvaluationException("Array index out of bounds: "~.toString(start)~".."~.toString(end)~" ($="~.toString(symdata.len)~")"); + } + break; + //--------------------------------------------------------------------------------- + // associative arrays + case 'H': + int i; + for ( i = 1; i < symdata.type.length && std.string.find(lowercase, symdata.type[i]) < 0; ++i ) {} + string key_type = symdata.type[1..i+1], + val_type = symdata.type[i+1..$]; + size_t val_tsize = ctx.codeView.sizeofMangled(val_type); + TypeInfo key_ti = TypeInfoFromMangled(key_type); + + aaA* loadaaA(void* ptr) + { + if ( ptr is null ) + return null; + ubyte[] data; + data.length = aaA.sizeof+key_ti.tsize+val_tsize; + if ( data.length != ctx.process.readProcessMemory(cast(uint)ptr, data.ptr, data.length) ) + return null; + aaA* a = cast(aaA*)data.ptr; + if ( std.string.find(lowercase, key_type[0]) < 0 ) + switch ( key_type[0] ) + { + case 'A': + ubyte[] tmp = *cast(ubyte[]*)(a+1); + if ( tmp.length > ctx.process.MEMCHECK_MIN && ctx.process.isInvalidMem(cast(size_t)tmp.ptr, tmp.length) ) + return null; + data = new ubyte[tmp.length]; + if ( data.length != ctx.process.readProcessMemory(cast(size_t)tmp.ptr, data.ptr, data.length) ) + return null; + *cast(ubyte[]*)(a+1) = data; + break; + case 'P': + break; + default: + throw new EvaluationException("only basic, pointer and array key types are supported, yet"); + } + return a; + } + + ubyte[] findKey(size_t ptr, hash_t hash, ubyte[] key_data) + { + ubyte[] data; + data.length = BB.sizeof; + if ( data.length != ctx.process.readProcessMemory(ptr, data.ptr, data.length) ) + return null; + BB* bb = cast(BB*)data.ptr; + size_t blen = bb.b.length*size_t.sizeof; + debug(eval) DbgIO.println("%d nodes, bb.b.length=%d", bb.nodes, bb.b.length); + + if ( blen > ctx.process.MEMCHECK_MIN && ctx.process.isInvalidMem(cast(size_t)bb.b.ptr, blen) ) + return null; + data = new ubyte[blen]; + if ( data.length != ctx.process.readProcessMemory(cast(uint)bb.b.ptr, data.ptr, data.length) ) + return null; + bb.b = cast(aaA*[])data; + + uint i = hash % bb.b.length; + debug(eval) DbgIO.println("start index=%d", i); + aaA* a = loadaaA(bb.b[i]); + while ( a !is null ) + { + if ( hash == a.hash ) + { + debug(eval) DbgIO.println("equal 0x%x", a.hash); + auto cmp = key_ti.compare(key_data.ptr, a+1); + debug(eval) DbgIO.println("%s: %d == %d -> %d", key_ti, *cast(uint*)key_data.ptr, *cast(uint*)(a+1), cmp); + if ( cmp == 0 ) + return ((cast(ubyte*)(a+1))+key_ti.tsize)[0 .. val_tsize]; + a = cmp < 0 ? loadaaA(a.left) : loadaaA(a.right); + } + else { + debug(eval) DbgIO.println("not equal 0x%x", a.hash); + a = hash < a.hash ? loadaaA(a.left) : loadaaA(a.right); + } + } + return null; + } + + if ( key_type != argdata.type ) + throw new EvaluationException("Invalid key type for associative array. Expected "~demangleType(key_type)~" found "~demangleType(argdata.type)); + TypeInfo ti = TypeInfoFromMangled(argdata.type); + hash_t index_hash = ti.getHash(argdata.data.ptr); + + debug(eval) DbgIO.println("searching, hash=0x%x", index_hash); + ubyte[] data = symdata.getData(ctx); + symdata.data = findKey((cast(size_t[])data)[0], index_hash, argdata.getData(ctx)); + symdata.type = val_type; + break; + //--------------------------------------------------------------------------------- + // unsupported + default: + throw new EvaluationException("yet unsupported type "~demangleType(symdata.type)~" in expression"); + } + + RefExpr(ctx, symbol, null, null, symdata); + } + + //------------------------------------------------------------------------- + // end of refexpr + //------------------------------------------------------------------------- + epsilon + { + if ( symdata is null ) + throw new EvaluationException("Unknown symbol "~prefix); + } +} + +Args(EvaluationContext ctx, out SymbolData argdata, out size_t start, out size_t end) +{ + Expr + ".." !("(%d) Second slice argument expected") + Expr=Expr2 + { + SymbolData arg1, arg2; + Expr(ctx, arg1); + Expr2(ctx, arg2); + + bool isIndex = castArrayIndex(arg1.getData(ctx), arg1.type, start); + isIndex = isIndex && castArrayIndex(arg2.getData(ctx), arg2.type, end); + if ( !isIndex ) + throw new EvaluationException("Slices may only have integer indeces, not "~demangleType(arg1.type)~".."~demangleType(arg2.type)); + } + + Expr + { Expr(ctx, argdata); } +} + + +/************************************************************************************************** + Registers +**************************************************************************************************/ +Register(EvaluationContext ctx, out SymbolData symdata) +{ + RegName + { + string name; + ubyte width; + RegName(name, width); + + CONTEXT threadCtx; + uint context_flags; + context_flags |= CONTEXT_FULL; + context_flags |= CONTEXT_FLOATING_POINT; + context_flags |= CONTEXT_EXTENDED_REGISTERS; + if ( !ctx.getContext(threadCtx, context_flags) ) + throw new EvaluationException("Couldn't get main thread's context"); + + ubyte* ptr; + switch ( name[1..$] ) + { + case "ax": + case "eax": + case "al": ptr = cast(ubyte*)&threadCtx.Eax; break; + case "ah": ptr = (cast(ubyte*)&threadCtx.Eax)+1; break; + case "bx": + case "ebx": + case "bl": ptr = cast(ubyte*)&threadCtx.Ebx; break; + case "bh": ptr = (cast(ubyte*)&threadCtx.Ebx)+1; break; + case "cx": + case "ecx": + case "cl": ptr = cast(ubyte*)&threadCtx.Ecx; break; + case "ch": ptr = (cast(ubyte*)&threadCtx.Ecx)+1; break; + case "dx": + case "edx": + case "dl": ptr = cast(ubyte*)&threadCtx.Edx; break; + case "dh": ptr = (cast(ubyte*)&threadCtx.Edx)+1; break; + case "edi": + case "di": ptr = cast(ubyte*)&threadCtx.Edi; break; + case "esi": + case "si": ptr = cast(ubyte*)&threadCtx.Esi; break; + case "ebp": + case "bp": ptr = cast(ubyte*)&threadCtx.Ebp; break; + case "esp": + case "sp": ptr = cast(ubyte*)&threadCtx.Esp; break; + case "eip": ptr = cast(ubyte*)&threadCtx.Eip; break; + case "efl": ptr = cast(ubyte*)&threadCtx.EFlags; break; + case "cs": ptr = cast(ubyte*)&threadCtx.SegCs; break; + case "ds": ptr = cast(ubyte*)&threadCtx.SegDs; break; + case "es": ptr = cast(ubyte*)&threadCtx.SegEs; break; + case "fs": ptr = cast(ubyte*)&threadCtx.SegFs; break; + case "gs": ptr = cast(ubyte*)&threadCtx.SegGs; break; + default: + int i = name[$-1]-'0'; + if ( name[0..2] == "st" ) + ptr = cast(ubyte*)&((cast(real[])threadCtx.FloatSave.RegisterArea)[i]); + else if ( name[0..2] == "mm" ) + ptr = cast(ubyte*)&((cast(long[])threadCtx.ExtendedRegisters)[4+i*2]); + else if ( name[0..3] == "xmm" ) + ptr = cast(ubyte*)&((cast(long[])threadCtx.ExtendedRegisters)[20+i*2]); + else + assert(0); + } + + symdata = new SymbolData; + switch ( width ) + { + case 8: + symdata.type = "h"; + symdata.data = ptr[0..1].dup; + break; + case 16: + symdata.type = "t"; + symdata.data = ptr[0..2].dup; + break; + case 32: + symdata.type = "k"; + symdata.data = ptr[0..4].dup; + break; + case 64: + symdata.type = "m"; + symdata.data = ptr[0..8].dup; + break; + case 80: + symdata.type = "e"; + symdata.data = ptr[0..10].dup; + break; + case 128: + symdata.type = "G4k"; + symdata.data = ptr[0..16].dup; + break; + default: + assert(0, "unhandled register width "~.toString(width)); + } + } +} + +RegName(out string name, out ubyte width) +{ + regexp("#(e[abcd]x|e[ds]i|e[bs]p|eip|efl)") + { name = _ST_match; width = 32; } + + regexp("#([abcd]x|[ds]i|[bs]p|(cdefgs)s)") + { name = _ST_match; width = 16; } + + regexp("#[abcd][hl]") + { name = _ST_match; width = 8; } + + regexp("#st[0-7]") + { name = _ST_match; width = 8*real.sizeof; } + + regexp("#mm[0-7]") + { name = _ST_match; width = 64; } + + regexp("#xmm[0-7]") + { name = _ST_match; width = 128; } +} + + +/************************************************************************************************** + Casts +**************************************************************************************************/ +Cast(EvaluationContext ctx, ref SymbolData symdata) +{ + "cast" !("(%d) ( expected") + "(" !("(%d) Type expected") + Type !("(%d) ) expected") + ")" + { + symdata.type = ""; + Type(ctx, symdata.type); + if ( symdata.type.length <= 0 ) + throw new EvaluationException("Unknown type in cast"); + } + + epsilon; +} + +Type(EvaluationContext ctx, ref string mangled) +{ + BaseType QuantList + { + string unmangled; + BaseType(ctx, unmangled); + + switch ( unmangled ) + { + case "void": mangled = "v"; break; + case "bool": mangled = "b"; break; + case "byte": mangled = "g"; break; + case "ubyte": mangled = "h"; break; + case "char": mangled = "a"; break; + case "wchar": mangled = "u"; break; + case "dchar": mangled = "w"; break; + case "short": mangled = "s"; break; + case "ushort": mangled = "t"; break; + case "int": mangled = "i"; break; + case "uint": mangled = "k"; break; + case "long": mangled = "l"; break; + case "ulong": mangled = "m"; break; + case "float": mangled = "f"; break; + case "double": mangled = "d"; break; + case "real": mangled = "e"; break; + default: + Leaf lf; + if ( (unmangled in ctx.codeView.UDTsByName) is null ) + { + foreach ( un, l; ctx.codeView.UDTsByName ) + { + if ( std.string.find(un, "."~unmangled) > 0 ) { + lf = l; + break; + } + } + } + else + lf = ctx.codeView.UDTsByName[unmangled]; + + if ( lf !is null ) + { + string fqn; + switch ( lf.leaf_index ) + { + case LF_CLASS_16t: + mangled = "C"; + fqn = (cast(LeafClassStruc)lf).name; + break; + case LF_STRUCTURE_16t: + mangled = "S"; + fqn = (cast(LeafClassStruc)lf).name; + break; + case LF_ENUM_16t: + mangled = "E"; + fqn = (cast(LeafEnum)lf).name; + break; + default: + assert(0); + } + string[] parts = std.string.split(fqn, "."); + foreach ( p; parts ) { + mangled ~= .toString(p.length); + mangled ~= p; + } + } + else + throw new EvaluationException("Unknown BaseType "~unmangled); + break; + } + + QuantList(ctx, mangled); + } +} + +BaseType(EvaluationContext ctx, out string type) +{ + FQNIdent TplParams + { + FQNIdent(type); + string str; + TplParams(ctx, str); + type ~= str; + } +} + +QuantList(EvaluationContext ctx, ref string mangled) +{ + Quantifier QuantList + { + Quantifier(ctx, mangled); + QuantList(ctx, mangled); + } + + epsilon; +} + +Quantifier(EvaluationContext ctx, ref string mangled) +{ + "*" + { mangled = "P"~mangled; } + + "[" "]" + { mangled = "A"~mangled; } + + "[" + Integer !("(%d) ] expected") + "]" + { + ulong len; + Integer(len); + mangled = "G"~.toString(len)~mangled; + } + + "[" !("(%d) ], type or size expected") + Type !("(%d) ] expected") + "]" + { + string index_mangled; + Type(ctx, index_mangled); + mangled = "H"~index_mangled~mangled; + } +} + +TplParams(EvaluationContext ctx, out string str) +{ + "!" !("(%d) ( expected") + "(" !("(%d) Template parameters expected") + TplParam + TplParams2 !("(%d) ) expected") + ")" + { + string tmp; + TplParam(ctx, tmp); + str = "!("~tmp; + TplParams2(ctx, tmp); + str ~= tmp~")"; + } + + epsilon; +} + +TplParams2(EvaluationContext ctx, out string str) +{ + "," !("(%d) Template parameter expected") + TplParam + TplParams2 + { + TplParam(ctx, str); + string tmp; + TplParams2(ctx, tmp); + str ~= tmp; + } + + epsilon; +} + +TplParam(EvaluationContext ctx, out string str) +{ + Type { Type(ctx, str); } + StrLit { StrLit(str); } +} + + +/************************************************************************************************** + Terminals +**************************************************************************************************/ +Lit(out SymbolData litdata) +{ + Sign Integer IntegerSuffix + { + litdata = new SymbolData; + IntegerSuffix(litdata.type); + ulong val; + Integer(val); + + if ( val > 0x7fffffffffffffff ) + litdata.type = "m"; + else if ( val > 0xffffffff ) + litdata.type = litdata.type[0]=='i'||litdata.type[0]=='l'?"l":"m"; + else if ( val > 0x7fffffff && litdata.type[0] == 'i' ) + litdata.type = "k"; + + litdata.data = (cast(ubyte*)&val)[0 .. (litdata.type[0] == 'k' || litdata.type[0] == 'i')?uint.sizeof:ulong.sizeof].dup; + Sign(litdata); + } + + // String + regexp("\"(([^\"\\\\]*(\\\\(['\"\\?\\\\abfnrtv]|(x[0-9a-fA-F]{2})|(u[0-9a-fA-F]{4})|(U[0-9a-fA-F]{8})))?)*)\"") + { + litdata = new SymbolData; + litdata.type = "Aa"; + litdata.data = cast(ubyte[])_ST_match; + } + + // Char + regexp("'(([^'\\\\]|(\\\\(['\"\\?\\\\abfnrtv]|(x[0-9a-fA-F]{2})|(u[0-9a-fA-F]{4})|(U[0-9a-fA-F]{8})))))'") + { + litdata = new SymbolData; + litdata.type = "a"; + litdata.data = cast(ubyte[])_ST_match[0..1]; + } +} + +StrLit(out string str) +{ + // Integer + Integer + { + ulong val; + Integer(val); + str = .toString(val); + } + + // String + regexp("\"(([^\"\\\\]*(\\\\(['\"\\?\\\\abfnrtv]|(x[0-9a-fA-F]{2})|(u[0-9a-fA-F]{4})|(U[0-9a-fA-F]{8})))?)*)\"") + { str = _ST_match; } + + // Char + regexp("'(([^'\\\\]|(\\\\(['\"\\?\\\\abfnrtv]|(x[0-9a-fA-F]{2})|(u[0-9a-fA-F]{4})|(U[0-9a-fA-F]{8})))))'") + { str = _ST_match; } +} + +Ident(out string id) +{ + regexp("[a-zA-Z_][_a-zA-Z0-9]*") + { id = _ST_match; } +} + +FQNIdent(out string id) +{ + Ident + { Ident(id); } + + FQNIdent "." Ident + { + FQNIdent(id); + string tmp; + Ident(tmp); + id ~= "."~tmp; + } +} + +/************************************************************************************************** + Integers +**************************************************************************************************/ +Integer(out ulong val) +{ + // hex + regexp("0[xX][0-9a-fA-F_]+") + { + foreach ( b; _ST_match[2..$] ) + { + val <<= 4; + if ( b > 'F' ) + val |= b-'W'; + else if ( b > '9' ) + val |= b-'7'; + else + val |= b-'0'; + } + } + + // binary + regexp("0[bB][01_]+") + { + foreach ( b; _ST_match[2..$] ) + { + val <<= 1; + if ( b == '1' ) + val |= 1; + } + } + + // octal + regexp("0[0-7_]+") + { + foreach ( b; _ST_match[1..$] ) { + val <<= 3; + val |= b-'0'; + } + } + + // decimal + regexp("0|([1-9][0-9_]*)") + { + foreach ( b; _ST_match ) { + val *= 10; + val += b-'0'; + } + } +} + +IntegerSuffix(out string type) +{ + "L" "u" + { type = "m"; } + + "L" "U" + { type = "m"; } + + "u" "L" + { type = "m"; } + + "U" "L" + { type = "m"; } + + "L" + { type = "l"; } + + regexp("[uU]") + { type = "k"; } + + epsilon + { type = "i"; } +} + +Sign(ref SymbolData symdata) +{ + "-" + { + switch ( symdata.type[0] ) + { + case 'i': + *cast(int*)symdata.data.ptr = 0-*cast(int*)symdata.data.ptr; + break; + case 'k': + *cast(uint*)symdata.data.ptr = 0-*cast(uint*)symdata.data.ptr; + break; + case 'l': + *cast(long*)symdata.data.ptr = 0-*cast(long*)symdata.data.ptr; + break; + case 'm': + *cast(ulong*)symdata.data.ptr = 0-*cast(ulong*)symdata.data.ptr; + break; + default: + assert(0); + } + } + + epsilon; +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/expression/expression_apd.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/expression/expression_apd.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,4376 @@ +// Written in the D programming language + +/* + * This file has been automatically generated by APaGeD v0.4.2 beta - Attributed Parser Generator for D. + * + * Sections generated from custom input are marked as "generated code" and + * are subject to the terms and conditions stated in one of these sections. + * The remaining sections are part of the APaGeD package and subject + * to the terms and conditions of the corresponding license. + * + * Attributed Parser Generator for D + * Copyright (c) 2007 Jascha Wetzel. All rights reserved + * License: Artistic License 2.0 + */ + +// generated code start + +#line 12 "D:\src\ddbg_continued\src\expression\expression.apd" + +module expression.expression_apd; + +import codeview.decl; +import codeview.codeview; +import expression.evaluationcontext; +import expression.datahandler; +import util; + +//import internal.aaA; + + struct aaA + { + aaA *left; + aaA *right; + hash_t hash; + /* key */ + /* value */ + } + + struct BB + { + aaA*[] b; + size_t nodes; // total number of aaA nodes + } + +import std.demangle; +import std.stdio; + +import win32.winnt; + +/********************************************************************************************** + +**********************************************************************************************/ +bool castArrayIndex(ubyte[] data, string type, out size_t index) +{ + assert(type.length>0); + switch ( type[0] ) + { + case 'a': + if ( *cast(char*)data.ptr < 0 ) + throw new EvaluationException("Cannot access array with negative index"); + case 'h': + index = *cast(ubyte*)data.ptr; + return true; + case 's': + if ( *cast(short*)data.ptr < 0 ) + throw new EvaluationException("Cannot access array with negative index"); + case 't': + index = *cast(ushort*)data.ptr; + return true; + case 'i': + if ( *cast(int*)data.ptr < 0 ) + throw new EvaluationException("Cannot access array with negative index"); + case 'k': + index = *cast(uint*)data.ptr; + return true; + case 'l': + if ( *cast(long*)data.ptr < 0 ) + throw new EvaluationException("Cannot access array with negative index"); + case 'm': + index = cast(size_t)*cast(ulong*)data.ptr; + return true; + default: + } + return false; +} + +/********************************************************************************************** + +**********************************************************************************************/ +// debug = parser; +unittest +{ + bool test(string expr) + { + SyntaxTree* root; + bool success; + try success = parse(expr, root); + catch ( ParserException e ) { + debug(parser) writefln("%s", e.toString); + return false; + } + return success; + } + + assert(test("a.bc")); + assert(test("bc[def..ghij]")); + assert(!test("\"a\\\"\\\u2f85qwe '\"")); + assert(test("a.bc[def..ghij].klmno.pqrstu[0..'a'][\"a\\\"\\u2f85qwe '\"]")); + assert(!test("a.bc.[def..ghij]")); + assert(!test("[def..ghij]")); + assert(!test("a.")); + assert(test("asdf[0][i].qwer")); + assert(test("cast(uint)asdf")); + assert(test("(cast(mystruct)asdf).qwer")); + assert(test("(cast(string[])asdf)[0][2..13]")); + assert(test("(cast(char[string])asdf)[\"qwer\"]")); + assert(!test("(cast(mystruct)asdf).(cast(char[][])qwer)[0]")); + assert(test("cast(float)asdf.qwer")); + assert(!test("cast.qwer")); + assert(!test("cast(uint).qwer")); + assert(!test("cast(asdf.qwer).qwer")); + assert(test("(cast(string)mystruct.tzui)[0..4]")); + assert(test("cast(Vec!(float,3))mystruct")); + assert(test("cast(Vec!(float,3,\"asdf\",Vec!(float)))mystruct")); + assert(test("vertices[inds[10193]].y")); + assert(test("*cast(uint*)#eax")); +} +// generated code end + +version(Tango) +{ + +} +else +{ + import std.string; + debug import std.stdio; +} + +/************************************************************************************************** + Semantic Analyzer +**************************************************************************************************/ + +class SemanticException : Exception +{ + this(string msg) + { + super(msg); + } +} + +struct SyntaxTree +{ + uint _ST_rule, + _ST_line_number, + _ST_column_number; + debug + { + string _ST_node_name, + _ST_match, + _ST_match_ws; + SyntaxTree*[] _ST_children; + } + else + { + union + { + struct { + string _ST_match, + _ST_match_ws; + } + SyntaxTree*[] _ST_children; + } + } + + debug + { + SyntaxTree* parent; + + string indent() + { + string str; + for ( SyntaxTree* n = parent; n !is null; n = n.parent ) + str ~= " "; + return str; + } + + void print(string indent = "") + { + version(Tango) + Stdout.format("{}{}{}", indent, _ST_node_name, _ST_rule); + else + writef("%s%s%d", indent, _ST_node_name, _ST_rule); + if ( _ST_children.length == 0 ) + { + version(Tango) + Stdout.formatln(" (\"{}\")", _ST_match); + else + writefln(" (\"%s\")", _ST_match); + } + else + { + version(Tango) + Stdout.newline; + else + writefln; + } + foreach ( c; _ST_children ) + c.print(indent~" "); + } + } + + void opCatAssign(SyntaxTree* n) + { + _ST_children ~= n; + } + + // augmented semantic code +// generated code start + alias _S_Expr Expr; +void _S_Expr(EvaluationContext ctx, out SymbolData symdata) +{ + + switch ( _ST_rule ) + { + case 0: + debug assert(_ST_children.length == 3); + void delegate(EvaluationContext ctx, ref SymbolData symdata) Deref = &_ST_children[0]._S_Deref; + void delegate(EvaluationContext ctx, ref SymbolData symdata) Cast = &_ST_children[1]._S_Cast; + void delegate(EvaluationContext ctx, out SymbolData symdata) DotChain = &_ST_children[2]._S_DotChain; + +#line 136 "D:\src\ddbg_continued\src\expression\expression.apd" + + DotChain(ctx, symdata); + Cast(ctx, symdata); + Deref(ctx, symdata); + break; + + default: + assert(0); + } +} +void _S_Deref(EvaluationContext ctx, ref SymbolData symdata) +{ + + switch ( _ST_rule ) + { + case 1: + debug assert(_ST_children.length == 1); + void delegate(EvaluationContext ctx, ref SymbolData symdata) Deref = &_ST_children[0]._S_Deref; + +#line 146 "D:\src\ddbg_continued\src\expression\expression.apd" + + if ( symdata is null ) + throw new EvaluationException("Invalid data for dereferencing"); + if ( symdata.type[0] != 'P' ) + throw new EvaluationException("Cannot dereference non-pointer of type "~demangleType(symdata.type)); + symdata.type = symdata.type[1..$]; + assert(symdata.type.length>0); + ubyte[] data = symdata.getData(ctx); + if ( data.length != size_t.sizeof ) { + throw new EvaluationException("Invalid pointer data size = "~.toString(data.length)); + } + symdata.ptr = (cast(size_t[])data)[0]; + symdata.len = ctx.codeView.sizeofMangled(symdata.type); + symdata.defered_load = true; + + Deref(ctx, symdata); + break; + case 2: + debug assert(_ST_children.length == 0); + break; + + default: + assert(0); + } +} +void _S_DotChain(EvaluationContext ctx, out SymbolData symdata) +{ + + switch ( _ST_rule ) + { + case 3: + debug assert(_ST_children.length == 1); + void delegate(EvaluationContext ctx, out SymbolData symdata) Register = &_ST_children[0]._S_Register; + +#line 170 "D:\src\ddbg_continued\src\expression\expression.apd" + + Register(ctx, symdata); + break; + case 4: + debug assert(_ST_children.length == 2); + void delegate(EvaluationContext ctx, out SymbolData symdata) Expr = &_ST_children[0]._S_Expr; + void delegate(EvaluationContext ctx, NamedSymbol symbol, NamedSymbol[] symbols, string prefix, ref SymbolData symdata) RefExpr = &_ST_children[1]._S_RefExpr; + +#line 178 "D:\src\ddbg_continued\src\expression\expression.apd" + + Expr(ctx, symdata); + RefExpr(ctx, null, null, "", symdata); + break; + case 5: + debug assert(_ST_children.length == 2); + void delegate(out string id) Ident = &_ST_children[0]._S_Ident; + void delegate(EvaluationContext ctx, NamedSymbol symbol, NamedSymbol[] symbols, string prefix, ref SymbolData symdata) RefExpr = &_ST_children[1]._S_RefExpr; + +#line 185 "D:\src\ddbg_continued\src\expression\expression.apd" + + string id; + Ident(id); + + NamedSymbol[] symbols; + NamedSymbol symbol = ctx.findSymbol(id, symbols); + if ( symbol !is null ) + symdata = ctx.loadSymbolData(symbol); + else + debug DbgIO.println("symbol %s not found", id); + RefExpr(ctx, symbol, symbols, id, symdata); + break; + case 6: + debug assert(_ST_children.length == 1); + void delegate(out SymbolData litdata) Lit = &_ST_children[0]._S_Lit; + +#line 199 "D:\src\ddbg_continued\src\expression\expression.apd" + Lit(symdata); + break; + + default: + assert(0); + } +} +void _S_RefExpr(EvaluationContext ctx, NamedSymbol symbol, NamedSymbol[] symbols, string prefix, ref SymbolData symdata) +{ + + switch ( _ST_rule ) + { + case 7: + debug assert(_ST_children.length == 2); + void delegate(out string id) Ident = &_ST_children[0]._S_Ident; + void delegate(EvaluationContext ctx, NamedSymbol symbol, NamedSymbol[] symbols, string prefix, ref SymbolData symdata) RefExpr = &_ST_children[1]._S_RefExpr; + +#line 208 "D:\src\ddbg_continued\src\expression\expression.apd" + + string id; + Ident(id); + prefix ~= "."~id; + + if ( symdata is null ) + { + symbol = ctx.findSymbol(prefix, symbols); + if ( symbol !is null ) + symdata = ctx.loadSymbolData(symbol); + } + else + { + switch ( symdata.type[0] ) + { + //--------------------------------------------------------------------------------- + // primitive types + case 'v': case 'b': case 'x': case 'g': case 'h': case 's': case 't': case 'i': case 'k': case 'l': case 'm': case 'f': + case 'd': case 'e': case 'o': case 'p': case 'j': case 'q': case 'r': case 'c': case 'a': case 'u': case 'w': + throw new EvaluationException( + "Type mismatch - unexpected . operator in expression of type "~demangleType(symdata.type) + ); + //--------------------------------------------------------------------------------- + // array properties + case 'G': + switch ( id ) + { + case "length": + symdata.type = symdata.type[1..$]; + size_t len = parseNumber(symdata.type); + symdata.type = "k"; + symdata.data = (cast(ubyte*)&len)[0..size_t.sizeof].dup; + symdata.defered_load = false; + break; + case "ptr": + // TODO: can this always be guaranteed? + assert(symdata.defered_load); + size_t ptr = symdata.ptr; + symdata.data = (cast(ubyte*)&ptr)[0..size_t.sizeof]; + symdata.defered_load = false; + symdata.type = symdata.type[1..$]; + parseNumber(symdata.type); + symdata.type = "P"~symdata.type; + break; + default: + throw new EvaluationException( + "Type mismatch - invalid property "~id~" after expression of type "~demangleType(symdata.type) + ); + } + break; + case 'A': + switch ( id ) + { + case "length": + ubyte[] data = symdata.getData(ctx); + symdata.type = "k"; + size_t len = (cast(size_t[])data)[0]; + symdata.data = (cast(ubyte*)&len)[0..size_t.sizeof].dup; + symdata.defered_load = false; + break; + case "ptr": + ubyte[] data = symdata.getData(ctx); + symdata.type = "k"; + size_t len = (cast(size_t[])data)[1]; + symdata.data = (cast(ubyte*)&len)[0..size_t.sizeof].dup; + symdata.defered_load = false; + break; + default: + throw new EvaluationException( + "Type mismatch - invalid property "~id~" after expression of type "~demangleType(symdata.type) + ); + } + break; + case 'H': + switch ( id ) + { + case "length": + ubyte[] data = symdata.getData(ctx); + symdata.ptr = *cast(size_t*)data.ptr; + symdata.len = BB.sizeof; + symdata.defered_load = true; + data = symdata.getData(ctx); + BB* bb = cast(BB*)data.ptr; + + symdata.type = "k"; + symdata.data = (cast(ubyte*)&bb.nodes)[0..size_t.sizeof].dup; + symdata.defered_load = false; + break; + default: + throw new EvaluationException( + "Type mismatch - invalid property "~id~" after expression of type "~demangleType(symdata.type) + ); + } + break; + //--------------------------------------------------------------------------------- + // references to structs/classes + case 'P': + symdata.type = symdata.type[1..$]; + if ( symdata.type[0] != 'C' && symdata.type[0] != 'S' ) + { + throw new EvaluationException( + "Type mismatch - unexpected . operator after expression of type "~demangleType("P"~symdata.type) + ); + } + + ubyte[] data = symdata.getData(ctx); + if ( symdata.data.length <= 0 ) + throw new EvaluationException("Subexpression evaluated to empty data"); + symdata.ptr = (cast(uint[])data)[0]; + symdata.len = ctx.codeView.sizeofMangled(symdata.type); + symdata.defered_load = true; + + if ( symdata.ptr == 0 ) + throw new EvaluationException("pointer is null"); + // fall through to struct handling + + //--------------------------------------------------------------------------------- + // classes/structs + case 'C': + case 'S': + symdata.type = symdata.type[1..$]; + string scu_name = demangleNameSkip(symdata.type); + assert ( symdata.type.length <= 0 ); + if ( (scu_name in ctx.codeView.UDTsByName) is null ) + throw new EvaluationException("unknown type \""~scu_name~"\""); + + LeafClassStruc lcs = cast(LeafClassStruc)ctx.codeView.UDTsByName[scu_name]; + LeafUnion lu; + LeafFieldList lfl; + uint type_length; + + if ( lcs !is null && lcs.field-0x1000 < ctx.codeView.type_strings.length ) { + Leaf[] fields = ctx.codeView.type_strings[lcs.field-0x1000]; + lfl = cast(LeafFieldList)fields[0]; + type_length = lcs.length.getUint(); + } + else + { + lu = cast(LeafUnion)ctx.codeView.UDTsByName[scu_name]; + if ( lu !is null && lu.field-0x1000 < ctx.codeView.type_strings.length ) { + Leaf[] fields = ctx.codeView.type_strings[lu.field-0x1000]; + lfl = cast(LeafFieldList)fields[0]; + type_length = lu.length.getUint(); + } + } + if ( lfl is null ) + throw new EvaluationException("invalid struct/class debug symbols"); + + size_t size, + offset; + if ( !ctx.findMember(id, lfl, size, offset, symdata.type) ) + throw new EvaluationException("struct \""~scu_name~"\" has no element \""~id~"\""); + assert ( symdata.type.length > 0 ); + debug(eval) DbgIO.println("member: type=%s size=%d offset=%d", symdata.type, size, offset); + + if ( !symdata.loadByteSlice(offset, offset+size) ) + throw new EvaluationException("invalid offset into struct for member \""~id~"\""); + break; + //--------------------------------------------------------------------------------- + // unsupported + default: + throw new EvaluationException("yet unsupported type "~demangleType(symdata.type)~" in expression"); + } + } + + RefExpr(ctx, symbol, symbols, prefix, symdata); + break; + case 8: + debug assert(_ST_children.length == 2); + void delegate(EvaluationContext ctx, out SymbolData argdata, out size_t start, out size_t end) Args = &_ST_children[0]._S_Args; + void delegate(EvaluationContext ctx, NamedSymbol symbol, NamedSymbol[] symbols, string prefix, ref SymbolData symdata) RefExpr = &_ST_children[1]._S_RefExpr; + +#line 383 "D:\src\ddbg_continued\src\expression\expression.apd" + + if ( symdata is null ) + throw new EvaluationException("Unknown symbol "~prefix); + + SymbolData argdata; + size_t start, end; + Args(ctx, argdata, start, end); + + bool isIndex = argdata is null; + if ( !isIndex && castArrayIndex(argdata.getData(ctx), argdata.type, start) ) { + isIndex = true; + end = start+1; + } + + switch ( symdata.type[0] ) + { + //--------------------------------------------------------------------------------- + // primitive types + case 'v': case 'b': case 'x': case 'g': case 'h': case 's': case 't': case 'i': case 'k': case 'l': case 'm': case 'f': + case 'd': case 'e': case 'o': case 'p': case 'j': case 'q': case 'r': case 'c': case 'a': case 'u': case 'w': + // pointers, classes/structs + case 'P': case 'C': case 'S': + throw new EvaluationException( + "Type mismatch - unexpected [] operator after expression of type "~demangleType(symdata.type) + ); + //--------------------------------------------------------------------------------- + // static arrays + case 'G': + if ( !isIndex ) + throw new EvaluationException("Cannot access static array with index type "~demangleType(argdata.type)); + + symdata.type = symdata.type[1..$]; + size_t count = parseNumber(symdata.type); + assert(symdata.type.length>0); + + if ( end-start > 1 ) + { + if ( end > count ) + throw new EvaluationException("Array index out of bounds: "~.toString(start)~".."~.toString(end)~" ($="~.toString(count)~")"); + size_t size = ctx.codeView.sizeofMangled(symdata.type); + if ( symdata.defered_load ) { + symdata.ptr += start * size; + symdata.len = (end-start) * size; + } + else + symdata.data = symdata.data[start*size .. end*size]; + symdata.type = "G"~.toString(end-start)~symdata.type; + } + else + { + if ( !symdata.loadElementSlice(start, end, ctx.codeView) ) + throw new EvaluationException("Array index out of bounds: "~.toString(start)~".."~.toString(end)~" ($="~.toString(count)~")"); + } + break; + //--------------------------------------------------------------------------------- + // dynamic arrays + case 'A': + if ( !isIndex ) + throw new EvaluationException("Cannot access dynamic array with index type "~demangleType(argdata.type)); + + ubyte[] data = symdata.getData(ctx); + if ( data.length < 8 ) + throw new EvaluationException("Subexpression evaluated to empty data"); + + if ( end-start > 1 ) + { + if ( end > (cast(size_t[])data)[0] ) + throw new EvaluationException("Array index out of bounds: "~.toString(start)~".."~.toString(end)~" ($="~.toString(symdata.len)~")"); + size_t size = ctx.codeView.sizeofMangled(symdata.type[1..$]); + (cast(size_t[])data)[1] += start * size, + (cast(size_t[])data)[0] = end-start; + } + else + { + symdata.type = symdata.type[1..$]; + assert(symdata.type.length>0); + symdata.ptr = (cast(size_t[])data)[1]; + symdata.len = (cast(size_t[])data)[0] * ctx.codeView.sizeofMangled(symdata.type); + symdata.defered_load = true; + + if ( !symdata.loadElementSlice(start, end, ctx.codeView) ) + throw new EvaluationException("Array index out of bounds: "~.toString(start)~".."~.toString(end)~" ($="~.toString(symdata.len)~")"); + } + break; + //--------------------------------------------------------------------------------- + // associative arrays + case 'H': + int i; + for ( i = 1; i < symdata.type.length && std.string.find(lowercase, symdata.type[i]) < 0; ++i ) {} + string key_type = symdata.type[1..i+1], + val_type = symdata.type[i+1..$]; + size_t val_tsize = ctx.codeView.sizeofMangled(val_type); + TypeInfo key_ti = TypeInfoFromMangled(key_type); + + aaA* loadaaA(void* ptr) + { + if ( ptr is null ) + return null; + ubyte[] data; + data.length = aaA.sizeof+key_ti.tsize+val_tsize; + if ( data.length != ctx.process.readProcessMemory(cast(uint)ptr, data.ptr, data.length) ) + return null; + aaA* a = cast(aaA*)data.ptr; + if ( std.string.find(lowercase, key_type[0]) < 0 ) + switch ( key_type[0] ) + { + case 'A': + ubyte[] tmp = *cast(ubyte[]*)(a+1); + if ( tmp.length > ctx.process.MEMCHECK_MIN && ctx.process.isInvalidMem(cast(size_t)tmp.ptr, tmp.length) ) + return null; + data = new ubyte[tmp.length]; + if ( data.length != ctx.process.readProcessMemory(cast(size_t)tmp.ptr, data.ptr, data.length) ) + return null; + *cast(ubyte[]*)(a+1) = data; + break; + case 'P': + break; + default: + throw new EvaluationException("only basic, pointer and array key types are supported, yet"); + } + return a; + } + + ubyte[] findKey(size_t ptr, hash_t hash, ubyte[] key_data) + { + ubyte[] data; + data.length = BB.sizeof; + if ( data.length != ctx.process.readProcessMemory(ptr, data.ptr, data.length) ) + return null; + BB* bb = cast(BB*)data.ptr; + size_t blen = bb.b.length*size_t.sizeof; + debug(eval) DbgIO.println("%d nodes, bb.b.length=%d", bb.nodes, bb.b.length); + + if ( blen > ctx.process.MEMCHECK_MIN && ctx.process.isInvalidMem(cast(size_t)bb.b.ptr, blen) ) + return null; + data = new ubyte[blen]; + if ( data.length != ctx.process.readProcessMemory(cast(uint)bb.b.ptr, data.ptr, data.length) ) + return null; + bb.b = cast(aaA*[])data; + + uint i = hash % bb.b.length; + debug(eval) DbgIO.println("start index=%d", i); + aaA* a = loadaaA(bb.b[i]); + while ( a !is null ) + { + if ( hash == a.hash ) + { + debug(eval) DbgIO.println("equal 0x%x", a.hash); + auto cmp = key_ti.compare(key_data.ptr, a+1); + debug(eval) DbgIO.println("%s: %d == %d -> %d", key_ti, *cast(uint*)key_data.ptr, *cast(uint*)(a+1), cmp); + if ( cmp == 0 ) + return ((cast(ubyte*)(a+1))+key_ti.tsize)[0 .. val_tsize]; + a = cmp < 0 ? loadaaA(a.left) : loadaaA(a.right); + } + else { + debug(eval) DbgIO.println("not equal 0x%x", a.hash); + a = hash < a.hash ? loadaaA(a.left) : loadaaA(a.right); + } + } + return null; + } + + if ( key_type != argdata.type ) + throw new EvaluationException("Invalid key type for associative array. Expected "~demangleType(key_type)~" found "~demangleType(argdata.type)); + TypeInfo ti = TypeInfoFromMangled(argdata.type); + hash_t index_hash = ti.getHash(argdata.data.ptr); + + debug(eval) DbgIO.println("searching, hash=0x%x", index_hash); + ubyte[] data = symdata.getData(ctx); + symdata.data = findKey((cast(size_t[])data)[0], index_hash, argdata.getData(ctx)); + symdata.type = val_type; + break; + //--------------------------------------------------------------------------------- + // unsupported + default: + throw new EvaluationException("yet unsupported type "~demangleType(symdata.type)~" in expression"); + } + + RefExpr(ctx, symbol, null, null, symdata); + break; + case 9: + debug assert(_ST_children.length == 0); + +#line 568 "D:\src\ddbg_continued\src\expression\expression.apd" + + if ( symdata is null ) + throw new EvaluationException("Unknown symbol "~prefix); + break; + + default: + assert(0); + } +} +void _S_Args(EvaluationContext ctx, out SymbolData argdata, out size_t start, out size_t end) +{ + + switch ( _ST_rule ) + { + case 10: + debug assert(_ST_children.length == 2); + void delegate(EvaluationContext ctx, out SymbolData symdata) Expr = &_ST_children[0]._S_Expr; + void delegate(EvaluationContext ctx, out SymbolData symdata) Expr2 = &_ST_children[1]._S_Expr; + +#line 579 "D:\src\ddbg_continued\src\expression\expression.apd" + + SymbolData arg1, arg2; + Expr(ctx, arg1); + Expr2(ctx, arg2); + + bool isIndex = castArrayIndex(arg1.getData(ctx), arg1.type, start); + isIndex = isIndex && castArrayIndex(arg2.getData(ctx), arg2.type, end); + if ( !isIndex ) + throw new EvaluationException("Slices may only have integer indeces, not "~demangleType(arg1.type)~".."~demangleType(arg2.type)); + break; + case 11: + debug assert(_ST_children.length == 1); + void delegate(EvaluationContext ctx, out SymbolData symdata) Expr = &_ST_children[0]._S_Expr; + +#line 591 "D:\src\ddbg_continued\src\expression\expression.apd" + Expr(ctx, argdata); + break; + + default: + assert(0); + } +} +void _S_Register(EvaluationContext ctx, out SymbolData symdata) +{ + + switch ( _ST_rule ) + { + case 12: + debug assert(_ST_children.length == 1); + void delegate(out string name, out ubyte width) RegName = &_ST_children[0]._S_RegName; + +#line 601 "D:\src\ddbg_continued\src\expression\expression.apd" + + string name; + ubyte width; + RegName(name, width); + + CONTEXT threadCtx; + uint context_flags; + context_flags |= CONTEXT_FULL; + context_flags |= CONTEXT_FLOATING_POINT; + context_flags |= CONTEXT_EXTENDED_REGISTERS; + if ( !ctx.getContext(threadCtx, context_flags) ) + throw new EvaluationException("Couldn't get main thread's context"); + + ubyte* ptr; + switch ( name[1..$] ) + { + case "ax": + case "eax": + case "al": ptr = cast(ubyte*)&threadCtx.Eax; break; + case "ah": ptr = (cast(ubyte*)&threadCtx.Eax)+1; break; + case "bx": + case "ebx": + case "bl": ptr = cast(ubyte*)&threadCtx.Ebx; break; + case "bh": ptr = (cast(ubyte*)&threadCtx.Ebx)+1; break; + case "cx": + case "ecx": + case "cl": ptr = cast(ubyte*)&threadCtx.Ecx; break; + case "ch": ptr = (cast(ubyte*)&threadCtx.Ecx)+1; break; + case "dx": + case "edx": + case "dl": ptr = cast(ubyte*)&threadCtx.Edx; break; + case "dh": ptr = (cast(ubyte*)&threadCtx.Edx)+1; break; + case "edi": + case "di": ptr = cast(ubyte*)&threadCtx.Edi; break; + case "esi": + case "si": ptr = cast(ubyte*)&threadCtx.Esi; break; + case "ebp": + case "bp": ptr = cast(ubyte*)&threadCtx.Ebp; break; + case "esp": + case "sp": ptr = cast(ubyte*)&threadCtx.Esp; break; + case "eip": ptr = cast(ubyte*)&threadCtx.Eip; break; + case "efl": ptr = cast(ubyte*)&threadCtx.EFlags; break; + case "cs": ptr = cast(ubyte*)&threadCtx.SegCs; break; + case "ds": ptr = cast(ubyte*)&threadCtx.SegDs; break; + case "es": ptr = cast(ubyte*)&threadCtx.SegEs; break; + case "fs": ptr = cast(ubyte*)&threadCtx.SegFs; break; + case "gs": ptr = cast(ubyte*)&threadCtx.SegGs; break; + default: + int i = name[$-1]-'0'; + if ( name[0..2] == "st" ) + ptr = cast(ubyte*)&((cast(real[])threadCtx.FloatSave.RegisterArea)[i]); + else if ( name[0..2] == "mm" ) + ptr = cast(ubyte*)&((cast(long[])threadCtx.ExtendedRegisters)[4+i*2]); + else if ( name[0..3] == "xmm" ) + ptr = cast(ubyte*)&((cast(long[])threadCtx.ExtendedRegisters)[20+i*2]); + else + assert(0); + } + + symdata = new SymbolData; + switch ( width ) + { + case 8: + symdata.type = "h"; + symdata.data = ptr[0..1].dup; + break; + case 16: + symdata.type = "t"; + symdata.data = ptr[0..2].dup; + break; + case 32: + symdata.type = "k"; + symdata.data = ptr[0..4].dup; + break; + case 64: + symdata.type = "m"; + symdata.data = ptr[0..8].dup; + break; + case 80: + symdata.type = "e"; + symdata.data = ptr[0..10].dup; + break; + case 128: + symdata.type = "G4k"; + symdata.data = ptr[0..16].dup; + break; + default: + assert(0, "unhandled register width "~.toString(width)); + } + break; + + default: + assert(0); + } +} +void _S_RegName(out string name, out ubyte width) +{ + + switch ( _ST_rule ) + { + case 13: + debug assert(_ST_children.length == 0); + +#line 696 "D:\src\ddbg_continued\src\expression\expression.apd" + name = _ST_match; width = 32; + break; + case 14: + debug assert(_ST_children.length == 0); + +#line 699 "D:\src\ddbg_continued\src\expression\expression.apd" + name = _ST_match; width = 16; + break; + case 15: + debug assert(_ST_children.length == 0); + +#line 702 "D:\src\ddbg_continued\src\expression\expression.apd" + name = _ST_match; width = 8; + break; + case 16: + debug assert(_ST_children.length == 0); + +#line 705 "D:\src\ddbg_continued\src\expression\expression.apd" + name = _ST_match; width = 8*real.sizeof; + break; + case 17: + debug assert(_ST_children.length == 0); + +#line 708 "D:\src\ddbg_continued\src\expression\expression.apd" + name = _ST_match; width = 64; + break; + case 18: + debug assert(_ST_children.length == 0); + +#line 711 "D:\src\ddbg_continued\src\expression\expression.apd" + name = _ST_match; width = 128; + break; + + default: + assert(0); + } +} +void _S_Cast(EvaluationContext ctx, ref SymbolData symdata) +{ + + switch ( _ST_rule ) + { + case 19: + debug assert(_ST_children.length == 1); + void delegate(EvaluationContext ctx, ref string mangled) Type = &_ST_children[0]._S_Type; + +#line 724 "D:\src\ddbg_continued\src\expression\expression.apd" + + symdata.type = ""; + Type(ctx, symdata.type); + if ( symdata.type.length <= 0 ) + throw new EvaluationException("Unknown type in cast"); + break; + case 20: + debug assert(_ST_children.length == 0); + break; + + default: + assert(0); + } +} +void _S_Type(EvaluationContext ctx, ref string mangled) +{ + + switch ( _ST_rule ) + { + case 21: + debug assert(_ST_children.length == 2); + void delegate(EvaluationContext ctx, out string type) BaseType = &_ST_children[0]._S_BaseType; + void delegate(EvaluationContext ctx, ref string mangled) QuantList = &_ST_children[1]._S_QuantList; + +#line 737 "D:\src\ddbg_continued\src\expression\expression.apd" + + string unmangled; + BaseType(ctx, unmangled); + + switch ( unmangled ) + { + case "void": mangled = "v"; break; + case "bool": mangled = "b"; break; + case "byte": mangled = "g"; break; + case "ubyte": mangled = "h"; break; + case "char": mangled = "a"; break; + case "wchar": mangled = "u"; break; + case "dchar": mangled = "w"; break; + case "short": mangled = "s"; break; + case "ushort": mangled = "t"; break; + case "int": mangled = "i"; break; + case "uint": mangled = "k"; break; + case "long": mangled = "l"; break; + case "ulong": mangled = "m"; break; + case "float": mangled = "f"; break; + case "double": mangled = "d"; break; + case "real": mangled = "e"; break; + default: + Leaf lf; + if ( (unmangled in ctx.codeView.UDTsByName) is null ) + { + foreach ( un, l; ctx.codeView.UDTsByName ) + { + if ( std.string.find(un, "."~unmangled) > 0 ) { + lf = l; + break; + } + } + } + else + lf = ctx.codeView.UDTsByName[unmangled]; + + if ( lf !is null ) + { + string fqn; + switch ( lf.leaf_index ) + { + case LF_CLASS_16t: + mangled = "C"; + fqn = (cast(LeafClassStruc)lf).name; + break; + case LF_STRUCTURE_16t: + mangled = "S"; + fqn = (cast(LeafClassStruc)lf).name; + break; + case LF_ENUM_16t: + mangled = "E"; + fqn = (cast(LeafEnum)lf).name; + break; + default: + assert(0); + } + string[] parts = std.string.split(fqn, "."); + foreach ( p; parts ) { + mangled ~= .toString(p.length); + mangled ~= p; + } + } + else + throw new EvaluationException("Unknown BaseType "~unmangled); + break; + } + + QuantList(ctx, mangled); + break; + + default: + assert(0); + } +} +void _S_BaseType(EvaluationContext ctx, out string type) +{ + + switch ( _ST_rule ) + { + case 22: + debug assert(_ST_children.length == 2); + void delegate(out string id) FQNIdent = &_ST_children[0]._S_FQNIdent; + void delegate(EvaluationContext ctx, out string str) TplParams = &_ST_children[1]._S_TplParams; + +#line 812 "D:\src\ddbg_continued\src\expression\expression.apd" + + FQNIdent(type); + string str; + TplParams(ctx, str); + type ~= str; + break; + + default: + assert(0); + } +} +void _S_QuantList(EvaluationContext ctx, ref string mangled) +{ + + switch ( _ST_rule ) + { + case 23: + debug assert(_ST_children.length == 2); + void delegate(EvaluationContext ctx, ref string mangled) Quantifier = &_ST_children[0]._S_Quantifier; + void delegate(EvaluationContext ctx, ref string mangled) QuantList = &_ST_children[1]._S_QuantList; + +#line 823 "D:\src\ddbg_continued\src\expression\expression.apd" + + Quantifier(ctx, mangled); + QuantList(ctx, mangled); + break; + case 24: + debug assert(_ST_children.length == 0); + break; + + default: + assert(0); + } +} +void _S_Quantifier(EvaluationContext ctx, ref string mangled) +{ + + switch ( _ST_rule ) + { + case 25: + debug assert(_ST_children.length == 0); + +#line 834 "D:\src\ddbg_continued\src\expression\expression.apd" + mangled = "P"~mangled; + break; + case 26: + debug assert(_ST_children.length == 0); + +#line 837 "D:\src\ddbg_continued\src\expression\expression.apd" + mangled = "A"~mangled; + break; + case 27: + debug assert(_ST_children.length == 1); + void delegate(out ulong val) Integer = &_ST_children[0]._S_Integer; + +#line 842 "D:\src\ddbg_continued\src\expression\expression.apd" + + ulong len; + Integer(len); + mangled = "G"~.toString(len)~mangled; + break; + case 28: + debug assert(_ST_children.length == 1); + void delegate(EvaluationContext ctx, ref string mangled) Type = &_ST_children[0]._S_Type; + +#line 851 "D:\src\ddbg_continued\src\expression\expression.apd" + + string index_mangled; + Type(ctx, index_mangled); + mangled = "H"~index_mangled~mangled; + break; + + default: + assert(0); + } +} +void _S_TplParams(EvaluationContext ctx, out string str) +{ + + switch ( _ST_rule ) + { + case 29: + debug assert(_ST_children.length == 2); + void delegate(EvaluationContext ctx, out string str) TplParam = &_ST_children[0]._S_TplParam; + void delegate(EvaluationContext ctx, out string str) TplParams2 = &_ST_children[1]._S_TplParams2; + +#line 865 "D:\src\ddbg_continued\src\expression\expression.apd" + + string tmp; + TplParam(ctx, tmp); + str = "!("~tmp; + TplParams2(ctx, tmp); + str ~= tmp~")"; + break; + case 30: + debug assert(_ST_children.length == 0); + break; + + default: + assert(0); + } +} +void _S_TplParams2(EvaluationContext ctx, out string str) +{ + + switch ( _ST_rule ) + { + case 31: + debug assert(_ST_children.length == 2); + void delegate(EvaluationContext ctx, out string str) TplParam = &_ST_children[0]._S_TplParam; + void delegate(EvaluationContext ctx, out string str) TplParams2 = &_ST_children[1]._S_TplParams2; + +#line 881 "D:\src\ddbg_continued\src\expression\expression.apd" + + TplParam(ctx, str); + string tmp; + TplParams2(ctx, tmp); + str ~= tmp; + break; + case 32: + debug assert(_ST_children.length == 0); + break; + + default: + assert(0); + } +} +void _S_TplParam(EvaluationContext ctx, out string str) +{ + + switch ( _ST_rule ) + { + case 33: + debug assert(_ST_children.length == 1); + void delegate(EvaluationContext ctx, ref string mangled) Type = &_ST_children[0]._S_Type; + +#line 893 "D:\src\ddbg_continued\src\expression\expression.apd" + Type(ctx, str); + break; + case 34: + debug assert(_ST_children.length == 1); + void delegate(out string str) StrLit = &_ST_children[0]._S_StrLit; + +#line 894 "D:\src\ddbg_continued\src\expression\expression.apd" + StrLit(str); + break; + + default: + assert(0); + } +} +void _S_Lit(out SymbolData litdata) +{ + + switch ( _ST_rule ) + { + case 35: + debug assert(_ST_children.length == 3); + void delegate(ref SymbolData symdata) Sign = &_ST_children[0]._S_Sign; + void delegate(out ulong val) Integer = &_ST_children[1]._S_Integer; + void delegate(out string type) IntegerSuffix = &_ST_children[2]._S_IntegerSuffix; + +#line 904 "D:\src\ddbg_continued\src\expression\expression.apd" + + litdata = new SymbolData; + IntegerSuffix(litdata.type); + ulong val; + Integer(val); + + if ( val > 0x7fffffffffffffff ) + litdata.type = "m"; + else if ( val > 0xffffffff ) + litdata.type = litdata.type[0]=='i'||litdata.type[0]=='l'?"l":"m"; + else if ( val > 0x7fffffff && litdata.type[0] == 'i' ) + litdata.type = "k"; + + litdata.data = (cast(ubyte*)&val)[0 .. (litdata.type[0] == 'k' || litdata.type[0] == 'i')?uint.sizeof:ulong.sizeof].dup; + Sign(litdata); + break; + case 36: + debug assert(_ST_children.length == 0); + +#line 923 "D:\src\ddbg_continued\src\expression\expression.apd" + + litdata = new SymbolData; + litdata.type = "Aa"; + litdata.data = cast(ubyte[])_ST_match; + break; + case 37: + debug assert(_ST_children.length == 0); + +#line 931 "D:\src\ddbg_continued\src\expression\expression.apd" + + litdata = new SymbolData; + litdata.type = "a"; + litdata.data = cast(ubyte[])_ST_match[0..1]; + break; + + default: + assert(0); + } +} +void _S_StrLit(out string str) +{ + + switch ( _ST_rule ) + { + case 38: + debug assert(_ST_children.length == 1); + void delegate(out ulong val) Integer = &_ST_children[0]._S_Integer; + +#line 942 "D:\src\ddbg_continued\src\expression\expression.apd" + + ulong val; + Integer(val); + str = .toString(val); + break; + case 39: + debug assert(_ST_children.length == 0); + +#line 950 "D:\src\ddbg_continued\src\expression\expression.apd" + str = _ST_match; + break; + case 40: + debug assert(_ST_children.length == 0); + +#line 954 "D:\src\ddbg_continued\src\expression\expression.apd" + str = _ST_match; + break; + + default: + assert(0); + } +} +void _S_Ident(out string id) +{ + + switch ( _ST_rule ) + { + case 41: + debug assert(_ST_children.length == 0); + +#line 960 "D:\src\ddbg_continued\src\expression\expression.apd" + id = _ST_match; + break; + + default: + assert(0); + } +} +void _S_FQNIdent(out string id) +{ + + switch ( _ST_rule ) + { + case 42: + debug assert(_ST_children.length == 1); + void delegate(out string id) Ident = &_ST_children[0]._S_Ident; + +#line 966 "D:\src\ddbg_continued\src\expression\expression.apd" + Ident(id); + break; + case 43: + debug assert(_ST_children.length == 2); + void delegate(out string id) FQNIdent = &_ST_children[0]._S_FQNIdent; + void delegate(out string id) Ident = &_ST_children[1]._S_Ident; + +#line 969 "D:\src\ddbg_continued\src\expression\expression.apd" + + FQNIdent(id); + string tmp; + Ident(tmp); + id ~= "."~tmp; + break; + + default: + assert(0); + } +} +void _S_Integer(out ulong val) +{ + + switch ( _ST_rule ) + { + case 44: + debug assert(_ST_children.length == 0); + +#line 984 "D:\src\ddbg_continued\src\expression\expression.apd" + + foreach ( b; _ST_match[2..$] ) + { + val <<= 4; + if ( b > 'F' ) + val |= b-'W'; + else if ( b > '9' ) + val |= b-'7'; + else + val |= b-'0'; + } + break; + case 45: + debug assert(_ST_children.length == 0); + +#line 999 "D:\src\ddbg_continued\src\expression\expression.apd" + + foreach ( b; _ST_match[2..$] ) + { + val <<= 1; + if ( b == '1' ) + val |= 1; + } + break; + case 46: + debug assert(_ST_children.length == 0); + +#line 1010 "D:\src\ddbg_continued\src\expression\expression.apd" + + foreach ( b; _ST_match[1..$] ) { + val <<= 3; + val |= b-'0'; + } + break; + case 47: + debug assert(_ST_children.length == 0); + +#line 1019 "D:\src\ddbg_continued\src\expression\expression.apd" + + foreach ( b; _ST_match ) { + val *= 10; + val += b-'0'; + } + break; + + default: + assert(0); + } +} +void _S_IntegerSuffix(out string type) +{ + + switch ( _ST_rule ) + { + case 48: + debug assert(_ST_children.length == 0); + +#line 1030 "D:\src\ddbg_continued\src\expression\expression.apd" + type = "m"; + break; + case 49: + debug assert(_ST_children.length == 0); + +#line 1033 "D:\src\ddbg_continued\src\expression\expression.apd" + type = "m"; + break; + case 50: + debug assert(_ST_children.length == 0); + +#line 1036 "D:\src\ddbg_continued\src\expression\expression.apd" + type = "m"; + break; + case 51: + debug assert(_ST_children.length == 0); + +#line 1039 "D:\src\ddbg_continued\src\expression\expression.apd" + type = "m"; + break; + case 52: + debug assert(_ST_children.length == 0); + +#line 1042 "D:\src\ddbg_continued\src\expression\expression.apd" + type = "l"; + break; + case 53: + debug assert(_ST_children.length == 0); + +#line 1045 "D:\src\ddbg_continued\src\expression\expression.apd" + type = "k"; + break; + case 54: + debug assert(_ST_children.length == 0); + +#line 1048 "D:\src\ddbg_continued\src\expression\expression.apd" + type = "i"; + break; + + default: + assert(0); + } +} +void _S_Sign(ref SymbolData symdata) +{ + + switch ( _ST_rule ) + { + case 55: + debug assert(_ST_children.length == 0); + +#line 1054 "D:\src\ddbg_continued\src\expression\expression.apd" + + switch ( symdata.type[0] ) + { + case 'i': + *cast(int*)symdata.data.ptr = 0-*cast(int*)symdata.data.ptr; + break; + case 'k': + *cast(uint*)symdata.data.ptr = 0-*cast(uint*)symdata.data.ptr; + break; + case 'l': + *cast(long*)symdata.data.ptr = 0-*cast(long*)symdata.data.ptr; + break; + case 'm': + *cast(ulong*)symdata.data.ptr = 0-*cast(ulong*)symdata.data.ptr; + break; + default: + assert(0); + } + break; + case 56: + debug assert(_ST_children.length == 0); + break; + + default: + assert(0); + } +} + +// generated code end +} + +#line 1443 "D:\src\ddbg_continued\src\expression\expression_apd.d" +// Written in the D programming language + +/* + * This file has been automatically generated by APaGeD v0.4.2 beta - Attributed Parser Generator for D. + * + * Sections generated from custom input are marked as "generated code" and + * are subject to the terms and conditions stated in one of these sections. + * The remaining sections are part of the APaGeD package and subject + * to the terms and conditions of the corresponding license. + * + * Attributed Parser Generator for D + * Copyright (c) 2007 Jascha Wetzel. All rights reserved + * License: Artistic License 2.0 + */ + +/************************************************************************************************** + Lexer +**************************************************************************************************/ + +version(Tango) +// the following block is stolen from phobos. +// the copyright notice applies for this block only. +{ +/* + * Copyright (C) 2003-2004 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +bool isValidDchar(dchar c) +{ + /* Note: FFFE and FFFF are specifically permitted by the + * Unicode standard for application internal use, but are not + * allowed for interchange. + * (thanks to Arcane Jill) + */ + + return c < 0xD800 || + (c > 0xDFFF && c <= 0x10FFFF /*&& c != 0xFFFE && c != 0xFFFF*/); +} + +/*************** + * Decodes and returns character starting at s[idx]. idx is advanced past the + * decoded character. If the character is not well formed, a UtfException is + * thrown and idx remains unchanged. + */ + +dchar decode(in char[] s, inout size_t idx) + { + size_t len = s.length; + dchar V; + size_t i = idx; + char u = s[i]; + + if (u & 0x80) + { uint n; + char u2; + + /* The following encodings are valid, except for the 5 and 6 byte + * combinations: + * 0xxxxxxx + * 110xxxxx 10xxxxxx + * 1110xxxx 10xxxxxx 10xxxxxx + * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + * 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + * 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + */ + for (n = 1; ; n++) + { + if (n > 4) + goto Lerr; // only do the first 4 of 6 encodings + if (((u << n) & 0x80) == 0) + { + if (n == 1) + goto Lerr; + break; + } + } + + // Pick off (7 - n) significant bits of B from first byte of octet + V = cast(dchar)(u & ((1 << (7 - n)) - 1)); + + if (i + (n - 1) >= len) + goto Lerr; // off end of string + + /* The following combinations are overlong, and illegal: + * 1100000x (10xxxxxx) + * 11100000 100xxxxx (10xxxxxx) + * 11110000 1000xxxx (10xxxxxx 10xxxxxx) + * 11111000 10000xxx (10xxxxxx 10xxxxxx 10xxxxxx) + * 11111100 100000xx (10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx) + */ + u2 = s[i + 1]; + if ((u & 0xFE) == 0xC0 || + (u == 0xE0 && (u2 & 0xE0) == 0x80) || + (u == 0xF0 && (u2 & 0xF0) == 0x80) || + (u == 0xF8 && (u2 & 0xF8) == 0x80) || + (u == 0xFC && (u2 & 0xFC) == 0x80)) + goto Lerr; // overlong combination + + for (uint j = 1; j != n; j++) + { + u = s[i + j]; + if ((u & 0xC0) != 0x80) + goto Lerr; // trailing bytes are 10xxxxxx + V = (V << 6) | (u & 0x3F); + } + if (!isValidDchar(V)) + goto Lerr; + i += n; + } + else + { + V = cast(dchar) u; + i++; + } + + idx = i; + return V; + + Lerr: + throw new Exception("4invalid UTF-8 sequence"); + } +} +else +{ + import std.utf; +} + +// lexer code +// generated code start +// ((?\*)|(?\()|(?\))|(?\.)|(?\[)|(?\])|(?\.\.)|(?#(e[abcd]x|e[ds]i|e[bs]p|eip|efl))|(?#([abcd]x|[ds]i|[bs]p|(cdefgs)s))|(?#[abcd][hl])|(?#st[0-7])|(?#mm[0-7])|(?#xmm[0-7])|(?cast)|(?!)|(?,)|(?"(([^"\\]*(\\(['"\?\\abfnrtv]|(x[0-9a-fA-F]{2})|(u[0-9a-fA-F]{4})|(U[0-9a-fA-F]{8})))?)*)")|(?'(([^'\\]|(\\(['"\?\\abfnrtv]|(x[0-9a-fA-F]{2})|(u[0-9a-fA-F]{4})|(U[0-9a-fA-F]{8})))))')|(?[a-zA-Z_][_a-zA-Z0-9]*)|(?0[xX][0-9a-fA-F_]+)|(?0[bB][01_]+)|(?0[0-7_]+)|(?0|([1-9][0-9_]*))|(?L)|(?u)|(?U)|(?[uU])|(?\-)).*? +bool mainLexer(string input, out uint token, out string match) +{ + uint s = 0; + static int r56=-1, r57=-1, r58=-1, r59=-1, r60=-1, r61=-1, r62=-1, r63=-1, r64=-1, r65=-1, + r66=-1, r67=-1, r68=-1, r69=-1, r70=-1, r71=-1, r72=-1, r73=-1, r74=-1, r75=-1, + r76=-1, r77=-1, r78=-1, r79=-1, r80=-1, r81=-1, r82=-1, r83=-1, r84=-1, r85=-1, + r86=-1; + + for ( size_t p = 0, q = 0, p_end = input.length; p < p_end; q = p ) + { + dchar c = cast(dchar)input[p]; + if ( c & 0x80 ) + decode(input, p); + else + ++p; + switch ( s ) + { + case 0: + if ( c == 0x4c ) { + s = 14; + r66 = p; + } + else if ( c == 0x28 ) { + s = 2; + r57 = p; + } + else if ( c == 0x63 ) { + s = 13; + r66 = p; + } + else if ( c == 0x75 ) { + s = 16; + r66 = p; + } + else if ( c == 0x2d ) { + s = 11; + r64 = p; + } + else if ( c == 0x55 ) { + s = 17; + r66 = p; + } + else if ( c == 0x23 ) { + s = 18; + } + else if ( c == 0x2e ) { + s = 12; + r65 = p; + } + else if ( c == 0x2c ) { + s = 10; + r63 = p; + } + else if ( c == 0x2a ) { + s = 1; + r56 = p; + } + else if ( c == 0x5d ) { + s = 5; + r60 = p; + } + else if ( c == 0x21 ) { + s = 8; + r61 = p; + } + else if ( c == 0x29 ) { + s = 3; + r58 = p; + } + else if ( c == 0x5b ) { + s = 4; + r59 = p; + } + else if ( c == 0x30 ) { + s = 19; + r62 = p; + } + else if ( c >= 0x31 && c <= 0x39 ) { + s = 9; + r62 = p; + } + else if ( c == 0x22 ) { + s = 6; + } + else if ( c == 0x27 ) { + s = 7; + } + else if ( c >= 0x41 && c <= 0x4b || c >= 0x4d && c <= 0x54 || c >= 0x56 && c <= 0x5a || c == 0x5f || c >= 0x61 && c <= 0x62 || c >= 0x64 && c <= 0x74 || c >= 0x76 && c <= 0x7a ) { + s = 15; + r66 = p; + } + else + return false; + break; + case 1: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 129; + } + else + goto finish1; + break; + case 2: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 128; + } + else + goto finish2; + break; + case 3: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 127; + } + else + goto finish3; + break; + case 4: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 126; + } + else + goto finish4; + break; + case 5: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 125; + } + else + goto finish5; + break; + case 6: + if ( c == 0x5c ) { + s = 103; + } + else if ( c == 0x22 ) { + s = 104; + r67 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 105; + } + else + return false; + break; + case 7: + if ( c == 0x5c ) { + s = 81; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x26 || c >= 0x28 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 82; + } + else + return false; + break; + case 8: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 80; + } + else + goto finish8; + break; + case 9: + if ( c >= 0x30 && c <= 0x39 || c == 0x5f ) { + s = 79; + r68 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 20; + } + else + goto finish9; + break; + case 10: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 78; + } + else + goto finish10; + break; + case 11: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 77; + } + else + goto finish11; + break; + case 12: + if ( c == 0x2e ) { + s = 75; + r69 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 74; + } + else + goto finish12; + break; + case 13: + if ( c == 0x61 ) { + s = 69; + r70 = p; + } + else if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5a || c == 0x5f || c >= 0x61 && c <= 0x7a ) { + s = 68; + r70 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 67; + } + else + goto finish13; + break; + case 14: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5a || c == 0x5f || c >= 0x61 && c <= 0x7a ) { + s = 68; + r70 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 67; + } + else + goto finish14; + break; + case 15: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5a || c == 0x5f || c >= 0x61 && c <= 0x7a ) { + s = 68; + r70 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 67; + } + else + goto finish15; + break; + case 16: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5a || c == 0x5f || c >= 0x61 && c <= 0x7a ) { + s = 68; + r70 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 67; + } + else + goto finish16; + break; + case 17: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5a || c == 0x5f || c >= 0x61 && c <= 0x7a ) { + s = 68; + r70 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 67; + } + else + goto finish17; + break; + case 18: + if ( c == 0x62 ) { + s = 37; + } + else if ( c == 0x78 ) { + s = 33; + } + else if ( c == 0x73 ) { + s = 38; + } + else if ( c == 0x64 ) { + s = 36; + } + else if ( c == 0x6d ) { + s = 32; + } + else if ( c == 0x63 ) { + s = 35; + } + else if ( c == 0x61 ) { + s = 34; + } + else if ( c == 0x65 ) { + s = 39; + } + else + return false; + break; + case 19: + if ( c == 0x58 || c == 0x78 ) { + s = 21; + } + else if ( c == 0x42 || c == 0x62 ) { + s = 22; + } + else if ( c >= 0x30 && c <= 0x37 || c == 0x5f ) { + s = 23; + r71 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 20; + } + else + goto finish19; + break; + case 20: + goto finish20; + case 21: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c == 0x5f || c >= 0x61 && c <= 0x66 ) { + s = 29; + r72 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 20; + } + else + goto finish21; + break; + case 22: + if ( c >= 0x30 && c <= 0x31 || c == 0x5f ) { + s = 26; + r73 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 20; + } + else + goto finish22; + break; + case 23: + if ( c >= 0x30 && c <= 0x37 || c == 0x5f ) { + s = 25; + r74 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 24; + } + else + goto finish23; + break; + case 24: + goto finish24; + case 25: + if ( c >= 0x30 && c <= 0x37 || c == 0x5f ) { + s = 25; + r71 = r74; + r74 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 24; + r71 = r74; + } + else + goto finish25; + break; + case 26: + if ( c >= 0x30 && c <= 0x31 || c == 0x5f ) { + s = 28; + r75 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 27; + } + else + goto finish26; + break; + case 27: + goto finish27; + case 28: + if ( c >= 0x30 && c <= 0x31 || c == 0x5f ) { + s = 28; + r73 = r75; + r75 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 27; + r73 = r75; + } + else + goto finish28; + break; + case 29: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c == 0x5f || c >= 0x61 && c <= 0x66 ) { + s = 31; + r76 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 30; + } + else + goto finish29; + break; + case 30: + goto finish30; + case 31: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c == 0x5f || c >= 0x61 && c <= 0x66 ) { + s = 31; + r72 = r76; + r76 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 30; + r72 = r76; + } + else + goto finish31; + break; + case 32: + if ( c == 0x6d ) { + s = 64; + } + else + return false; + break; + case 33: + if ( c == 0x6d ) { + s = 60; + } + else + return false; + break; + case 34: + if ( c == 0x78 ) { + s = 48; + r77 = p; + } + else if ( c == 0x68 || c == 0x6c ) { + s = 53; + r78 = p; + } + else + return false; + break; + case 35: + if ( c == 0x78 ) { + s = 48; + r77 = p; + } + else if ( c == 0x64 ) { + s = 55; + } + else if ( c == 0x68 || c == 0x6c ) { + s = 53; + r78 = p; + } + else + return false; + break; + case 36: + if ( c == 0x78 ) { + s = 48; + r77 = p; + } + else if ( c == 0x69 ) { + s = 48; + r77 = p; + } + else if ( c == 0x68 || c == 0x6c ) { + s = 53; + r78 = p; + } + else + return false; + break; + case 37: + if ( c == 0x78 ) { + s = 48; + r77 = p; + } + else if ( c == 0x70 ) { + s = 48; + r77 = p; + } + else if ( c == 0x68 || c == 0x6c ) { + s = 53; + r78 = p; + } + else + return false; + break; + case 38: + if ( c == 0x69 ) { + s = 48; + r77 = p; + } + else if ( c == 0x70 ) { + s = 48; + r77 = p; + } + else if ( c == 0x74 ) { + s = 49; + } + else + return false; + break; + case 39: + if ( c == 0x69 ) { + s = 40; + } + else if ( c == 0x66 ) { + s = 41; + } + else if ( c == 0x64 ) { + s = 42; + } + else if ( c == 0x62 ) { + s = 43; + } + else if ( c == 0x73 ) { + s = 45; + } + else if ( c == 0x61 || c == 0x63 ) { + s = 44; + } + else + return false; + break; + case 40: + if ( c == 0x70 ) { + s = 46; + r79 = p; + } + else + return false; + break; + case 41: + if ( c == 0x6c ) { + s = 46; + r79 = p; + } + else + return false; + break; + case 42: + if ( c == 0x78 ) { + s = 46; + r79 = p; + } + else if ( c == 0x69 ) { + s = 46; + r79 = p; + } + else + return false; + break; + case 43: + if ( c == 0x78 ) { + s = 46; + r79 = p; + } + else if ( c == 0x70 ) { + s = 46; + r79 = p; + } + else + return false; + break; + case 44: + if ( c == 0x78 ) { + s = 46; + r79 = p; + } + else + return false; + break; + case 45: + if ( c == 0x69 ) { + s = 46; + r79 = p; + } + else if ( c == 0x70 ) { + s = 46; + r79 = p; + } + else + return false; + break; + case 46: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 47; + } + else + goto finish46; + break; + case 47: + goto finish47; + case 48: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 52; + } + else + goto finish48; + break; + case 49: + if ( c >= 0x30 && c <= 0x37 ) { + s = 50; + r80 = p; + } + else + return false; + break; + case 50: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 51; + } + else + goto finish50; + break; + case 51: + goto finish51; + case 52: + goto finish52; + case 53: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 54; + } + else + goto finish53; + break; + case 54: + goto finish54; + case 55: + if ( c == 0x65 ) { + s = 56; + } + else + return false; + break; + case 56: + if ( c == 0x66 ) { + s = 57; + } + else + return false; + break; + case 57: + if ( c == 0x67 ) { + s = 58; + } + else + return false; + break; + case 58: + if ( c == 0x73 ) { + s = 59; + } + else + return false; + break; + case 59: + if ( c == 0x73 ) { + s = 48; + r77 = p; + } + else + return false; + break; + case 60: + if ( c == 0x6d ) { + s = 61; + } + else + return false; + break; + case 61: + if ( c >= 0x30 && c <= 0x37 ) { + s = 62; + r81 = p; + } + else + return false; + break; + case 62: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 63; + } + else + goto finish62; + break; + case 63: + goto finish63; + case 64: + if ( c >= 0x30 && c <= 0x37 ) { + s = 65; + r82 = p; + } + else + return false; + break; + case 65: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 66; + } + else + goto finish65; + break; + case 66: + goto finish66; + case 67: + goto finish67; + case 68: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5a || c == 0x5f || c >= 0x61 && c <= 0x7a ) { + s = 68; + r66 = r70; + r70 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 67; + r66 = r70; + } + else + goto finish68; + break; + case 69: + if ( c == 0x73 ) { + s = 70; + r83 = p; + } + else if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5a || c == 0x5f || c >= 0x61 && c <= 0x7a ) { + s = 68; + r66 = r70; + r70 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 67; + r66 = r70; + } + else + goto finish69; + break; + case 70: + if ( c == 0x74 ) { + s = 71; + r84 = p; + } + else if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5a || c == 0x5f || c >= 0x61 && c <= 0x7a ) { + s = 68; + r66 = r83; + r70 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 67; + r66 = r83; + } + else + goto finish70; + break; + case 71: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5a || c == 0x5f || c >= 0x61 && c <= 0x7a ) { + s = 73; + r85 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 72; + } + else + goto finish71; + break; + case 72: + goto finish72; + case 73: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x5a || c == 0x5f || c >= 0x61 && c <= 0x7a ) { + s = 68; + r66 = r85; + r70 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 67; + r66 = r85; + } + else + goto finish73; + break; + case 74: + goto finish74; + case 75: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 76; + } + else + goto finish75; + break; + case 76: + goto finish76; + case 77: + goto finish77; + case 78: + goto finish78; + case 79: + if ( c >= 0x30 && c <= 0x39 || c == 0x5f ) { + s = 79; + r62 = r68; + r68 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 20; + r62 = r68; + } + else + goto finish79; + break; + case 80: + goto finish80; + case 81: + if ( c == 0x78 ) { + s = 85; + } + else if ( c == 0x75 ) { + s = 86; + } + else if ( c == 0x55 ) { + s = 87; + } + else if ( c == 0x22 || c == 0x27 || c == 0x3f || c == 0x5c || c >= 0x61 && c <= 0x62 || c == 0x66 || c == 0x6e || c == 0x72 || c == 0x74 || c == 0x76 ) { + s = 88; + } + else + return false; + break; + case 82: + if ( c == 0x27 ) { + s = 83; + r86 = p; + } + else + return false; + break; + case 83: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 84; + } + else + goto finish83; + break; + case 84: + goto finish84; + case 85: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 101; + } + else + return false; + break; + case 86: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 97; + } + else + return false; + break; + case 87: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 89; + } + else + return false; + break; + case 88: + if ( c == 0x27 ) { + s = 83; + r86 = p; + } + else + return false; + break; + case 89: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 90; + } + else + return false; + break; + case 90: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 91; + } + else + return false; + break; + case 91: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 92; + } + else + return false; + break; + case 92: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 93; + } + else + return false; + break; + case 93: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 94; + } + else + return false; + break; + case 94: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 95; + } + else + return false; + break; + case 95: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 96; + } + else + return false; + break; + case 96: + if ( c == 0x27 ) { + s = 83; + r86 = p; + } + else + return false; + break; + case 97: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 98; + } + else + return false; + break; + case 98: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 99; + } + else + return false; + break; + case 99: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 100; + } + else + return false; + break; + case 100: + if ( c == 0x27 ) { + s = 83; + r86 = p; + } + else + return false; + break; + case 101: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 102; + } + else + return false; + break; + case 102: + if ( c == 0x27 ) { + s = 83; + r86 = p; + } + else + return false; + break; + case 103: + if ( c == 0x78 ) { + s = 108; + } + else if ( c == 0x75 ) { + s = 109; + } + else if ( c == 0x55 ) { + s = 110; + } + else if ( c == 0x22 || c == 0x27 || c == 0x3f || c == 0x5c || c >= 0x61 && c <= 0x62 || c == 0x66 || c == 0x6e || c == 0x72 || c == 0x74 || c == 0x76 ) { + s = 107; + } + else + return false; + break; + case 104: + if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 106; + } + else + goto finish104; + break; + case 105: + if ( c == 0x5c ) { + s = 103; + } + else if ( c == 0x22 ) { + s = 104; + r67 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 105; + } + else + return false; + break; + case 106: + goto finish106; + case 107: + if ( c == 0x5c ) { + s = 103; + } + else if ( c == 0x22 ) { + s = 104; + r67 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 105; + } + else + return false; + break; + case 108: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 123; + } + else + return false; + break; + case 109: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 119; + } + else + return false; + break; + case 110: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 111; + } + else + return false; + break; + case 111: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 112; + } + else + return false; + break; + case 112: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 113; + } + else + return false; + break; + case 113: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 114; + } + else + return false; + break; + case 114: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 115; + } + else + return false; + break; + case 115: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 116; + } + else + return false; + break; + case 116: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 117; + } + else + return false; + break; + case 117: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 118; + } + else + return false; + break; + case 118: + if ( c == 0x5c ) { + s = 103; + } + else if ( c == 0x22 ) { + s = 104; + r67 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 105; + } + else + return false; + break; + case 119: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 120; + } + else + return false; + break; + case 120: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 121; + } + else + return false; + break; + case 121: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 122; + } + else + return false; + break; + case 122: + if ( c == 0x5c ) { + s = 103; + } + else if ( c == 0x22 ) { + s = 104; + r67 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 105; + } + else + return false; + break; + case 123: + if ( c >= 0x30 && c <= 0x39 || c >= 0x41 && c <= 0x46 || c >= 0x61 && c <= 0x66 ) { + s = 124; + } + else + return false; + break; + case 124: + if ( c == 0x5c ) { + s = 103; + } + else if ( c == 0x22 ) { + s = 104; + r67 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 105; + } + else + return false; + break; + case 125: + goto finish125; + case 126: + goto finish126; + case 127: + goto finish127; + case 128: + goto finish128; + case 129: + goto finish129; + default: + assert(0); + } + } + + switch ( s ) + { + case 1: finish1: + case 129: finish129: + match = input[0 .. r56]; + token = 0; + break; + case 2: finish2: + case 128: finish128: + match = input[0 .. r57]; + token = 1; + break; + case 3: finish3: + case 127: finish127: + match = input[0 .. r58]; + token = 2; + break; + case 4: finish4: + case 126: finish126: + match = input[0 .. r59]; + token = 4; + break; + case 5: finish5: + case 125: finish125: + match = input[0 .. r60]; + token = 5; + break; + case 104: finish104: + case 106: finish106: + match = input[0 .. r67]; + token = 16; + break; + case 8: finish8: + case 80: finish80: + match = input[0 .. r61]; + token = 14; + break; + case 9: finish9: + case 19: finish19: + case 20: finish20: + case 21: finish21: + case 22: finish22: + match = input[0 .. r62]; + token = 22; + break; + case 10: finish10: + case 78: finish78: + match = input[0 .. r63]; + token = 15; + break; + case 11: finish11: + case 77: finish77: + match = input[0 .. r64]; + token = 27; + break; + case 12: finish12: + case 74: finish74: + match = input[0 .. r65]; + token = 3; + break; + case 13: finish13: + case 14: finish14: + case 15: finish15: + case 16: finish16: + case 17: finish17: + case 67: finish67: + match = input[0 .. r66]; + token = 18; + break; + case 23: finish23: + case 24: finish24: + match = input[0 .. r71]; + token = 21; + break; + case 25: finish25: + match = input[0 .. r74]; + token = 21; + break; + case 26: finish26: + case 27: finish27: + match = input[0 .. r73]; + token = 20; + break; + case 28: finish28: + match = input[0 .. r75]; + token = 20; + break; + case 29: finish29: + case 30: finish30: + match = input[0 .. r72]; + token = 19; + break; + case 31: finish31: + match = input[0 .. r76]; + token = 19; + break; + case 46: finish46: + case 47: finish47: + match = input[0 .. r79]; + token = 7; + break; + case 48: finish48: + case 52: finish52: + match = input[0 .. r77]; + token = 8; + break; + case 50: finish50: + case 51: finish51: + match = input[0 .. r80]; + token = 10; + break; + case 53: finish53: + case 54: finish54: + match = input[0 .. r78]; + token = 9; + break; + case 62: finish62: + case 63: finish63: + match = input[0 .. r81]; + token = 12; + break; + case 65: finish65: + case 66: finish66: + match = input[0 .. r82]; + token = 11; + break; + case 68: finish68: + case 69: finish69: + match = input[0 .. r70]; + token = 18; + break; + case 70: finish70: + match = input[0 .. r83]; + token = 18; + break; + case 71: finish71: + case 72: finish72: + match = input[0 .. r84]; + token = 13; + break; + case 73: finish73: + match = input[0 .. r85]; + token = 18; + break; + case 75: finish75: + case 76: finish76: + match = input[0 .. r69]; + token = 6; + break; + case 79: finish79: + match = input[0 .. r68]; + token = 22; + break; + case 83: finish83: + case 84: finish84: + match = input[0 .. r86]; + token = 17; + break; + default: + return false; + } + return true; +} +// ((?[\t\n\r ]+)).*? +bool wsLexer(string input, out uint token, out string match) +{ + uint s = 0; + static int r2=-1, r3=-1; + + for ( size_t p = 0, q = 0, p_end = input.length; p < p_end; q = p ) + { + dchar c = cast(dchar)input[p]; + if ( c & 0x80 ) + decode(input, p); + else + ++p; + switch ( s ) + { + case 0: + if ( c >= 0x9 && c <= 0xa || c == 0xd || c == 0x20 ) { + s = 1; + r2 = p; + } + else + return false; + break; + case 1: + if ( c >= 0x9 && c <= 0xa || c == 0xd || c == 0x20 ) { + s = 3; + r3 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 2; + } + else + goto finish1; + break; + case 2: + goto finish2; + case 3: + if ( c >= 0x9 && c <= 0xa || c == 0xd || c == 0x20 ) { + s = 3; + r2 = r3; + r3 = p; + } + else if ( c >= 0x9 && c <= 0x13 || c >= 0x20 && c <= 0x7e || c >= 0xa0 && c <= 0x24f || c >= 0x20a3 && c <= 0x20b5 ) { + s = 2; + r2 = r3; + } + else + goto finish3; + break; + default: + assert(0); + } + } + + switch ( s ) + { + case 1: finish1: + case 2: finish2: + match = input[0 .. r2]; + token = 0; + break; + case 3: finish3: + match = input[0 .. r3]; + token = 0; + break; + default: + return false; + } + return true; +} +// generated code end + +#line 2996 "D:\src\ddbg_continued\src\expression\expression_apd.d" +// Written in the D programming language + +/* + * This file has been automatically generated by APaGeD v0.4.2 beta - Attributed Parser Generator for D. + * + * Sections generated from custom input are marked as "generated code" and + * are subject to the terms and conditions stated in one of these sections. + * The remaining sections are part of the APaGeD package and subject + * to the terms and conditions of the corresponding license. + * + * Attributed Parser Generator for D + * Copyright (c) 2007 Jascha Wetzel. All rights reserved + * License: Artistic License 2.0 + */ + + +version(Tango) +{ + import tango.text.convert.Layout; + import tango.text.Util; + import tango.io.Stdout; + + private static Layout!(char) layout; + + static this() + { + layout = new Layout!(char); + } + + string format(string fmt, ...) + { + return layout.convert(_arguments, _argptr, fmt); + } + + alias char[] string; +} +else +{ + import std.string; + import std.utf; + debug import std.stdio; +} + + + +/************************************************************************************************** + Parser +**************************************************************************************************/ + +typedef uint Token; +alias Token Symbol; + +const Token EPSILON = 1, + ALTERN = 2, + EOS = 3, + FIRST_TOKEN = 4, + FIRST_NT = 0x1000; + +// generated code start +/* Attributed Parser Generator for D + * Copyright (c) 2007 Jascha Wetzel. All rights reserved + * License: Artistic License 2.0, see license.txt + */ + +const uint MAX_INPUT_DUMP = 70, + LR_STACK_RESERVE = 100, + NODE_STACK_RESERVE = 20, + BRANCH_STACK_RESERVE = 100; + +/******************************************************************************* + Stack based on dynamic array +*******************************************************************************/ +struct Stack(T) +{ + size_t _top; + T[] stack; + + void push(T v) + { + if ( _top >= stack.length ) + stack.length = stack.length*2+1; + stack[_top] = v; + ++_top; + } + + void push(T[] vs) + { + size_t end = _top+vs.length; + if ( end > stack.length ) + stack.length = end*2; + stack[_top..end] = vs; + _top = end; + } + alias push opCatAssign; + + void pop(size_t num) + { + assert(_top>=num); + if ( num >= _top ) + _top = 0; + else + _top -= num; + } + + T pop() + { + assert(_top>0); + return stack[--_top]; + } + + T* popPtr() + { + assert(_top>0); + return &stack[--_top]; + } + + T top() + { + assert(_top>0); + return stack[_top-1]; + } + + T* topPtr() + { + assert(_top>0); + return &stack[_top-1]; + } + + bool empty() + { + return _top == 0; + } + + void clear() + { + _top = 0; + } + + size_t length() + { + return _top; + } + + T[] array() + { + return stack[0.._top]; + } + + Stack dup() + { + Stack s; + s._top = _top; + s.stack = stack.dup; + return s; + } +} + +/************************************************************************************************** + Information about rules needed for reduction and error handling +**************************************************************************************************/ +align(1) struct RuleInfo +{ + bool ast_node; + uint symbol_count, + nt_count, + nt_index; + Symbol[] symbols; +} + +/************************************************************************************************** + Information about LALR(1) entries needed for debugging +**************************************************************************************************/ +align(1) struct EntryInfo +{ + uint rule_index, + pos; +} + +/************************************************************************************************** + Exception thrown on parser error +**************************************************************************************************/ +class ParserException : Exception +{ + uint line, + column; + string filename, + error_message, + detail; + + this(uint line_, uint column_, string fname, string msg, string dtl="detail") + { + version(Tango) + super(format("{}({}:{}): {}{}", fname, line_, column_, msg, dtl !is null?"\n"~dtl:"")); + else + super(format("%s(%d:%d): %s%s", fname, line_, column_, msg, dtl !is null?"\n"~dtl:"")); + filename = fname; + error_message = msg; + line = line_; + column = column_; + detail = dtl; + } +} + +/************************************************************************************************** + Wraps instantiation of the GLR parser class and the parse call. +**************************************************************************************************/ +bool parse(string filename, string input, out SyntaxTree* root, bool detailed=false, bool recover=false, uint tab_width=4) +{ + GLRParser g, w; + static if ( is(typeof(WhitespaceGrammar) : GLRParser) ) + w = new WhitespaceGrammar; + g = new MainGrammar(w, tab_width); + bool succ = g.parse(filename, input, &root, detailed, recover); + return succ; +} + +/************************************************************************************************** + GLR parser +**************************************************************************************************/ +abstract class GLRParser +{ + struct LRState + { + uint index, + line, + column; + } + + struct Node + { + SyntaxTree* node; + bool sync; + } + + struct LRBranch + { + Stack!(LRState) stack; + Stack!(Node) node_stack; + string input, + lookahead, + lookahead_ws; + uint line, + column, + symbol; + bool fatal_errors; + uint action; + version(ProfileConflicts) + uint last_conflict; + } + + string filename; + uint tab_width; + + // operational variables + string match, + match_ws, + lookahead, + lookahead_ws; + SyntaxTree* syntax_root; + SyntaxTree[] syntax_tree_pool; + size_t pool_top; + Stack!(LRState) stack; + Stack!(Node) node_stack; + Stack!(LRBranch) branch_stack; + ParserException[] recovered_errors; + bool recover_from_errors, + detailed_errors; + + version(ProfileConflicts) { + uint[uint] rr_conflict_counts, + sr_conflict_counts, + shift_failed_counts, + reduce_failed_counts; + uint branch_stack_max; + } + + // grammar data + GLRParser ws_parser; + uint first_nt; + RuleInfo[] rule_infos; + string[][] error_message_lists; + string[] nt_names, + lexeme_names; + EntryInfo[][] entry_infos; + + this(GLRParser ws, uint tabw) + { + ws_parser = ws; + tab_width = tabw; + stack.stack.length = LR_STACK_RESERVE; + node_stack.stack.length = NODE_STACK_RESERVE; + branch_stack.stack.length = BRANCH_STACK_RESERVE; + } + + /************************************************************************************************** + Gets overridden with a first-longest-match lexical analizer. + **************************************************************************************************/ + bool function(string, out uint, out string) lexer; + + /************************************************************************************************** + Gets overridden with the main parser function. + **************************************************************************************************/ + bool parse(string input) { return false; } + bool parseWS(ref string input) { return false; } + + /************************************************************************************************** + + **************************************************************************************************/ + bool isErrorSynced(uint state); + + /************************************************************************************************** + + **************************************************************************************************/ + T APDmin(T)(T a, T b) { return a 1 ) + { + if ( input[0 .. 2] == "\xfe\xff" ) { + // UTF-16BE + input = input[2 .. $]; + } + else if ( input[0 .. 2] == "\xff\xfe" ) + { + if ( input.length > 3 && input[2 .. 4] == "\x00\x00" ) { + // UTF-32LE + input = input[4 .. $]; + } + else { + // UTF-16LE + input = input[2 .. $]; + } + } + else if ( input.length > 2 && input[0 .. 3] == "\xef\xbb\xbf" ) { + // UTF-8 + input = input[3 .. $]; + } + else if ( input.length > 3 && input[0 .. 4] == "\x00\x00\xfe\xff" ) { + // UTF-32BE + input = input[4 .. $]; + } + else if ( input[0] > 0x7f ) + return false; + } + + stack ~= LRState(0, 1, 1); + if ( parse(input) ) + { + if ( syntax_root !is null && root !is null ) + { + *root = syntax_root; + debug + { + Stack!(SyntaxTree*) st; + st.push(*root); + while ( !st.empty ) + { + SyntaxTree* pn = st.pop; + foreach ( c; pn._ST_children ) { + c.parent = pn; + st.push(c); + } + } + } + } + return true; + } + return false; + } + + /************************************************************************************************** + Create a node for the syntax tree. Used by the main parse function. + **************************************************************************************************/ + debug void createNode(uint line, uint column, uint rule_index, uint nt_count, uint nt_index) + { + if ( pool_top >= syntax_tree_pool.length ) + syntax_tree_pool.length = syntax_tree_pool.length*2+1; + auto pn = &syntax_tree_pool[pool_top]; + ++pool_top; + pn._ST_rule = rule_index; + pn._ST_line_number = line; + pn._ST_column_number = column; + pn._ST_node_name = nt_names[nt_index]; + + if ( nt_count > 0 ) + { + pn._ST_children.length = nt_count; + foreach ( i, n; node_stack.array[$-nt_count .. $] ) + pn._ST_children[i] = n.node; + node_stack.pop(nt_count); + } + else { + pn._ST_match = match; + pn._ST_match_ws = match_ws; + } + node_stack ~= Node(pn, false); + } + + else void createNode(uint line, uint column, uint rule_index, uint nt_count) + { + if ( pool_top >= syntax_tree_pool.length ) + syntax_tree_pool.length = syntax_tree_pool.length*2+1; + auto pn = &syntax_tree_pool[pool_top]; + ++pool_top; + pn._ST_rule = rule_index; + pn._ST_line_number = line; + pn._ST_column_number = column; + + if ( nt_count > 0 ) + { + pn._ST_children.length = nt_count; + foreach ( i, n; node_stack.array[$-nt_count .. $] ) + pn._ST_children[i] = n.node; + node_stack.pop(nt_count); + } + else { + pn._ST_match = match; + pn._ST_match_ws = match_ws; + } + node_stack ~= Node(pn, false); + } + + /************************************************************************************************** + + **************************************************************************************************/ + string ruleToString(RuleInfo* ri, int pos) + { + version(Tango) + string str = format("{} ->", nt_names[ri.nt_index]); + else + string str = format("%s ->", nt_names[ri.nt_index]); + + foreach ( i, s; ri.symbols ) + { + string name; + if ( s == ALTERN ) + name = "ALTERN"; + else if ( s < FIRST_NT ) + name = lexeme_names[s-EOS]; + else + name = nt_names[s-FIRST_NT]; + if ( i == pos ) + str ~= " ."; + version(Tango) + str ~= format(" {}", name); + else + str ~= format(" %s", name); + } + if ( pos == ri.symbols.length ) + str ~= " ."; + return str; + } + + /************************************************************************************************** + Issue an error. Used by the main parse function. + **************************************************************************************************/ + void error(string input, uint line, uint column, uint error_list, uint symbol, bool fatal=true) + { + // collect explicit error messages + string errors; + foreach ( i, err; error_message_lists[error_list] ) + { + if ( i > 0 ) + errors ~= "\n"; + errors ~= err; + } + + // construct automatic error message + // if no explicit error message available + if ( errors.length == 0 ) + { + bool[string] expected_symbols; + EntryInfo[] eis = entry_infos[stack.top.index]; + foreach ( ei; eis ) + { + RuleInfo* ri = &rule_infos[ei.rule_index]; + if ( ei.pos < ri.symbols.length ) + { + auto s = ri.symbols[ei.pos]; + if ( s < FIRST_NT ) + expected_symbols["\""~lexeme_names[s-EOS]~"\""] = true; + else + expected_symbols[nt_names[s-FIRST_NT]] = true; + } + else + { + foreach ( token; lookaheadForNT(ri.nt_index, stack.top.index) ) { + assert(token < FIRST_NT); + expected_symbols["\""~lexeme_names[token-EOS]~"\""] = true; + } + } + } + + string expected_str; + auto last = expected_symbols.length-1; + foreach ( i, symname; expected_symbols.keys ) + { + if ( i > 0 ) + { + if ( i == last ) + expected_str ~= " or "; + else + expected_str ~= ", "; + } + expected_str ~= symname; + } + version(Tango) + errors = format("found \"{}\", expected {}", lookahead, expected_str); + else + errors = format("found \"%s\", expected %s", lookahead, expected_str); + } + + // construct detail message + string detail; + if ( detailed_errors ) + { + string lr_stack; + foreach ( st; stack.array[1..$] ) + { + version(Tango) + lr_stack ~= format("---- State {}{} ({}:{}) ----\n", st.index, isErrorSynced(st.index)?"*":"", st.line, st.column); + else + lr_stack ~= format("---- State %d%s (%d:%d) ----\n", st.index, isErrorSynced(st.index)?"*":"", st.line, st.column); + EntryInfo[] eis = entry_infos[st.index]; + foreach ( ei; eis ) + lr_stack ~= ruleToString(&rule_infos[ei.rule_index], ei.pos)~"\n"; + } + + string node_stack_str; + foreach ( i, n; node_stack.array ) + { + if ( i > 0 ) + node_stack_str ~= " "; + node_stack_str ~= nt_names[rule_infos[n.node._ST_rule].nt_index]; + if ( n.sync ) + node_stack_str ~= "*"; + } + + version(Tango) + detail = format("input: {}\nlookahead: {}\nlexeme: {}\nAST node stack:\n{}\nLR stack:\n{}", + substitute(substitute(input[0..$>MAX_INPUT_DUMP?MAX_INPUT_DUMP:$], "\r", "\\r"), "\n", "\\n"), + lookahead, lexeme_names[symbol-EOS], + node_stack_str, lr_stack + ); + else + detail = format("input: %s\nlookahead: %s\nlexeme: %s\nAST node stack:\n%s\nLR stack:\n%s", + replace(replace(input[0..$>MAX_INPUT_DUMP?MAX_INPUT_DUMP:$], "\r", "\\r"), "\n", "\\n"), + lookahead, lexeme_names[symbol-EOS], + node_stack_str, lr_stack + ); + } + + // throw error + if ( fatal ) { + version(Tango) Stdout.flush; + throw new ParserException(line, column-lookahead.length, filename, errors, detail); + } + else + { + version(Tango) + debug(nonfatal) Stdout.flush.format("\n{}({}:{}): {}\n{}\n", filename, line, column-lookahead.length, errors, detail); + else + debug(nonfatal) writefln("\n%s(%d:%d): %s\n%s", filename, line, column-lookahead.length, errors, detail); + } + } +} + +/************************************************************************************************** + Generated parsers +**************************************************************************************************/ +class MainGrammar : public GLRParser +{ + const ushort[] action_base = + [ + 0,23,45,0,67,96,125,154,171,198,222,228,245,273,277,291,305,319,347,375,381,389,7,397,414, + 443,0,36,45,67,472,198,1,219,221,501,529,535,552,580,279,586,284,595,624,653,236,8,333,682, + 0,711,9,740,543,769,771,779,781,789,791,799,801,809,811,819,821,829,831,71,839,844,852,142, + 854,862,864,883,5,891,6,893,901,903 + ]; + const ubyte[] action_check = + [ + 3,0,0,26,32,84,50,50,0,0,0,0,0,0,0,52,26,0,0,0,0,0,0,0,1,1,22,47,0,78,80,1,1,1,1,1,1,1,84, + 27,1,1,1,1,1,1,1,2,28,84,84,1,27,2,2,2,2,2,2,2,84,28,2,2,2,2,2,2,2,4,29,84,84,2,84,4,4,4,4, + 4,4,4,84,29,4,4,4,4,4,4,4,69,69,69,69,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, + 5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,84,7,7,7,7,7,73,73, + 73,73,84,84,84,7,7,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,9,31,84,84,84, + 84,9,9,9,9,9,9,84,84,31,9,9,9,9,9,9,9,33,10,34,10,9,10,10,11,84,11,84,11,11,33,46,34,10,46, + 46,46,46,46,11,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12, + 12,12,12,12,13,84,13,14,13,13,14,84,40,14,14,40,84,42,84,13,42,15,84,14,15,40,84,15,15,84, + 42,14,14,14,14,16,84,15,16,84,84,16,16,84,84,15,15,15,15,17,84,16,17,84,84,17,17,84,84,16, + 16,16,16,48,84,17,48,48,48,48,48,84,84,17,17,17,17,18,18,18,18,18,18,18,18,18,18,18,18,18, + 18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,18,19,84,19,84,19,19,20,84,20,20,20,20,84,84, + 21,19,21,21,21,21,20,20,23,84,23,23,23,23,21,21,84,84,84,84,84,84,23,23,24,24,24,24,24,24, + 24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25, + 25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,30,30,30,30,30,30,30,30, + 30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,30,35,35,35,35,35,35,35,35,35, + 35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,35,36,84,36,84,36,36,37,84,37,84, + 37,37,84,54,84,36,54,54,54,54,54,37,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38,38, + 38,38,38,38,38,38,38,38,38,38,38,39,84,39,84,39,39,41,84,41,84,41,41,84,84,84,39,43,84,84, + 84,84,41,43,43,43,43,43,43,84,84,84,43,43,43,43,43,43,43,84,84,84,84,43,44,44,44,44,44,44, + 44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,44,45,45,45,45,45,45,45, + 45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,45,49,49,49,49,49,49,49,49, + 49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,49,51,51,51,51,51,51,51,51,51, + 51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,51,53,53,53,53,53,53,53,53,53,53, + 53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,55,84,56,55,84,56,55,55,56,56,57, + 84,58,57,84,58,57,57,58,58,59,84,60,59,84,60,59,59,60,60,61,84,62,61,84,62,61,61,62,62,63, + 84,64,63,84,64,63,63,64,64,65,84,66,65,84,66,65,65,66,66,67,84,68,67,84,68,67,67,68,68,70, + 84,84,70,84,71,70,70,71,71,71,71,71,72,84,74,72,84,74,72,72,74,74,75,84,76,75,84,76,75,75, + 76,76,84,84,84,84,84,84,74,74,74,74,84,77,84,84,77,75,75,77,77,79,84,81,79,84,81,79,79,81, + 81,82,84,83,82,84,83,82,82,83,83 + ]; + const ushort[] action_data = + [ + 0,129,258,295,287,384,267,179,258,258,258,258,258,258,258,266,295,258,258,258,258,258,258, + 258,129,258,135,135,258,207,209,258,258,258,258,258,258,258,384,296,258,258,258,258,258, + 258,258,257,289,384,384,258,296,257,257,257,257,257,257,257,384,289,257,257,257,257,257, + 257,257,276,288,384,384,257,384,276,276,276,276,276,276,133,384,158,276,276,276,276,276, + 276,276,311,311,311,311,276,385,385,134,385,385,385,385,385,385,385,385,385,385,385,385, + 385,385,385,385,385,385,385,385,385,385,385,385,385,385,386,386,386,386,386,386,386,386, + 386,386,386,386,386,386,386,386,386,386,386,135,386,386,386,386,386,386,386,386,386,297, + 297,384,297,297,297,297,297,142,143,144,145,384,384,384,297,297,387,387,387,137,387,387, + 387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387, + 387,275,288,384,384,384,384,275,275,275,275,275,275,384,384,158,275,275,275,275,275,275, + 275,290,139,294,280,275,140,280,281,384,281,384,281,281,290,265,294,280,265,175,177,265, + 265,281,388,388,388,388,388,388,141,388,388,388,388,388,388,388,388,388,388,388,388,135, + 142,143,144,145,388,388,388,388,388,282,384,282,300,282,282,300,384,277,300,300,277,384, + 279,384,282,279,301,384,300,301,277,384,301,301,384,279,300,300,300,300,302,384,301,302, + 384,384,302,302,384,384,301,301,301,301,303,384,302,303,384,384,303,303,384,384,302,302, + 302,302,265,384,303,265,175,177,265,265,384,384,303,303,303,303,389,389,389,389,389,389, + 147,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389, + 389,284,384,284,384,284,284,298,384,298,298,298,298,384,384,286,284,286,150,286,286,298, + 298,299,384,299,299,299,299,152,286,384,384,384,384,384,384,299,299,385,385,153,385,385, + 385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385,385, + 385,385,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,390,154,155,135, + 142,143,144,145,390,390,390,390,390,391,391,391,391,391,391,391,391,391,391,391,391,391, + 391,391,391,391,154,155,135,142,143,144,145,391,391,391,391,391,387,387,387,164,387,387, + 387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387, + 387,285,384,285,384,285,285,278,384,278,384,278,278,384,265,384,285,265,175,177,265,265, + 278,389,389,389,389,389,389,167,389,389,389,389,389,389,389,389,389,389,389,389,389,389, + 389,389,389,389,389,389,389,389,283,384,283,384,283,283,139,384,280,384,140,280,384,384, + 384,283,172,384,384,384,384,280,186,187,188,189,190,191,384,384,384,192,193,135,312,312, + 312,312,384,384,384,384,197,392,129,258,392,392,392,392,392,258,258,258,258,258,258,258, + 392,392,258,258,258,258,258,258,258,392,392,392,392,258,387,387,387,174,387,387,387,387, + 387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,387,393, + 129,258,393,393,393,393,393,258,258,258,258,258,258,258,393,393,258,258,258,258,258,258, + 258,393,393,393,393,258,394,129,258,394,394,394,394,394,258,258,258,258,258,258,258,394, + 394,258,258,258,258,258,258,258,394,394,394,394,258,389,389,389,389,389,389,182,389,389, + 389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,389,264,384, + 263,264,384,263,264,264,263,263,260,384,269,260,384,269,260,260,269,269,270,384,271,270, + 384,271,270,270,271,271,272,384,273,272,384,273,272,272,273,273,274,384,292,274,384,292, + 274,274,292,292,293,384,256,293,384,256,293,293,256,256,259,384,268,259,384,268,259,259, + 268,268,262,384,384,262,384,265,262,262,265,175,177,265,265,261,384,310,261,384,310,261, + 261,310,310,308,384,304,308,384,304,308,308,304,304,384,384,384,384,384,384,203,206,208, + 210,384,305,384,384,305,204,205,305,305,306,384,307,306,384,307,306,306,307,307,309,384, + 291,309,384,291,309,309,291,291 + ]; + const ubyte[] goto_base = + [ + 0,1,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,2,2,0,0,16,0,0,0,2,28,3,0,0,0,0,0,0,0,0,0,16,0,46, + 3,0,2,3,3,39,0,28,0,0,28,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,0,22,29,0,0,0,0,0,0,0,0,0 + ]; + const ubyte[] goto_check = + [ + 0,0,1,44,44,46,48,4,6,6,10,10,12,12,21,29,31,6,6,22,47,12,12,12,25,25,41,41,51,51,25,54,25, + 25,25,25,30,30,71,49,49,73,30,49,30,30,30,30,43,74,84,43,43,84,84,84,84,84,84,84,84,43,84, + 43,84,84,84,43 + ]; + const ubyte[] goto_data = + [ + 3,4,2,45,4,57,56,43,8,10,40,41,18,10,37,35,32,20,21,23,48,20,21,38,28,10,42,41,52,4,29,55, + 33,20,21,34,28,10,72,50,4,74,31,53,33,20,21,34,66,83,84,67,68,84,84,84,84,84,84,84,84,70, + 84,71,84,84,84,73 + ]; + + debug(parser) string indent; + + this(GLRParser ws=null, uint tab_width=4) + { + super(ws, tab_width); + lexer = &mainLexer; + first_nt = 32; + nt_names = + [ + "Expr","Deref","DotChain","RefExpr","Args","Register","RegName","Cast","Type", + "BaseType","QuantList","Quantifier","TplParams","TplParams2","TplParam","Lit","StrLit", + "Ident","FQNIdent","Integer","IntegerSuffix","Sign","!LRstart" + ]; + lexeme_names = + [ + "EOS","\\*","\\(","\\)","\\.","\\[","\\]","\\.\\.","#(e[abcd]x|e[ds]i|e[bs]p|eip|efl)", + "#([abcd]x|[ds]i|[bs]p|(cdefgs)s)","#[abcd][hl]","#st[0-7]","#mm[0-7]","#xmm[0-7]", + "cast","!",",", + "\"(([^\"\\\\]*(\\\\(['\"\\?\\\\abfnrtv]|(x[0-9a-fA-F]{2})|(u[0-9a-fA-F]{4})|(U[0-9a-fA-F]{8})))?)*)\"", + "'(([^'\\\\]|(\\\\(['\"\\?\\\\abfnrtv]|(x[0-9a-fA-F]{2})|(u[0-9a-fA-F]{4})|(U[0-9a-fA-F]{8})))))'", + "[a-zA-Z_][_a-zA-Z0-9]*","0[xX][0-9a-fA-F_]+","0[bB][01_]+","0[0-7_]+", + "0|([1-9][0-9_]*)","L","u","U","[uU]","\\-" + ]; + entry_infos = + [ + cast(EntryInfo[])[EntryInfo(2,0)],[EntryInfo(1,1),EntryInfo(2,0)],[EntryInfo(1,2)],[EntryInfo(57,1)],[ + EntryInfo(0,1),EntryInfo(20,0)],[EntryInfo(19,1)],[EntryInfo(19,2)],[EntryInfo(41,1)],[EntryInfo(19,3)],[ + EntryInfo(19,4)],[EntryInfo(21,1),EntryInfo(24,0)],[EntryInfo(25,1)],[EntryInfo(26,1),EntryInfo(27,1) + ,EntryInfo(28,1)],[EntryInfo(26,2)],[EntryInfo(44,1)],[EntryInfo(45,1)],[EntryInfo(46,1)],[ + EntryInfo(47,1)],[EntryInfo(28,2)],[EntryInfo(28,3)],[EntryInfo(42,1)],[EntryInfo(22,1),EntryInfo(43,1) + ,EntryInfo(30,0)],[EntryInfo(43,2)],[EntryInfo(43,3)],[EntryInfo(29,1)],[EntryInfo(29,2)],[ + EntryInfo(39,1)],[EntryInfo(40,1)],[EntryInfo(33,1)],[EntryInfo(29,3),EntryInfo(32,0)],[ + EntryInfo(31,1)],[EntryInfo(31,2),EntryInfo(32,0)],[EntryInfo(31,3)],[EntryInfo(34,1)],[ + EntryInfo(38,1)],[EntryInfo(29,4)],[EntryInfo(29,5)],[EntryInfo(22,2)],[EntryInfo(27,2)],[ + EntryInfo(27,3)],[EntryInfo(21,2)],[EntryInfo(23,1),EntryInfo(24,0)],[EntryInfo(23,2)],[ + EntryInfo(0,2),EntryInfo(56,0)],[EntryInfo(4,1),EntryInfo(2,0)],[EntryInfo(4,2)],[EntryInfo(4,3) + ,EntryInfo(9,0)],[EntryInfo(7,1)],[EntryInfo(7,2),EntryInfo(9,0)],[EntryInfo(8,1),EntryInfo(2,0)],[ + EntryInfo(10,1),EntryInfo(11,1)],[EntryInfo(10,2),EntryInfo(2,0)],[EntryInfo(10,3)],[EntryInfo(8,2)],[ + EntryInfo(8,3),EntryInfo(9,0)],[EntryInfo(8,4)],[EntryInfo(7,3)],[EntryInfo(4,4)],[EntryInfo(13,1)],[ + EntryInfo(14,1)],[EntryInfo(15,1)],[EntryInfo(16,1)],[EntryInfo(17,1)],[EntryInfo(18,1)],[ + EntryInfo(36,1)],[EntryInfo(37,1)],[EntryInfo(0,3)],[EntryInfo(3,1)],[EntryInfo(12,1)],[ + EntryInfo(55,1)],[EntryInfo(6,1)],[EntryInfo(5,1),EntryInfo(9,0)],[EntryInfo(5,2)],[EntryInfo(35,1)],[ + EntryInfo(35,2),EntryInfo(54,0)],[EntryInfo(48,1),EntryInfo(49,1),EntryInfo(52,1)],[EntryInfo(48,2)],[ + EntryInfo(49,2)],[EntryInfo(50,1)],[EntryInfo(50,2)],[EntryInfo(51,1)],[EntryInfo(51,2)],[ + EntryInfo(53,1)],[EntryInfo(35,3)] + ]; + rule_infos = + [ + RuleInfo(true,3,3,0,[4097,4103,4098]),RuleInfo(true,2,1,1,[4,4097]), + RuleInfo(true,0,0,1,[]),RuleInfo(true,1,1,2,[4101]),RuleInfo(true,4,2,2,[5,4096,6,4099]), + RuleInfo(true,2,2,2,[4113,4099]),RuleInfo(true,1,1,2,[4111]),RuleInfo(true,3,2,3,[7,4113,4099]), + RuleInfo(true,4,2,3,[8,4100,9,4099]),RuleInfo(true,0,0,3,[]),RuleInfo(true,3,2,4,[4096,10,4096]), + RuleInfo(true,1,1,4,[4096]),RuleInfo(true,1,1,5,[4102]),RuleInfo(true,1,0,6,[11]), + RuleInfo(true,1,0,6,[12]),RuleInfo(true,1,0,6,[13]),RuleInfo(true,1,0,6,[14]), + RuleInfo(true,1,0,6,[15]),RuleInfo(true,1,0,6,[16]),RuleInfo(true,4,1,7,[17,5,4104,6]), + RuleInfo(true,0,0,7,[]),RuleInfo(true,2,2,8,[4105,4106]),RuleInfo(true,2,2,9,[4114,4108]), + RuleInfo(true,2,2,10,[4107,4106]),RuleInfo(true,0,0,10,[]),RuleInfo(true,1,0,11,[4]), + RuleInfo(true,2,0,11,[8,9]),RuleInfo(true,3,1,11,[8,4115,9]),RuleInfo(true,3,1,11,[8,4104,9]), + RuleInfo(true,5,2,12,[18,5,4110,4109,6]),RuleInfo(true,0,0,12,[]), + RuleInfo(true,3,2,13,[19,4110,4109]),RuleInfo(true,0,0,13,[]),RuleInfo(true,1,1,14,[4104]), + RuleInfo(true,1,1,14,[4112]),RuleInfo(true,3,3,15,[4117,4115,4116]),RuleInfo(true,1,0,15,[20]), + RuleInfo(true,1,0,15,[21]),RuleInfo(true,1,1,16,[4115]),RuleInfo(true,1,0,16,[20]), + RuleInfo(true,1,0,16,[21]),RuleInfo(true,1,0,17,[22]),RuleInfo(true,1,1,18,[4113]), + RuleInfo(true,3,2,18,[4114,7,4113]),RuleInfo(true,1,0,19,[23]),RuleInfo(true,1,0,19,[24]), + RuleInfo(true,1,0,19,[25]),RuleInfo(true,1,0,19,[26]),RuleInfo(true,2,0,20,[27,28]), + RuleInfo(true,2,0,20,[27,29]),RuleInfo(true,2,0,20,[28,27]),RuleInfo(true,2,0,20,[29,27]), + RuleInfo(true,1,0,20,[27]),RuleInfo(true,1,0,20,[30]),RuleInfo(true,0,0,20,[]), + RuleInfo(true,1,0,21,[31]),RuleInfo(true,0,0,21,[]),RuleInfo(true,1,1,22,[4096]) + ]; + error_message_lists = [ + cast(string[])null, + ["(%d) ( expected"], + ["(%d) Type expected"], + ["(%d) ) expected"], + ["(%d) ], type or size expected"], + ["(%d) ] expected"], + ["(%d) Template parameters expected"], + ["(%d) Template parameter expected"], + ["(%d) Expression expected after ("], + ["(%d) Arguments expected after ["], + ["(%d) Second slice argument expected"] + ]; + } + + uint[] lookaheadForNT(uint nt_index, uint state) + { + uint[] tokens; + auto b = action_base[state]; + auto m = APDmin(action_check.length, cast(size_t)b+first_nt); + foreach ( i, check; action_check[b .. m] ) + { + if ( check == state && (action_data[b+i] & 384) == 256 ) + tokens ~= i+EOS; + } + return tokens; + } + + override bool isErrorSynced(uint state) + { + switch ( state ) + { + case 0: + return true; + default: + break; + } + return false; + } + + override bool parse(string input) + { + debug(parser) indent ~= " "; + scope(exit) debug(parser) indent = indent[0..$-1]; + + bool fatal_errors = true; + uint line = 1, + column = 1, + symbol; + + void reduce(uint rule) + { + version(Tango) + debug(parser) Stdout.format("{}reduce {} {}\n", indent, rule, ruleToString(&rule_infos[rule], -1)); + else + debug(parser) writefln("%sreduce %d %s", indent, rule, ruleToString(&rule_infos[rule], -1)); + auto ri = &rule_infos[rule]; + uint reduce_line, + reduce_column; + if ( ri.symbol_count > 0 ) { + reduce_line = stack.array[$-ri.symbol_count].line; + reduce_column = stack.array[$-ri.symbol_count].column; + stack.pop(ri.symbol_count); + } + else { + reduce_line = stack.top.line; + reduce_column = stack.top.column; + } + + auto b = goto_base[stack.top.index]; + b += ri.nt_index; + debug(parser) + { + if ( b < goto_check.length && goto_check[b] == stack.top.index ) { + stack ~= LRState(goto_data[b], reduce_line, reduce_column); + + version(Tango) + Stdout.format("{}goto {}\n", indent, stack.top.index); + else + writefln("%sgoto %d", indent, stack.top.index); + } + else + assert(0); + } + else + stack ~= LRState(goto_data[b], reduce_line, reduce_column); + if ( ri.ast_node ) { + debug createNode(reduce_line, reduce_column, rule, ri.nt_count, ri.nt_index); + else createNode(reduce_line, reduce_column, rule, ri.nt_count); + } + else if ( ri.nt_count > 0 ) + node_stack.pop(ri.nt_count); + } + + void branch(uint action) + { + version(ProfileConflicts) + { + if ( branch_stack.length > branch_stack_max ) + branch_stack_max = branch_stack.length; + } + if ( (action & 128) > 0 ) + { + version(ProfileConflicts) + sr_conflict_counts[stack.top.index]++; + version(Tango) debug(parser) Stdout.format("{}branch shift conflict\n", indent); + else debug(parser) writefln("%sbranch shift conflict", indent); + } + else + { + version(ProfileConflicts) + rr_conflict_counts[stack.top.index]++; + version(Tango) debug(parser) Stdout.format("{}branch reduce conflict\n", indent); + else debug(parser) writefln("%sbranch reduce conflict", indent); + } + version(ProfileConflicts) + branch_stack ~= LRBranch( + stack.dup, node_stack.dup, + input, lookahead, lookahead_ws, + line, column, symbol, fatal_errors, + action, stack.top.index | (action & 384) + ); + else + branch_stack ~= LRBranch( + stack.dup, node_stack.dup, + input, lookahead, lookahead_ws, + line, column, symbol, fatal_errors, + action + ); + fatal_errors = false; + } + + string prev_input = input; + parseLoop: while ( true ) + { + if ( symbol == 0 ) + { + readSymbol: + match = lookahead; + match_ws = lookahead_ws; + lookahead_ws = input; + static if ( is(typeof(WhitespaceGrammar) : GLRParser) ) + ws_parser.parseWS(input); + version(Tango) + debug(lexer) Stdout.format("WS: '{}'\n", lookahead_ws[0 .. $-input.length]); + else + debug(lexer) writefln("WS: '%s'", lookahead_ws[0 .. $-input.length]); + symbol = EOS; + if ( input.length == 0 ) + lookahead = null; + else if ( lexer(input, symbol, lookahead) ) { + symbol += FIRST_TOKEN; + line += countLocation(lookahead_ws[0 .. $-input.length], column); + lookahead_ws = lookahead_ws[0 .. $-input.length+lookahead.length]; + } + if ( symbol == 0 ) + throw new ParserException(line, column, filename, "Invalid token", input[0..$>MAX_INPUT_DUMP?MAX_INPUT_DUMP:$]); + prev_input = input; + input = input[lookahead.length..$]; + } + debug(parser) + { + string node_stack_str; + foreach ( n; node_stack.array ) + node_stack_str ~= " "~n.node._ST_node_name~(n.sync?"*":""); + version(Tango) + Stdout.format("\n{}state {}\n{}nodes {}\n{}lkahd ({}) {}\n{}input ({}:{}) {}\n", + indent, stack.top.index, + indent, node_stack_str, + indent, symbol, lookahead, + indent, line, column, + substitute(substitute(input[0..$>MAX_INPUT_DUMP?MAX_INPUT_DUMP:$], "\r", "\\r"), "\n", "\\n") + ); + else + writefln("\n%sstate %d\n%snodes %s\n%slkahd (%d) %s\n%sinput (%d:%d) %s", + indent, stack.top.index, + indent, node_stack_str, + indent, symbol, lookahead, + indent, line, column, + replace(replace(input[0..$>MAX_INPUT_DUMP?MAX_INPUT_DUMP:$], "\r", "\\r"), "\n", "\\n") + ); + } + + auto state = stack.top.index; + auto b = action_base[state]; + uint action = 384; + b += symbol-EOS; + if ( b < action_check.length && action_check[b] == state ) + action = action_data[b]; + + actionSwitch: switch ( action & 384 ) + { + case 128: + action &= 127; + version(Tango) debug(parser) Stdout.format("{}shift {}\n", indent, action); + else debug(parser) writefln("%sshift %d", indent, action); + stack ~= LRState(action, line, column); + symbol = 0; + continue parseLoop; + case 256: + action &= 127; + version(Tango) debug(parser) Stdout.format("{}reduce {} {}\n", indent, action, ruleToString(&rule_infos[action], -1)); + else debug(parser) writefln("%sreduce %d %s", indent, action, ruleToString(&rule_infos[action], -1)); + auto ri = &rule_infos[action]; + uint reduce_line, + reduce_column; + if ( ri.symbol_count > 0 ) { + reduce_line = stack.array[$-ri.symbol_count].line; + reduce_column = stack.array[$-ri.symbol_count].column; + stack.pop(ri.symbol_count); + } + else { + reduce_line = stack.array[$-1].line; + reduce_column = stack.array[$-1].column; + } + + state = stack.top.index; + b = goto_base[state]; + b += ri.nt_index; + debug(parser) + { + if ( b < goto_check.length && goto_check[b] == state ) { + stack ~= LRState(goto_data[b], reduce_line, reduce_column); + version(Tango) + Stdout.format("{}goto {}\n", indent, stack.top.index); + else + writefln("%sgoto %d", indent, stack.top.index); + } + else + assert(0); + } + else + stack ~= LRState(goto_data[b], reduce_line, reduce_column); + if ( ri.ast_node ) { + debug createNode(reduce_line, reduce_column, action, ri.nt_count, ri.nt_index); + else createNode(reduce_line, reduce_column, action, ri.nt_count); + } + else if ( ri.nt_count > 0 ) + node_stack.pop(ri.nt_count); + + continue parseLoop; + case 384: + action &= 127; + if ( fatal_errors || action > 0 ) + { + if ( recover_from_errors ) + { + try error(prev_input, line, column, action, symbol); + catch ( ParserException e ) + recovered_errors ~= e; + version(Tango) + debug(nonfatal) Stdout.format("recovering from error:\n{}\n", recovered_errors[$-1]); + else + debug(nonfatal) writefln("recovering from error:\n%s", recovered_errors[$-1]); + while ( !stack.empty && !isErrorSynced(stack.top.index) ) + stack.pop; + while ( !node_stack.empty && !node_stack.top.sync ) + node_stack.pop; + symbol = 0; + continue parseLoop; + } + else { + input = prev_input; + error(input, line, column, action, symbol); + } + } + else + { + debug(nonfatal) { + input = prev_input; + error(input, line, column, action, symbol, false); + } + } + if ( branch_stack.length == 0 ) { + input = prev_input; + return false; + } + auto prev = branch_stack.popPtr; + stack = prev.stack; + node_stack = prev.node_stack; + input = prev.input; + prev_input = input; + lookahead = prev.lookahead; + lookahead_ws = prev.lookahead_ws; + line = prev.line; + column = prev.column; + symbol = prev.symbol; + fatal_errors = prev.fatal_errors; + action = prev.action; + + version(ProfileConflicts) + { + if ( (prev.last_conflict & 128) > 0 ) + shift_failed_counts[prev.last_conflict & 127]++; + else + reduce_failed_counts[prev.last_conflict & 127]++; + } + goto actionSwitch; + default: + break; + } + + switch ( action ) + { + case 0: + version(Tango) + debug(parser) Stdout.format("{}accept\n", indent); + else + debug(parser) writefln("%saccept", indent); + syntax_root = node_stack.top.node; + input = prev_input; + return true; + default: + assert(0); + } + } + assert(0); + } +} + +class WhitespaceGrammar : public GLRParser +{ + const ubyte[] action_base = + [ + 0,0,2 + ]; + const ubyte[] action_check = + [ + 1,0,2 + ]; + const ubyte[] action_data = + [ + 4,3,0 + ]; + const ubyte[] goto_base = + [ + 0,0,0 + ]; + const ubyte[] goto_check = + [ + 0 + ]; + const ubyte[] goto_data = + [ + 2 + ]; + + debug(parser) string indent; + + this(GLRParser ws=null, uint tab_width=4) + { + super(ws, tab_width); + lexer = &wsLexer; + first_nt = 5; + nt_names = + [ + "Whitespace","!LRstart" + ]; + lexeme_names = + [ + "EOS","[\\t\\n\\r ]+" + ]; + entry_infos = + [ + cast(EntryInfo[])[],[EntryInfo(0,1)],[EntryInfo(1,1)] + ]; + rule_infos = + [ + RuleInfo(true,1,0,0,[4]),RuleInfo(true,1,1,1,[4096]) + ]; + error_message_lists = [ + cast(string[])null + ]; + } + + uint[] lookaheadForNT(uint nt_index, uint state) + { + uint[] tokens; + auto b = action_base[state]; + auto m = APDmin(action_check.length, cast(size_t)b+first_nt); + foreach ( i, check; action_check[b .. m] ) + { + if ( check == state && (action_data[b+i] & 6) == 4 ) + tokens ~= i+EOS; + } + return tokens; + } + + override bool isErrorSynced(uint state) + { + switch ( state ) + { + case 0: + return true; + default: + break; + } + return false; + } + + override bool parseWS(ref string input) + { + stack.clear; + stack ~= LRState(0, 1, 1); + + debug(parser) indent ~= " "; + scope(exit) debug(parser) indent = indent[0..$-1]; + + bool fatal_errors = true; + uint line = 1, + column = 1, + symbol; + + void reduce(uint rule) + { + version(Tango) + debug(parser) Stdout.format("{}reduce {} {}\n", indent, rule, ruleToString(&rule_infos[rule], -1)); + else + debug(parser) writefln("%sreduce %d %s", indent, rule, ruleToString(&rule_infos[rule], -1)); + auto ri = &rule_infos[rule]; + uint reduce_line, + reduce_column; + if ( ri.symbol_count > 0 ) { + reduce_line = stack.array[$-ri.symbol_count].line; + reduce_column = stack.array[$-ri.symbol_count].column; + stack.pop(ri.symbol_count); + } + else { + reduce_line = stack.top.line; + reduce_column = stack.top.column; + } + + auto b = goto_base[stack.top.index]; + b += ri.nt_index; + debug(parser) + { + if ( b < goto_check.length && goto_check[b] == stack.top.index ) { + stack ~= LRState(goto_data[b], reduce_line, reduce_column); + } + else + assert(0); + } + else + stack ~= LRState(goto_data[b], reduce_line, reduce_column); + } + + void branch(uint action) + { + version(ProfileConflicts) + { + if ( branch_stack.length > branch_stack_max ) + branch_stack_max = branch_stack.length; + } + if ( (action & 2) > 0 ) + { + version(ProfileConflicts) + sr_conflict_counts[stack.top.index]++; + } + else + { + version(ProfileConflicts) + rr_conflict_counts[stack.top.index]++; + } + version(ProfileConflicts) + branch_stack ~= LRBranch( + stack.dup, node_stack.dup, + input, lookahead, lookahead_ws, + line, column, symbol, fatal_errors, + action, stack.top.index | (action & 6) + ); + else + branch_stack ~= LRBranch( + stack.dup, node_stack.dup, + input, lookahead, lookahead_ws, + line, column, symbol, fatal_errors, + action + ); + fatal_errors = false; + } + + string prev_input = input; + parseLoop: while ( true ) + { + if ( symbol == 0 ) + { + readSymbol: + match = lookahead; + match_ws = lookahead_ws; + symbol = EOS; + if ( input.length == 0 ) + lookahead = null; + else if ( lexer(input, symbol, lookahead) ) { + symbol += FIRST_TOKEN; + } + if ( symbol == 0 ) + return false; + prev_input = input; + input = input[lookahead.length..$]; + } + + auto state = stack.top.index; + auto b = action_base[state]; + uint action = 6; + b += symbol-EOS; + if ( b < action_check.length && action_check[b] == state ) + action = action_data[b]; + + actionSwitch: switch ( action & 6 ) + { + case 2: + action &= 1; + stack ~= LRState(action, line, column); + symbol = 0; + continue parseLoop; + case 4: + action &= 1; + auto ri = &rule_infos[action]; + uint reduce_line, + reduce_column; + if ( ri.symbol_count > 0 ) { + reduce_line = stack.array[$-ri.symbol_count].line; + reduce_column = stack.array[$-ri.symbol_count].column; + stack.pop(ri.symbol_count); + } + else { + reduce_line = stack.array[$-1].line; + reduce_column = stack.array[$-1].column; + } + + state = stack.top.index; + b = goto_base[state]; + b += ri.nt_index; + debug(parser) + { + if ( b < goto_check.length && goto_check[b] == state ) { + stack ~= LRState(goto_data[b], reduce_line, reduce_column); + } + else + assert(0); + } + else + stack ~= LRState(goto_data[b], reduce_line, reduce_column); + + continue parseLoop; + case 6: + action &= 1; + input = prev_input; + if ( branch_stack.length == 0 ) { + input = prev_input; + return false; + } + auto prev = branch_stack.popPtr; + stack = prev.stack; + node_stack = prev.node_stack; + input = prev.input; + prev_input = input; + lookahead = prev.lookahead; + lookahead_ws = prev.lookahead_ws; + line = prev.line; + column = prev.column; + symbol = prev.symbol; + fatal_errors = prev.fatal_errors; + action = prev.action; + + version(ProfileConflicts) + { + if ( (prev.last_conflict & 2) > 0 ) + shift_failed_counts[prev.last_conflict & 1]++; + else + reduce_failed_counts[prev.last_conflict & 1]++; + } + goto actionSwitch; + default: + break; + } + + switch ( action ) + { + case 0: + input = prev_input; + return true; + default: + assert(0); + } + } + assert(0); + } +} + + +// generated code end diff -r 586e4a649642 -r 4a9dcbd9e54f src/main.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/main.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,117 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +import cli.userinterface; +import cli.ddbgcli; +import cli.gdbcli; +import cli.gdbmicli; +import debugger; + +import std.string; +import std.stdio; + +import util; + +/************************************************************************************************** + +**************************************************************************************************/ +int main(string[] args) +{ + debug domain(args); + else + { + try domain(args); + catch ( DebuggerException e ) + { + writefln("%s", e.msg); + return 1; + } + catch ( Object o ) + { + writefln("\n\n----------------------------------------\nUnhandled exception in %s:\n"~ + "%s\n\nPlease report this problem!\nSee the http://ddbg.mainia.de/releases.html for details.\nThank you!", + VERSION_STRING, o + ); + return 1; + } + } + return 0; +} + +void domain(string[] args) +{ + string[string] options = parseArgs(args); + + UserInterface cli; + if ( ("cli" in options) !is null ) + { + if ( options["cli"] == "gdb" ) + cli = new GDBCLI; + else if ( options["cli"] == "gdbmi" ) + cli = new GDBMICLI; + else { + DbgIO.println("Unknown CLI mode \"%s\"", options["cli"]); + return; + } + } + else + cli = new DdbgCLI; + cli.init(args); + + if ( "cmd" in options ) + { + string cmd_string = strip(options["cmd"]); + if ( cmd_string[0] == '"' && cmd_string[$-1] == '"' ) + cmd_string = cmd_string[1..$-1]; + cli.runCommands(cmd_string); + } + + cli.start(); +} + +string[string] parseArgs(inout string[] args) +{ + string[string] options; + + for ( int i=1; i < args.length; ) + { + string arg = args[i]; + + uint optend; + for ( optend = 1; optend < arg.length; ++optend ) + { + if ( !inPattern(arg[optend], "a-zA-Z0-9") ) + break; + } + string option = arg[0..optend]; + switch ( option ) + { + case "-cli": + case "-cmd": + string value; + if ( optend >= arg.length ) { + args = args[0..i]~args[i+1..$]; + value = args[i]; + } + else + value = arg[optend..$]; + if ( value.length <= 0 ) { + DbgIO.println("ERROR: -%s= or -%s expected", option, option); + break; + } + if ( value[0] == '=' ) + value = value[1..$]; + options[option[1..$]] = value; + args = args[0..i]~args[i+1..$]; + break; + default: + ++i; + if ( option[0] != '-' ) + return options; + break; + } + } + return options; +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/minidump.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/minidump.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,268 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +import win32.dbghelp; +import win32.windef; +import win32.winbase; + +import std.string; + +import dbgprocess; +import util; + +/************************************************************************************************** + +**************************************************************************************************/ +class MiniDump +{ + enum UserStreamType : uint + { + DExceptionInfo = 0x10000, + ThreadInfo + } + + align(1) struct ThreadInfo + { + uint mainThreadId, + currentThreadId; + } + + static typeof(&win32.dbghelp.MiniDumpWriteDump) MiniDumpWriteDump; + static typeof(&win32.dbghelp.MiniDumpReadDumpStream) MiniDumpReadDumpStream; + + private void* map; + private HANDLE file, + fileMapping; + + MINIDUMP_THREAD[] threads; + uint selectedThread; + MINIDUMP_MEMORY_DESCRIPTOR[] memoryDescriptors; + EXCEPTION_RECORD* exceptionRecord; + + ThreadInfo* threadInfo; + + /********************************************************************************************** + + **********************************************************************************************/ + static this() + { + // TODO: load from exe dir if not XP + HINSTANCE dll = LoadLibrary(toStringz("dbghelp.dll")); + if ( dll !is null ) { + MiniDumpWriteDump = cast(typeof(MiniDumpWriteDump))GetProcAddress(dll, toStringz("MiniDumpWriteDump")); + MiniDumpReadDumpStream = cast(typeof(MiniDumpReadDumpStream))GetProcAddress(dll, toStringz("MiniDumpReadDumpStream")); + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + this(string filename) + { + file = CreateFile(toStringz(filename), FILE_ALL_ACCESS, 0, null, OPEN_EXISTING, 0, null); + if ( file is null ) + throw new Exception("Couldn't read \""~filename~"\": "~lastError); + fileMapping = CreateFileMapping(file, null, PAGE_READONLY, 0, 0, null); + if ( fileMapping is null ) + throw new Exception("Couldn't create file mapping for \""~filename~"\": "~lastError); + map = MapViewOfFile(fileMapping, FILE_MAP_READ, 0, 0, 0); + if ( map is null ) + throw new Exception("Couldn't map view of file \""~filename~"\": "~lastError); + + MINIDUMP_DIRECTORY* mdDir; + void *streamPtr; + size_t streamSize; + + // load thread info + if ( !MiniDumpReadDumpStream(map, MINIDUMP_STREAM_TYPE.ThreadListStream, &mdDir, &streamPtr, &streamSize) ) + throw new Exception("Error no ThreadList in minidump \""~filename~"\": "~lastError); + MINIDUMP_THREAD_LIST* threadList = cast(MINIDUMP_THREAD_LIST*)streamPtr; + threads = (cast(MINIDUMP_THREAD*)(cast(ubyte*)streamPtr+4))[0..threadList.NumberOfThreads]; + + if ( !MiniDumpReadDumpStream(map, UserStreamType.ThreadInfo, &mdDir, &streamPtr, &streamSize) ) + throw new Exception("Error no Ddbg ThreadInfo in minidump \""~filename~"\": "~lastError); + threadInfo = cast(ThreadInfo*)streamPtr; + + // load memory info + if ( MiniDumpReadDumpStream(map, MINIDUMP_STREAM_TYPE.MemoryListStream, &mdDir, &streamPtr, &streamSize) ) + { + MINIDUMP_MEMORY_LIST* mml = cast(MINIDUMP_MEMORY_LIST*)streamPtr; + memoryDescriptors = (cast(MINIDUMP_MEMORY_DESCRIPTOR*)(cast(ubyte*)streamPtr+4))[0..mml.NumberOfMemoryRanges]; + } + + // load exception info + if ( MiniDumpReadDumpStream(map, MINIDUMP_STREAM_TYPE.ExceptionStream, &mdDir, &streamPtr, &streamSize) ) + { + MINIDUMP_EXCEPTION_STREAM* mes = cast(MINIDUMP_EXCEPTION_STREAM*)streamPtr; + foreach ( i, t; threads ) + { + if ( t.ThreadId == mes.ThreadId ) { + selectedThread = i; + break; + } + } + exceptionRecord = new EXCEPTION_RECORD; + exceptionRecord.ExceptionCode = mes.ExceptionRecord.ExceptionCode; + exceptionRecord.ExceptionFlags = mes.ExceptionRecord.ExceptionFlags; + exceptionRecord.ExceptionAddress = cast(void*)mes.ExceptionRecord.ExceptionAddress; + exceptionRecord.NumberParameters = 4; + exceptionRecord.ExceptionInformation[0] = 0; + exceptionRecord.ExceptionInformation[1] = 0; + exceptionRecord.ExceptionInformation[2] = 0; + exceptionRecord.ExceptionInformation[3] = 0; + } + + if ( exceptionRecord !is null && MiniDumpReadDumpStream(map, UserStreamType.DExceptionInfo, &mdDir, &streamPtr, &streamSize) ) + { + string className, + message; + void* ptr = streamPtr; + className = (cast(char*)(ptr+size_t.sizeof))[0..*cast(size_t*)ptr]; + ptr += className.length+size_t.sizeof; + message = (cast(char*)(ptr+size_t.sizeof))[0..*cast(size_t*)ptr]; + + exceptionRecord.NumberParameters = 4; + exceptionRecord.ExceptionInformation[0] = className.length; + exceptionRecord.ExceptionInformation[1] = cast(size_t)className.ptr; + exceptionRecord.ExceptionInformation[2] = message.length; + exceptionRecord.ExceptionInformation[3] = cast(size_t)message.ptr; + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + ~this() + { + UnmapViewOfFile(map); + CloseHandle(fileMapping); + CloseHandle(file); + } + + static extern(Windows) bool callback(PVOID CallbackParam, PMINIDUMP_CALLBACK_INPUT CallbackInput, PMINIDUMP_CALLBACK_OUTPUT CallbackOutput) + { + DbgIO.println("MINIDUMP CALLBACK"); + return true; + } + + /********************************************************************************************** + + **********************************************************************************************/ + static bool haveMiniDump() + { + return MiniDumpWriteDump !is null; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void* rvaToVa(size_t rva) + { + return map+rva; + } + + ubyte[] getMemory(MINIDUMP_LOCATION_DESCRIPTOR mld) + { + return (cast(ubyte*)rvaToVa(mld.Rva))[0..mld.DataSize]; + } + + CONTEXT* getContext() + { + return cast(CONTEXT*)rvaToVa(threads[selectedThread].ThreadContext.Rva); + } + + MINIDUMP_THREAD* thread() + { + return &threads[selectedThread]; + } + + ubyte[] readMemory(size_t ptr, size_t size) + { + foreach ( md; memoryDescriptors ) + { + size_t mdSize = md.Memory.DataSize, + mdBase = cast(size_t)md.StartOfMemoryRange; + debug DbgIO.println("MiniDump: Memory block 0x%x 0x%x", mdBase, mdSize); + + if ( ptr >= mdBase && ptr+size <= mdBase+mdSize ) + return getMemory(md.Memory)[ptr-mdBase..ptr-mdBase+size]; + } + debug DbgIO.println("Memory block 0x%x - 0x%x not available in minidump", ptr, ptr+size); + return null; + } + + void selectThread(size_t threadId) + { + foreach ( i, thread; threads ) + { + if ( threadId == thread.ThreadId ) { + selectedThread = i; + break; + } + } + } + + /********************************************************************************************** + + **********************************************************************************************/ + static bool writeMiniDump(string filename, DbgProcess process, uint threadId, EXCEPTION_RECORD* exrec=null, string exClassName=null, string exMsg=null) + { + if ( !haveMiniDump ) + return false; + + // create exception information + MINIDUMP_EXCEPTION_INFORMATION* eiPtr; + MINIDUMP_EXCEPTION_INFORMATION ei; + + MINIDUMP_USER_STREAM[] ustreams; + + if ( exrec !is null && (threadId in process.threads) !is null ) + { + EXCEPTION_POINTERS ep; + ep.ExceptionRecord = exrec; + CONTEXT ctx; + process.threads[threadId].getContext(ctx, CONTEXT_FULL | CONTEXT_FLOATING_POINT | CONTEXT_EXTENDED_REGISTERS); + ep.ContextRecord = &ctx; + + eiPtr = &ei; + ei.ExceptionPointers = &ep; + ei.ThreadId = threadId; + ei.ClientPointers = false; + + ustreams.length = ustreams.length+1; + ustreams[$-1].Type = UserStreamType.DExceptionInfo; + ubyte[] data; + size_t len = exClassName.length; + data ~= (cast(ubyte*)&len)[0..size_t.sizeof]; + data ~= cast(ubyte[])exClassName; + len = exMsg.length; + data ~= (cast(ubyte*)&len)[0..size_t.sizeof]; + data ~= cast(ubyte[])exMsg; + + ustreams[$-1].Buffer = data.ptr; + ustreams[$-1].BufferSize = data.length; + } + + // write custom thread info + ustreams.length = ustreams.length+1; + ustreams[$-1].Type = UserStreamType.ThreadInfo; + + ThreadInfo ti; + ti.mainThreadId = process.mainThreadId; + ti.currentThreadId = threadId; + ustreams[$-1].Buffer = &ti; + ustreams[$-1].BufferSize = ThreadInfo.sizeof; + + // write minidump + MINIDUMP_USER_STREAM_INFORMATION usi; + usi.UserStreamCount = ustreams.length; + usi.UserStreamArray = ustreams.ptr; + + auto file = CreateFile(toStringz(filename), FILE_ALL_ACCESS, 0, null, CREATE_ALWAYS, 0, null); + bool res = cast(bool)MiniDumpWriteDump(process.process_handle, process.processId, file, MINIDUMP_TYPE.MiniDumpNormal, eiPtr, &usi, null); + CloseHandle(file); + return res; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/udis86.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/udis86.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,956 @@ +/* ----------------------------------------------------------------------------- + * udis86.h + * + * converted to D by Jascha Wetzel + * + * Copyright (c) 2002, 2003, 2004 Vivek Mohan + * All rights reserved. See (LICENSE) + * ----------------------------------------------------------------------------- + */ + +extern(C) +{ + +struct __nt_context { int esp; int info; int prev; int handler; int stable; int sindex; int ebp; }; + +/* ----------------------------------------------------------------------------- + * types.h + * + * Copyright (c) 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ + +import std.c.stdio; + +extern const char* ud_mnemonics[]; + +enum ud_mnemonic_code +{ + UD_Iaaa, + UD_Iaad, + UD_Iaam, + UD_Iaas, + UD_Iadc, + UD_Iadd, + UD_Iaddpd, + UD_Iaddps, + UD_Iaddsd, + UD_Iaddss, + UD_Iand, + UD_Iandnpd, + UD_Iandnps, + UD_Iandpd, + UD_Iandps, + UD_Iarpl, + UD_Ibound, + UD_Ibsf, + UD_Ibsr, + UD_Ibswap, + UD_Ibt, + UD_Ibtc, + UD_Ibtr, + UD_Ibts, + UD_Icall, + UD_Icbw, + UD_Icdqe, + UD_Iclc, + UD_Icld, + UD_Iclflush, + UD_Icli, + UD_Iclts, + UD_Icmc, + UD_Icmovo, + UD_Icmovno, + UD_Icmovb, + UD_Icmovnb, + UD_Icmovz, + UD_Icmovnz, + UD_Icmovbe, + UD_Icmovnbe, + UD_Icmovs, + UD_Icmovns, + UD_Icmovp, + UD_Icmovnp, + UD_Icmovl, + UD_Icmovnl, + UD_Icmovle, + UD_Icmovnle, + UD_Icmp, + UD_Icmppd, + UD_Icmpps, + UD_Icmps, + UD_Icmpsb, + UD_Icmpsd, + UD_Icmpsq, + UD_Icmpss, + UD_Icmpsw, + UD_Icmpxchg, + UD_Icmpxchg8b, + UD_Icomisd, + UD_Icomiss, + UD_Icpuid, + UD_Icqd, + UD_Icqo, + UD_Icvtdq2pd, + UD_Icvtdq2ps, + UD_Icvtpd2dq, + UD_Icvtpd2pi, + UD_Icvtpd2ps, + UD_Icvtpi2pd, + UD_Icvtpi2ps, + UD_Icvtps2dq, + UD_Icvtps2pd, + UD_Icvtps2pi, + UD_Icvtsd2si, + UD_Icvtsd2ss, + UD_Icvtsi2sd, + UD_Icvtsi2ss, + UD_Icvtss2sd, + UD_Icvtss2si, + UD_Icvttpd2dq, + UD_Icvttpd2pi, + UD_Icvttps2dq, + UD_Icvttps2pi, + UD_Icvttsd2si, + UD_Icvttsi2sd, + UD_Icvttsi2ss, + UD_Icvttss2si, + UD_Icwd, + UD_Icwde, + UD_Icdq, + UD_Idaa, + UD_Idas, + UD_Idec, + UD_Idiv, + UD_Idivpd, + UD_Idivps, + UD_Idivsd, + UD_Idivss, + UD_Iemms, + UD_Ienter, + UD_Iesc, + UD_If2xm1, + UD_Ifsxm1, + UD_Ifabs, + UD_Ifadd, + UD_Ifaddp, + UD_Ifbld, + UD_Ifbstp, + UD_Ifchs, + UD_Ifclex, + UD_Ifcmovb, + UD_Ifcmovbe, + UD_Ifcmove, + UD_Ifcmovnb, + UD_Ifcmovnbe, + UD_Ifcmovne, + UD_Ifcmovnu, + UD_Ifcmovu, + UD_Ifcom, + UD_Ifcomi, + UD_Ifcomp, + UD_Ifcomip, + UD_Ifcompp, + UD_Ifcos, + UD_Ifdecstp, + UD_Ifdiv, + UD_Ifdivp, + UD_Ifdivr, + UD_Ifdivrp, + UD_Ifemms, + UD_Iffree, + UD_Ifiadd, + UD_Ificom, + UD_Ificomp, + UD_Ifidiv, + UD_Ifidivr, + UD_Ifidw, + UD_Ifidwr, + UD_Ifild, + UD_Ifimul, + UD_Ifincstp, + UD_Ifinit, + UD_Ifist, + UD_Ifistp, + UD_Ifisub, + UD_Ifisubr, + UD_Ifld, + UD_Ifld1, + UD_Ifldcw, + UD_Ifldenv, + UD_Ifldl2e, + UD_Ifldl2t, + UD_Ifldlg2, + UD_Ifldln2, + UD_Ifldlpi, + UD_Ifldx, + UD_Ifldz, + UD_Ifmul, + UD_Ifmulp, + UD_Ifnclex, + UD_Ifncstp, + UD_Ifninit, + UD_Ifnop, + UD_Ifnsave, + UD_Ifnstcw, + UD_Ifnstenv, + UD_Ifnstsw, + UD_Ifpatan, + UD_Ifprem, + UD_Ifprem1, + UD_Ifptan, + UD_Ifpxtract, + UD_Ifrndint, + UD_Ifrstor, + UD_Ifsave, + UD_Ifscale, + UD_Ifsin, + UD_Ifsincos, + UD_Ifsqrt, + UD_Ifst, + UD_Ifstcw, + UD_Ifstenv, + UD_Ifstp, + UD_Ifstsw, + UD_Ifsub, + UD_Ifsubp, + UD_Ifsubr, + UD_Ifsubrp, + UD_Iftst, + UD_Ifucom, + UD_Ifucomi, + UD_Ifucomip, + UD_Ifucomp, + UD_Ifucompp, + UD_Ifwait, + UD_Ifxam, + UD_Ifxch, + UD_Ifxrstor, + UD_Ifxsave, + UD_Ifxtract, + UD_Ifyl2x, + UD_Ifyl2xp1, + UD_Ihlt, + UD_Iidiv, + UD_Iimul, + UD_Iin, + UD_Iinc, + UD_Iins, + UD_Iinsb, + UD_Iinsd, + UD_Iinsw, + UD_Iint, + UD_Iinto, + UD_Iinvd, + UD_Iinvlpg, + UD_Iiretw, + UD_Iiretd, + UD_Iiretq, + UD_Ijcxz, + UD_Ijecxz, + UD_Ijmp, + UD_Ijrcxz, + UD_Ijo, + UD_Ijno, + UD_Ijb, + UD_Ijnb, + UD_Ijz, + UD_Ijnz, + UD_Ijbe, + UD_Ijnbe, + UD_Ijs, + UD_Ijns, + UD_Ijp, + UD_Ijnp, + UD_Ijl, + UD_Ijnl, + UD_Ijle, + UD_Ijnle, + UD_Ilahf, + UD_Ilar, + UD_Ildmxcsr, + UD_Ilds, + UD_Ilea, + UD_Ileave, + UD_Iles, + UD_Ilfence, + UD_Ilfs, + UD_Ilgdt, + UD_Ilgs, + UD_Ilidt, + UD_Illdt, + UD_Ilmsw, + UD_Ilock, + UD_Ilods, + UD_Ilodsb, + UD_Ilodsd, + UD_Ilodsq, + UD_Ilodsw, + UD_Iloop, + UD_Iloope, + UD_Iloopn, + UD_Iloopne, + UD_Iloopnz, + UD_Iloopz, + UD_Ilsl, + UD_Ilss, + UD_Iltr, + UD_Imaskmovdqu, + UD_Imaskmovq, + UD_Imaxpd, + UD_Imaxps, + UD_Imaxsd, + UD_Imaxss, + UD_Imfence, + UD_Iminpd, + UD_Iminps, + UD_Iminsd, + UD_Iminss, + UD_Imov, + UD_Imovapd, + UD_Imovaps, + UD_Imovd, + UD_Imovdq2q, + UD_Imovdqa, + UD_Imovdqu, + UD_Imovhlps, + UD_Imovhpd, + UD_Imovhps, + UD_Imovlhps, + UD_Imovlpd, + UD_Imovlps, + UD_Imovmskpd, + UD_Imovmskps, + UD_Imovnig, + UD_Imovntdq, + UD_Imovnti, + UD_Imovntpd, + UD_Imovntps, + UD_Imovntq, + UD_Imovq, + UD_Imovq2dq, + UD_Imovqa, + UD_Imovs, + UD_Imovsb, + UD_Imovsd, + UD_Imovsq, + UD_Imovss, + UD_Imovsw, + UD_Imovsx, + UD_Imovsxd, + UD_Imovupd, + UD_Imovups, + UD_Imovzx, + UD_Imul, + UD_Imulpd, + UD_Imulps, + UD_Imulsd, + UD_Imulss, + UD_Ineg, + UD_Inop, + UD_Inot, + UD_Ior, + UD_Iorpd, + UD_Iorps, + UD_Iout, + UD_Iouts, + UD_Ioutsb, + UD_Ioutsd, + UD_Ioutsw, + UD_Ipackssdw, + UD_Ipacksswb, + UD_Ipackusdw, + UD_Ipackuswb, + UD_Ipaddb, + UD_Ipaddd, + UD_Ipaddq, + UD_Ipaddsb, + UD_Ipaddsw, + UD_Ipaddusb, + UD_Ipaddusw, + UD_Ipaddw, + UD_Ipand, + UD_Ipandn, + UD_Ipavgb, + UD_Ipavgusb, + UD_Ipavgw, + UD_Ipcmpeqb, + UD_Ipcmpeqd, + UD_Ipcmpeqw, + UD_Ipcmpgtb, + UD_Ipcmpgtd, + UD_Ipcmpgtw, + UD_Ipextrw, + UD_Ipf2id, + UD_Ipf2iw, + UD_Ipfacc, + UD_Ipfadd, + UD_Ipfcmpeq, + UD_Ipfcmpge, + UD_Ipfcmpgt, + UD_Ipfmax, + UD_Ipfmin, + UD_Ipfmul, + UD_Ipfnacc, + UD_Ipfpnacc, + UD_Ipfrcp, + UD_Ipfrcpit1, + UD_Ipfrcpit2, + UD_Ipfrsqit1, + UD_Ipfrsqrt, + UD_Ipfsub, + UD_Ipfsubr, + UD_Ipi2fd, + UD_Ipi2fw, + UD_Ipinsrw, + UD_Ipmaddwd, + UD_Ipmaxsw, + UD_Ipmaxub, + UD_Ipminsw, + UD_Ipminub, + UD_Ipmovmskb, + UD_Ipmulhrw, + UD_Ipmulhuw, + UD_Ipmulhw, + UD_Ipmullw, + UD_Ipmuludq, + UD_Ipop, + UD_Ipopa, + UD_Ipopad, + UD_Ipopfw, + UD_Ipopfd, + UD_Ipopfq, + UD_Ipor, + UD_Iprefetch, + UD_Ipsadbw, + UD_Ipshufd, + UD_Ipshufhw, + UD_Ipshuflw, + UD_Ipshufw, + UD_Ipslld, + UD_Ipslldq, + UD_Ipsllq, + UD_Ipsllw, + UD_Ipsrad, + UD_Ipsraw, + UD_Ipsraq, + UD_Ipsrld, + UD_Ipsrldq, + UD_Ipsrlq, + UD_Ipsrlw, + UD_Ipsubb, + UD_Ipsubd, + UD_Ipsubq, + UD_Ipsubsb, + UD_Ipsubsw, + UD_Ipsubusb, + UD_Ipsubusw, + UD_Ipsubw, + UD_Ipswapd, + UD_Ipunpckhbw, + UD_Ipunpckhdq, + UD_Ipunpckhqdq, + UD_Ipunpckhwd, + UD_Ipunpcklbw, + UD_Ipunpckldq, + UD_Ipunpcklqdq, + UD_Ipunpcklwd, + UD_Ipush, + UD_Ipusha, + UD_Ipushad, + UD_Ipushfw, + UD_Ipushfd, + UD_Ipushfq, + UD_Ipxor, + UD_Ircl, + UD_Ircpps, + UD_Ircpss, + UD_Ircr, + UD_Irdivisr, + UD_Irdmsr, + UD_Irdpmc, + UD_Irdtsc, + UD_Irep, + UD_Irepne, + UD_Iret, + UD_Iretf, + UD_Irol, + UD_Iror, + UD_Irsm, + UD_Irsqrtps, + UD_Irsqrtss, + UD_Isahf, + UD_Isal, + UD_Isalc, + UD_Isar, + UD_Isbb, + UD_Iscas, + UD_Iscasb, + UD_Iscasd, + UD_Iscasq, + UD_Iscasw, + UD_Iseto, + UD_Isetno, + UD_Isetb, + UD_Isetnb, + UD_Isetz, + UD_Isetnz, + UD_Isetbe, + UD_Isetnbe, + UD_Isets, + UD_Isetns, + UD_Isetp, + UD_Isetnp, + UD_Isetl, + UD_Isetnl, + UD_Isetle, + UD_Isetnle, + UD_Isfence, + UD_Isgdt, + UD_Ishl, + UD_Ishld, + UD_Ishr, + UD_Ishrd, + UD_Ishufpd, + UD_Ishufps, + UD_Isidt, + UD_Isldt, + UD_Ismsw, + UD_Isqrtpd, + UD_Isqrtps, + UD_Isqrtsd, + UD_Isqrtss, + UD_Istc, + UD_Istd, + UD_Isti, + UD_Istmxcsr, + UD_Istos, + UD_Istosb, + UD_Istosw, + UD_Istosd, + UD_Istr, + UD_Isub, + UD_Isubpd, + UD_Isubps, + UD_Isubsd, + UD_Isubss, + UD_Iswapgs, + UD_Isyscall, + UD_Isysenter, + UD_Isysexit, + UD_Isysret, + UD_Itest, + UD_Iucomisd, + UD_Iucomiss, + UD_Iud2, + UD_Iunpckhpd, + UD_Iunpckhps, + UD_Iunpcklpd, + UD_Iunpcklps, + UD_Iverr, + UD_Iverw, + UD_Iwait, + UD_Iwbinvd, + UD_Iwrmsr, + UD_Ixadd, + UD_Ixchg, + UD_Ixlat, + UD_Ixlatb, + UD_Ixor, + UD_Ixorpd, + UD_Ixorps, + UD_Iinvalid, + UD_Igrp, + UD_Ia32, + UD_Io32, + UD_Ies, + UD_Ifs, + UD_Igs, + UD_Ics, + UD_Ids, + UD_Iss, + UD_Ix87, + UD_I3dnow, + UD_Idb, + UD_Icmpxchg16b, + UD_Istosq, + UD_Iint3, + UD_Imovsldup, + UD_Imovshdup, + UD_Imovddup, + UD_Irdtscp, + UD_Ivmrun, + UD_Ivmmcall, + UD_Ivmload, + UD_Ivmsave, + UD_Istgi, + UD_Iclgi, + UD_Iskinit, + UD_Iinvlpga, + UD_Ija, + UD_Ijae, + UD_Ijg, + UD_Ijge, + UD_Ijc, + UD_Ijnc, + UD_Ifisttp, + UD_Iprefetchnta, + UD_Iprefetcht0, + UD_Iprefetcht1, + UD_Iprefetcht2, + UD_Icmovae, + UD_Icmova, + UD_Icmovge, + UD_Icmovg, + UD_Iseta, + UD_Isetge, + UD_Isetg, + UD_Ipause, + UD_Ina, + UD_Ihaddpd, + UD_Ihsubpd, + UD_Iaddsubpd, + UD_Ihaddps, + UD_Ihsubps, + UD_Iaddsubps, + UD_Ilddqu, + UD_Iint1, + UD_Ivmcall, + UD_Ivmlaunch, + UD_Ivmresume, + UD_Ivmxoff, + UD_Imonitor, + UD_Imwait, + UD_Ivmptrld, + UD_Ivmptrst, + UD_Ivmclear, + UD_Ivmxon, + UD_Inone, + UD_I3vil +} + + +/* ----------------------------------------------------------------------------- + * All possible "types" of objects in udis86. Order is Important! + * ----------------------------------------------------------------------------- + */ +enum ud_type +{ + UD_NONE, + + /* 8 bit GPRs */ + UD_R_AL, UD_R_CL, UD_R_DL, UD_R_BL, + UD_R_AH, UD_R_CH, UD_R_DH, UD_R_BH, + UD_R_SPL, UD_R_BPL, UD_R_SIL, UD_R_DIL, + UD_R_R8B, UD_R_R9B, UD_R_R10B, UD_R_R11B, + UD_R_R12B, UD_R_R13B, UD_R_R14B, UD_R_R15B, + + /* 16 bit GPRs */ + UD_R_AX, UD_R_CX, UD_R_DX, UD_R_BX, + UD_R_SP, UD_R_BP, UD_R_SI, UD_R_DI, + UD_R_R8W, UD_R_R9W, UD_R_R10W, UD_R_R11W, + UD_R_R12W, UD_R_R13W, UD_R_R14W, UD_R_R15W, + + /* 32 bit GPRs */ + UD_R_EAX, UD_R_ECX, UD_R_EDX, UD_R_EBX, + UD_R_ESP, UD_R_EBP, UD_R_ESI, UD_R_EDI, + UD_R_R8D, UD_R_R9D, UD_R_R10D, UD_R_R11D, + UD_R_R12D, UD_R_R13D, UD_R_R14D, UD_R_R15D, + + /* 64 bit GPRs */ + UD_R_RAX, UD_R_RCX, UD_R_RDX, UD_R_RBX, + UD_R_RSP, UD_R_RBP, UD_R_RSI, UD_R_RDI, + UD_R_R8, UD_R_R9, UD_R_R10, UD_R_R11, + UD_R_R12, UD_R_R13, UD_R_R14, UD_R_R15, + + /* segment registers */ + UD_R_ES, UD_R_CS, UD_R_SS, UD_R_DS, + UD_R_FS, UD_R_GS, + + /* control registers*/ + UD_R_CR0, UD_R_CR1, UD_R_CR2, UD_R_CR3, + UD_R_CR4, UD_R_CR5, UD_R_CR6, UD_R_CR7, + UD_R_CR8, UD_R_CR9, UD_R_CR10, UD_R_CR11, + UD_R_CR12, UD_R_CR13, UD_R_CR14, UD_R_CR15, + + /* debug registers */ + UD_R_DR0, UD_R_DR1, UD_R_DR2, UD_R_DR3, + UD_R_DR4, UD_R_DR5, UD_R_DR6, UD_R_DR7, + UD_R_DR8, UD_R_DR9, UD_R_DR10, UD_R_DR11, + UD_R_DR12, UD_R_DR13, UD_R_DR14, UD_R_DR15, + + /* mmx registers */ + UD_R_MM0, UD_R_MM1, UD_R_MM2, UD_R_MM3, + UD_R_MM4, UD_R_MM5, UD_R_MM6, UD_R_MM7, + + /* x87 registers */ + UD_R_ST0, UD_R_ST1, UD_R_ST2, UD_R_ST3, + UD_R_ST4, UD_R_ST5, UD_R_ST6, UD_R_ST7, + + /* extended multimedia registers */ + UD_R_XMM0, UD_R_XMM1, UD_R_XMM2, UD_R_XMM3, + UD_R_XMM4, UD_R_XMM5, UD_R_XMM6, UD_R_XMM7, + UD_R_XMM8, UD_R_XMM9, UD_R_XMM10, UD_R_XMM11, + UD_R_XMM12, UD_R_XMM13, UD_R_XMM14, UD_R_XMM15, + + UD_R_RIP, + + /* Operand Types */ + UD_OP_REG, UD_OP_MEM, UD_OP_PTR, UD_OP_IMM, + UD_OP_JIMM, UD_OP_CONST +} + +/* ----------------------------------------------------------------------------- + * struct ud_operand - Disassembled instruction Operand. + * ----------------------------------------------------------------------------- + */ +struct ptr_t +{ + ushort seg; + uint off; +} +union lval_t +{ + byte sbyte; + ubyte _ubyte; + short sword; + ushort uword; + int sdword; + uint udword; + long sqword; + ulong uqword; + + ptr_t ptr; +} +struct ud_operand +{ + ud_type type; + ubyte size; + lval_t lval; + + ud_type base; + ud_type index; + ubyte offset; + ubyte scale; +}; + +/* ----------------------------------------------------------------------------- + * struct ud - The udis86 object. + * ----------------------------------------------------------------------------- + */ +struct ud +{ + int (*inp_hook) (ud*); + ubyte inp_curr; + ubyte inp_fill; + FILE* inp_file; + ubyte inp_ctr; + ubyte* inp_buff; + ubyte* inp_buff_end; + ubyte inp_end; + void (*translator)(ud*); + ulong insn_offset; + char insn_hexcode[32]; + char insn_buffer[64]; + uint insn_fill; + ubyte dis_mode; + ulong pc; + ubyte vendor; + map_entry* mapen; + ud_mnemonic_code mnemonic; + ud_operand operand[3]; + ubyte error; + ubyte pfx_rex; + ubyte pfx_seg; + ubyte pfx_opr; + ubyte pfx_adr; + ubyte pfx_lock; + ubyte pfx_rep; + ubyte pfx_repe; + ubyte pfx_repne; + ubyte pfx_insn; + ubyte default64; + ubyte opr_mode; + ubyte adr_mode; + ubyte br_far; + ubyte br_near; + ubyte c1; + ubyte c2; + ubyte c3; + ubyte inp_cache[256]; + ubyte inp_sess[64]; + +} + +enum map_operand_type +{ + OP_NONE = 0, + OP_A, + OP_E, + OP_M, + OP_G, + OP_I, + OP_AL, + OP_CL, + OP_DL, + OP_BL, + OP_AH, + OP_CH, + OP_DH, + OP_BH, + OP_ALr8b, + OP_CLr9b, + OP_DLr10b, + OP_BLr11b, + OP_AHr12b, + OP_CHr13b, + OP_DHr14b, + OP_BHr15b, + OP_AX, + OP_CX, + OP_DX, + OP_BX, + OP_SI, + OP_DI, + OP_SP, + OP_BP, + OP_rAX, + OP_rCX, + OP_rDX, + OP_rBX, + OP_rSP, + OP_rBP, + OP_rSI, + OP_rDI, + OP_rAXr8, + OP_rCXr9, + OP_rDXr10, + OP_rBXr11, + OP_rSPr12, + OP_rBPr13, + OP_rSIr14, + OP_rDIr15, + OP_eAX, + OP_eCX, + OP_eDX, + OP_eBX, + OP_eSP, + OP_eBP, + OP_eSI, + OP_eDI, + OP_ES, + OP_CS, + OP_SS, + OP_DS, + OP_FS, + OP_GS, + OP_ST0, + OP_ST1, + OP_ST2, + OP_ST3, + OP_ST4, + OP_ST5, + OP_ST6, + OP_ST7, + OP_J, + OP_S, + OP_O, + OP_I1, + OP_I3, + OP_V, + OP_W, + OP_Q, + OP_P, + OP_R, + OP_C, + OP_D, + OP_VR, + OP_PR +} + +struct map_operand +{ + map_operand_type type; + ubyte size; +} + +struct map_entry +{ + ud_mnemonic_code mnemonic; + map_operand operand1; + map_operand operand2; + map_operand operand3; + uint prefix; +} + +/* ----------------------------------------------------------------------------- + * Type-definitions + * ----------------------------------------------------------------------------- + */ +alias ud_type ud_type_t; +alias ud_mnemonic_code ud_mnemonic_code_t; + +alias ud ud_t; +alias ud_operand ud_operand_t; + +/* +#define UD_SYN_INTEL ud_translate_intel +#define UD_SYN_ATT ud_translate_att +#define UD_EOI -1 +#define UD_INP_CACHE_SZ 32 +#define UD_VENDOR_AMD 0 +#define UD_VENDOR_INTEL 1 +*/ + +/* ----------------------------------------------------------------------------- + * extern.h + * + * Copyright (c) 2004, 2005, 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ + +/* ============================= PUBLIC API ================================= */ + +extern void ud_init(ud*); + +extern void ud_set_mode(ud*, ubyte); + +extern void ud_set_pc(ud*, ulong); + +extern void ud_set_input_hook(ud*, int (*)(ud*)); + +extern void ud_set_input_buffer(ud*, ubyte*, size_t); + +extern void ud_set_input_file(ud*, FILE*); + +extern void ud_set_vendor(ud*, ushort); + +extern void ud_set_syntax(ud*, void function(ud*)); + +extern void ud_input_skip(ud*, size_t); + +extern int ud_input_end(ud*); + +extern uint ud_decode(ud*); + +extern uint ud_disassemble(ud*); + +extern void ud_translate_intel(ud*); + +extern void ud_translate_att(ud*); + +extern char* ud_insn_asm(ud* u); + +extern ubyte* ud_insn_ptr(ud* u); + +extern ulong ud_insn_off(ud*); + +extern char* ud_insn_hex(ud*); + +extern uint ud_insn_len(ud* u); + +extern char* ud_lookup_mnemonic(ud_mnemonic_code c); + +} // extern(C) diff -r 586e4a649642 -r 4a9dcbd9e54f src/util.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/util.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,648 @@ +/* Ddbg - Win32 Debugger for the D programming language + * Copyright (c) 2007 Jascha Wetzel + * All rights reserved. See LICENSE.TXT for details. + */ + +import std.ctype; +import std.stdio; +import std.string; +import std.c.string; +import std.c.stdio; +import std.format; +import std.date : getUTCtime, d_time, TicksPerSecond; +import std.demangle; + +import win32.winbase; +import win32.windef; + +import std.typeinfo.ti_AC; +import std.typeinfo.ti_Acdouble; +import std.typeinfo.ti_Acfloat; +import std.typeinfo.ti_Acreal; +import std.typeinfo.ti_Adouble; +import std.typeinfo.ti_Afloat; +import std.typeinfo.ti_Ag; +import std.typeinfo.ti_Aint; +import std.typeinfo.ti_Along; +import std.typeinfo.ti_Areal; +import std.typeinfo.ti_Ashort; +import std.typeinfo.ti_byte; +import std.typeinfo.ti_C; +import std.typeinfo.ti_cdouble; +import std.typeinfo.ti_cfloat; +import std.typeinfo.ti_char; +import std.typeinfo.ti_creal; +import std.typeinfo.ti_dchar; +import std.typeinfo.ti_delegate; +import std.typeinfo.ti_double; +import std.typeinfo.ti_float; +import std.typeinfo.ti_idouble; +import std.typeinfo.ti_ifloat; +import std.typeinfo.ti_int; +import std.typeinfo.ti_ireal; +import std.typeinfo.ti_long; +import std.typeinfo.ti_ptr; +import std.typeinfo.ti_real; +import std.typeinfo.ti_short; +import std.typeinfo.ti_ubyte; +import std.typeinfo.ti_uint; +import std.typeinfo.ti_ulong; +import std.typeinfo.ti_ushort; +import std.typeinfo.ti_void; +import std.typeinfo.ti_wchar; + +/************************************************************************************************** + +**************************************************************************************************/ +T dmax(T)(T a, T b) +{ + return ab?b:a; +} + +/************************************************************************************************** + +**************************************************************************************************/ +uint intFromStr(string str) +{ + uint i; + foreach_reverse ( c; str ) + i = i<<8 | c; + return i; +} + +/************************************************************************************************** + +**************************************************************************************************/ +string itoa(uint i) +{ + if ( i == 0 ) + return "0"; + string str; + for ( ; i > 0; i /= 10 ) + str = "0123456789"[i%10] ~ str; + return str; +} + +/************************************************************************************************** + +**************************************************************************************************/ +string TODO(string file, uint line, string msg) +{ + return "TODO - "~file~"("~itoa(line)~"): "~msg~""; +} + +/************************************************************************************************** + +**************************************************************************************************/ +string formatTicks(ulong ticks) +{ + SYSTEMTIME stime; + if ( !FileTimeToSystemTime(cast(FILETIME*)&ticks, &stime) ) + return "invalid"; + string str = format("%02d:%02d:%02d.%03d", stime.wHour, stime.wMinute, stime.wSecond, stime.wMilliseconds); + return str; +} + +/************************************************************************************************** + Name lookup for win32 DebugEventCodes. +**************************************************************************************************/ +string getEventName(uint event) +{ + switch ( event ) + { + case EXCEPTION_DEBUG_EVENT : return "EXCEPTION_DEBUG_EVENT"; + case CREATE_THREAD_DEBUG_EVENT : return "CREATE_THREAD_DEBUG_EVENT"; + case CREATE_PROCESS_DEBUG_EVENT : return "CREATE_PROCESS_DEBUG_EVENT"; + case EXIT_THREAD_DEBUG_EVENT : return "EXIT_THREAD_DEBUG_EVENT"; + case EXIT_PROCESS_DEBUG_EVENT : return "EXIT_PROCESS_DEBUG_EVENT"; + case LOAD_DLL_DEBUG_EVENT : return "LOAD_DLL_DEBUG_EVENT"; + case UNLOAD_DLL_DEBUG_EVENT : return "UNLOAD_DLL_DEBUG_EVENT"; + case OUTPUT_DEBUG_STRING_EVENT : return "OUTPUT_DEBUG_STRING_EVENT"; + case RIP_EVENT: return "RIP_EVENT"; + default : break; + } + return ""; +} + +/************************************************************************************************** + Name lookup for win32 ExceptionCodes. +**************************************************************************************************/ +string getExceptionName(uint excpt) +{ + switch ( excpt ) + { + case EXCEPTION_ACCESS_VIOLATION : return "EXCEPTION_ACCESS_VIOLATION"; + case EXCEPTION_ARRAY_BOUNDS_EXCEEDED : return "EXCEPTION_ARRAY_BOUNDS_EXCEEDED"; + case EXCEPTION_BREAKPOINT : return "EXCEPTION_BREAKPOINT"; + case EXCEPTION_DATATYPE_MISALIGNMENT : return "EXCEPTION_DATATYPE_MISALIGNMENT"; + case EXCEPTION_FLT_DENORMAL_OPERAND : return "EXCEPTION_FLT_DENORMAL_OPERAND"; + case EXCEPTION_FLT_DIVIDE_BY_ZERO : return "EXCEPTION_FLT_DIVIDE_BY_ZERO"; + case EXCEPTION_FLT_INEXACT_RESULT : return "EXCEPTION_FLT_INEXACT_RESULT"; + case EXCEPTION_FLT_INVALID_OPERATION : return "EXCEPTION_FLT_INVALID_OPERATION"; + case EXCEPTION_FLT_OVERFLOW : return "EXCEPTION_FLT_OVERFLOW"; + case EXCEPTION_FLT_STACK_CHECK : return "EXCEPTION_FLT_STACK_CHECK"; + case EXCEPTION_FLT_UNDERFLOW : return "EXCEPTION_FLT_UNDERFLOW"; + case EXCEPTION_ILLEGAL_INSTRUCTION : return "EXCEPTION_ILLEGAL_INSTRUCTION"; + case EXCEPTION_IN_PAGE_ERROR : return "EXCEPTION_IN_PAGE_ERROR"; + case EXCEPTION_INT_DIVIDE_BY_ZERO : return "EXCEPTION_INT_DIVIDE_BY_ZERO"; + case EXCEPTION_INT_OVERFLOW : return "EXCEPTION_INT_OVERFLOW"; + case EXCEPTION_INVALID_DISPOSITION : return "EXCEPTION_INVALID_DISPOSITION"; + case EXCEPTION_NONCONTINUABLE_EXCEPTION : return "EXCEPTION_NONCONTINUABLE_EXCEPTION"; + case EXCEPTION_PRIV_INSTRUCTION : return "EXCEPTION_PRIV_INSTRUCTION"; + case EXCEPTION_SINGLE_STEP : return "EXCEPTION_SINGLE_STEP"; + case EXCEPTION_STACK_OVERFLOW : return "EXCEPTION_STACK_OVERFLOW"; + default : break; + } + return ""; +} + +/************************************************************************************************** + Wrapper for Win32 GetLastError. +**************************************************************************************************/ +string lastError() +{ + char[4096] msg; + FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, null, GetLastError(), 0, msg.ptr, msg.length, null); + return msg[0..strlen(msg.ptr)]; +} + +/************************************************************************************************** + Simplified number parser for prefixes. + Returns: number represented by the prefix of name, 0 else +**************************************************************************************************/ +uint parseNumber(inout string name) +{ + uint res; + int i; + while ( name.length > 0 ) + { + if ( !isdigit(name[0]) ) + break; + res = res*10+(name[0]-'0'); + name = name[1..$]; + } + return res; +} + +/************************************************************************************************** + +**************************************************************************************************/ +string typeFromMangled(string mangled) +{ + if ( mangled is null || mangled.length < 4 || mangled[0..2] != "_D" || !isdigit(mangled[2]) ) + return null; + string type = mangled[1..$]; + // skip symbol name + while ( type.length > 1 && type[0] == 'D' && isdigit(type[1]) ) { + type = type[1..$]; + uint len = parseNumber(type); + type = type[len..$]; + } + return type; +} + +/************************************************************************************************** + +**************************************************************************************************/ +string mangleName(string name) +{ + string mangled; + string[] idents = split(name, "."); + foreach ( string id; idents ) + mangled ~= .toString(id.length)~id; + return mangled; +} + +/************************************************************************************************** + +**************************************************************************************************/ +string demangleType(string mangled) +{ + return demangle("_D0"~mangled); +} + +/************************************************************************************************** + +**************************************************************************************************/ +string demangleNameSkip(inout string mangled) +{ + string name; + do { + uint len = parseNumber(mangled); + if ( len <= 0 || len > mangled.length ) + return null; + if ( name.length > 0 ) + name ~= "."; + name ~= mangled[0..len]; + mangled = mangled[len..$]; + } while ( mangled.length > 0 ); + return name; +} + +/************************************************************************************************** + +**************************************************************************************************/ +string demangleName(string mangled) +{ + string name; + if ( mangled.length > 2 && mangled[0..2] == "_D" && isNumeric(mangled[2]) ) + mangled = mangled[2..$]; + else + return mangled; + do { + uint len = parseNumber(mangled); + while ( len <= 0 && mangled.length > 0 ) { + mangled = mangled[1..$]; + len = parseNumber(mangled); + } + if ( len <= 0 || len > mangled.length ) + return name; + if ( name.length > 0 ) + name ~= "."; + name ~= mangled[0..len]; + mangled = mangled[len..$]; + } while ( mangled.length > 0 ); + return name; +} + +/************************************************************************************************** + Wraps win32 stdio functions. Respects io redirection into pipes. +**************************************************************************************************/ +class DbgIO +{ + static HANDLE ddb_read, ddb_write; + static string buffer; + + /********************************************************************************************** + + **********************************************************************************************/ + static this() + { + ddb_read = GetStdHandle(STD_INPUT_HANDLE); + ddb_write = GetStdHandle(STD_OUTPUT_HANDLE); + } + + /********************************************************************************************** + + **********************************************************************************************/ + static string readln() + { + char[128] buf; + uint read; + + int nl_index; + do + { + ReadFile(ddb_read, buf.ptr, buf.length, &read, null); + buffer ~= buf[0..read]; + nl_index = find(buffer, '\n'); + } while ( nl_index < 0 ); + string ret = buffer[0..nl_index]; + buffer = buffer[nl_index+1..$]; + return ret; + } + + /********************************************************************************************** + + **********************************************************************************************/ + static void print(...) + { + string str; + + void putc(dchar c) + { + str ~= c; + } + + doFormat(&putc, _arguments, _argptr); + uint written; + WriteFile(ddb_write, str.ptr, str.length, &written, null); + } + + /********************************************************************************************** + + **********************************************************************************************/ + static void println(...) + { + string str; + + void putc(dchar c) + { + str ~= c; + } + + doFormat(&putc, _arguments, _argptr); + uint written; + str ~= '\n'; + WriteFile(ddb_write, str.ptr, str.length, &written, null); + } + + /********************************************************************************************** + + **********************************************************************************************/ + static void write(string str) + { + uint written; + WriteFile(ddb_write, str.ptr, str.length, &written, null); + } + + /********************************************************************************************** + + **********************************************************************************************/ + static void writeln(string str) + { + uint written; + str ~= "\n"; + WriteFile(ddb_write, str.ptr, str.length, &written, null); + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +TypeInfo TypeInfoFromMangled(string mangled) +{ + TypeInfo res; + TypeInfo* ti = &res; + + for ( uint i=0; ti !is null && i < mangled.length; ++i ) + { + switch ( mangled[i] ) + { + case 'C': + debug DbgIO.println("TypeInfoFromMangled: classinfos not supported, yet"); + return null; + case 'P': + TypeInfo_Pointer tip = new TypeInfo_Pointer; + *ti = tip; + ti = &tip.m_next; + break; + case 'G': + TypeInfo_StaticArray tia = new TypeInfo_StaticArray; + *ti = tia; + ti = &tia.value; + break; + case 'A': + switch ( mangled[i+1] ) + { + case 'v': *ti = new TypeInfo_Av; ti = null; break; + case 'x': + case 'b': *ti = new TypeInfo_Ab; ti = null; break; + case 'g': *ti = new TypeInfo_Ag; ti = null; break; + case 'h': *ti = new TypeInfo_Ah; ti = null; break; + case 's': *ti = new TypeInfo_As; ti = null; break; + case 't': *ti = new TypeInfo_At; ti = null; break; + case 'i': *ti = new TypeInfo_Ai; ti = null; break; + case 'k': *ti = new TypeInfo_Ak; ti = null; break; + case 'l': *ti = new TypeInfo_Al; ti = null; break; + case 'm': *ti = new TypeInfo_Am; ti = null; break; + case 'f': *ti = new TypeInfo_Af; ti = null; break; + case 'd': *ti = new TypeInfo_Ad; ti = null; break; + case 'e': *ti = new TypeInfo_Ae; ti = null; break; + case 'o': *ti = new TypeInfo_Ao; ti = null; break; + case 'p': *ti = new TypeInfo_Ap; ti = null; break; + case 'j': *ti = new TypeInfo_Aj; ti = null; break; + case 'q': *ti = new TypeInfo_Aq; ti = null; break; + case 'r': *ti = new TypeInfo_Ar; ti = null; break; + case 'c': *ti = new TypeInfo_Ac; ti = null; break; + case 'a': *ti = new TypeInfo_Aa; ti = null; break; + case 'u': *ti = new TypeInfo_Au; ti = null; break; + case 'w': *ti = new TypeInfo_Aw; ti = null; break; + default: + TypeInfo_Array tia = new TypeInfo_Array; + *ti = tia; + ti = &tia.value; + } + break; + case 'v': *ti = new TypeInfo_v; ti = null; break; + case 'x': + case 'b': *ti = new TypeInfo_b; ti = null; break; + case 'g': *ti = new TypeInfo_g; ti = null; break; + case 'h': *ti = new TypeInfo_h; ti = null; break; + case 's': *ti = new TypeInfo_s; ti = null; break; + case 't': *ti = new TypeInfo_t; ti = null; break; + case 'i': *ti = new TypeInfo_i; ti = null; break; + case 'k': *ti = new TypeInfo_k; ti = null; break; + case 'l': *ti = new TypeInfo_l; ti = null; break; + case 'm': *ti = new TypeInfo_m; ti = null; break; + case 'f': *ti = new TypeInfo_f; ti = null; break; + case 'd': *ti = new TypeInfo_d; ti = null; break; + case 'e': *ti = new TypeInfo_e; ti = null; break; + case 'o': *ti = new TypeInfo_o; ti = null; break; + case 'p': *ti = new TypeInfo_p; ti = null; break; + case 'j': *ti = new TypeInfo_j; ti = null; break; + case 'q': *ti = new TypeInfo_q; ti = null; break; + case 'r': *ti = new TypeInfo_r; ti = null; break; + case 'c': *ti = new TypeInfo_c; ti = null; break; + case 'a': *ti = new TypeInfo_a; ti = null; break; + case 'u': *ti = new TypeInfo_u; ti = null; break; + case 'w': *ti = new TypeInfo_w; ti = null; break; + default: + debug DbgIO.println("unknown mangled type "~mangled[i]); + assert(0); + } + } + + return res; +} + +/************************************************************************************************** + +**************************************************************************************************/ +class DataReader +{ + ubyte[] data; + uint cursor; + + /********************************************************************************************** + + **********************************************************************************************/ + this(ubyte[] d) + { + data = d; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void alignCursor(ubyte num) + { + cursor += (num + cursor) % num; + assert(cursor<=data.length); + } + + /********************************************************************************************** + + **********************************************************************************************/ + bool available() + { + return cursor data.length ) + throw new Exception("DataReader.seek beyond end of data offset="~.toString(cursor)~", $="~.toString(data.length)); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void relseek(int offset) + { + cursor+=offset; + if ( cursor > data.length ) + throw new Exception("DataReader.seek beyond end of data offset="~.toString(cursor)~", $="~.toString(data.length)); + } + + /********************************************************************************************** + + **********************************************************************************************/ + void peek(out ubyte val) + { + assert(cursor= 0xff && data[cursor] == 0 ) { + ++cursor; + read(len); + } + + assert(cursor+len<=data.length, "dr cursor="~.toString(cursor)~" len="~.toString(len)); + str = (cast(string)data)[cursor..cursor+len]; + cursor+=len; + } + + /********************************************************************************************** + + **********************************************************************************************/ + void readA(T)(out T[] array, uint length) + { + uint size = length*T.sizeof; + assert(cursor<=data.length-size); + array = cast(T[])(data[cursor..cursor+size]); + cursor+=size; + } +} + +/************************************************************************************************** + +**************************************************************************************************/ +string getFullPath(string filename) +{ + char[] fullpath; + char* filepart; + fullpath.length = 4096; + int len = GetFullPathName( + toStringz(filename), + fullpath.length, + fullpath.ptr, + &filepart + ); + if ( len <= 0 ) + return null; + fullpath.length = len; + + char[] longfullpath; + longfullpath.length = 4096; + len = GetLongPathName( + toStringz(fullpath), + longfullpath.ptr, + longfullpath.length + ); + longfullpath.length = len; + return longfullpath; +} + +/************************************************************************************************** + +**************************************************************************************************/ +struct DbgTimer +{ + d_time time; + + void start() + { + time = getUTCtime; + } + + string finish() + { + time = getUTCtime - time; + return format("%d'%03d", time / TicksPerSecond, time % TicksPerSecond); + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f src/win32/dbghelp.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/win32/dbghelp.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,2698 @@ +/* BUILD Version: 0001 Increment this if a change has global effects + +Copyright (c) Microsoft Corporation. All rights reserved. + +Module Name: + + dbghelp.h + +Abstract: + + This module defines the prototypes and constants required for the image + help routines. + + Contains debugging support routines that are redistributable. + +Revision History: + +--*/ + +//#ifndef _DBGHELP_ +//#define _DBGHELP_ +module win32.dbghelp; + +import win32.windef; +import win32.winver; + +// As a general principal always call the 64 bit version +// of every API, if a choice exists. The 64 bit version +// works great on 32 bit platforms, and is forward +// compatible to 64 bit platforms. + +version(Win64) { + version = _IMAGEHLP64; +} + + +extern(Windows) { + +/+ +#ifdef _IMAGEHLP_SOURCE_ + #define IMAGEAPI __stdcall + #define DBHLP_DEPRECIATED +#else + #define IMAGEAPI DECLSPEC_IMPORT __stdcall + #if (_MSC_VER >= 1300) && !defined(MIDL_PASS) + #define DBHLP_DEPRECIATED __declspec(deprecated) + #else + #define DBHLP_DEPRECIATED + #endif +#endif + +#define DBHLPAPI IMAGEAPI + +#define IMAGE_SEPARATION (64*1024) + +typedef struct _LOADED_IMAGE { + PSTR ModuleName; + HANDLE hFile; + PUCHAR MappedAddress; +#ifdef _IMAGEHLP64 + PIMAGE_NT_HEADERS64 FileHeader; +#else + PIMAGE_NT_HEADERS32 FileHeader; +#endif + PIMAGE_SECTION_HEADER LastRvaSection; + ULONG NumberOfSections; + PIMAGE_SECTION_HEADER Sections; + ULONG Characteristics; + BOOLEAN fSystemImage; + BOOLEAN fDOSImage; + LIST_ENTRY Links; + ULONG SizeOfImage; +} LOADED_IMAGE, *PLOADED_IMAGE; + +#define MAX_SYM_NAME 2000 + + +HANDLE +IMAGEAPI +FindDebugInfoFile ( + PSTR FileName, + PSTR SymbolPath, + PSTR DebugFilePath + ); + +typedef BOOL +(CALLBACK *PFIND_DEBUG_FILE_CALLBACK)( + HANDLE FileHandle, + PSTR FileName, + PVOID CallerData + ); + +HANDLE +IMAGEAPI +FindDebugInfoFileEx ( + PSTR FileName, + PSTR SymbolPath, + PSTR DebugFilePath, + PFIND_DEBUG_FILE_CALLBACK Callback, + PVOID CallerData + ); + +typedef BOOL +(CALLBACK *PFINDFILEINPATHCALLBACK)( + PSTR filename, + PVOID context + ); + +BOOL +IMAGEAPI +SymFindFileInPath( + HANDLE hprocess, + LPSTR SearchPath, + LPSTR FileName, + PVOID id, + DWORD two, + DWORD three, + DWORD flags, + LPSTR FoundFile, + PFINDFILEINPATHCALLBACK callback, + PVOID context + ); + +HANDLE +IMAGEAPI +FindExecutableImage( + PSTR FileName, + PSTR SymbolPath, + PSTR ImageFilePath + ); + +typedef BOOL +(CALLBACK *PFIND_EXE_FILE_CALLBACK)( + HANDLE FileHandle, + PSTR FileName, + PVOID CallerData + ); + +HANDLE +IMAGEAPI +FindExecutableImageEx( + PSTR FileName, + PSTR SymbolPath, + PSTR ImageFilePath, + PFIND_EXE_FILE_CALLBACK Callback, + PVOID CallerData + ); + +PIMAGE_NT_HEADERS +IMAGEAPI +ImageNtHeader ( + IN PVOID Base + ); + +PVOID +IMAGEAPI +ImageDirectoryEntryToDataEx ( + IN PVOID Base, + IN BOOLEAN MappedAsImage, + IN USHORT DirectoryEntry, + OUT PULONG Size, + OUT PIMAGE_SECTION_HEADER *FoundHeader OPTIONAL + ); + +PVOID +IMAGEAPI +ImageDirectoryEntryToData ( + IN PVOID Base, + IN BOOLEAN MappedAsImage, + IN USHORT DirectoryEntry, + OUT PULONG Size + ); + +PIMAGE_SECTION_HEADER +IMAGEAPI +ImageRvaToSection( + IN PIMAGE_NT_HEADERS NtHeaders, + IN PVOID Base, + IN ULONG Rva + ); + +PVOID +IMAGEAPI +ImageRvaToVa( + IN PIMAGE_NT_HEADERS NtHeaders, + IN PVOID Base, + IN ULONG Rva, + IN OUT PIMAGE_SECTION_HEADER *LastRvaSection + ); + +// Symbol server exports + +typedef BOOL (WINAPI *PSYMBOLSERVERPROC)(LPCSTR, LPCSTR, PVOID, DWORD, DWORD, LPSTR); +typedef BOOL (WINAPI *PSYMBOLSERVEROPENPROC)(VOID); +typedef BOOL (WINAPI *PSYMBOLSERVERCLOSEPROC)(VOID); +typedef BOOL (WINAPI *PSYMBOLSERVERSETOPTIONSPROC)(UINT_PTR, ULONG64); +typedef BOOL (CALLBACK WINAPI *PSYMBOLSERVERCALLBACKPROC)(UINT_PTR action, ULONG64 data, ULONG64 context); +typedef UINT_PTR (WINAPI *PSYMBOLSERVERGETOPTIONSPROC)(); +typedef BOOL (WINAPI *PSYMBOLSERVERPINGPROC)(LPCSTR); + +#define SSRVOPT_CALLBACK 0x001 +#define SSRVOPT_DWORD 0x002 +#define SSRVOPT_DWORDPTR 0x004 +#define SSRVOPT_GUIDPTR 0x008 +#define SSRVOPT_OLDGUIDPTR 0x010 +#define SSRVOPT_UNATTENDED 0x020 +#define SSRVOPT_NOCOPY 0x040 +#define SSRVOPT_PARENTWIN 0x080 +#define SSRVOPT_PARAMTYPE 0x100 +#define SSRVOPT_SECURE 0x200 +#define SSRVOPT_TRACE 0x400 +#define SSRVOPT_RESET ((ULONG_PTR)-1) + +#define SSRVACTION_TRACE 1 + + +#ifndef _WIN64 +// This api won't be ported to Win64 - Fix your code. + +typedef struct _IMAGE_DEBUG_INFORMATION { + LIST_ENTRY List; + DWORD ReservedSize; + PVOID ReservedMappedBase; + USHORT ReservedMachine; + USHORT ReservedCharacteristics; + DWORD ReservedCheckSum; + DWORD ImageBase; + DWORD SizeOfImage; + + DWORD ReservedNumberOfSections; + PIMAGE_SECTION_HEADER ReservedSections; + + DWORD ReservedExportedNamesSize; + PSTR ReservedExportedNames; + + DWORD ReservedNumberOfFunctionTableEntries; + PIMAGE_FUNCTION_ENTRY ReservedFunctionTableEntries; + DWORD ReservedLowestFunctionStartingAddress; + DWORD ReservedHighestFunctionEndingAddress; + + DWORD ReservedNumberOfFpoTableEntries; + PFPO_DATA ReservedFpoTableEntries; + + DWORD SizeOfCoffSymbols; + PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols; + + DWORD ReservedSizeOfCodeViewSymbols; + PVOID ReservedCodeViewSymbols; + + PSTR ImageFilePath; + PSTR ImageFileName; + PSTR ReservedDebugFilePath; + + DWORD ReservedTimeDateStamp; + + BOOL ReservedRomImage; + PIMAGE_DEBUG_DIRECTORY ReservedDebugDirectory; + DWORD ReservedNumberOfDebugDirectories; + + DWORD ReservedOriginalFunctionTableBaseAddress; + + DWORD Reserved[ 2 ]; + +} IMAGE_DEBUG_INFORMATION, *PIMAGE_DEBUG_INFORMATION; + + +PIMAGE_DEBUG_INFORMATION +IMAGEAPI +MapDebugInformation( + HANDLE FileHandle, + PSTR FileName, + PSTR SymbolPath, + DWORD ImageBase + ); + +BOOL +IMAGEAPI +UnmapDebugInformation( + PIMAGE_DEBUG_INFORMATION DebugInfo + ); + +#endif + +BOOL +IMAGEAPI +SearchTreeForFile( + PSTR RootPath, + PSTR InputPathName, + PSTR OutputPathBuffer + ); + +typedef BOOL +(CALLBACK *PENUMDIRTREE_CALLBACK)( + LPCSTR FilePath, + PVOID CallerData + ); + +BOOL +IMAGEAPI +EnumDirTree( + HANDLE hProcess, + PSTR RootPath, + PSTR InputPathName, + PSTR OutputPathBuffer, + PENUMDIRTREE_CALLBACK Callback, + PVOID CallbackData + ); + +BOOL +IMAGEAPI +MakeSureDirectoryPathExists( + PCSTR DirPath + ); + +// +// UnDecorateSymbolName Flags +// + +#define UNDNAME_COMPLETE (0x0000) // Enable full undecoration +#define UNDNAME_NO_LEADING_UNDERSCORES (0x0001) // Remove leading underscores from MS extended keywords +#define UNDNAME_NO_MS_KEYWORDS (0x0002) // Disable expansion of MS extended keywords +#define UNDNAME_NO_FUNCTION_RETURNS (0x0004) // Disable expansion of return type for primary declaration +#define UNDNAME_NO_ALLOCATION_MODEL (0x0008) // Disable expansion of the declaration model +#define UNDNAME_NO_ALLOCATION_LANGUAGE (0x0010) // Disable expansion of the declaration language specifier +#define UNDNAME_NO_MS_THISTYPE (0x0020) // NYI Disable expansion of MS keywords on the 'this' type for primary declaration +#define UNDNAME_NO_CV_THISTYPE (0x0040) // NYI Disable expansion of CV modifiers on the 'this' type for primary declaration +#define UNDNAME_NO_THISTYPE (0x0060) // Disable all modifiers on the 'this' type +#define UNDNAME_NO_ACCESS_SPECIFIERS (0x0080) // Disable expansion of access specifiers for members +#define UNDNAME_NO_THROW_SIGNATURES (0x0100) // Disable expansion of 'throw-signatures' for functions and pointers to functions +#define UNDNAME_NO_MEMBER_TYPE (0x0200) // Disable expansion of 'static' or 'virtual'ness of members +#define UNDNAME_NO_RETURN_UDT_MODEL (0x0400) // Disable expansion of MS model for UDT returns +#define UNDNAME_32_BIT_DECODE (0x0800) // Undecorate 32-bit decorated names +#define UNDNAME_NAME_ONLY (0x1000) // Crack only the name for primary declaration; + // return just [scope::]name. Does expand template params +#define UNDNAME_NO_ARGUMENTS (0x2000) // Don't undecorate arguments to function +#define UNDNAME_NO_SPECIAL_SYMS (0x4000) // Don't undecorate special names (v-table, vcall, vector xxx, metatype, etc) + +DWORD +IMAGEAPI +WINAPI +UnDecorateSymbolName( + PCSTR DecoratedName, // Name to undecorate + PSTR UnDecoratedName, // If NULL, it will be allocated + DWORD UndecoratedLength, // The maximym length + DWORD Flags // See above. + ); + + +// +// these values are used for synthesized file types +// that can be passed in as image headers instead of +// the standard ones from ntimage.h +// + +#define DBHHEADER_DEBUGDIRS 0x1 + +typedef struct _MODLOAD_DATA { + DWORD ssize; // size of this struct + DWORD ssig; // signature identifying the passed data + PVOID data; // pointer to passed data + DWORD size; // size of passed data + DWORD flags; // options +} MODLOAD_DATA, *PMODLOAD_DATA; + +// +// StackWalking API +// + +typedef enum { + AddrMode1616, + AddrMode1632, + AddrModeReal, + AddrModeFlat +} ADDRESS_MODE; + +typedef struct _tagADDRESS64 { + DWORD64 Offset; + WORD Segment; + ADDRESS_MODE Mode; +} ADDRESS64, *LPADDRESS64; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define ADDRESS ADDRESS64 +#define LPADDRESS LPADDRESS64 +#else +typedef struct _tagADDRESS { + DWORD Offset; + WORD Segment; + ADDRESS_MODE Mode; +} ADDRESS, *LPADDRESS; + +__inline +void +Address32To64( + LPADDRESS a32, + LPADDRESS64 a64 + ) +{ + a64->Offset = (ULONG64)(LONG64)(LONG)a32->Offset; + a64->Segment = a32->Segment; + a64->Mode = a32->Mode; +} + +__inline +void +Address64To32( + LPADDRESS64 a64, + LPADDRESS a32 + ) +{ + a32->Offset = (ULONG)a64->Offset; + a32->Segment = a64->Segment; + a32->Mode = a64->Mode; +} +#endif + +// +// This structure is included in the STACKFRAME structure, +// and is used to trace through usermode callbacks in a thread's +// kernel stack. The values must be copied by the kernel debugger +// from the DBGKD_GET_VERSION and WAIT_STATE_CHANGE packets. +// + +// +// New KDHELP structure for 64 bit system support. +// This structure is preferred in new code. +// +typedef struct _KDHELP64 { + + // + // address of kernel thread object, as provided in the + // WAIT_STATE_CHANGE packet. + // + DWORD64 Thread; + + // + // offset in thread object to pointer to the current callback frame + // in kernel stack. + // + DWORD ThCallbackStack; + + // + // offset in thread object to pointer to the current callback backing + // store frame in kernel stack. + // + DWORD ThCallbackBStore; + + // + // offsets to values in frame: + // + // address of next callback frame + DWORD NextCallback; + + // address of saved frame pointer (if applicable) + DWORD FramePointer; + + + // + // Address of the kernel function that calls out to user mode + // + DWORD64 KiCallUserMode; + + // + // Address of the user mode dispatcher function + // + DWORD64 KeUserCallbackDispatcher; + + // + // Lowest kernel mode address + // + DWORD64 SystemRangeStart; + + DWORD64 Reserved[8]; + +} KDHELP64, *PKDHELP64; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define KDHELP KDHELP64 +#define PKDHELP PKDHELP64 +#else +typedef struct _KDHELP { + + // + // address of kernel thread object, as provided in the + // WAIT_STATE_CHANGE packet. + // + DWORD Thread; + + // + // offset in thread object to pointer to the current callback frame + // in kernel stack. + // + DWORD ThCallbackStack; + + // + // offsets to values in frame: + // + // address of next callback frame + DWORD NextCallback; + + // address of saved frame pointer (if applicable) + DWORD FramePointer; + + // + // Address of the kernel function that calls out to user mode + // + DWORD KiCallUserMode; + + // + // Address of the user mode dispatcher function + // + DWORD KeUserCallbackDispatcher; + + // + // Lowest kernel mode address + // + DWORD SystemRangeStart; + + // + // offset in thread object to pointer to the current callback backing + // store frame in kernel stack. + // + DWORD ThCallbackBStore; + + DWORD Reserved[8]; + +} KDHELP, *PKDHELP; + +__inline +void +KdHelp32To64( + PKDHELP p32, + PKDHELP64 p64 + ) +{ + p64->Thread = p32->Thread; + p64->ThCallbackStack = p32->ThCallbackStack; + p64->NextCallback = p32->NextCallback; + p64->FramePointer = p32->FramePointer; + p64->KiCallUserMode = p32->KiCallUserMode; + p64->KeUserCallbackDispatcher = p32->KeUserCallbackDispatcher; + p64->SystemRangeStart = p32->SystemRangeStart; +} +#endif + +typedef struct _tagSTACKFRAME64 { + ADDRESS64 AddrPC; // program counter + ADDRESS64 AddrReturn; // return address + ADDRESS64 AddrFrame; // frame pointer + ADDRESS64 AddrStack; // stack pointer + ADDRESS64 AddrBStore; // backing store pointer + PVOID FuncTableEntry; // pointer to pdata/fpo or NULL + DWORD64 Params[4]; // possible arguments to the function + BOOL Far; // WOW far call + BOOL Virtual; // is this a virtual frame? + DWORD64 Reserved[3]; + KDHELP64 KdHelp; +} STACKFRAME64, *LPSTACKFRAME64; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define STACKFRAME STACKFRAME64 +#define LPSTACKFRAME LPSTACKFRAME64 +#else +typedef struct _tagSTACKFRAME { + ADDRESS AddrPC; // program counter + ADDRESS AddrReturn; // return address + ADDRESS AddrFrame; // frame pointer + ADDRESS AddrStack; // stack pointer + PVOID FuncTableEntry; // pointer to pdata/fpo or NULL + DWORD Params[4]; // possible arguments to the function + BOOL Far; // WOW far call + BOOL Virtual; // is this a virtual frame? + DWORD Reserved[3]; + KDHELP KdHelp; + ADDRESS AddrBStore; // backing store pointer +} STACKFRAME, *LPSTACKFRAME; +#endif + + +typedef +BOOL +(__stdcall *PREAD_PROCESS_MEMORY_ROUTINE64)( + HANDLE hProcess, + DWORD64 qwBaseAddress, + PVOID lpBuffer, + DWORD nSize, + LPDWORD lpNumberOfBytesRead + ); + +typedef +PVOID +(__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE64)( + HANDLE hProcess, + DWORD64 AddrBase + ); + +typedef +DWORD64 +(__stdcall *PGET_MODULE_BASE_ROUTINE64)( + HANDLE hProcess, + DWORD64 Address + ); + +typedef +DWORD64 +(__stdcall *PTRANSLATE_ADDRESS_ROUTINE64)( + HANDLE hProcess, + HANDLE hThread, + LPADDRESS64 lpaddr + ); + +BOOL +IMAGEAPI +StackWalk64( + DWORD MachineType, + HANDLE hProcess, + HANDLE hThread, + LPSTACKFRAME64 StackFrame, + PVOID ContextRecord, + PREAD_PROCESS_MEMORY_ROUTINE64 ReadMemoryRoutine, + PFUNCTION_TABLE_ACCESS_ROUTINE64 FunctionTableAccessRoutine, + PGET_MODULE_BASE_ROUTINE64 GetModuleBaseRoutine, + PTRANSLATE_ADDRESS_ROUTINE64 TranslateAddress + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) + +#define PREAD_PROCESS_MEMORY_ROUTINE PREAD_PROCESS_MEMORY_ROUTINE64 +#define PFUNCTION_TABLE_ACCESS_ROUTINE PFUNCTION_TABLE_ACCESS_ROUTINE64 +#define PGET_MODULE_BASE_ROUTINE PGET_MODULE_BASE_ROUTINE64 +#define PTRANSLATE_ADDRESS_ROUTINE PTRANSLATE_ADDRESS_ROUTINE64 + +#define StackWalk StackWalk64 + +#else + +typedef +BOOL +(__stdcall *PREAD_PROCESS_MEMORY_ROUTINE)( + HANDLE hProcess, + DWORD lpBaseAddress, + PVOID lpBuffer, + DWORD nSize, + PDWORD lpNumberOfBytesRead + ); + +typedef +PVOID +(__stdcall *PFUNCTION_TABLE_ACCESS_ROUTINE)( + HANDLE hProcess, + DWORD AddrBase + ); + +typedef +DWORD +(__stdcall *PGET_MODULE_BASE_ROUTINE)( + HANDLE hProcess, + DWORD Address + ); + +typedef +DWORD +(__stdcall *PTRANSLATE_ADDRESS_ROUTINE)( + HANDLE hProcess, + HANDLE hThread, + LPADDRESS lpaddr + ); + +BOOL +IMAGEAPI +StackWalk( + DWORD MachineType, + HANDLE hProcess, + HANDLE hThread, + LPSTACKFRAME StackFrame, + PVOID ContextRecord, + PREAD_PROCESS_MEMORY_ROUTINE ReadMemoryRoutine, + PFUNCTION_TABLE_ACCESS_ROUTINE FunctionTableAccessRoutine, + PGET_MODULE_BASE_ROUTINE GetModuleBaseRoutine, + PTRANSLATE_ADDRESS_ROUTINE TranslateAddress + ); + +#endif + + +#define API_VERSION_NUMBER 9 + +typedef struct API_VERSION { + USHORT MajorVersion; + USHORT MinorVersion; + USHORT Revision; + USHORT Reserved; +} API_VERSION, *LPAPI_VERSION; + +LPAPI_VERSION +IMAGEAPI +ImagehlpApiVersion( + VOID + ); + +LPAPI_VERSION +IMAGEAPI +ImagehlpApiVersionEx( + LPAPI_VERSION AppVersion + ); + +DWORD +IMAGEAPI +GetTimestampForLoadedLibrary( + HMODULE Module + ); + +// +// typedefs for function pointers +// +typedef BOOL +(CALLBACK *PSYM_ENUMMODULES_CALLBACK64)( + PSTR ModuleName, + DWORD64 BaseOfDll, + PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64)( + PSTR SymbolName, + DWORD64 SymbolAddress, + ULONG SymbolSize, + PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK64W)( + PWSTR SymbolName, + DWORD64 SymbolAddress, + ULONG SymbolSize, + PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PENUMLOADED_MODULES_CALLBACK64)( + PSTR ModuleName, + DWORD64 ModuleBase, + ULONG ModuleSize, + PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYMBOL_REGISTERED_CALLBACK64)( + HANDLE hProcess, + ULONG ActionCode, + ULONG64 CallbackData, + ULONG64 UserContext + ); + +typedef +PVOID +(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK)( + HANDLE hProcess, + DWORD AddrBase, + PVOID UserContext + ); + +typedef +PVOID +(CALLBACK *PSYMBOL_FUNCENTRY_CALLBACK64)( + HANDLE hProcess, + ULONG64 AddrBase, + ULONG64 UserContext + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) + +#define PSYM_ENUMMODULES_CALLBACK PSYM_ENUMMODULES_CALLBACK64 +#define PSYM_ENUMSYMBOLS_CALLBACK PSYM_ENUMSYMBOLS_CALLBACK64 +#define PSYM_ENUMSYMBOLS_CALLBACKW PSYM_ENUMSYMBOLS_CALLBACK64W +#define PENUMLOADED_MODULES_CALLBACK PENUMLOADED_MODULES_CALLBACK64 +#define PSYMBOL_REGISTERED_CALLBACK PSYMBOL_REGISTERED_CALLBACK64 +#define PSYMBOL_FUNCENTRY_CALLBACK PSYMBOL_FUNCENTRY_CALLBACK64 + +#else + +typedef BOOL +(CALLBACK *PSYM_ENUMMODULES_CALLBACK)( + PSTR ModuleName, + ULONG BaseOfDll, + PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACK)( + PSTR SymbolName, + ULONG SymbolAddress, + ULONG SymbolSize, + PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMSYMBOLS_CALLBACKW)( + PWSTR SymbolName, + ULONG SymbolAddress, + ULONG SymbolSize, + PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PENUMLOADED_MODULES_CALLBACK)( + PSTR ModuleName, + ULONG ModuleBase, + ULONG ModuleSize, + PVOID UserContext + ); + +typedef BOOL +(CALLBACK *PSYMBOL_REGISTERED_CALLBACK)( + HANDLE hProcess, + ULONG ActionCode, + PVOID CallbackData, + PVOID UserContext + ); + +#endif + + +// +// flags found in SYMBOL_INFO.Flags +// + +#define SYMFLAG_VALUEPRESENT 0x00000001 +#define SYMFLAG_REGISTER 0x00000008 +#define SYMFLAG_REGREL 0x00000010 +#define SYMFLAG_FRAMEREL 0x00000020 +#define SYMFLAG_PARAMETER 0x00000040 +#define SYMFLAG_LOCAL 0x00000080 +#define SYMFLAG_CONSTANT 0x00000100 +#define SYMFLAG_EXPORT 0x00000200 +#define SYMFLAG_FORWARDER 0x00000400 +#define SYMFLAG_FUNCTION 0x00000800 +#define SYMFLAG_VIRTUAL 0x00001000 +#define SYMFLAG_THUNK 0x00002000 +#define SYMFLAG_TLSREL 0x00004000 + +// +// symbol type enumeration +// +typedef enum { + SymNone = 0, + SymCoff, + SymCv, + SymPdb, + SymExport, + SymDeferred, + SymSym, // .sym file + SymDia, + SymVirtual, + NumSymTypes +} SYM_TYPE; + +// +// symbol data structure +// + +typedef struct _IMAGEHLP_SYMBOL64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_SYMBOL64) + DWORD64 Address; // virtual address including dll base address + DWORD Size; // estimated size of symbol, can be zero + DWORD Flags; // info about the symbols, see the SYMF defines + DWORD MaxNameLength; // maximum size of symbol name in 'Name' + CHAR Name[1]; // symbol name (null terminated string) +} IMAGEHLP_SYMBOL64, *PIMAGEHLP_SYMBOL64; + +typedef struct _IMAGEHLP_SYMBOL64_PACKAGE { + IMAGEHLP_SYMBOL64 sym; + CHAR name[MAX_SYM_NAME + 1]; +} IMAGEHLP_SYMBOL64_PACKAGE, *PIMAGEHLP_SYMBOL64_PACKAGE; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) + + #define IMAGEHLP_SYMBOL IMAGEHLP_SYMBOL64 + #define PIMAGEHLP_SYMBOL PIMAGEHLP_SYMBOL64 + #define IMAGEHLP_SYMBOL_PACKAGE IMAGEHLP_SYMBOL64_PACKAGE + #define PIMAGEHLP_SYMBOL_PACKAGE PIMAGEHLP_SYMBOL64_PACKAGE + +#else + + typedef struct _IMAGEHLP_SYMBOL { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_SYMBOL) + DWORD Address; // virtual address including dll base address + DWORD Size; // estimated size of symbol, can be zero + DWORD Flags; // info about the symbols, see the SYMF defines + DWORD MaxNameLength; // maximum size of symbol name in 'Name' + CHAR Name[1]; // symbol name (null terminated string) + } IMAGEHLP_SYMBOL, *PIMAGEHLP_SYMBOL; + + typedef struct _IMAGEHLP_SYMBOL_PACKAGE { + IMAGEHLP_SYMBOL sym; + CHAR name[MAX_SYM_NAME + 1]; + } IMAGEHLP_SYMBOL_PACKAGE, *PIMAGEHLP_SYMBOL_PACKAGE; + +#endif + +// +// module data structure +// + +typedef struct _IMAGEHLP_MODULE64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64) + DWORD64 BaseOfImage; // base load address of module + DWORD ImageSize; // virtual size of the loaded module + DWORD TimeDateStamp; // date/time stamp from pe header + DWORD CheckSum; // checksum from the pe header + DWORD NumSyms; // number of symbols in the symbol table + SYM_TYPE SymType; // type of symbols loaded + CHAR ModuleName[32]; // module name + CHAR ImageName[256]; // image name + CHAR LoadedImageName[256]; // symbol file name +} IMAGEHLP_MODULE64, *PIMAGEHLP_MODULE64; + +typedef struct _IMAGEHLP_MODULE64W { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE64) + DWORD64 BaseOfImage; // base load address of module + DWORD ImageSize; // virtual size of the loaded module + DWORD TimeDateStamp; // date/time stamp from pe header + DWORD CheckSum; // checksum from the pe header + DWORD NumSyms; // number of symbols in the symbol table + SYM_TYPE SymType; // type of symbols loaded + WCHAR ModuleName[32]; // module name + WCHAR ImageName[256]; // image name + WCHAR LoadedImageName[256]; // symbol file name +} IMAGEHLP_MODULEW64, *PIMAGEHLP_MODULEW64; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define IMAGEHLP_MODULE IMAGEHLP_MODULE64 +#define PIMAGEHLP_MODULE PIMAGEHLP_MODULE64 +#define IMAGEHLP_MODULEW IMAGEHLP_MODULEW64 +#define PIMAGEHLP_MODULEW PIMAGEHLP_MODULEW64 +#else +typedef struct _IMAGEHLP_MODULE { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE) + DWORD BaseOfImage; // base load address of module + DWORD ImageSize; // virtual size of the loaded module + DWORD TimeDateStamp; // date/time stamp from pe header + DWORD CheckSum; // checksum from the pe header + DWORD NumSyms; // number of symbols in the symbol table + SYM_TYPE SymType; // type of symbols loaded + CHAR ModuleName[32]; // module name + CHAR ImageName[256]; // image name + CHAR LoadedImageName[256]; // symbol file name +} IMAGEHLP_MODULE, *PIMAGEHLP_MODULE; + +typedef struct _IMAGEHLP_MODULEW { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_MODULE) + DWORD BaseOfImage; // base load address of module + DWORD ImageSize; // virtual size of the loaded module + DWORD TimeDateStamp; // date/time stamp from pe header + DWORD CheckSum; // checksum from the pe header + DWORD NumSyms; // number of symbols in the symbol table + SYM_TYPE SymType; // type of symbols loaded + WCHAR ModuleName[32]; // module name + WCHAR ImageName[256]; // image name + WCHAR LoadedImageName[256]; // symbol file name +} IMAGEHLP_MODULEW, *PIMAGEHLP_MODULEW; +#endif + +// +// source file line data structure +// + +typedef struct _IMAGEHLP_LINE64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_LINE64) + PVOID Key; // internal + DWORD LineNumber; // line number in file + PCHAR FileName; // full filename + DWORD64 Address; // first instruction of line +} IMAGEHLP_LINE64, *PIMAGEHLP_LINE64; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define IMAGEHLP_LINE IMAGEHLP_LINE64 +#define PIMAGEHLP_LINE PIMAGEHLP_LINE64 +#else +typedef struct _IMAGEHLP_LINE { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_LINE) + PVOID Key; // internal + DWORD LineNumber; // line number in file + PCHAR FileName; // full filename + DWORD Address; // first instruction of line +} IMAGEHLP_LINE, *PIMAGEHLP_LINE; +#endif + +// +// source file structure +// + +typedef struct _SOURCEFILE { + DWORD64 ModBase; // base address of loaded module + PCHAR FileName; // full filename of source +} SOURCEFILE, *PSOURCEFILE; + +// +// data structures used for registered symbol callbacks +// + +#define CBA_DEFERRED_SYMBOL_LOAD_START 0x00000001 +#define CBA_DEFERRED_SYMBOL_LOAD_COMPLETE 0x00000002 +#define CBA_DEFERRED_SYMBOL_LOAD_FAILURE 0x00000003 +#define CBA_SYMBOLS_UNLOADED 0x00000004 +#define CBA_DUPLICATE_SYMBOL 0x00000005 +#define CBA_READ_MEMORY 0x00000006 +#define CBA_DEFERRED_SYMBOL_LOAD_CANCEL 0x00000007 +#define CBA_SET_OPTIONS 0x00000008 +#define CBA_EVENT 0x00000010 +#define CBA_DEFERRED_SYMBOL_LOAD_PARTIAL 0x00000020 +#define CBA_DEBUG_INFO 0x10000000 + +typedef struct _IMAGEHLP_CBA_READ_MEMORY { + DWORD64 addr; // address to read from + PVOID buf; // buffer to read to + DWORD bytes; // amount of bytes to read + DWORD *bytesread; // pointer to store amount of bytes read +} IMAGEHLP_CBA_READ_MEMORY, *PIMAGEHLP_CBA_READ_MEMORY; + +enum { + sevInfo = 0, + sevProblem, + sevAttn, + sevFatal, + sevMax // unused +}; + +typedef struct _IMAGEHLP_CBA_EVENT { + DWORD severity; // values from sevInfo to sevFatal + DWORD code; // numerical code IDs the error + PCHAR desc; // may contain a text description of the error + PVOID object; // value dependant upon the error code +} IMAGEHLP_CBA_EVENT, *PIMAGEHLP_CBA_EVENT; + +typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD64) + DWORD64 BaseOfImage; // base load address of module + DWORD CheckSum; // checksum from the pe header + DWORD TimeDateStamp; // date/time stamp from pe header + CHAR FileName[MAX_PATH]; // symbols file or image name + BOOLEAN Reparse; // load failure reparse + HANDLE hFile; // file handle, if passed + DWORD Flags; // +} IMAGEHLP_DEFERRED_SYMBOL_LOAD64, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD64; + +#define DSLFLAG_MISMATCHED_PDB 0x1 +#define DSLFLAG_MISMATCHED_DBG 0x2 + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define IMAGEHLP_DEFERRED_SYMBOL_LOAD IMAGEHLP_DEFERRED_SYMBOL_LOAD64 +#define PIMAGEHLP_DEFERRED_SYMBOL_LOAD PIMAGEHLP_DEFERRED_SYMBOL_LOAD64 +#else +typedef struct _IMAGEHLP_DEFERRED_SYMBOL_LOAD { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DEFERRED_SYMBOL_LOAD) + DWORD BaseOfImage; // base load address of module + DWORD CheckSum; // checksum from the pe header + DWORD TimeDateStamp; // date/time stamp from pe header + CHAR FileName[MAX_PATH]; // symbols file or image name + BOOLEAN Reparse; // load failure reparse + HANDLE hFile; // file handle, if passed +} IMAGEHLP_DEFERRED_SYMBOL_LOAD, *PIMAGEHLP_DEFERRED_SYMBOL_LOAD; +#endif + +typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL64) + DWORD NumberOfDups; // number of duplicates in the Symbol array + PIMAGEHLP_SYMBOL64 Symbol; // array of duplicate symbols + DWORD SelectedSymbol; // symbol selected (-1 to start) +} IMAGEHLP_DUPLICATE_SYMBOL64, *PIMAGEHLP_DUPLICATE_SYMBOL64; + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define IMAGEHLP_DUPLICATE_SYMBOL IMAGEHLP_DUPLICATE_SYMBOL64 +#define PIMAGEHLP_DUPLICATE_SYMBOL PIMAGEHLP_DUPLICATE_SYMBOL64 +#else +typedef struct _IMAGEHLP_DUPLICATE_SYMBOL { + DWORD SizeOfStruct; // set to sizeof(IMAGEHLP_DUPLICATE_SYMBOL) + DWORD NumberOfDups; // number of duplicates in the Symbol array + PIMAGEHLP_SYMBOL Symbol; // array of duplicate symbols + DWORD SelectedSymbol; // symbol selected (-1 to start) +} IMAGEHLP_DUPLICATE_SYMBOL, *PIMAGEHLP_DUPLICATE_SYMBOL; +#endif + +// If dbghelp ever needs to display graphical UI, it will use this as the parent window. + +BOOL +SymSetParentWindow( + HWND hwnd + ); + +// +// options that are set/returned by SymSetOptions() & SymGetOptions() +// these are used as a mask +// +#define SYMOPT_CASE_INSENSITIVE 0x00000001 +#define SYMOPT_UNDNAME 0x00000002 +#define SYMOPT_DEFERRED_LOADS 0x00000004 +#define SYMOPT_NO_CPP 0x00000008 +#define SYMOPT_LOAD_LINES 0x00000010 +#define SYMOPT_OMAP_FIND_NEAREST 0x00000020 +#define SYMOPT_LOAD_ANYTHING 0x00000040 +#define SYMOPT_IGNORE_CVREC 0x00000080 +#define SYMOPT_NO_UNQUALIFIED_LOADS 0x00000100 +#define SYMOPT_FAIL_CRITICAL_ERRORS 0x00000200 +#define SYMOPT_EXACT_SYMBOLS 0x00000400 +#define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800 +#define SYMOPT_IGNORE_NT_SYMPATH 0x00001000 +#define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000 +#define SYMOPT_PUBLICS_ONLY 0x00004000 +#define SYMOPT_NO_PUBLICS 0x00008000 +#define SYMOPT_AUTO_PUBLICS 0x00010000 +#define SYMOPT_NO_IMAGE_SEARCH 0x00020000 +#define SYMOPT_SECURE 0x00040000 + +#define SYMOPT_DEBUG 0x80000000 + +DWORD +IMAGEAPI +SymSetOptions( + IN DWORD SymOptions + ); + +DWORD +IMAGEAPI +SymGetOptions( + VOID + ); + +BOOL +IMAGEAPI +SymCleanup( + IN HANDLE hProcess + ); + +BOOL +IMAGEAPI +SymMatchString( + IN LPSTR string, + IN LPSTR expression, + IN BOOL fCase + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMSOURCFILES_CALLBACK)( + PSOURCEFILE pSourceFile, + PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumSourceFiles( + IN HANDLE hProcess, + IN ULONG64 ModBase, + IN LPSTR Mask, + IN PSYM_ENUMSOURCFILES_CALLBACK cbSrcFiles, + IN PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumerateModules64( + IN HANDLE hProcess, + IN PSYM_ENUMMODULES_CALLBACK64 EnumModulesCallback, + IN PVOID UserContext + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymEnumerateModules SymEnumerateModules64 +#else +BOOL +IMAGEAPI +SymEnumerateModules( + IN HANDLE hProcess, + IN PSYM_ENUMMODULES_CALLBACK EnumModulesCallback, + IN PVOID UserContext + ); +#endif + +BOOL +IMAGEAPI +SymEnumerateSymbols64( + IN HANDLE hProcess, + IN DWORD64 BaseOfDll, + IN PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback, + IN PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumerateSymbolsW64( + IN HANDLE hProcess, + IN DWORD64 BaseOfDll, + IN PSYM_ENUMSYMBOLS_CALLBACK64W EnumSymbolsCallback, + IN PVOID UserContext + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymEnumerateSymbols SymEnumerateSymbols64 +#define SymEnumerateSymbolsW SymEnumerateSymbolsW64 +#else +BOOL +IMAGEAPI +SymEnumerateSymbols( + IN HANDLE hProcess, + IN DWORD BaseOfDll, + IN PSYM_ENUMSYMBOLS_CALLBACK EnumSymbolsCallback, + IN PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumerateSymbolsW( + IN HANDLE hProcess, + IN DWORD BaseOfDll, + IN PSYM_ENUMSYMBOLS_CALLBACKW EnumSymbolsCallback, + IN PVOID UserContext + ); +#endif + +BOOL +IMAGEAPI +EnumerateLoadedModules64( + IN HANDLE hProcess, + IN PENUMLOADED_MODULES_CALLBACK64 EnumLoadedModulesCallback, + IN PVOID UserContext + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define EnumerateLoadedModules EnumerateLoadedModules64 +#else +BOOL +IMAGEAPI +EnumerateLoadedModules( + IN HANDLE hProcess, + IN PENUMLOADED_MODULES_CALLBACK EnumLoadedModulesCallback, + IN PVOID UserContext + ); +#endif + +PVOID +IMAGEAPI +SymFunctionTableAccess64( + HANDLE hProcess, + DWORD64 AddrBase + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymFunctionTableAccess SymFunctionTableAccess64 +#else +PVOID +IMAGEAPI +SymFunctionTableAccess( + HANDLE hProcess, + DWORD AddrBase + ); +#endif + +BOOL +IMAGEAPI +SymGetModuleInfo64( + IN HANDLE hProcess, + IN DWORD64 qwAddr, + OUT PIMAGEHLP_MODULE64 ModuleInfo + ); + +BOOL +IMAGEAPI +SymGetModuleInfoW64( + IN HANDLE hProcess, + IN DWORD64 qwAddr, + OUT PIMAGEHLP_MODULEW64 ModuleInfo + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetModuleInfo SymGetModuleInfo64 +#define SymGetModuleInfoW SymGetModuleInfoW64 +#else +BOOL +IMAGEAPI +SymGetModuleInfo( + IN HANDLE hProcess, + IN DWORD dwAddr, + OUT PIMAGEHLP_MODULE ModuleInfo + ); + +BOOL +IMAGEAPI +SymGetModuleInfoW( + IN HANDLE hProcess, + IN DWORD dwAddr, + OUT PIMAGEHLP_MODULEW ModuleInfo + ); +#endif + +DWORD64 +IMAGEAPI +SymGetModuleBase64( + IN HANDLE hProcess, + IN DWORD64 qwAddr + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetModuleBase SymGetModuleBase64 +#else +DWORD +IMAGEAPI +SymGetModuleBase( + IN HANDLE hProcess, + IN DWORD dwAddr + ); +#endif + +BOOL +IMAGEAPI +SymGetSymNext64( + IN HANDLE hProcess, + IN OUT PIMAGEHLP_SYMBOL64 Symbol + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetSymNext SymGetSymNext64 +#else +BOOL +IMAGEAPI +SymGetSymNext( + IN HANDLE hProcess, + IN OUT PIMAGEHLP_SYMBOL Symbol + ); +#endif + +BOOL +IMAGEAPI +SymGetSymPrev64( + IN HANDLE hProcess, + IN OUT PIMAGEHLP_SYMBOL64 Symbol + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetSymPrev SymGetSymPrev64 +#else +BOOL +IMAGEAPI +SymGetSymPrev( + IN HANDLE hProcess, + IN OUT PIMAGEHLP_SYMBOL Symbol + ); +#endif + +BOOL +IMAGEAPI +SymGetLineFromAddr64( + IN HANDLE hProcess, + IN DWORD64 qwAddr, + OUT PDWORD pdwDisplacement, + OUT PIMAGEHLP_LINE64 Line64 + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetLineFromAddr SymGetLineFromAddr64 +#else +BOOL +IMAGEAPI +SymGetLineFromAddr( + IN HANDLE hProcess, + IN DWORD dwAddr, + OUT PDWORD pdwDisplacement, + OUT PIMAGEHLP_LINE Line + ); +#endif + +BOOL +IMAGEAPI +SymGetLineFromName64( + IN HANDLE hProcess, + IN PSTR ModuleName, + IN PSTR FileName, + IN DWORD dwLineNumber, + OUT PLONG plDisplacement, + IN OUT PIMAGEHLP_LINE64 Line + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetLineFromName SymGetLineFromName64 +#else +BOOL +IMAGEAPI +SymGetLineFromName( + IN HANDLE hProcess, + IN PSTR ModuleName, + IN PSTR FileName, + IN DWORD dwLineNumber, + OUT PLONG plDisplacement, + IN OUT PIMAGEHLP_LINE Line + ); +#endif + +BOOL +IMAGEAPI +SymGetLineNext64( + IN HANDLE hProcess, + IN OUT PIMAGEHLP_LINE64 Line + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetLineNext SymGetLineNext64 +#else +BOOL +IMAGEAPI +SymGetLineNext( + IN HANDLE hProcess, + IN OUT PIMAGEHLP_LINE Line + ); +#endif + +BOOL +IMAGEAPI +SymGetLinePrev64( + IN HANDLE hProcess, + IN OUT PIMAGEHLP_LINE64 Line + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetLinePrev SymGetLinePrev64 +#else +BOOL +IMAGEAPI +SymGetLinePrev( + IN HANDLE hProcess, + IN OUT PIMAGEHLP_LINE Line + ); +#endif + +BOOL +IMAGEAPI +SymMatchFileName( + IN PSTR FileName, + IN PSTR Match, + OUT PSTR *FileNameStop, + OUT PSTR *MatchStop + ); + +BOOL +IMAGEAPI +SymInitialize( + IN HANDLE hProcess, + IN PSTR UserSearchPath, + IN BOOL fInvadeProcess + ); + +BOOL +IMAGEAPI +SymGetSearchPath( + IN HANDLE hProcess, + OUT PSTR SearchPath, + IN DWORD SearchPathLength + ); + +BOOL +IMAGEAPI +SymSetSearchPath( + IN HANDLE hProcess, + IN PSTR SearchPath + ); + +DWORD64 +IMAGEAPI +SymLoadModule64( + IN HANDLE hProcess, + IN HANDLE hFile, + IN PSTR ImageName, + IN PSTR ModuleName, + IN DWORD64 BaseOfDll, + IN DWORD SizeOfDll + ); + +#define SLMFLAG_VIRTUAL 0x1 + +DWORD64 +IMAGEAPI +SymLoadModuleEx( + IN HANDLE hProcess, + IN HANDLE hFile, + IN PSTR ImageName, + IN PSTR ModuleName, + IN DWORD64 BaseOfDll, + IN DWORD DllSize, + IN PMODLOAD_DATA Data, + IN DWORD Flags + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymLoadModule SymLoadModule64 +#else +DWORD +IMAGEAPI +SymLoadModule( + IN HANDLE hProcess, + IN HANDLE hFile, + IN PSTR ImageName, + IN PSTR ModuleName, + IN DWORD BaseOfDll, + IN DWORD SizeOfDll + ); +#endif + +BOOL +IMAGEAPI +SymUnloadModule64( + IN HANDLE hProcess, + IN DWORD64 BaseOfDll + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymUnloadModule SymUnloadModule64 +#else +BOOL +IMAGEAPI +SymUnloadModule( + IN HANDLE hProcess, + IN DWORD BaseOfDll + ); +#endif + +BOOL +IMAGEAPI +SymUnDName64( + IN PIMAGEHLP_SYMBOL64 sym, // Symbol to undecorate + OUT PSTR UnDecName, // Buffer to store undecorated name in + IN DWORD UnDecNameLength // Size of the buffer + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymUnDName SymUnDName64 +#else +BOOL +IMAGEAPI +SymUnDName( + IN PIMAGEHLP_SYMBOL sym, // Symbol to undecorate + OUT PSTR UnDecName, // Buffer to store undecorated name in + IN DWORD UnDecNameLength // Size of the buffer + ); +#endif + +BOOL +IMAGEAPI +SymRegisterCallback64( + IN HANDLE hProcess, + IN PSYMBOL_REGISTERED_CALLBACK64 CallbackFunction, + IN ULONG64 UserContext + ); + +BOOL +IMAGEAPI +SymRegisterFunctionEntryCallback64( + IN HANDLE hProcess, + IN PSYMBOL_FUNCENTRY_CALLBACK64 CallbackFunction, + IN ULONG64 UserContext + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymRegisterCallback SymRegisterCallback64 +#define SymRegisterFunctionEntryCallback SymRegisterFunctionEntryCallback64 +#else +BOOL +IMAGEAPI +SymRegisterCallback( + IN HANDLE hProcess, + IN PSYMBOL_REGISTERED_CALLBACK CallbackFunction, + IN PVOID UserContext + ); + +BOOL +IMAGEAPI +SymRegisterFunctionEntryCallback( + IN HANDLE hProcess, + IN PSYMBOL_FUNCENTRY_CALLBACK CallbackFunction, + IN PVOID UserContext + ); +#endif + + +typedef struct _IMAGEHLP_SYMBOL_SRC { + DWORD sizeofstruct; + DWORD type; + char file[MAX_PATH]; +} IMAGEHLP_SYMBOL_SRC, *PIMAGEHLP_SYMBOL_SRC; + +typedef struct _MODULE_TYPE_INFO { // AKA TYPTYP + USHORT dataLength; + USHORT leaf; + BYTE data[1]; +} MODULE_TYPE_INFO, *PMODULE_TYPE_INFO; + +typedef struct _SYMBOL_INFO { + ULONG SizeOfStruct; + ULONG TypeIndex; // Type Index of symbol + ULONG64 Reserved[2]; + ULONG info; + ULONG Size; + ULONG64 ModBase; // Base Address of module comtaining this symbol + ULONG Flags; + ULONG64 Value; // Value of symbol, ValuePresent should be 1 + ULONG64 Address; // Address of symbol including base address of module + ULONG Register; // register holding value or pointer to value + ULONG Scope; // scope of the symbol + ULONG Tag; // pdb classification + ULONG NameLen; // Actual length of name + ULONG MaxNameLen; + CHAR Name[1]; // Name of symbol +} SYMBOL_INFO, *PSYMBOL_INFO; + +typedef struct _SYMBOL_INFO_PACKAGE { + SYMBOL_INFO si; + CHAR name[MAX_SYM_NAME + 1]; +} SYMBOL_INFO_PACKAGE, *PSYMBOL_INFO_PACKAGE; + +typedef struct _IMAGEHLP_STACK_FRAME +{ + ULONG64 InstructionOffset; + ULONG64 ReturnOffset; + ULONG64 FrameOffset; + ULONG64 StackOffset; + ULONG64 BackingStoreOffset; + ULONG64 FuncTableEntry; + ULONG64 Params[4]; + ULONG64 Reserved[5]; + BOOL Virtual; + ULONG Reserved2; +} IMAGEHLP_STACK_FRAME, *PIMAGEHLP_STACK_FRAME; + +typedef VOID IMAGEHLP_CONTEXT, *PIMAGEHLP_CONTEXT; + + +BOOL +IMAGEAPI +SymSetContext( + HANDLE hProcess, + PIMAGEHLP_STACK_FRAME StackFrame, + PIMAGEHLP_CONTEXT Context + ); + +BOOL +IMAGEAPI +SymFromAddr( + IN HANDLE hProcess, + IN DWORD64 Address, + OUT PDWORD64 Displacement, + IN OUT PSYMBOL_INFO Symbol + ); + +// While SymFromName will provide a symbol from a name, +// SymEnumSymbols can provide the same matching information +// for ALL symbols with a matching name, even regular +// expressions. That way you can search across modules +// and differentiate between identically named symbols. + +BOOL +IMAGEAPI +SymFromName( + IN HANDLE hProcess, + IN LPSTR Name, + OUT PSYMBOL_INFO Symbol + ); + +typedef BOOL +(CALLBACK *PSYM_ENUMERATESYMBOLS_CALLBACK)( + PSYMBOL_INFO pSymInfo, + ULONG SymbolSize, + PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumSymbols( + IN HANDLE hProcess, + IN ULONG64 BaseOfDll, + IN PCSTR Mask, + IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + IN PVOID UserContext + ); + +BOOL +IMAGEAPI +SymEnumSymbolsForAddr( + IN HANDLE hProcess, + IN DWORD64 Address, + IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + IN PVOID UserContext + ); + +typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { + TI_GET_SYMTAG, + TI_GET_SYMNAME, + TI_GET_LENGTH, + TI_GET_TYPE, + TI_GET_TYPEID, + TI_GET_BASETYPE, + TI_GET_ARRAYINDEXTYPEID, + TI_FINDCHILDREN, + TI_GET_DATAKIND, + TI_GET_ADDRESSOFFSET, + TI_GET_OFFSET, + TI_GET_VALUE, + TI_GET_COUNT, + TI_GET_CHILDRENCOUNT, + TI_GET_BITPOSITION, + TI_GET_VIRTUALBASECLASS, + TI_GET_VIRTUALTABLESHAPEID, + TI_GET_VIRTUALBASEPOINTEROFFSET, + TI_GET_CLASSPARENTID, + TI_GET_NESTED, + TI_GET_SYMINDEX, + TI_GET_LEXICALPARENT, + TI_GET_ADDRESS, + TI_GET_THISADJUST, + TI_GET_UDTKIND, + TI_IS_EQUIV_TO, + TI_GET_CALLING_CONVENTION, +} IMAGEHLP_SYMBOL_TYPE_INFO; + +typedef struct _TI_FINDCHILDREN_PARAMS { + ULONG Count; + ULONG Start; + ULONG ChildId[1]; +} TI_FINDCHILDREN_PARAMS; + +BOOL +IMAGEAPI +SymGetTypeInfo( + IN HANDLE hProcess, + IN DWORD64 ModBase, + IN ULONG TypeId, + IN IMAGEHLP_SYMBOL_TYPE_INFO GetType, + OUT PVOID pInfo + ); + +BOOL +IMAGEAPI +SymEnumTypes( + IN HANDLE hProcess, + IN ULONG64 BaseOfDll, + IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + IN PVOID UserContext + ); + +BOOL +IMAGEAPI +SymGetTypeFromName( + IN HANDLE hProcess, + IN ULONG64 BaseOfDll, + IN LPSTR Name, + OUT PSYMBOL_INFO Symbol + ); + +BOOL +IMAGEAPI +SymAddSymbol( + IN HANDLE hProcess, + IN ULONG64 BaseOfDll, + IN PCSTR Name, + IN DWORD64 Address, + IN DWORD Size, + IN DWORD Flags + ); + +BOOL +IMAGEAPI +SymDeleteSymbol( + IN HANDLE hProcess, + IN ULONG64 BaseOfDll, + IN PCSTR Name, + IN DWORD64 Address, + IN DWORD Flags + ); + +// +// Full user-mode dump creation. +// + +typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)( + DWORD DataType, + PVOID* Data, + LPDWORD DataLength, + PVOID UserData + ); + +BOOL +WINAPI +DbgHelpCreateUserDump( + IN LPSTR FileName, + IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, + IN PVOID UserData + ); + +BOOL +WINAPI +DbgHelpCreateUserDumpW( + IN LPWSTR FileName, + IN PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, + IN PVOID UserData + ); + +// ----------------------------------------------------------------- +// The following 4 legacy APIs are fully supported, but newer +// ones are recommended. SymFromName and SymFromAddr provide +// much more detailed info on the returned symbol. + +BOOL +IMAGEAPI +SymGetSymFromAddr64( + IN HANDLE hProcess, + IN DWORD64 qwAddr, + OUT PDWORD64 pdwDisplacement, + OUT PIMAGEHLP_SYMBOL64 Symbol + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetSymFromAddr SymGetSymFromAddr64 +#else +BOOL +IMAGEAPI +SymGetSymFromAddr( + IN HANDLE hProcess, + IN DWORD dwAddr, + OUT PDWORD pdwDisplacement, + OUT PIMAGEHLP_SYMBOL Symbol + ); +#endif + +// While following two APIs will provide a symbol from a name, +// SymEnumSymbols can provide the same matching information +// for ALL symbols with a matching name, even regular +// expressions. That way you can search across modules +// and differentiate between identically named symbols. + +BOOL +IMAGEAPI +SymGetSymFromName64( + IN HANDLE hProcess, + IN PSTR Name, + OUT PIMAGEHLP_SYMBOL64 Symbol + ); + +#if !defined(_IMAGEHLP_SOURCE_) && defined(_IMAGEHLP64) +#define SymGetSymFromName SymGetSymFromName64 +#else +BOOL +IMAGEAPI +SymGetSymFromName( + IN HANDLE hProcess, + IN PSTR Name, + OUT PIMAGEHLP_SYMBOL Symbol + ); +#endif + + +// ----------------------------------------------------------------- +// The following APIs exist only for backwards compatibility +// with a pre-release version documented in an MSDN release. + +// You should use SymFindFileInPath if you want to maintain +// future compatibility. + +DBHLP_DEPRECIATED +BOOL +IMAGEAPI +FindFileInPath( + HANDLE hprocess, + LPSTR SearchPath, + LPSTR FileName, + PVOID id, + DWORD two, + DWORD three, + DWORD flags, + LPSTR FilePath + ); + +// You should use SymFindFileInPath if you want to maintain +// future compatibility. + +DBHLP_DEPRECIATED +BOOL +IMAGEAPI +FindFileInSearchPath( + HANDLE hprocess, + LPSTR SearchPath, + LPSTR FileName, + DWORD one, + DWORD two, + DWORD three, + LPSTR FilePath + ); + +DBHLP_DEPRECIATED +BOOL +IMAGEAPI +SymEnumSym( + IN HANDLE hProcess, + IN ULONG64 BaseOfDll, + IN PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + IN PVOID UserContext + ); + +// These values should not be used. +// They have been replaced by SYMFLAG_ values. + +#define SYMF_OMAP_GENERATED 0x00000001 +#define SYMF_OMAP_MODIFIED 0x00000002 +#define SYMF_REGISTER 0x00000008 +#define SYMF_REGREL 0x00000010 +#define SYMF_FRAMEREL 0x00000020 +#define SYMF_PARAMETER 0x00000040 +#define SYMF_LOCAL 0x00000080 +#define SYMF_CONSTANT 0x00000100 +#define SYMF_EXPORT 0x00000200 +#define SYMF_FORWARDER 0x00000400 +#define SYMF_FUNCTION 0x00000800 +#define SYMF_VIRTUAL 0x00001000 +#define SYMF_THUNK 0x00002000 +#define SYMF_TLSREL 0x00004000 + +// These values should also not be used. +// They have been replaced by SYMFLAG_ values. + +#define IMAGEHLP_SYMBOL_INFO_VALUEPRESENT 1 +#define IMAGEHLP_SYMBOL_INFO_REGISTER SYMF_REGISTER // 0x0008 +#define IMAGEHLP_SYMBOL_INFO_REGRELATIVE SYMF_REGREL // 0x0010 +#define IMAGEHLP_SYMBOL_INFO_FRAMERELATIVE SYMF_FRAMEREL // 0x0020 +#define IMAGEHLP_SYMBOL_INFO_PARAMETER SYMF_PARAMETER // 0x0040 +#define IMAGEHLP_SYMBOL_INFO_LOCAL SYMF_LOCAL // 0x0080 +#define IMAGEHLP_SYMBOL_INFO_CONSTANT SYMF_CONSTANT // 0x0100 +#define IMAGEHLP_SYMBOL_FUNCTION SYMF_FUNCTION // 0x0800 +#define IMAGEHLP_SYMBOL_VIRTUAL SYMF_VIRTUAL // 0x1000 +#define IMAGEHLP_SYMBOL_THUNK SYMF_THUNK // 0x2000 +#define IMAGEHLP_SYMBOL_INFO_TLSRELATIVE SYMF_TLSREL // 0x4000 + + +#include + +#pragma warning(disable:4200) // Zero length array + + +#define MINIDUMP_SIGNATURE ('PMDM') +#define MINIDUMP_VERSION (42899) ++/ + +alias DWORD RVA; +alias ULONG64 RVA64; + +struct MINIDUMP_LOCATION_DESCRIPTOR { + ULONG32 DataSize; + RVA Rva; +} + +struct MINIDUMP_LOCATION_DESCRIPTOR64 { + ULONG64 DataSize; + RVA64 Rva; +} + +struct MINIDUMP_MEMORY_DESCRIPTOR { + ULONG64 StartOfMemoryRange; + MINIDUMP_LOCATION_DESCRIPTOR Memory; +} +alias MINIDUMP_MEMORY_DESCRIPTOR* PMINIDUMP_MEMORY_DESCRIPTOR; + +// DESCRIPTOR64 is used for full-memory minidumps where +// all of the raw memory is laid out sequentially at the +// end of the dump. There is no need for individual RVAs +// as the RVA is the base RVA plus the sum of the preceeding +// data blocks. +struct MINIDUMP_MEMORY_DESCRIPTOR64 { + ULONG64 StartOfMemoryRange; + ULONG64 DataSize; +} +alias MINIDUMP_MEMORY_DESCRIPTOR64* PMINIDUMP_MEMORY_DESCRIPTOR64; + + +struct MINIDUMP_HEADER { + ULONG32 Signature; + ULONG32 Version; + ULONG32 NumberOfStreams; + RVA StreamDirectoryRva; + ULONG32 CheckSum; + union { + ULONG32 Reserved; + ULONG32 TimeDateStamp; + }; + ULONG64 Flags; +} +alias MINIDUMP_HEADER* PMINIDUMP_HEADER; + +// +// The MINIDUMP_HEADER field StreamDirectoryRva points to +// an array of MINIDUMP_DIRECTORY structures. +// + +struct MINIDUMP_DIRECTORY { + ULONG32 StreamType; + MINIDUMP_LOCATION_DESCRIPTOR Location; +} +alias MINIDUMP_DIRECTORY* PMINIDUMP_DIRECTORY; + + +struct MINIDUMP_STRING { + ULONG32 Length; // Length in bytes of the string + WCHAR Buffer [0]; // Variable size buffer +} +alias MINIDUMP_STRING* PMINIDUMP_STRING; + +// +// The MINIDUMP_DIRECTORY field StreamType may be one of the following types. +// Types will be added in the future, so if a program reading the minidump +// header encounters a stream type it does not understand it should ignore +// the data altogether. Any tag above LastReservedStream will not be used by +// the system and is reserved for program-specific information. +// + +enum MINIDUMP_STREAM_TYPE { + + UnusedStream = 0, + ReservedStream0 = 1, + ReservedStream1 = 2, + ThreadListStream = 3, + ModuleListStream = 4, + MemoryListStream = 5, + ExceptionStream = 6, + SystemInfoStream = 7, + ThreadExListStream = 8, + Memory64ListStream = 9, + CommentStreamA = 10, + CommentStreamW = 11, + HandleDataStream = 12, + FunctionTableStream = 13, + UnloadedModuleListStream = 14, + MiscInfoStream = 15, + + LastReservedStream = 0xffff + +} + + +// +// The minidump system information contains processor and +// Operating System specific information. +// + +/+ +#if defined(_MSC_VER) +#if _MSC_VER >= 800 +#if _MSC_VER >= 1200 +#pragma warning(push) +#endif +#pragma warning(disable:4201) /* Nameless struct/union */ +#endif +#endif ++/ + +struct MINIDUMP_SYSTEM_INFO { + + // + // ProcessorArchitecture, ProcessorLevel and ProcessorRevision are all + // taken from the SYSTEM_INFO structure obtained by GetSystemInfo( ). + // + + USHORT ProcessorArchitecture; + USHORT ProcessorLevel; + USHORT ProcessorRevision; + + union { + USHORT Reserved0; + struct { + UCHAR NumberOfProcessors; + UCHAR ProductType; + }; + }; + + // + // MajorVersion, MinorVersion, BuildNumber, PlatformId and + // CSDVersion are all taken from the OSVERSIONINFO structure + // returned by GetVersionEx( ). + // + + ULONG32 MajorVersion; + ULONG32 MinorVersion; + ULONG32 BuildNumber; + ULONG32 PlatformId; + + // + // RVA to a CSDVersion string in the string table. + // + + RVA CSDVersionRva; + + union { + ULONG32 Reserved1; + struct { + USHORT SuiteMask; + USHORT Reserved2; + }; + }; + + // + // CPU information is obtained from one of two places. + // + // 1) On x86 computers, CPU_INFORMATION is obtained from the CPUID + // instruction. You must use the X86 portion of the union for X86 + // computers. + // + // 2) On non-x86 architectures, CPU_INFORMATION is obtained by calling + // IsProcessorFeatureSupported(). + // + + union CPU_INFORMATION { + + // + // X86 platforms use CPUID function to obtain processor information. + // + + struct _X86CpuInfo_t { + + // + // CPUID Subfunction 0, register EAX (VendorId [0]), + // EBX (VendorId [1]) and ECX (VendorId [2]). + // + + ULONG32 VendorId [ 3 ]; + + // + // CPUID Subfunction 1, register EAX + // + + ULONG32 VersionInformation; + + // + // CPUID Subfunction 1, register EDX + // + + ULONG32 FeatureInformation; + + + // + // CPUID, Subfunction 80000001, register EBX. This will only + // be obtained if the vendor id is "AuthenticAMD". + // + + ULONG32 AMDExtendedCpuFeatures; + + } + _X86CpuInfo_t X86CpuInfo; + + // + // Non-x86 platforms use processor feature flags. + // + + struct _OtherCpuInfo_t { + + ULONG64 ProcessorFeatures [ 2 ]; + + } + _OtherCpuInfo_t OtherCpuInfo; + + } + CPU_INFORMATION Cpu; + +} +alias MINIDUMP_SYSTEM_INFO* PMINIDUMP_SYSTEM_INFO; +alias MINIDUMP_SYSTEM_INFO.CPU_INFORMATION* PCPU_INFORMATION; + +/+ +#if defined(_MSC_VER) +#if _MSC_VER >= 800 +#if _MSC_VER >= 1200 +#pragma warning(pop) +#else +#pragma warning(disable:4201) /* Nameless struct/union */ +#endif +#endif +#endif ++/ + +// +// The minidump thread contains standard thread +// information plus an RVA to the memory for this +// thread and an RVA to the CONTEXT structure for +// this thread. +// + + +// +// ThreadId must be 4 bytes on all architectures. +// + +//C_ASSERT (sizeof ( ((PPROCESS_INFORMATION)0)->dwThreadId ) == 4); + +struct MINIDUMP_THREAD { + ULONG32 ThreadId; + ULONG32 SuspendCount; + ULONG32 PriorityClass; + ULONG32 Priority; + ULONG64 Teb; + MINIDUMP_MEMORY_DESCRIPTOR Stack; + MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; +} +alias MINIDUMP_THREAD* PMINIDUMP_THREAD; + +// +// The thread list is a container of threads. +// + +struct MINIDUMP_THREAD_LIST { + ULONG32 NumberOfThreads; + MINIDUMP_THREAD Threads [0]; +} +alias MINIDUMP_THREAD_LIST* PMINIDUMP_THREAD_LIST; + + +struct MINIDUMP_THREAD_EX { + ULONG32 ThreadId; + ULONG32 SuspendCount; + ULONG32 PriorityClass; + ULONG32 Priority; + ULONG64 Teb; + MINIDUMP_MEMORY_DESCRIPTOR Stack; + MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; + MINIDUMP_MEMORY_DESCRIPTOR BackingStore; +} +alias MINIDUMP_THREAD_EX* PMINIDUMP_THREAD_EX; + +// +// The thread list is a container of threads. +// + +struct MINIDUMP_THREAD_EX_LIST { + ULONG32 NumberOfThreads; + MINIDUMP_THREAD_EX Threads [0]; +} +alias MINIDUMP_THREAD_EX_LIST* PMINIDUMP_THREAD_EX_LIST; + + +// +// The MINIDUMP_EXCEPTION is the same as EXCEPTION on Win64. +// + +struct MINIDUMP_EXCEPTION { + ULONG32 ExceptionCode; + ULONG32 ExceptionFlags; + ULONG64 ExceptionRecord; + ULONG64 ExceptionAddress; + ULONG32 NumberParameters; + ULONG32 __unusedAlignment; + ULONG64 ExceptionInformation [ EXCEPTION_MAXIMUM_PARAMETERS ]; +} +alias MINIDUMP_EXCEPTION* PMINIDUMP_EXCEPTION; + + +// +// The exception information stream contains the id of the thread that caused +// the exception (ThreadId), the exception record for the exception +// (ExceptionRecord) and an RVA to the thread context where the exception +// occured. +// + +struct MINIDUMP_EXCEPTION_STREAM { + ULONG32 ThreadId; + ULONG32 __alignment; + MINIDUMP_EXCEPTION ExceptionRecord; + MINIDUMP_LOCATION_DESCRIPTOR ThreadContext; +} +alias MINIDUMP_EXCEPTION_STREAM* PMINIDUMP_EXCEPTION_STREAM; + + +// +// The MINIDUMP_MODULE contains information about a +// a specific module. It includes the CheckSum and +// the TimeDateStamp for the module so the module +// can be reloaded during the analysis phase. +// + +struct MINIDUMP_MODULE { + ULONG64 BaseOfImage; + ULONG32 SizeOfImage; + ULONG32 CheckSum; + ULONG32 TimeDateStamp; + RVA ModuleNameRva; + VS_FIXEDFILEINFO VersionInfo; + MINIDUMP_LOCATION_DESCRIPTOR CvRecord; + MINIDUMP_LOCATION_DESCRIPTOR MiscRecord; + ULONG64 Reserved0; // Reserved for future use. + ULONG64 Reserved1; // Reserved for future use. +} +alias MINIDUMP_MODULE* PMINIDUMP_MODULE; + + +// +// The minidump module list is a container for modules. +// + +struct MINIDUMP_MODULE_LIST { + ULONG32 NumberOfModules; + MINIDUMP_MODULE Modules [ 0 ]; +} +alias MINIDUMP_MODULE_LIST* PMINIDUMP_MODULE_LIST; + + +// +// Memory Ranges +// + +struct MINIDUMP_MEMORY_LIST { + ULONG32 NumberOfMemoryRanges; + MINIDUMP_MEMORY_DESCRIPTOR MemoryRanges [0]; +} +alias MINIDUMP_MEMORY_LIST* PMINIDUMP_MEMORY_LIST; + +struct MINIDUMP_MEMORY64_LIST { + ULONG64 NumberOfMemoryRanges; + RVA64 BaseRva; + MINIDUMP_MEMORY_DESCRIPTOR64 MemoryRanges [0]; +} +alias MINIDUMP_MEMORY64_LIST* PMINIDUMP_MEMORY64_LIST; + + +// +// Support for user supplied exception information. +// + +struct MINIDUMP_EXCEPTION_INFORMATION { + DWORD ThreadId; + PEXCEPTION_POINTERS ExceptionPointers; + BOOL ClientPointers; +}; +alias MINIDUMP_EXCEPTION_INFORMATION* PMINIDUMP_EXCEPTION_INFORMATION; + +// +// Support for capturing system handle state at the time of the dump. +// + +struct MINIDUMP_HANDLE_DESCRIPTOR { + ULONG64 Handle; + RVA TypeNameRva; + RVA ObjectNameRva; + ULONG32 Attributes; + ULONG32 GrantedAccess; + ULONG32 HandleCount; + ULONG32 PointerCount; +} +alias MINIDUMP_HANDLE_DESCRIPTOR* PMINIDUMP_HANDLE_DESCRIPTOR; + +struct MINIDUMP_HANDLE_DATA_STREAM { + ULONG32 SizeOfHeader; + ULONG32 SizeOfDescriptor; + ULONG32 NumberOfDescriptors; + ULONG32 Reserved; +} +alias MINIDUMP_HANDLE_DATA_STREAM* PMINIDUMP_HANDLE_DATA_STREAM; + + +// +// Support for capturing dynamic function table state at the time of the dump. +// + +struct MINIDUMP_FUNCTION_TABLE_DESCRIPTOR { + ULONG64 MinimumAddress; + ULONG64 MaximumAddress; + ULONG64 BaseAddress; + ULONG32 EntryCount; + ULONG32 SizeOfAlignPad; +} +alias MINIDUMP_FUNCTION_TABLE_DESCRIPTOR* PMINIDUMP_FUNCTION_TABLE_DESCRIPTOR; + +struct MINIDUMP_FUNCTION_TABLE_STREAM { + ULONG32 SizeOfHeader; + ULONG32 SizeOfDescriptor; + ULONG32 SizeOfNativeDescriptor; + ULONG32 SizeOfFunctionEntry; + ULONG32 NumberOfDescriptors; + ULONG32 SizeOfAlignPad; +} +alias MINIDUMP_FUNCTION_TABLE_STREAM* PMINIDUMP_FUNCTION_TABLE_STREAM; + + +// +// The MINIDUMP_UNLOADED_MODULE contains information about a +// a specific module that was previously loaded but no +// longer is. This can help with diagnosing problems where +// callers attempt to call code that is no longer loaded. +// + +struct MINIDUMP_UNLOADED_MODULE { + ULONG64 BaseOfImage; + ULONG32 SizeOfImage; + ULONG32 CheckSum; + ULONG32 TimeDateStamp; + RVA ModuleNameRva; +} +alias MINIDUMP_UNLOADED_MODULE* PMINIDUMP_UNLOADED_MODULE; + + +// +// The minidump unloaded module list is a container for unloaded modules. +// + +struct MINIDUMP_UNLOADED_MODULE_LIST { + ULONG32 SizeOfHeader; + ULONG32 SizeOfEntry; + ULONG32 NumberOfEntries; +} +alias MINIDUMP_UNLOADED_MODULE_LIST* PMINIDUMP_UNLOADED_MODULE_LIST; + + +// +// The miscellaneous information stream contains a variety +// of small pieces of information. A member is valid if +// it's within the available size and its corresponding +// bit is set. +// + +enum : uint { + MINIDUMP_MISC1_PROCESS_ID = 0x00000001, + MINIDUMP_MISC1_PROCESS_TIMES +} + +struct MINIDUMP_MISC_INFO { + ULONG32 SizeOfInfo; + ULONG32 Flags1; + ULONG32 ProcessId; + ULONG32 ProcessCreateTime; + ULONG32 ProcessUserTime; + ULONG32 ProcessKernelTime; +} +alias MINIDUMP_MISC_INFO* PMINIDUMP_MISC_INFO; + + +// +// Support for arbitrary user-defined information. +// + +struct MINIDUMP_USER_RECORD { + ULONG32 Type; + MINIDUMP_LOCATION_DESCRIPTOR Memory; +} +alias MINIDUMP_USER_RECORD* PMINIDUMP_USER_RECORD; + + +struct MINIDUMP_USER_STREAM { + ULONG32 Type; + ULONG BufferSize; + PVOID Buffer; +} +alias MINIDUMP_USER_STREAM* PMINIDUMP_USER_STREAM; + +struct MINIDUMP_USER_STREAM_INFORMATION { + ULONG UserStreamCount; + PMINIDUMP_USER_STREAM UserStreamArray; +} +alias MINIDUMP_USER_STREAM_INFORMATION* PMINIDUMP_USER_STREAM_INFORMATION; + +// +// Callback support. +// + +enum MINIDUMP_CALLBACK_TYPE { + ModuleCallback, + ThreadCallback, + ThreadExCallback, + IncludeThreadCallback, + IncludeModuleCallback, +} + + +struct MINIDUMP_THREAD_CALLBACK { + ULONG ThreadId; + HANDLE ThreadHandle; + CONTEXT Context; + ULONG SizeOfContext; + ULONG64 StackBase; + ULONG64 StackEnd; +} +alias MINIDUMP_THREAD_CALLBACK* PMINIDUMP_THREAD_CALLBACK; + +struct MINIDUMP_THREAD_EX_CALLBACK { + ULONG ThreadId; + HANDLE ThreadHandle; + CONTEXT Context; + ULONG SizeOfContext; + ULONG64 StackBase; + ULONG64 StackEnd; + ULONG64 BackingStoreBase; + ULONG64 BackingStoreEnd; +} +alias MINIDUMP_THREAD_EX_CALLBACK* PMINIDUMP_THREAD_EX_CALLBACK; + + +struct MINIDUMP_INCLUDE_THREAD_CALLBACK { + ULONG ThreadId; +} +alias MINIDUMP_INCLUDE_THREAD_CALLBACK* PMINIDUMP_INCLUDE_THREAD_CALLBACK; + + +enum THREAD_WRITE_FLAGS { + ThreadWriteThread = 0x0001, + ThreadWriteStack = 0x0002, + ThreadWriteContext = 0x0004, + ThreadWriteBackingStore = 0x0008, + ThreadWriteInstructionWindow = 0x0010, + ThreadWriteThreadData = 0x0020, +} + +struct MINIDUMP_MODULE_CALLBACK { + PWCHAR FullPath; + ULONG64 BaseOfImage; + ULONG SizeOfImage; + ULONG CheckSum; + ULONG TimeDateStamp; + VS_FIXEDFILEINFO VersionInfo; + PVOID CvRecord; + ULONG SizeOfCvRecord; + PVOID MiscRecord; + ULONG SizeOfMiscRecord; +} +alias MINIDUMP_MODULE_CALLBACK* PMINIDUMP_MODULE_CALLBACK; + + +struct MINIDUMP_INCLUDE_MODULE_CALLBACK { + ULONG64 BaseOfImage; +} +alias MINIDUMP_INCLUDE_MODULE_CALLBACK* PMINIDUMP_INCLUDE_MODULE_CALLBACK; + + +enum MODULE_WRITE_FLAGS { + ModuleWriteModule = 0x0001, + ModuleWriteDataSeg = 0x0002, + ModuleWriteMiscRecord = 0x0004, + ModuleWriteCvRecord = 0x0008, + ModuleReferencedByMemory = 0x0010 +} + +struct MINIDUMP_CALLBACK_INPUT { + ULONG ProcessId; + HANDLE ProcessHandle; + ULONG CallbackType; + union { + MINIDUMP_THREAD_CALLBACK Thread; + MINIDUMP_THREAD_EX_CALLBACK ThreadEx; + MINIDUMP_MODULE_CALLBACK Module; + MINIDUMP_INCLUDE_THREAD_CALLBACK IncludeThread; + MINIDUMP_INCLUDE_MODULE_CALLBACK IncludeModule; + }; +} +alias MINIDUMP_CALLBACK_INPUT* PMINIDUMP_CALLBACK_INPUT; + +struct MINIDUMP_CALLBACK_OUTPUT { + union { + ULONG ModuleWriteFlags; + ULONG ThreadWriteFlags; + }; +} +alias MINIDUMP_CALLBACK_OUTPUT* PMINIDUMP_CALLBACK_OUTPUT; + + +// +// A normal minidump contains just the information +// necessary to capture stack traces for all of the +// existing threads in a process. +// +// A minidump with data segments includes all of the data +// sections from loaded modules in order to capture +// global variable contents. This can make the dump much +// larger if many modules have global data. +// +// A minidump with full memory includes all of the accessible +// memory in the process and can be very large. A minidump +// with full memory always has the raw memory data at the end +// of the dump so that the initial structures in the dump can +// be mapped directly without having to include the raw +// memory information. +// +// Stack and backing store memory can be filtered to remove +// data unnecessary for stack walking. This can improve +// compression of stacks and also deletes data that may +// be private and should not be stored in a dump. +// Memory can also be scanned to see what modules are +// referenced by stack and backing store memory to allow +// omission of other modules to reduce dump size. +// In either of these modes the ModuleReferencedByMemory flag +// is set for all modules referenced before the base +// module callbacks occur. +// +// On some operating systems a list of modules that were +// recently unloaded is kept in addition to the currently +// loaded module list. This information can be saved in +// the dump if desired. +// +// Stack and backing store memory can be scanned for referenced +// pages in order to pick up data referenced by locals or other +// stack memory. This can increase the size of a dump significantly. +// +// Module paths may contain undesired information such as user names +// or other important directory names so they can be stripped. This +// option reduces the ability to locate the proper image later +// and should only be used in certain situations. +// +// Complete operating system per-process and per-thread information can +// be gathered and stored in the dump. +// +// The virtual address space can be scanned for various types +// of memory to be included in the dump. +// + + +enum MINIDUMP_TYPE { + MiniDumpNormal = 0x0000, + MiniDumpWithDataSegs = 0x0001, + MiniDumpWithFullMemory = 0x0002, + MiniDumpWithHandleData = 0x0004, + MiniDumpFilterMemory = 0x0008, + MiniDumpScanMemory = 0x0010, + MiniDumpWithUnloadedModules = 0x0020, + MiniDumpWithIndirectlyReferencedMemory = 0x0040, + MiniDumpFilterModulePaths = 0x0080, + MiniDumpWithProcessThreadData = 0x0100, + MiniDumpWithPrivateReadWriteMemory = 0x0200, +}; + + +// +// The minidump callback should modify the FieldsToWrite parameter to reflect +// what portions of the specified thread or module should be written to the +// file. +// + + +alias BOOL function ( + PVOID CallbackParam, + PMINIDUMP_CALLBACK_INPUT CallbackInput, + PMINIDUMP_CALLBACK_OUTPUT CallbackOutput +) +MINIDUMP_CALLBACK_ROUTINE; + +struct MINIDUMP_CALLBACK_INFORMATION { + MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; + PVOID CallbackParam; +} +alias MINIDUMP_CALLBACK_INFORMATION* PMINIDUMP_CALLBACK_INFORMATION; + +// +// +// PVOID +// RVA_TO_ADDR( +// PVOID Mapping, +// ULONG Rva +// ) +// +// Routine Description: +// +// Map an RVA that is contained within a mapped file to it's associated +// flat address. +// +// Arguments: +// +// Mapping - Base address of mapped file containing the RVA. +// +// Rva - An Rva to fixup. +// +// Return Values: +// +// A pointer to the desired data. +// +//-- + +//#define RVA_TO_ADDR(Mapping,Rva) ((PVOID)(((ULONG_PTR) (Mapping)) + (Rva))) + +BOOL +MiniDumpWriteDump( + HANDLE hProcess, + DWORD ProcessId, + HANDLE hFile, + MINIDUMP_TYPE DumpType, + PMINIDUMP_EXCEPTION_INFORMATION ExceptionParam, + PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, + PMINIDUMP_CALLBACK_INFORMATION CallbackParam + ); + +BOOL +MiniDumpReadDumpStream( + PVOID BaseOfDump, + ULONG StreamNumber, + PMINIDUMP_DIRECTORY * Dir, + PVOID * StreamPointer, + ULONG * StreamSize + ); + +//#include + +} + + +//#endif // _DBGHELP_ diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/CHANGES --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/CHANGES Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,30 @@ + * [Dec/18/06] Fixed: Printf warnings. + Fixed: set_input_buffered to set_input_buffer in documentation. + Added support for INTEL VMX instructions. + API addition: ud_set_vendor(): UD_VENDOR_{INTEL, AMD}. + Fixed: Handling of invalid combination of bytes. No more input re-syncing. + Added Makefiles for win32 build. (Thanks to Xi Hang). + Added Makefile.standalone for "Standalone Udis86". + Fixed: u->inp_end initialization bug. + Fixed: swapgs only in 64bit mode. + * [Oct/27/06] 0xF1 is now int1. + Fixed: cast prefix for Group1_op80/82/C0/D0 instructions. + Fixed: lmsw + Added support for Udis86 Standalone. + * [Sep/18/06] Fixed: Missing support for o32 for in/out instructions. + * [Jul/26/06] Fixed: Missing REX.W in Group1_op83 instructions. + * [Jul/16/06] Fixed: rex.b on [rip+disp] + * [Jul/15/06] Fixed: Wrongly printing "loopnz" as "loopn" (Thanks to Sanjay Patel) + Fixed: Wrongly decoding "out Ib, AL" ((Thanks to Sanjay Patel) + * [Jun/8/06] Missing instructions added. (As per AMD64 Manual Vol3 Rev 3.11 + Dec 2005) + Fixed minor decoder issues. (Thanks to Sanjay Patel) + Fixed issues with input stream buffer. (Thanks to Sanjay Patel) + * [May/18/06] Fixed issues with handling of 64-bit values. + Fixed bug in syntax generation for immediate operands in branch + instructions. + Fixed decoding of (G, W) operands. + * [May/12/06] Added support for data types in MS VC++. + * [May/11/06] Fixed portability issues concerning inp_uintXX functions in + input.c and 64-bit casting in syn-intel/syn-att.c (Thanks to + Sanjay Patel) diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/COPYING --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/COPYING Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,22 @@ +Copyright (c) 2002, 2003, 2004, 2005, 2006 +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/LICENSE --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/LICENSE Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,22 @@ +Copyright (c) 2002, 2003, 2004, 2005, 2006 +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, +are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR +ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/Makefile.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/Makefile.in Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,28 @@ +# Makefile +# udis86 - udis86 disassembler for x86(x86-64) +# + +all: + cd libudis86 && $(MAKE) + cd udcli && $(MAKE) +install: + cd libudis86 && $(MAKE) install + cd udcli && $(MAKE) install +uninstall: + cd libudis86 && $(MAKE) uninstall + cd udcli && $(MAKE) uninstall +standalone: + cd libudis86 && $(MAKE) -f Makefile.standalone +clean: + cd libudis86 && $(MAKE) clean + cd udcli && $(MAKE) clean +test: + nasm test32.asm -f bin -o test.bin + udcli -32 < test.bin + @read + udcli -32 -att < test.bin +distclean: clean + cd libudis86 && $(MAKE) distclean + cd udcli && $(MAKE) distclean + $(RM) -f config.h test.bin Makefile *.log *~ docs/*~ + $(RM) -rf autom4te*.cache diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/Makefile.win32 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/Makefile.win32 Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,15 @@ +# Makefile +# udis86 - udis86 disassembler for x86(x86-64) +# + +all: + cd libudis86 && $(MAKE) -f Makefile.win32 + cd udcli && $(MAKE) -f Makefile.win32 + cd tests && $(MAKE) -f Makefile.win32 +clean: + cd libudis86 && $(MAKE) clean -f Makefile.win32 + cd udcli && $(MAKE) clean -f Makefile.win32 + cd tests && $(MAKE) clean -f Makefile.win32 +test: + cd tests && $(MAKE) test16 -f Makefile.win32 && $(MAKE) test32 -f Makefile.win32 && $(MAKE) test64 -f Makefile.win32 + diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/README --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/README Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,40 @@ +Udis86 Disassembler for x86 and x86-64 (AMD64) +============================================== +(http://udis86.sourceforge.net/) + +Udis86 is an easy-to-use minimalistic disassembler library (libudis86) for the +x86 and x86-64 (AMD64) range of instruction set architectures. The primary +intent of the design and development of udis86 is to aid software development +projects that entail binary code analysis. + +Salient features of libudis86: + + * Full support for the x86 and x86-64 (AMD64) ISAs. + * Includes support for all MMX, SSE, FPU(x87), and AMD 3Dnow! Instructions + * Supports 16/32/64 Bits disassembly modes. + * Capable of generating output in AT&T or INTEL assembly language syntax. + * Supports different types of inputs - File, Buffered, and Hooks. + * Thread-safe and Re-entrant. + +You can reach the author at vivek[at]sig9[dot]com. + +Building Udis86 +=============== + +On Unix(-like) Systems: + + $ ./configure + $ make + $ sudo make install + +This will build the library as well as a simple command line front end (udcli). + +Using libudis86 +=============== + +See docs/doc.html + +Using udcli +=========== + +See docs/doc.html diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/config.h.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/config.h.in Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,61 @@ +/* config.h.in. Generated from configure.in by autoheader. */ + +/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */ +#undef HAVE_DOPRNT + +/* Define to 1 if you have the header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the `memset' function. */ +#undef HAVE_MEMSET + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_STAT_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_TYPES_H + +/* Define to 1 if you have the header file. */ +#undef HAVE_UNISTD_H + +/* Define to 1 if you have the `vprintf' function. */ +#undef HAVE_VPRINTF + +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to empty if `const' does not conform to ANSI C. */ +#undef const + +/* Define to `unsigned' if does not define. */ +#undef size_t diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/config.status --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/config.status Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,681 @@ +#! /bin/sh +# Generated by configure. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=${CONFIG_SHELL-/bin/sh} +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by udis86 $as_me 1.4, which was +generated by GNU Autoconf 2.57. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +config_files=" Makefile libudis86/Makefile udcli/Makefile" + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to ." +ac_cs_version="\ +udis86 config.status 1.4 +configured by ./configure, generated by GNU Autoconf 2.57, + with options \"'--prefix=/home/vthampi/software'\" + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=. +INSTALL="/usr/bin/install -c" +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +if $ac_cs_recheck; then + echo "running /bin/sh ./configure " '--prefix=/home/vthampi/software' $ac_configure_extra_args " --no-create --no-recursion" >&6 + exec /bin/sh ./configure '--prefix=/home/vthampi/software' $ac_configure_extra_args --no-create --no-recursion +fi + +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "libudis86/Makefile" ) CONFIG_FILES="$CONFIG_FILES libudis86/Makefile" ;; + "udcli/Makefile" ) CONFIG_FILES="$CONFIG_FILES udcli/Makefile" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t$/@;t t/; /@;t t$/s/[\\&,]/\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t$/,;t t/' >$tmp/subs.sed <<\CEOF +s,@SHELL@,/bin/sh,;t t +s,@PATH_SEPARATOR@,:,;t t +s,@PACKAGE_NAME@,udis86,;t t +s,@PACKAGE_TARNAME@,udis86,;t t +s,@PACKAGE_VERSION@,1.4,;t t +s,@PACKAGE_STRING@,udis86 1.4,;t t +s,@PACKAGE_BUGREPORT@,vivek@sig9.com,;t t +s,@exec_prefix@,${prefix},;t t +s,@prefix@,/home/vthampi/software,;t t +s,@program_transform_name@,s,x,x,,;t t +s,@bindir@,${exec_prefix}/bin,;t t +s,@sbindir@,${exec_prefix}/sbin,;t t +s,@libexecdir@,${exec_prefix}/libexec,;t t +s,@datadir@,${prefix}/share,;t t +s,@sysconfdir@,${prefix}/etc,;t t +s,@sharedstatedir@,${prefix}/com,;t t +s,@localstatedir@,${prefix}/var,;t t +s,@libdir@,${exec_prefix}/lib,;t t +s,@includedir@,${prefix}/include,;t t +s,@oldincludedir@,/usr/include,;t t +s,@infodir@,${prefix}/info,;t t +s,@mandir@,${prefix}/man,;t t +s,@build_alias@,,;t t +s,@host_alias@,,;t t +s,@target_alias@,,;t t +s,@DEFS@,-DPACKAGE_NAME=\"udis86\" -DPACKAGE_TARNAME=\"udis86\" -DPACKAGE_VERSION=\"1.4\" -DPACKAGE_STRING=\"udis86\ 1.4\" -DPACKAGE_BUGREPORT=\"vivek@sig9.com\" ,;t t +s,@ECHO_C@,,;t t +s,@ECHO_N@,-n,;t t +s,@ECHO_T@,,;t t +s,@LIBS@,,;t t +s,@CC@,gcc,;t t +s,@CFLAGS@,-g -O2,;t t +s,@LDFLAGS@,,;t t +s,@CPPFLAGS@,,;t t +s,@ac_ct_CC@,gcc,;t t +s,@EXEEXT@,,;t t +s,@OBJEXT@,o,;t t +s,@INSTALL_PROGRAM@,${INSTALL},;t t +s,@INSTALL_SCRIPT@,${INSTALL},;t t +s,@INSTALL_DATA@,${INSTALL} -m 644,;t t +s,@LIBOBJS@,,;t t +s,@LTLIBOBJS@,,;t t +CEOF + + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } + sed "/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +} + +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done + +{ (exit 0); exit 0; } diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/configure --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/configure Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,3080 @@ +#! /bin/sh +# Guess values for system-dependent variables and create Makefiles. +# Generated by GNU Autoconf 2.57 for udis86 1.4. +# +# Report bugs to . +# +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. +# This configure script is free software; the Free Software Foundation +# gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# +ac_default_prefix=/usr/local +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME='udis86' +PACKAGE_TARNAME='udis86' +PACKAGE_VERSION='1.4' +PACKAGE_STRING='udis86 1.4' +PACKAGE_BUGREPORT='vivek@sig9.com' + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LIBOBJS LTLIBOBJS' +ac_subst_files='' + +# Initialize some variables set by options. +ac_init_help= +ac_init_version=false +# The variables have the same names as the options, with +# dashes changed to underlines. +cache_file=/dev/null +exec_prefix=NONE +no_create= +no_recursion= +prefix=NONE +program_prefix=NONE +program_suffix=NONE +program_transform_name=s,x,x, +silent= +site= +srcdir= +verbose= +x_includes=NONE +x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. +bindir='${exec_prefix}/bin' +sbindir='${exec_prefix}/sbin' +libexecdir='${exec_prefix}/libexec' +datadir='${prefix}/share' +sysconfdir='${prefix}/etc' +sharedstatedir='${prefix}/com' +localstatedir='${prefix}/var' +libdir='${exec_prefix}/lib' +includedir='${prefix}/include' +oldincludedir='/usr/include' +infodir='${prefix}/info' +mandir='${prefix}/man' + +ac_prev= +for ac_option +do + # If the previous option needs an argument, assign it. + if test -n "$ac_prev"; then + eval "$ac_prev=\$ac_option" + ac_prev= + continue + fi + + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` + + # Accept the important Cygnus configure options, so we can diagnose typos. + + case $ac_option in + + -bindir | --bindir | --bindi | --bind | --bin | --bi) + ac_prev=bindir ;; + -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) + bindir=$ac_optarg ;; + + -build | --build | --buil | --bui | --bu) + ac_prev=build_alias ;; + -build=* | --build=* | --buil=* | --bui=* | --bu=*) + build_alias=$ac_optarg ;; + + -cache-file | --cache-file | --cache-fil | --cache-fi \ + | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) + ac_prev=cache_file ;; + -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ + | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; + + -datadir | --datadir | --datadi | --datad | --data | --dat | --da) + ac_prev=datadir ;; + -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ + | --da=*) + datadir=$ac_optarg ;; + + -disable-* | --disable-*) + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; + + -enable-* | --enable-*) + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "enable_$ac_feature='$ac_optarg'" ;; + + -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ + | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ + | --exec | --exe | --ex) + ac_prev=exec_prefix ;; + -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ + | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ + | --exec=* | --exe=* | --ex=*) + exec_prefix=$ac_optarg ;; + + -gas | --gas | --ga | --g) + # Obsolete; use --with-gas. + with_gas=yes ;; + + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; + + -host | --host | --hos | --ho) + ac_prev=host_alias ;; + -host=* | --host=* | --hos=* | --ho=*) + host_alias=$ac_optarg ;; + + -includedir | --includedir | --includedi | --included | --include \ + | --includ | --inclu | --incl | --inc) + ac_prev=includedir ;; + -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ + | --includ=* | --inclu=* | --incl=* | --inc=*) + includedir=$ac_optarg ;; + + -infodir | --infodir | --infodi | --infod | --info | --inf) + ac_prev=infodir ;; + -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) + infodir=$ac_optarg ;; + + -libdir | --libdir | --libdi | --libd) + ac_prev=libdir ;; + -libdir=* | --libdir=* | --libdi=* | --libd=*) + libdir=$ac_optarg ;; + + -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ + | --libexe | --libex | --libe) + ac_prev=libexecdir ;; + -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ + | --libexe=* | --libex=* | --libe=*) + libexecdir=$ac_optarg ;; + + -localstatedir | --localstatedir | --localstatedi | --localstated \ + | --localstate | --localstat | --localsta | --localst \ + | --locals | --local | --loca | --loc | --lo) + ac_prev=localstatedir ;; + -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ + | --localstate=* | --localstat=* | --localsta=* | --localst=* \ + | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) + localstatedir=$ac_optarg ;; + + -mandir | --mandir | --mandi | --mand | --man | --ma | --m) + ac_prev=mandir ;; + -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) + mandir=$ac_optarg ;; + + -nfp | --nfp | --nf) + # Obsolete; use --without-fp. + with_fp=no ;; + + -no-create | --no-create | --no-creat | --no-crea | --no-cre \ + | --no-cr | --no-c | -n) + no_create=yes ;; + + -no-recursion | --no-recursion | --no-recursio | --no-recursi \ + | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) + no_recursion=yes ;; + + -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ + | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ + | --oldin | --oldi | --old | --ol | --o) + ac_prev=oldincludedir ;; + -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ + | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ + | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) + oldincludedir=$ac_optarg ;; + + -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) + ac_prev=prefix ;; + -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) + prefix=$ac_optarg ;; + + -program-prefix | --program-prefix | --program-prefi | --program-pref \ + | --program-pre | --program-pr | --program-p) + ac_prev=program_prefix ;; + -program-prefix=* | --program-prefix=* | --program-prefi=* \ + | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) + program_prefix=$ac_optarg ;; + + -program-suffix | --program-suffix | --program-suffi | --program-suff \ + | --program-suf | --program-su | --program-s) + ac_prev=program_suffix ;; + -program-suffix=* | --program-suffix=* | --program-suffi=* \ + | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) + program_suffix=$ac_optarg ;; + + -program-transform-name | --program-transform-name \ + | --program-transform-nam | --program-transform-na \ + | --program-transform-n | --program-transform- \ + | --program-transform | --program-transfor \ + | --program-transfo | --program-transf \ + | --program-trans | --program-tran \ + | --progr-tra | --program-tr | --program-t) + ac_prev=program_transform_name ;; + -program-transform-name=* | --program-transform-name=* \ + | --program-transform-nam=* | --program-transform-na=* \ + | --program-transform-n=* | --program-transform-=* \ + | --program-transform=* | --program-transfor=* \ + | --program-transfo=* | --program-transf=* \ + | --program-trans=* | --program-tran=* \ + | --progr-tra=* | --program-tr=* | --program-t=*) + program_transform_name=$ac_optarg ;; + + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + silent=yes ;; + + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) + ac_prev=sbindir ;; + -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ + | --sbi=* | --sb=*) + sbindir=$ac_optarg ;; + + -sharedstatedir | --sharedstatedir | --sharedstatedi \ + | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ + | --sharedst | --shareds | --shared | --share | --shar \ + | --sha | --sh) + ac_prev=sharedstatedir ;; + -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ + | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ + | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ + | --sha=* | --sh=*) + sharedstatedir=$ac_optarg ;; + + -site | --site | --sit) + ac_prev=site ;; + -site=* | --site=* | --sit=*) + site=$ac_optarg ;; + + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) + ac_prev=srcdir ;; + -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) + srcdir=$ac_optarg ;; + + -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ + | --syscon | --sysco | --sysc | --sys | --sy) + ac_prev=sysconfdir ;; + -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ + | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) + sysconfdir=$ac_optarg ;; + + -target | --target | --targe | --targ | --tar | --ta | --t) + ac_prev=target_alias ;; + -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) + target_alias=$ac_optarg ;; + + -v | -verbose | --verbose | --verbos | --verbo | --verb) + verbose=yes ;; + + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; + + -with-* | --with-*) + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package| sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; + *) ac_optarg=yes ;; + esac + eval "with_$ac_package='$ac_optarg'" ;; + + -without-* | --without-*) + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` + # Reject names that are not valid shell variable names. + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; + + --x) + # Obsolete; use --with-x. + with_x=yes ;; + + -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ + | --x-incl | --x-inc | --x-in | --x-i) + ac_prev=x_includes ;; + -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ + | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) + x_includes=$ac_optarg ;; + + -x-libraries | --x-libraries | --x-librarie | --x-librari \ + | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) + ac_prev=x_libraries ;; + -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ + | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) + x_libraries=$ac_optarg ;; + + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } + ;; + + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + + *) + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} + ;; + + esac +done + +if test -n "$ac_prev"; then + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } +fi + +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done + +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi + +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null + + +# Find the source files, if location was not specified. +if test -z "$srcdir"; then + ac_srcdir_defaulted=yes + # Try the directory containing this script, then its parent. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + srcdir=$ac_confdir + if test ! -r $srcdir/$ac_unique_file; then + srcdir=.. + fi +else + ac_srcdir_defaulted=no +fi +if test ! -r $srcdir/$ac_unique_file; then + if test "$ac_srcdir_defaulted" = yes; then + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } + else + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } + fi +fi +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures udis86 1.4 to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF +_ACEOF +fi + +if test -n "$ac_init_help"; then + case $ac_init_help in + short | recursive ) echo "Configuration of udis86 1.4:";; + esac + cat <<\_ACEOF + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L if you have libraries in a + nonstandard directory + CPPFLAGS C/C++ preprocessor flags, e.g. -I if you have + headers in a nonstandard directory + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +Report bugs to . +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF +udis86 configure 1.4 +generated by GNU Autoconf 2.57 + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 +Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by udis86 $as_me 1.4, which was +generated by GNU Autoconf 2.57. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core core.* *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. +# Prefer explicitly selected file to automatically selected ones. +if test -z "$CONFIG_SITE"; then + if test "x$prefix" != xNONE; then + CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" + else + CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" + fi +fi +for ac_site_file in $CONFIG_SITE; do + if test -r "$ac_site_file"; then + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 + . "$ac_site_file" + fi +done + +if test -r "$cache_file"; then + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi +else + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + + + + + + + + + + + + + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. +set dummy ${ac_tool_prefix}gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "gcc", so it can be a program name with args. +set dummy gcc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="gcc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. +set dummy ${ac_tool_prefix}cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + CC=$ac_ct_CC +else + CC="$ac_cv_prog_CC" +fi + +fi +if test -z "$CC"; then + # Extract the first word of "cc", so it can be a program name with args. +set dummy cc; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else + ac_prog_rejected=no +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + ac_prog_rejected=yes + continue + fi + ac_cv_prog_CC="cc" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +if test $ac_prog_rejected = yes; then + # We found a bogon in the path, so make sure we never use it. + set dummy $ac_cv_prog_CC + shift + if test $# != 0; then + # We chose a different compiler from the bogus one. + # However, it has the same basename, so the bogon will be chosen + # first if we set CC to just the basename; use the full file name. + shift + ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + fi +fi +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + +fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + for ac_prog in cl + do + # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. +set dummy $ac_tool_prefix$ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="$ac_tool_prefix$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + echo "$as_me:$LINENO: result: $CC" >&5 +echo "${ECHO_T}$CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$CC" && break + done +fi +if test -z "$CC"; then + ac_ct_CC=$CC + for ac_prog in cl +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +echo "$as_me:$LINENO: checking for $ac_word" >&5 +echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 +if test "${ac_cv_prog_ac_ct_CC+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="$ac_prog" + echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done + +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 +echo "${ECHO_T}$ac_ct_CC" >&6 +else + echo "$as_me:$LINENO: result: no" >&5 +echo "${ECHO_T}no" >&6 +fi + + test -n "$ac_ct_CC" && break +done + + CC=$ac_ct_CC +fi + +fi + + +test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&5 +echo "$as_me: error: no acceptable C compiler found in \$PATH +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + +# Provide some information about the compiler. +echo "$as_me:$LINENO:" \ + "checking for C compiler version" >&5 +ac_compiler=`set X $ac_compile; echo $2` +{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version &5\"") >&5 + (eval $ac_compiler --version &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v &5\"") >&5 + (eval $ac_compiler -v &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } +{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V &5\"") >&5 + (eval $ac_compiler -V &5) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } + +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files a.out a.exe b.out" +# Try to create an executable without -o first, disregard a.out. +# It will help us diagnose broken compilers, and finding out an intuition +# of exeext. +echo "$as_me:$LINENO: checking for C compiler default output" >&5 +echo $ECHO_N "checking for C compiler default output... $ECHO_C" >&6 +ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5 + (eval $ac_link_default) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # Find the output, starting from the most likely. This scheme is +# not robust to junk in `.', hence go to wildcards (a.*) only as a last +# resort. + +# Be careful to initialize this variable, since it used to be cached. +# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. +ac_cv_exeext= +# b.out is created by i960 compilers. +for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out +do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) + ;; + conftest.$ac_ext ) + # This is the source file. + ;; + [ab].out ) + # We found the default executable, but exeext='' is most + # certainly right. + break;; + *.* ) + ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + # FIXME: I believe we export ac_cv_exeext for Libtool, + # but it would be cool to find out if it's true. Does anybody + # maintain Libtool? --akim. + export ac_cv_exeext + break;; + * ) + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: C compiler cannot create executables +See \`config.log' for more details." >&5 +echo "$as_me: error: C compiler cannot create executables +See \`config.log' for more details." >&2;} + { (exit 77); exit 77; }; } +fi + +ac_exeext=$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_file" >&5 +echo "${ECHO_T}$ac_file" >&6 + +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether the C compiler works" >&5 +echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 +# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 +# If not cross compiling, check that we can run a simple program. +if test "$cross_compiling" != yes; then + if { ac_try='./$ac_file' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + cross_compiling=no + else + if test "$cross_compiling" = maybe; then + cross_compiling=yes + else + { { echo "$as_me:$LINENO: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot run C compiled programs. +If you meant to cross compile, use \`--host'. +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } + fi + fi +fi +echo "$as_me:$LINENO: result: yes" >&5 +echo "${ECHO_T}yes" >&6 + +rm -f a.out a.exe conftest$ac_cv_exeext b.out +ac_clean_files=$ac_clean_files_save +# Check the compiler produces executables we can run. If not, either +# the compiler is broken, or we cross compile. +echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 +echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 +echo "$as_me:$LINENO: result: $cross_compiling" >&5 +echo "${ECHO_T}$cross_compiling" >&6 + +echo "$as_me:$LINENO: checking for suffix of executables" >&5 +echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 +if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5 + (eval $ac_link) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + # If both `conftest.exe' and `conftest' are `present' (well, observable) +# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will +# work properly (i.e., refer to `conftest.exe'), while it won't with +# `rm'. +for ac_file in conftest.exe conftest conftest.*; do + test -f "$ac_file" || continue + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; + *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` + export ac_cv_exeext + break;; + * ) break;; + esac +done +else + { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of executables: cannot compile and link +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest$ac_cv_exeext +echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 +echo "${ECHO_T}$ac_cv_exeext" >&6 + +rm -f conftest.$ac_ext +EXEEXT=$ac_cv_exeext +ac_exeext=$EXEEXT +echo "$as_me:$LINENO: checking for suffix of object files" >&5 +echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 +if test "${ac_cv_objext+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.o conftest.obj +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; then + for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do + case $ac_file in + *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; + *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` + break;; + esac +done +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&5 +echo "$as_me: error: cannot compute suffix of object files: cannot compile +See \`config.log' for more details." >&2;} + { (exit 1); exit 1; }; } +fi + +rm -f conftest.$ac_cv_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 +echo "${ECHO_T}$ac_cv_objext" >&6 +OBJEXT=$ac_cv_objext +ac_objext=$OBJEXT +echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 +echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 +if test "${ac_cv_c_compiler_gnu+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ +#ifndef __GNUC__ + choke me +#endif + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_compiler_gnu=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_compiler_gnu=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +ac_cv_c_compiler_gnu=$ac_compiler_gnu + +fi +echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 +echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 +GCC=`test $ac_compiler_gnu = yes && echo yes` +ac_test_CFLAGS=${CFLAGS+set} +ac_save_CFLAGS=$CFLAGS +CFLAGS="-g" +echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 +echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_g+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_g=yes +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +ac_cv_prog_cc_g=no +fi +rm -f conftest.$ac_objext conftest.$ac_ext +fi +echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 +if test "$ac_test_CFLAGS" = set; then + CFLAGS=$ac_save_CFLAGS +elif test $ac_cv_prog_cc_g = yes; then + if test "$GCC" = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-g" + fi +else + if test "$GCC" = yes; then + CFLAGS="-O2" + else + CFLAGS= + fi +fi +echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 +echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 +if test "${ac_cv_prog_cc_stdc+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_prog_cc_stdc=no +ac_save_CC=$CC +cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +#include +#include +#include +/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ +struct buf { int x; }; +FILE * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); +int argc; +char **argv; +int +main () +{ +return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; + ; + return 0; +} +_ACEOF +# Don't try gcc -ansi; that turns off useful extensions and +# breaks some systems' header files. +# AIX -qlanglvl=ansi +# Ultrix and OSF/1 -std1 +# HP-UX 10.20 and later -Ae +# HP-UX older versions -Aa -D_HPUX_SOURCE +# SVR4 -Xc -D__EXTENSIONS__ +for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + ac_cv_prog_cc_stdc=$ac_arg +break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext +done +rm -f conftest.$ac_ext conftest.$ac_objext +CC=$ac_save_CC + +fi + +case "x$ac_cv_prog_cc_stdc" in + x|xno) + echo "$as_me:$LINENO: result: none needed" >&5 +echo "${ECHO_T}none needed" >&6 ;; + *) + echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 +echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 + CC="$CC $ac_cv_prog_cc_stdc" ;; +esac + +# Some people use a C++ compiler to compile C. Since we use `exit', +# in C++ we need to declare it. In case someone uses the same compiler +# for both compiling C and C++ we need to have the C++ compiler decide +# the declaration of exit, since it's the most demanding environment. +cat >conftest.$ac_ext <<_ACEOF +#ifndef __cplusplus + choke me +#endif +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + for ac_declaration in \ + ''\ + '#include ' \ + 'extern "C" void std::exit (int) throw (); using std::exit;' \ + 'extern "C" void std::exit (int); using std::exit;' \ + 'extern "C" void exit (int) throw ();' \ + 'extern "C" void exit (int);' \ + 'void exit (int);' +do + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +#include +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + : +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +continue +fi +rm -f conftest.$ac_objext conftest.$ac_ext + cat >conftest.$ac_ext <<_ACEOF +#line $LINENO "configure" +/* confdefs.h. */ +_ACEOF +cat confdefs.h >>conftest.$ac_ext +cat >>conftest.$ac_ext <<_ACEOF +/* end confdefs.h. */ +$ac_declaration +int +main () +{ +exit (42); + ; + return 0; +} +_ACEOF +rm -f conftest.$ac_objext +if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5 + (eval $ac_compile) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); } && + { ac_try='test -s conftest.$ac_objext' + { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5 + (eval $ac_try) 2>&5 + ac_status=$? + echo "$as_me:$LINENO: \$? = $ac_status" >&5 + (exit $ac_status); }; }; then + break +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest.$ac_ext +done +rm -f conftest* +if test -n "$ac_declaration"; then + echo '#ifdef __cplusplus' >>confdefs.h + echo $ac_declaration >>confdefs.h + echo '#endif' >>confdefs.h +fi + +else + echo "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + +fi +rm -f conftest.$ac_objext conftest.$ac_ext +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + +ac_aux_dir= +for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do + if test -f $ac_dir/install-sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install-sh -c" + break + elif test -f $ac_dir/install.sh; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/install.sh -c" + break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break + fi +done +if test -z "$ac_aux_dir"; then + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. + +# Find a good install program. We prefer a C program (faster), +# so one script is as good as another. But avoid the broken or +# incompatible versions: +# SysV /etc/install, /usr/sbin/install +# SunOS /usr/etc/install +# IRIX /sbin/install +# AIX /bin/install +# AmigaOS /C/install, which installs bootblocks on floppy discs +# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag +# AFS /usr/afsws/bin/install, which mishandles nonexistent args +# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" +# ./install, which can be erroneously created by make from ./install.sh. +echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 +echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 +if test -z "$INSTALL"; then +if test "${ac_cv_path_install+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + # Account for people who put trailing slashes in PATH elements. +case $as_dir/ in + ./ | .// | /cC/* | \ + /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ + /usr/ucb/* ) ;; + *) + # OSF1 and SCO ODT 3.0 have their own names for install. + # Don't use installbsd from OSF since it installs stuff as root + # by default. + for ac_prog in ginstall scoinst install; do + for ac_exec_ext in '' $ac_executable_extensions; do + if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if test $ac_prog = install && + grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # AIX install. It has an incompatible calling convention. + : + elif test $ac_prog = install && + grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + # program-specific install script used by HP pwplus--don't use. + : + else + ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + break 3 + fi + fi + done + done + ;; +esac +done + + +fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL=$ac_cv_path_install + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL=$ac_install_sh + fi +fi +echo "$as_me:$LINENO: result: $INSTALL" >&5 +echo "${ECHO_T}$INSTALL" >&6 + +# Use test -z because SunOS4 sh mishandles braces in ${var-val}. +# It thinks the first close brace ends the variable substitution. +test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + +test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' + +test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' + + ac_config_files="$ac_config_files Makefile libudis86/Makefile udcli/Makefile" + +cat >confcache <<\_ACEOF +# This file is a shell script that caches the results of configure +# tests run on this system so they can be shared between configure +# scripts and configure runs, see configure's option --config-cache. +# It is not useful on other systems. If it contains results you don't +# want to keep, you may remove or edit it. +# +# config.status only pays attention to the cache file if you give it +# the --recheck option to rerun configure. +# +# `ac_cv_env_foo' variables (set or unset) will be overridden when +# loading this file, other *unset* `ac_cv_foo' will be assigned the +# following values. + +_ACEOF + +# The following way of writing the cache mishandles newlines in values, +# but we know of no workaround that is simple, portable, and efficient. +# So, don't put newlines in cache variables' values. +# Ultrix sh set writes to stderr and can't be redirected directly, +# and sets the high bit in the cache file unless we assign to the vars. +{ + (set) 2>&1 | + case `(ac_space=' '; set | grep ac_space) 2>&1` in + *ac_space=\ *) + # `set' does not quote correctly, so add quotes (double-quote + # substitution turns \\\\ into \\, and sed turns \\ into \). + sed -n \ + "s/'/'\\\\''/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" + ;; + *) + # `set' quotes correctly as required by POSIX, so do not add quotes. + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} | + sed ' + t clear + : clear + s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + t end + /^ac_cv_env/!s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ + : end' >>confcache +if diff $cache_file confcache >/dev/null 2>&1; then :; else + if test -w $cache_file; then + test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" + cat confcache >$cache_file + else + echo "not updating unwritable cache $cache_file" + fi +fi +rm -f confcache + +test "x$prefix" = xNONE && prefix=$ac_default_prefix +# Let make expand exec_prefix. +test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' + +# VPATH may cause trouble with some makes, so we remove $(srcdir), +# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and +# trailing colons and then remove the whole line if VPATH becomes empty +# (actually we leave an empty line to preserve line numbers). +if test "x$srcdir" = x.; then + ac_vpsub='/^[ ]*VPATH[ ]*=/{ +s/:*\$(srcdir):*/:/; +s/:*\${srcdir}:*/:/; +s/:*@srcdir@:*/:/; +s/^\([^=]*=[ ]*\):*/\1/; +s/:*$//; +s/^[^=]*=[ ]*$//; +}' +fi + +# Transform confdefs.h into DEFS. +# Protect against shell expansion while executing Makefile rules. +# Protect against Makefile macro expansion. +# +# If the first sed substitution is executed (which looks for macros that +# take arguments), then we branch to the quote section. Otherwise, +# look for a macro that doesn't take arguments. +cat >confdef2opt.sed <<\_ACEOF +t clear +: clear +s,^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\),-D\1=\2,g +t quote +s,^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\),-D\1=\2,g +t quote +d +: quote +s,[ `~#$^&*(){}\\|;'"<>?],\\&,g +s,\[,\\&,g +s,\],\\&,g +s,\$,$$,g +p +_ACEOF +# We use echo to avoid assuming a particular line-breaking character. +# The extra dot is to prevent the shell from consuming trailing +# line-breaks from the sub-command output. A line-break within +# single-quotes doesn't work because, if this script is created in a +# platform that uses two characters for line-breaks (e.g., DOS), tr +# would break. +ac_LF_and_DOT=`echo; echo .` +DEFS=`sed -n -f confdef2opt.sed confdefs.h | tr "$ac_LF_and_DOT" ' .'` +rm -f confdef2opt.sed + + +ac_libobjs= +ac_ltlibobjs= +for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue + # 1. Remove the extension, and $U if already installed. + ac_i=`echo "$ac_i" | + sed 's/\$U\././;s/\.o$//;s/\.obj$//'` + # 2. Add them. + ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext" + ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' +done +LIBOBJS=$ac_libobjs + +LTLIBOBJS=$ac_ltlibobjs + + + +: ${CONFIG_STATUS=./config.status} +ac_clean_files_save=$ac_clean_files +ac_clean_files="$ac_clean_files $CONFIG_STATUS" +{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 +echo "$as_me: creating $CONFIG_STATUS" >&6;} +cat >$CONFIG_STATUS <<_ACEOF +#! $SHELL +# Generated by $as_me. +# Run this file to recreate the current configuration. +# Compiler output produced by configure, useful for debugging +# configure, is in config.log if it exists. + +debug=false +ac_cs_recheck=false +ac_cs_silent=false +SHELL=\${CONFIG_SHELL-$SHELL} +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 +echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 +echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + + +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + +exec 6>&1 + +# Open the log real soon, to keep \$[0] and so on meaningful, and to +# report actual input values of CONFIG_FILES etc. instead of their +# values after options handling. Logging --version etc. is OK. +exec 5>>config.log +{ + echo + sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX +## Running $as_me. ## +_ASBOX +} >&5 +cat >&5 <<_CSEOF + +This file was extended by udis86 $as_me 1.4, which was +generated by GNU Autoconf 2.57. Invocation command line was + + CONFIG_FILES = $CONFIG_FILES + CONFIG_HEADERS = $CONFIG_HEADERS + CONFIG_LINKS = $CONFIG_LINKS + CONFIG_COMMANDS = $CONFIG_COMMANDS + $ $0 $@ + +_CSEOF +echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 +echo >&5 +_ACEOF + +# Files that config.status was made for. +if test -n "$ac_config_files"; then + echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_headers"; then + echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_links"; then + echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS +fi + +if test -n "$ac_config_commands"; then + echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS +fi + +cat >>$CONFIG_STATUS <<\_ACEOF + +ac_cs_usage="\ +\`$as_me' instantiates files from templates according to the +current configuration. + +Usage: $0 [OPTIONS] [FILE]... + + -h, --help print this help, then exit + -V, --version print version number, then exit + -q, --quiet do not print progress messages + -d, --debug don't remove temporary files + --recheck update $as_me by reconfiguring in the same conditions + --file=FILE[:TEMPLATE] + instantiate the configuration file FILE + +Configuration files: +$config_files + +Report bugs to ." +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF +ac_cs_version="\\ +udis86 config.status 1.4 +configured by $0, generated by GNU Autoconf 2.57, + with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\" + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001 +Free Software Foundation, Inc. +This config.status script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it." +srcdir=$srcdir +INSTALL="$INSTALL" +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF +# If no file are specified by the user, then we need to provide default +# value. By we need to know if files were specified by the user. +ac_need_defaults=: +while test $# != 0 +do + case $1 in + --*=*) + ac_option=`expr "x$1" : 'x\([^=]*\)='` + ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'` + ac_shift=: + ;; + -*) + ac_option=$1 + ac_optarg=$2 + ac_shift=shift + ;; + *) # This is not an option, so the user has probably given explicit + # arguments. + ac_option=$1 + ac_need_defaults=false;; + esac + + case $ac_option in + # Handling of the options. +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF + -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) + ac_cs_recheck=: ;; + --version | --vers* | -V ) + echo "$ac_cs_version"; exit 0 ;; + --he | --h) + # Conflict between --help and --header + { { echo "$as_me:$LINENO: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: ambiguous option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; };; + --help | --hel | -h ) + echo "$ac_cs_usage"; exit 0 ;; + --debug | --d* | -d ) + debug=: ;; + --file | --fil | --fi | --f ) + $ac_shift + CONFIG_FILES="$CONFIG_FILES $ac_optarg" + ac_need_defaults=false;; + --header | --heade | --head | --hea ) + $ac_shift + CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" + ac_need_defaults=false;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil | --si | --s) + ac_cs_silent=: ;; + + # This is an error. + -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&5 +echo "$as_me: error: unrecognized option: $1 +Try \`$0 --help' for more information." >&2;} + { (exit 1); exit 1; }; } ;; + + *) ac_config_targets="$ac_config_targets $1" ;; + + esac + shift +done + +ac_configure_extra_args= + +if $ac_cs_silent; then + exec 6>/dev/null + ac_configure_extra_args="$ac_configure_extra_args --silent" +fi + +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF +if \$ac_cs_recheck; then + echo "running $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6 + exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion +fi + +_ACEOF + + + + + +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_config_target in $ac_config_targets +do + case "$ac_config_target" in + # Handling of arguments. + "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; + "libudis86/Makefile" ) CONFIG_FILES="$CONFIG_FILES libudis86/Makefile" ;; + "udcli/Makefile" ) CONFIG_FILES="$CONFIG_FILES udcli/Makefile" ;; + *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 +echo "$as_me: error: invalid argument: $ac_config_target" >&2;} + { (exit 1); exit 1; }; };; + esac +done + +# If the user did not use the arguments to specify the items to instantiate, +# then the envvar interface is used. Set only those that are not. +# We use the long form for the default assignment because of an extremely +# bizarre bug on SunOS 4.1.3. +if $ac_need_defaults; then + test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files +fi + +# Have a temporary directory for convenience. Make it in the build tree +# simply because there is no reason to put it here, and in addition, +# creating and moving files from /tmp can sometimes cause problems. +# Create a temporary directory, and hook for its removal unless debugging. +$debug || +{ + trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 + trap '{ (exit 1); exit 1; }' 1 2 13 15 +} + +# Create a (secure) tmp directory for tmp files. + +{ + tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && + test -n "$tmp" && test -d "$tmp" +} || +{ + tmp=./confstat$$-$RANDOM + (umask 077 && mkdir $tmp) +} || +{ + echo "$me: cannot create a temporary directory in ." >&2 + { (exit 1); exit 1; } +} + +_ACEOF + +cat >>$CONFIG_STATUS <<_ACEOF + +# +# CONFIG_FILES section. +# + +# No need to generate the scripts if there are no CONFIG_FILES. +# This happens for instance when ./config.status config.h +if test -n "\$CONFIG_FILES"; then + # Protect against being on the right side of a sed subst in config.status. + sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g; + s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF +s,@SHELL@,$SHELL,;t t +s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t +s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t +s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t +s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t +s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t +s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t +s,@exec_prefix@,$exec_prefix,;t t +s,@prefix@,$prefix,;t t +s,@program_transform_name@,$program_transform_name,;t t +s,@bindir@,$bindir,;t t +s,@sbindir@,$sbindir,;t t +s,@libexecdir@,$libexecdir,;t t +s,@datadir@,$datadir,;t t +s,@sysconfdir@,$sysconfdir,;t t +s,@sharedstatedir@,$sharedstatedir,;t t +s,@localstatedir@,$localstatedir,;t t +s,@libdir@,$libdir,;t t +s,@includedir@,$includedir,;t t +s,@oldincludedir@,$oldincludedir,;t t +s,@infodir@,$infodir,;t t +s,@mandir@,$mandir,;t t +s,@build_alias@,$build_alias,;t t +s,@host_alias@,$host_alias,;t t +s,@target_alias@,$target_alias,;t t +s,@DEFS@,$DEFS,;t t +s,@ECHO_C@,$ECHO_C,;t t +s,@ECHO_N@,$ECHO_N,;t t +s,@ECHO_T@,$ECHO_T,;t t +s,@LIBS@,$LIBS,;t t +s,@CC@,$CC,;t t +s,@CFLAGS@,$CFLAGS,;t t +s,@LDFLAGS@,$LDFLAGS,;t t +s,@CPPFLAGS@,$CPPFLAGS,;t t +s,@ac_ct_CC@,$ac_ct_CC,;t t +s,@EXEEXT@,$EXEEXT,;t t +s,@OBJEXT@,$OBJEXT,;t t +s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t +s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t +s,@INSTALL_DATA@,$INSTALL_DATA,;t t +s,@LIBOBJS@,$LIBOBJS,;t t +s,@LTLIBOBJS@,$LTLIBOBJS,;t t +CEOF + +_ACEOF + + cat >>$CONFIG_STATUS <<\_ACEOF + # Split the substitutions into bite-sized pieces for seds with + # small command number limits, like on Digital OSF/1 and HP-UX. + ac_max_sed_lines=48 + ac_sed_frag=1 # Number of current file. + ac_beg=1 # First line for current file. + ac_end=$ac_max_sed_lines # Line after last line for current file. + ac_more_lines=: + ac_sed_cmds= + while $ac_more_lines; do + if test $ac_beg -gt 1; then + sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + else + sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag + fi + if test ! -s $tmp/subs.frag; then + ac_more_lines=false + else + # The purpose of the label and of the branching condition is to + # speed up the sed processing (if there are no `@' at all, there + # is no need to browse any of the substitutions). + # These are the two extra sed commands mentioned above. + (echo ':t + /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed + if test -z "$ac_sed_cmds"; then + ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" + else + ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" + fi + ac_sed_frag=`expr $ac_sed_frag + 1` + ac_beg=$ac_end + ac_end=`expr $ac_end + $ac_max_sed_lines` + fi + done + if test -z "$ac_sed_cmds"; then + ac_sed_cmds=cat + fi +fi # test -n "$CONFIG_FILES" + +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue + # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". + case $ac_file in + - | *:- | *:-:* ) # input from stdin + cat >$tmp/stdin + ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` + ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; + * ) ac_file_in=$ac_file.in ;; + esac + + # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. + ac_dir=`(dirname "$ac_file") 2>/dev/null || +$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$ac_file" : 'X\(//\)[^/]' \| \ + X"$ac_file" : 'X\(//\)$' \| \ + X"$ac_file" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$ac_file" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + { if $as_mkdir_p; then + mkdir -p "$ac_dir" + else + as_dir="$ac_dir" + as_dirs= + while test ! -d "$as_dir"; do + as_dirs="$as_dir $as_dirs" + as_dir=`(dirname "$as_dir") 2>/dev/null || +$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$as_dir" : 'X\(//\)[^/]' \| \ + X"$as_dir" : 'X\(//\)$' \| \ + X"$as_dir" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$as_dir" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + done + test ! -n "$as_dirs" || mkdir $as_dirs + fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5 +echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;} + { (exit 1); exit 1; }; }; } + + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + + case $INSTALL in + [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; + *) ac_INSTALL=$ac_top_builddir$INSTALL ;; + esac + + if test x"$ac_file" != x-; then + { echo "$as_me:$LINENO: creating $ac_file" >&5 +echo "$as_me: creating $ac_file" >&6;} + rm -f "$ac_file" + fi + # Let's still pretend it is `configure' which instantiates (i.e., don't + # use $as_me), people would be surprised to read: + # /* config.h. Generated by config.status. */ + if test x"$ac_file" = x-; then + configure_input= + else + configure_input="$ac_file. " + fi + configure_input=$configure_input"Generated from `echo $ac_file_in | + sed 's,.*/,,'` by configure." + + # First look for the input files in the build tree, otherwise in the + # src tree. + ac_file_inputs=`IFS=: + for f in $ac_file_in; do + case $f in + -) echo $tmp/stdin ;; + [\\/$]*) + # Absolute (can't be DOS-style, as IFS=:) + test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + echo $f;; + *) # Relative + if test -f "$f"; then + # Build tree + echo $f + elif test -f "$srcdir/$f"; then + # Source tree + echo $srcdir/$f + else + # /dev/null tree + { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 +echo "$as_me: error: cannot find input file: $f" >&2;} + { (exit 1); exit 1; }; } + fi;; + esac + done` || { (exit 1); exit 1; } +_ACEOF +cat >>$CONFIG_STATUS <<_ACEOF + sed "$ac_vpsub +$extrasub +_ACEOF +cat >>$CONFIG_STATUS <<\_ACEOF +:t +/@[a-zA-Z_][a-zA-Z_0-9]*@/!b +s,@configure_input@,$configure_input,;t t +s,@srcdir@,$ac_srcdir,;t t +s,@abs_srcdir@,$ac_abs_srcdir,;t t +s,@top_srcdir@,$ac_top_srcdir,;t t +s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t +s,@builddir@,$ac_builddir,;t t +s,@abs_builddir@,$ac_abs_builddir,;t t +s,@top_builddir@,$ac_top_builddir,;t t +s,@abs_top_builddir@,$ac_abs_top_builddir,;t t +s,@INSTALL@,$ac_INSTALL,;t t +" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out + rm -f $tmp/stdin + if test x"$ac_file" != x-; then + mv $tmp/out $ac_file + else + cat $tmp/out + rm -f $tmp/out + fi + +done +_ACEOF + +cat >>$CONFIG_STATUS <<\_ACEOF + +{ (exit 0); exit 0; } +_ACEOF +chmod +x $CONFIG_STATUS +ac_clean_files=$ac_clean_files_save + + +# configure is writing to config.log, and then calls config.status. +# config.status does its own redirection, appending to config.log. +# Unfortunately, on DOS this fails, as config.log is still kept open +# by configure, so config.status won't be able to write to it; its +# output is simply discarded. So we exec the FD to /dev/null, +# effectively closing config.log, so it can be properly (re)opened and +# appended to by config.status. When coming back to configure, we +# need to make the FD available again. +if test "$no_create" != yes; then + ac_cs_success=: + ac_config_status_args= + test "$silent" = yes && + ac_config_status_args="$ac_config_status_args --quiet" + exec 5>/dev/null + $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false + exec 5>>config.log + # Use ||, not &&, to avoid exiting from the if with $? = 1, which + # would make configure fail if this is the last instruction. + $ac_cs_success || { (exit 1); exit 1; } +fi + diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/configure.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/configure.in Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,7 @@ +AC_INIT(udis86, 1.4, vivek@sig9.com) +AC_PROG_CC +AC_PROG_INSTALL +AC_CONFIG_FILES([Makefile + libudis86/Makefile + udcli/Makefile]) +AC_OUTPUT diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/docs/doc.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/docs/doc.html Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,537 @@ + + +Documentation: Udis86 - Disassembler Library for x86 and AMD64 + + + + +

Udis86 - Disassembler Library for x86 and AMD64

+
+
+ +Home + +

Documentation

+Dec 19, 2006 - Added new API function and Standalone build mode. +
+
+1. Using the library - libudis86 +
+ 1.1 Compiling and Installing
+
+ 1.1.1 Standalone Udis86
+
+ 1.2 Interfacing With Your Program
+ 1.3 A Quick Example
+ 1.4 The Udis86 Object
+ 1.5 Functions
+ 1.6 Examining an Instruction +
+2. Using the command-line tool - udcli +
+ 2.1 Usage
+ 2.2 Command-line options
+ 2.3 The hexadecimal input mode
+
+
+
+ + +

1. Using the library - libudis86

+ +

libudis86 can be used in a variety of situations, and the extent to which you +need to know the API depends on the functionality you are looking for. At its +core, libudis86 is a disassembler engine, which when given an input stream of +machine code bytes, disassembles them for you to inspect. You could use it, +simply, to generate assembly language output of the code, or to inspect +individual instructions, their operands, etc.

+ + +

1.1 Compiling and installing

+ +

libudis86 is developed for Unix-like environments, and steps to installing +it is very simple. Get the source tarball, unpack it, and,

+
+$ ./configure
+$ make
+$ make install
+
+

is all you need to do. Ofcourse, you may need to have root privileges to make +install. The install scripts copy the necessary header and library files to +appropriate locations of in system. +

+ + +

1.1.1 Standalone Udis86

+ +

Standalone udis86 is (for now) a simple build hack that lets you build +a single relocatable object file with all of the libudis86 functionality, that you +could possibly use in any environment, say, a kernel module. The standalone object +assumes the availablity of the following functionality in the environment.

+ +
+- memset()
+- vprintf()
+- sscanf()
+
+ +

To build udis86 in standalone mode, do the following.

+ +
+$ ./configure
+$ make standalone
+
+ +which will generate ud_standalone.o in ud/libudis86. This build +mode is a little hack'ish in nature and hopefully is replaced with better configure scripts +in the future. If you have ideas, let me know! + + +

1.2 Interfacing with your program

+ +

Once you have installed libudis86, to use it with your program, first, +include in your program the udis86.h header file, +

+ +
+#include <udis86.h>
+
+ +

and then, add the following flag to your GCC command-line options.

+ +
+-ludis86
+
+ + +

1.3 A Quick Example

+ +The following code is an example of a program that interfaces with libudis86 and +uses the API to generate assembly language output for 64-bit code, input from +STDIN. +
+/* simple_example.c */
+
+#include <stdio.h>
+#include <udis86.h>
+
+int main()
+{
+	ud_t ud_obj;
+
+	ud_init(&ud_obj);
+	ud_set_input_file(&ud_obj, stdin);
+	ud_set_mode(&ud_obj, 64);
+	ud_set_syntax(&ud_obj, UD_SYN_INTEL);
+
+	while (ud_disassemble(&ud_obj)) {
+		printf("\t%s\n", ud_insn_asm(&ud_obj));
+	}
+
+ 	return 0;
+}
+
+To compile the program: +
+$ gcc -ludis86 simple_example.c -o simple_example
+
+ +

This example should give you an idea of how this library can +be used. The following sections describe, in detail, the complete API of +libudis86.

+ + +

1.4 The Udis86 Object

+ +

To maintain reentrancy and thread safety, udis86 does not use static data. +All data related to the disassembly process are stored in a single object, +called the udis86 object. So, to use libudis86 you must create an instance of +this object,

+ +
+ud_t my_ud_obj;
+
+ +and initialize it, + +
+ud_init(&my_ud_obj);
+
+ +Ofcourse, you can create multiple instances of libudis86 and spawn multiple +threads of disassembly. Thats entirely upto how you want to use the library. +libudis86 guarantees reentrancy and thread safety. + + +

1.5 Functions

+ +All functions in libudis86 take a pointer to the udis86 object (ud_t) as the first +argument. The following is a list of all functions available. + + +
    +
  1. +
    void ud_init (ud_t* ud_obj)
    + ud_t object initializer. This function must be called on a udis86 object + before it can used anywhere else. +
  2. + +
  3. +
    void ud_set_input_hook(ud_t* ud_obj, int (*hook)())
    + + This function sets the input source for the library. To retrieve each + byte in the stream, libudis86 calls back the function pointed to by + "hook". + + The hook function, defined by the user code, must return a single byte + of code each time it is called. To signal end-of-input, it must return the + constant, UD_EOI. +
  4. + +
  5. +
    void ud_set_input_buffer(ud_t* ud_obj, unsigned char* buffer, size_t size);
    + + This function sets the input source for the library to a buffer of fixed + size. +
  6. + +
  7. +
    void ud_set_input_file(ud_t* ud_obj, FILE* filep);
    + + This function sets the input source for the library to a file pointed to by + the passed FILE pointer. Note that the library does not perform any checks, + assuming the file pointer to be properly initialized. +
  8. + +
  9. +
    void ud_set_mode(ud_t* ud_obj, uint8_t mode_bits);
    + + Sets the mode of disassembly. Possible values are 16, 32, and 64. By + default, the library works in 32bit mode. +
  10. + +
  11. +
    void ud_set_pc(ud_t*, uint64_t pc);
    + + Sets the program counter (EIP/RIP). This changes the offset of the + assembly output generated, with direct effect on branch instructions. +
  12. + +
  13. +
    void ud_set_syntax(ud_t*, void (*translator)(ud_t*));
    + + libudis86 disassembles one instruction at a time into an intermediate + form that lets you inspect the instruction and its various aspects + individually. But to generate the assembly language output, this + intermediate form must be translated. This function sets the translator. + There are two inbuilt translators, +
    +
      +
    • UD_SYN_INTEL - for INTEL (NASM-like) syntax.
    • +
    • UD_SYN_ATT - for AT&T (GAS-like) syntax.
    • +
    + If you do not want libudis86 to translate, you can pass a NULL to the + function, with no more translations thereafter. This is particularily + useful for cases when you only want to identify chunks of code and then + create the assembly output if needed. +

    + If you want to create your own translator, you must pass a pointer to + function that accepts a pointer to ud_t. This function will be called + by libudis86 after each instruction is decoded. +
  14. + +
  15. +
    void ud_set_vendor(ud_t*, unsigned vendor);
    + + Sets the vendor of whose instruction to choose from. This is only useful for + selecting the VMX or SVM instruction sets at which point INTEL and AMD have + diverged significantly. At a later stage, support for a more granular + selection of instruction sets maybe added. +
    +
      +
    • UD_VENDOR_INTEL - for INTEL instruction set.
    • +
    • UD_VEDNOR_ATT - for AMD instruction set.
    • +
    +
  16. + +
  17. +
    unsigned int ud_disassemble(ud_t*);
    + + This function disassembles the next instruction in the input stream. + RETURNS, the number of bytes disassembled. A 0 indicates end of + input. + NOTE, to restart disassembly, after the end of input, you must + call one of the input setting functions with the new input source. +
  18. + +
  19. +
    unsigned int ud_insn_len(ud_t* u);
    + Returns the number of bytes disassembled. +
  20. + + +
  21. +
    uint64_t ud_insn_off(ud_t*);
    + Returns the starting offset of the disassembled instruction relative + to the program counter value specified initially. +
  22. + +
  23. +
    char* ud_insn_hex(ud_t*);
    + Returns pointer to character string holding the hexadecimal + representation of the disassembled bytes. +
  24. + +
  25. +
    uint8_t* ud_insn_ptr(ud_t* u);
    + Returns pointer to the buffer holding the instruction bytes. Use + ud_insn_len(), to determine the length of this buffer. +
  26. + +
  27. +
    char* ud_insn_asm(ud_t* u);
    + If the syntax is specified, returns pointer to the character string holding + assembly language representation of the disassembled instruction. +
  28. + +
  29. +
    void ud_input_skip(ud_t*, size_t n);
    + Skips n number of bytes in the input stream. +
  30. +
+ + +

1.6 Examining an Instruction

+ +After calling ud_disassembly, instructions can be examined by accessing fields +of the ud_t object, as described below. + +
    +
  1. +
    ud_mnemonic_code_t ud_obj->mnemonic
    + + The mnemonic code for the disassembled instruction. All codes are + prefixed by UD_I, such as, UD_Imov, UD_Icall, UD_Ijmp, etc. + See a list of mnemonic codes in mnemonics.h. +
  2. + +
  3. +
    ud_operand_t ud_obj->operand[n]
    + + The array of operands of the disassembled instruction. A maximum of + three operands are allowed, indexed as 0, 1, and 2. Operands can be + examined using the their sub-fields as described below. +
  4. + +
  5. +
    ud_type_t ud_obj->operand[n].type
    + This field represents the type of the operand n. Possible values are - +
    +UD_OP_MEM	-	A Memory Addressing Operand.
    +UD_OP_REG	-	A Register Operand.
    +UD_OP_PTR	-	A Segment:Offset Pointer Operand.
    +UD_OP_IMM	-	An Immediate Operand
    +UD_OP_JIMM	-	An Immediate Operand for Branch Instructions.
    +UD_OP_CONST	-	A Constant Value Operand.
    +UD_NONE		-	No Operand.
    + +
  6. + +
  7. +
    ud_obj->operand[n].size
    + This field gives the size of operand n. Possible values are - 8, 16, 32, 48, 64. +
  8. + +
  9. +
    +ud_obj->operand[n].base
    +ud_obj->operand[n].index
    +ud_obj->operand[n].scale
    +ud_obj->operand[n].offset
    +ud_obj->operand[n].lval
    + + For operands of type UD_OP_MEM, +
      +
    • ud_obj->operand[n].base is the base register (if any),
    • +
    • ud_obj->operand[n].index is the index register (if any),
    • +
    • ud_obj->operand[n].scale is the scale (if any),
    • +
    • ud_obj->operand[n].offset is the size of displacement/offset to be added (8,16,32,64),
    • +
    • ud_obj->operand[n].lval is displacement/offset (if any).
    • +
    + + For operands of type UD_OP_REG, +
      +
    • ud_obj->operand[n].base field gives the register.
    • +
    + + For operands of type UD_OP_PTR, +
      +
    • ud_obj->operand[n].lval holds the segment:offset.
    • +
    • ud_obj->operand[n].size can have two values 32 + (for 16:16 seg:off) and 48 (for 16:32 seg:off).
    • +
    + + For operands of type UD_OP_IMM, UD_OP_JIMM, UD_OP_CONST, +
      +
    • ud_obj->operand[n].lval holds the value.
    • +
    + + Possible values for ud_obj->operand[n].base and ud_obj->operand[n].index. +
    +  /* No register */
    +  UD_NONE, 
    +
    +  /* 8 bit GPRs */
    +  UD_R_AL,	UD_R_CL,	UD_R_DL,	UD_R_BL,
    +  UD_R_AH,	UD_R_CH,	UD_R_DH,	UD_R_BH,
    +  UD_R_SPL,	UD_R_BPL,	UD_R_SIL,	UD_R_DIL,
    +  UD_R_R8B,	UD_R_R9B,	UD_R_R10B,	UD_R_R11B,
    +  UD_R_R12B,	UD_R_R13B,	UD_R_R14B,	UD_R_R15B,
    +
    +  /* 16 bit GPRs */
    +  UD_R_AX,	UD_R_CX,	UD_R_DX,	UD_R_BX,
    +  UD_R_SP,	UD_R_BP,	UD_R_SI,	UD_R_DI,
    +  UD_R_R8W,	UD_R_R9W,	UD_R_R10W,	UD_R_R11W,
    +  UD_R_R12W,	UD_R_R13W,	UD_R_R14W,	UD_R_R15W,
    +	
    +  /* 32 bit GPRs */
    +  UD_R_EAX,	UD_R_ECX,	UD_R_EDX,	UD_R_EBX,
    +  UD_R_ESP,	UD_R_EBP,	UD_R_ESI,	UD_R_EDI,
    +  UD_R_R8D,	UD_R_R9D,	UD_R_R10D,	UD_R_R11D,
    +  UD_R_R12D,	UD_R_R13D,	UD_R_R14D,	UD_R_R15D,
    +	
    +  /* 64 bit GPRs */
    +  UD_R_RAX,	UD_R_RCX,	UD_R_RDX,	UD_R_RBX,
    +  UD_R_RSP,	UD_R_RBP,	UD_R_RSI,	UD_R_RDI,
    +  UD_R_R8,	UD_R_R9,	UD_R_R10,	UD_R_R11,
    +  UD_R_R12,	UD_R_R13,	UD_R_R14,	UD_R_R15,
    +
    +  /* segment registers */
    +  UD_R_ES,	UD_R_CS,	UD_R_SS,	UD_R_DS,
    +  UD_R_FS,	UD_R_GS,	
    +
    +  /* control registers*/
    +  UD_R_CR0,	UD_R_CR1,	UD_R_CR2,	UD_R_CR3,
    +  UD_R_CR4,	UD_R_CR5,	UD_R_CR6,	UD_R_CR7,
    +  UD_R_CR8,	UD_R_CR9,	UD_R_CR10,	UD_R_CR11,
    +  UD_R_CR12,	UD_R_CR13,	UD_R_CR14,	UD_R_CR15,
    +	
    +  /* debug registers */
    +  UD_R_DR0,	UD_R_DR1,	UD_R_DR2,	UD_R_DR3,
    +  UD_R_DR4,	UD_R_DR5,	UD_R_DR6,	UD_R_DR7,
    +  UD_R_DR8,	UD_R_DR9,	UD_R_DR10,	UD_R_DR11,
    +  UD_R_DR12,	UD_R_DR13,	UD_R_DR14,	UD_R_DR15,
    +
    +  /* mmx registers */
    +  UD_R_MM0,	UD_R_MM1,	UD_R_MM2,	UD_R_MM3,
    +  UD_R_MM4,	UD_R_MM5,	UD_R_MM6,	UD_R_MM7,
    +
    +  /* x87 registers */
    +  UD_R_ST0,	UD_R_ST1,	UD_R_ST2,	UD_R_ST3,
    +  UD_R_ST4,	UD_R_ST5,	UD_R_ST6,	UD_R_ST7, 
    +
    +  /* extended multimedia registers */
    +  UD_R_XMM0,	UD_R_XMM1,	UD_R_XMM2,	UD_R_XMM3,
    +  UD_R_XMM4,	UD_R_XMM5,	UD_R_XMM6,	UD_R_XMM7,
    +  UD_R_XMM8,	UD_R_XMM9,	UD_R_XMM10,	UD_R_XMM11,
    +  UD_R_XMM12,	UD_R_XMM13,	UD_R_XMM14,	UD_R_XMM15,
    +
    +  UD_R_RIP
    + + Possible values for ud_obj->operand[n].lval depend on ud_obj->operand[n].size, + based on which you could use its sub-fields to access the integer values. + +
    +ud_obj->operand[n].lval.sbyte		- Signed Byte
    +ud_obj->operand[n].lval.ubyte		- Unsigned Byte
    +ud_obj->operand[n].lval.sword		- Signed Word
    +ud_obj->operand[n].lval.uword		- Unsigned Word
    +ud_obj->operand[n].lval.sdword		- Signed Double Word
    +ud_obj->operand[n].lval.udword		- Unsined Double Word
    +ud_obj->operand[n].lval.sqword		- Signed Quad Word
    +ud_obj->operand[n].lval.uqword		- Unsigned Quad Word
    +ud_obj->operand[n].lval.ptr.seg		- Pointer Segment in Segment:Offset
    +ud_obj->operand[n].lval.ptr.off		- Pointer Offset in Segment:Offset 
    + +
  10. Prefix Fields - These fields store prefixes (if found). If a prefix + does not exists then the field corresponding to it has the value UD_NONE. +
    +ud_obj->operand[n].pfx_rex		- 64-bit mode REX prefix
    +ud_obj->operand[n].pfx_seg		- Segment register prefix
    +ud_obj->operand[n].pfx_opr		- Operand-size prefix (66h)
    +ud_obj->operand[n].pfx_adr		- Address-size prefix (67h)
    +ud_obj->operand[n].pfx_lock		- Lock prefix
    +ud_obj->operand[n].pfx_rep		- Rep prefix
    +ud_obj->operand[n].pfx_repe		- Repe prefix
    +ud_obj->operand[n].pfx_repne		- Repne prefix
    +
  11. + + Possible values for ud_obj->operand[n].pfx_seg are, +
    +UD_R_ES,	UD_R_CS,	UD_R_SS,	UD_R_DS,
    +UD_R_FS,	UD_R_GS,	UD_NONE
    + + +
  12. +
    uint4_t ud_obj->pc
    + The program counter. +
  13. +
+ + +

2. Using the command-line tool - udcli

+ +A front-end incarnation of this library, udcli is a small command-line tool for +your quick disassembly needs. + + +

2.1 Usage

+
$ udcli [-option[s]] file
+ + +

2.2 Options

+
+-16      : Set the disassembly mode to 16 bits.
+-32      : Set the disassembly mode to 32 bits. (default)
+-64      : Set the disassembly mode to 64 bits.
+-intel   : Set the output to INTEL (NASM like) syntax. (default)
+-att     : Set the output to AT&T (GAS like) syntax.
+-v <v>   : Set vendor. <v> = {intel, amd} 
+-o <pc>  : Set the value of program counter to . (default = 0)
+-s <pc>  : Set the number of bytes to skip before disassembly to .
+-c <pc>  : Set the number of bytes to disassemble to .
+-x       : Set the input mode to whitespace seperated 8-bit numbers in
+           hexadecimal representation. Example: 0f 01 ae 00
+-noff    : Do not display the offset of instructions.
+-nohex   : Do not display the hexadecimal code of instructions.
+-h       : Display help message.
+ + +

2.3 The hexadecimal input mode

+ +Noteworthy among the command-line options of the udcli is "-x" which sets the +input mode to whitespace seperated 8-bit numbers in hexadecimal representation. +This could come as a handy tool, for quickly disassembling hexadecimal +representation of machine code, like those generated during software crashes, etc. + +
+ +
+ +
© 2006 Vivek Mohan
+ + diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/docs/index.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/docs/index.html Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,63 @@ + + +Udis86 - Disassembler Library for x86 and AMD64 (x86-64) + + + +

Udis86 - Disassembler Library for x86 and AMD64

+
+
+ +Documentation · +Project Page · +Author + +

Udis86 is an easy-to-use minimalistic disassembler library (libudis86) +for the x86 and AMD64 (x86-64) range of instruction set architectures. The primary +intent of the design and development of udis86 is to aid software development +projects that entail binary code analysis.

+ + + +

libudis86

+
    +
  1. Full support for the x86 and x86-64 (AMD64) range of instruction set + architectures.
  2. +
  3. Full support for all AMD-V, INTEL-VMX, MMX, SSE, SSE2, SSE3, FPU(x87), and + AMD 3Dnow! instructions.
  4. +
  5. Supports 16bit, 32bit, and 64bit disassembly modes.
  6. +
  7. Generates output in AT&T or INTEL assembler language syntaxes.
  8. +
  9. Supports flexbile input methods: File, Buffer, and Hooks.
  10. +
  11. Thread-safe and Reentrant.
  12. +
  13. Clean and very easy-to-use API.
  14. + New! The new standalone build system + makes udis86 usable and embeddable in kernel code (or other environments which, say, + lack libc). +
+ + See Usage. + +

udcli

+ +A front-end incarnation of this library, udcli is a small command-line tool +for your quick disassembly needs. +
+
+ +
+See Usage. + + +

Author

+ +

Udis86 is a creation of Vivek Mohan. +You can reach me at vivek[at]sig9[dot]com. Please let me know if you are +using udis86, have ideas for it, or would like to comment on it.

+ +
© 2006 Vivek Mohan
+
+
+ + diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/docs/ss.jpg Binary file udis86-1.4/docs/ss.jpg has changed diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/docs/style.css --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/docs/style.css Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,65 @@ +body { + font: 76%, sans-serif; + background-color: #fff; + margin: 0; + padding: 0; +} + +#topbar { + margin-top: 0px; + padding: 1em; + background-color: skyblue; + color: navy; +} +#topbar h1 { + padding: 0; + margin: 0; + font: 2em, sans-serif; + font-weight: bold; +} + +#wrapper { + width: 750px; +} + +#menu { +} +#content a { + text-decoration: none; + color: navy; + border-bottom: 1px solid; +} + +#content { + margin-left: 10px; + font-size: 1.1em; + padding: 1em; + vertical-align: top; + border-left: 1px solid skyblue; + border-right: 1px solid skyblue; +} + +.box { + background-color: #efefef; + border: 1px dotted #aaa; + padding: .5em; +} + +li { + margin-bottom: .5em; +} + +pre { + padding: .5em; + background-color: #f5f5f5; + font-size: 1.1em; + border: 1px solid #999; +} + +code { + font-size: 1.2em; +} + +ul { + margin: 1em; +} diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/install-sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/install-sh Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,251 @@ +#!/bin/sh +# +# install - install a program, script, or datafile +# This comes from X11R5 (mit/util/scripts/install.sh). +# +# Copyright 1991 by the Massachusetts Institute of Technology +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of M.I.T. not be used in advertising or +# publicity pertaining to distribution of the software without specific, +# written prior permission. M.I.T. makes no representations about the +# suitability of this software for any purpose. It is provided "as is" +# without express or implied warranty. +# +# Calling this script install-sh is preferred over install.sh, to prevent +# `make' implicit rules from creating a file called install from it +# when there is no Makefile. +# +# This script is compatible with the BSD install script, but was written +# from scratch. It can only install one file at a time, a restriction +# shared with many OS's install programs. + + +# set DOITPROG to echo to test this script + +# Don't use :- since 4.3BSD and earlier shells don't like it. +doit="${DOITPROG-}" + + +# put in absolute paths if you don't have them in your path; or use env. vars. + +mvprog="${MVPROG-mv}" +cpprog="${CPPROG-cp}" +chmodprog="${CHMODPROG-chmod}" +chownprog="${CHOWNPROG-chown}" +chgrpprog="${CHGRPPROG-chgrp}" +stripprog="${STRIPPROG-strip}" +rmprog="${RMPROG-rm}" +mkdirprog="${MKDIRPROG-mkdir}" + +transformbasename="" +transform_arg="" +instcmd="$mvprog" +chmodcmd="$chmodprog 0755" +chowncmd="" +chgrpcmd="" +stripcmd="" +rmcmd="$rmprog -f" +mvcmd="$mvprog" +src="" +dst="" +dir_arg="" + +while [ x"$1" != x ]; do + case $1 in + -c) instcmd="$cpprog" + shift + continue;; + + -d) dir_arg=true + shift + continue;; + + -m) chmodcmd="$chmodprog $2" + shift + shift + continue;; + + -o) chowncmd="$chownprog $2" + shift + shift + continue;; + + -g) chgrpcmd="$chgrpprog $2" + shift + shift + continue;; + + -s) stripcmd="$stripprog" + shift + continue;; + + -t=*) transformarg=`echo $1 | sed 's/-t=//'` + shift + continue;; + + -b=*) transformbasename=`echo $1 | sed 's/-b=//'` + shift + continue;; + + *) if [ x"$src" = x ] + then + src=$1 + else + # this colon is to work around a 386BSD /bin/sh bug + : + dst=$1 + fi + shift + continue;; + esac +done + +if [ x"$src" = x ] +then + echo "install: no input file specified" + exit 1 +else + true +fi + +if [ x"$dir_arg" != x ]; then + dst=$src + src="" + + if [ -d $dst ]; then + instcmd=: + chmodcmd="" + else + instcmd=mkdir + fi +else + +# Waiting for this to be detected by the "$instcmd $src $dsttmp" command +# might cause directories to be created, which would be especially bad +# if $src (and thus $dsttmp) contains '*'. + + if [ -f $src -o -d $src ] + then + true + else + echo "install: $src does not exist" + exit 1 + fi + + if [ x"$dst" = x ] + then + echo "install: no destination specified" + exit 1 + else + true + fi + +# If destination is a directory, append the input filename; if your system +# does not like double slashes in filenames, you may need to add some logic + + if [ -d $dst ] + then + dst="$dst"/`basename $src` + else + true + fi +fi + +## this sed command emulates the dirname command +dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` + +# Make sure that the destination directory exists. +# this part is taken from Noah Friedman's mkinstalldirs script + +# Skip lots of stat calls in the usual case. +if [ ! -d "$dstdir" ]; then +defaultIFS=' +' +IFS="${IFS-${defaultIFS}}" + +oIFS="${IFS}" +# Some sh's can't handle IFS=/ for some reason. +IFS='%' +set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` +IFS="${oIFS}" + +pathcomp='' + +while [ $# -ne 0 ] ; do + pathcomp="${pathcomp}${1}" + shift + + if [ ! -d "${pathcomp}" ] ; + then + $mkdirprog "${pathcomp}" + else + true + fi + + pathcomp="${pathcomp}/" +done +fi + +if [ x"$dir_arg" != x ] +then + $doit $instcmd $dst && + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi +else + +# If we're going to rename the final executable, determine the name now. + + if [ x"$transformarg" = x ] + then + dstfile=`basename $dst` + else + dstfile=`basename $dst $transformbasename | + sed $transformarg`$transformbasename + fi + +# don't allow the sed command to completely eliminate the filename + + if [ x"$dstfile" = x ] + then + dstfile=`basename $dst` + else + true + fi + +# Make a temp file name in the proper directory. + + dsttmp=$dstdir/#inst.$$# + +# Move or copy the file name to the temp name + + $doit $instcmd $src $dsttmp && + + trap "rm -f ${dsttmp}" 0 && + +# and set any options; do chmod last to preserve setuid bits + +# If any of these fail, we abort the whole thing. If we want to +# ignore errors from any of these, just make sure not to ignore +# errors from the above "$doit $instcmd $src $dsttmp" command. + + if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && + if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && + if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && + if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && + +# Now rename the file to the real destination. + + $doit $rmcmd -f $dstdir/$dstfile && + $doit $mvcmd $dsttmp $dstdir/$dstfile + +fi && + + +exit 0 diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/Makefile.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/Makefile.in Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,68 @@ +# Makefile - libudis86 +# +# + +SHELL = @SHELL@ +top_srcdir = @top_srcdir@ +srcdir = @srcdir@ +CC = @CC@ +CFLAGS = @CFLAGS@ -Wall -O2 +LIBS = @LIBS@ +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +prefix = @prefix@ +exec_prefix = ${prefix} +bindir = $(exec_prefix)/bin +libdir = $(prefix)/lib +mandir = @mandir@ +includedir = @includedir@ +AR = ar +RM = rm +PERL = perl + +.SUFFIXES: .c .o +.c.o: + $(CC) -c $(CFLAGS) -o $@ $< + +OBJS = mnemonics.o \ + opcmap.o \ + input.o \ + decode.o \ + syn.o \ + syn-intel.o \ + syn-att.o \ + udis86.o + +libudis86.a: $(OBJS) + $(AR) -r libudis86.a $(OBJS) +mnemonics.c: mnemonics.dat + $(PERL) mnemonics.pl < mnemonics.dat +mnemonics.h: mnemonics.dat + $(PERL) mnemonics.pl < mnemonics.dat +input.c: input.h types.h +opcmap.c: opcmap.h input.h types.h +decode.c: opcmap.h input.h types.h extern.h +syn-intel.c: syn.h input.h types.h opcmap.h +syn-att.c: syn.h input.h types.h opcmap.h +syn.c: syn.h types.h opcmap.h +udis86.c: input.h syn.h types.h extern.h + +install: libudis86.a + $(INSTALL_PROGRAM) $(srcdir)/libudis86.a $(INSTALLROOT)$(libdir)/libudis86.a + $(srcdir)/../mkinstalldirs $(INSTALLROOT)$(includedir)/libudis86 + $(INSTALL_DATA) $(srcdir)/../udis86.h $(INSTALLROOT)$(includedir)/udis86.h + $(INSTALL_DATA) $(srcdir)/types.h $(INSTALLROOT)$(includedir)/libudis86/types.h + $(INSTALL_DATA) $(srcdir)/extern.h $(INSTALLROOT)$(includedir)/libudis86/extern.h + $(INSTALL_DATA) $(srcdir)/mnemonics.h $(INSTALLROOT)$(includedir)/libudis86/mnemonics.h + +uninstall: + $(RM) -f $(INSTALLROOT)$(libdir)/libudis86.a + $(RM) -frd $(INSTALLROOT)$(includedir)/libudis86 + $(RM) -f $(INSTALLROOT)$(includedir)/udis86.h +clean: + $(MAKE) clean -f Makefile.standalone + $(RM) -f core $(srcdir)/*.o $(srcdir)/*.a *~ + +distclean: clean + $(RM) -f config.h Makefile *~ *.log diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/Makefile.standalone --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/Makefile.standalone Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,26 @@ +# Udis86 Standalone +# +# + +LDFLAGS += -r +CFLAGS += -Wall -O2 +UD_STANDALONE ?= ud_standalone.o + +.PHONY: clean +.SUFFIXES: .c .o +.c.o: + $(CC) -c $(CFLAGS) -D__UD_STANDALONE__ -o $@ $< + +OBJS = mnemonics.o \ + opcmap.o \ + input.o \ + decode.o \ + syn.o \ + syn-intel.o \ + syn-att.o \ + udis86.o + +$(UD_STANDALONE): clean $(OBJS) + $(LD) $(LDFLAGS) $(OBJS) -o $@ +clean: + $(RM) -f $(OBJS) $(UD_STANDALONE) diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/Makefile.win32 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/Makefile.win32 Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,44 @@ +# Makefile - libudis86 +# +# + +SHELL = @SHELL@ +top_srcdir = @top_srcdir@ +srcdir = @srcdir@ +CC = cl +CFLAGS = /O2 +AR = lib +RM = del +PERL = perl + +.SUFFIXES: .c .obj +.c.obj: + $(CC) -c $(CFLAGS) -o $@ $< + +OBJS = mnemonics.obj \ + opcmap.obj \ + input.obj \ + decode.obj \ + syn.obj \ + syn-intel.obj \ + syn-att.obj \ + udis86.obj + +libudis86.a: $(OBJS) + $(AR) /out:udis86.lib $(OBJS) + +mnemonics.c: mnemonics.dat + $(PERL) mnemonics.pl < mnemonics.dat +mnemonics.h: mnemonics.dat + $(PERL) mnemonics.pl < mnemonics.dat +input.c: input.h types.h +opcmap.c: opcmap.h input.h types.h +decode.c: opcmap.h input.h types.h extern.h +syn-intel.c: syn.h input.h types.h opcmap.h +syn-att.c: syn.h input.h types.h opcmap.h +syn.c: syn.h types.h opcmap.h +udis86.c: input.h syn.h types.h extern.h + +clean: + $(RM) *.obj *.lib + diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/decode.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/decode.c Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,933 @@ +/* ----------------------------------------------------------------------------- + * decode.c + * + * Copyright (c) 2005, 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ + +#include +#include "types.h" +#include "input.h" +#include "opcmap.h" +#include "mnemonics.h" + +/* The max number of prefixes to an instruction */ +#define MAX_PREFIXES 15 + +/* register types */ +#define T_NONE 0 +#define T_GPR 1 +#define T_MMX 2 +#define T_CRG 3 +#define T_DBG 4 +#define T_SEG 5 +#define T_XMM 6 + +struct map_entry* ud_me_db(); +struct map_entry* ud_me_invalid(); + +/* ----------------------------------------------------------------------------- + * resolve_oprsize()- Resolves the size of operand depending on the current + * disassembly mode, effective operand sizes, etc. + * ----------------------------------------------------------------------------- + */ +static unsigned int +resolve_oprsize(register struct ud* u, unsigned int s) +{ + switch (s) { + case SZ_V: return (u->opr_mode); + case SZ_Z: return (u->opr_mode == 16) ? 16 : 32; + case SZ_P: return (u->opr_mode == 16) ? SZ_WP : SZ_DP; + case SZ_MDQ: return (u->opr_mode == 16) ? 32 : u->opr_mode; + case SZ_RDQ: return (u->dis_mode == 64) ? 64 : 32; + default: return s; + } +} + +/* ----------------------------------------------------------------------------- + * resolve_mnemonic()- Resolves the correct mnemonic that depends on the + * current effective operand or address mode. + * ----------------------------------------------------------------------------- + */ +static enum ud_mnemonic_code +resolve_mnemonic(register struct ud* u) +{ + + if (u->opr_mode == 32) { + switch(u->mnemonic) { + case UD_Icbw: return UD_Icwde; + case UD_Icwd: return UD_Icdq; + case UD_Ilodsw: return UD_Ilodsd; + case UD_Imovsw: return UD_Imovsd; + case UD_Icmpsw: return UD_Icmpsd; + case UD_Iinsw: return UD_Iinsd; + case UD_Ioutsw: return UD_Ioutsd; + case UD_Ipushfw: return UD_Ipushfd; + case UD_Ipopfw: return UD_Ipopfd; + case UD_Istosw: return UD_Istosd; + case UD_Iscasw: return UD_Iscasd; + case UD_Iiretw: return UD_Iiretd; + case UD_Ipusha: return UD_Ipushad; + case UD_Ipopa: return UD_Ipopad; + default: break; + } + } + + if (u->opr_mode == 64) { + switch(u->mnemonic) { + case UD_Icbw: return UD_Icdqe; + case UD_Icwd: return UD_Icqo; + case UD_Ilodsw: return UD_Ilodsq; + case UD_Imovsw: return UD_Imovsq; + case UD_Icmpsw: return UD_Icmpsq; + case UD_Iinsw: return UD_Iinsd; + case UD_Ioutsw: return UD_Ioutsd; + case UD_Icmpxchg8b: return UD_Icmpxchg16b; + case UD_Istosw: return UD_Istosq; + case UD_Iscasw: return UD_Iscasq; + case UD_Iiretw: return UD_Iiretq; + case UD_Ipushfw: return UD_Ipushfq; + case UD_Ipopfw: return UD_Ipopfq; + default: break; + } + } + + if (u->mnemonic == UD_Iswapgs && u->dis_mode != 64) { + u->error = 1; + } + + if (u->adr_mode == 32) { + switch(u->mnemonic) { + case UD_Ijcxz: return UD_Ijecxz; + default: break; + } + } + + if (u->adr_mode == 64) { + switch(u->mnemonic) { + case UD_Ijcxz: return UD_Ijrcxz; + default: break; + } + } + + return u->mnemonic; +} + + +/* ----------------------------------------------------------------------------- + * decode_a()- Decodes operands of the type seg:offset + * ----------------------------------------------------------------------------- + */ +static void +decode_a(struct ud* u, struct ud_operand *op) +{ + if (u->opr_mode == 16) { + /* seg16:off16 */ + op->type = UD_OP_PTR; + op->size = 32; + op->lval.ptr.off = inp_uint16(u); + op->lval.ptr.seg = inp_uint16(u); + } else { + /* seg16:off32 */ + op->type = UD_OP_PTR; + op->size = 48; + op->lval.ptr.off = inp_uint32(u); + op->lval.ptr.seg = inp_uint16(u); + } +} + +/* ----------------------------------------------------------------------------- + * decode_gpr() - Returns decoded General Purpose Register + * ----------------------------------------------------------------------------- + */ +static enum ud_type +decode_gpr(register struct ud* u, unsigned int s, unsigned char rm) +{ + s = resolve_oprsize(u, s); + + switch (s) { + case 64: + return UD_R_RAX + rm; + case SZ_DP: + case 32: + return UD_R_EAX + rm; + case SZ_WP: + case 16: + return UD_R_AX + rm; + case 8: + if (u->dis_mode == 64 && u->pfx_rex) { + if (rm >= 4) + return UD_R_SPL + (rm-4); + return UD_R_AL + rm; + } else return UD_R_AL + rm; + default: + return 0; + } +} + +/* ----------------------------------------------------------------------------- + * resolve_gpr64() - 64bit General Purpose Register-Selection. + * ----------------------------------------------------------------------------- + */ +static enum ud_type +resolve_gpr64(struct ud* u, enum map_operand_type gpr_op) +{ + if (gpr_op >= OP_rAXr8 && gpr_op <= OP_rDIr15) + gpr_op = (gpr_op - OP_rAXr8) | (P_REX_B(u->pfx_rex) << 3); + else gpr_op = (gpr_op - OP_rAX); + + if (u->opr_mode == 16) + return gpr_op + UD_R_AX; + if (u->dis_mode == 32 || + (u->opr_mode == 32 && ! (P_REX_W(u->pfx_rex) || u->default64))) { + return gpr_op + UD_R_EAX; + } + + return gpr_op + UD_R_RAX; +} + +/* ----------------------------------------------------------------------------- + * resolve_gpr32 () - 32bit General Purpose Register-Selection. + * ----------------------------------------------------------------------------- + */ +static enum ud_type +resolve_gpr32(struct ud* u, enum map_operand_type gpr_op) +{ + gpr_op = gpr_op - OP_eAX; + + if (u->opr_mode == 16) + return gpr_op + UD_R_AX; + + return gpr_op + UD_R_EAX; +} + +/* ----------------------------------------------------------------------------- + * resolve_reg() - Resolves the register type + * ----------------------------------------------------------------------------- + */ +static enum ud_type +resolve_reg(struct ud* u, unsigned int type, unsigned char i) +{ + switch (type) { + case T_MMX : return UD_R_MM0 + (i & 7); + case T_XMM : return UD_R_XMM0 + i; + case T_CRG : return UD_R_CR0 + i; + case T_DBG : return UD_R_DR0 + i; + case T_SEG : return UD_R_ES + (i & 7); + case T_NONE: + default: return UD_NONE; + } +} + +/* ----------------------------------------------------------------------------- + * decode_imm() - Decodes Immediate values. + * ----------------------------------------------------------------------------- + */ +static void +decode_imm(struct ud* u, unsigned int s, struct ud_operand *op) +{ + op->size = resolve_oprsize(u, s); + op->type = UD_OP_IMM; + + switch (op->size) { + case 8: op->lval.sbyte = inp_uint8(u); break; + case 16: op->lval.uword = inp_uint16(u); break; + case 32: op->lval.udword = inp_uint32(u); break; + case 64: op->lval.uqword = inp_uint64(u); break; + default: return; + } +} + +/* ----------------------------------------------------------------------------- + * decode_modrm() - Decodes ModRM Byte + * ----------------------------------------------------------------------------- + */ +static void +decode_modrm(struct ud* u, struct ud_operand *op, unsigned int s, + unsigned char rm_type, struct ud_operand *opreg, + unsigned char reg_size, unsigned char reg_type) +{ + unsigned char mod, rm, reg; + + inp_next(u); + + /* get mod, r/m and reg fields */ + mod = MODRM_MOD(inp_curr(u)); + rm = (P_REX_B(u->pfx_rex) << 3) | MODRM_RM(inp_curr(u)); + reg = (P_REX_R(u->pfx_rex) << 3) | MODRM_REG(inp_curr(u)); + + op->size = resolve_oprsize(u, s); + + /* if mod is 11b, then the UD_R_m specifies a gpr/mmx/sse/control/debug */ + if (mod == 3) { + op->type = UD_OP_REG; + if (rm_type == T_GPR) + op->base = decode_gpr(u, op->size, rm); + else op->base = resolve_reg(u, rm_type, (P_REX_R(u->pfx_rex) << 3) | (rm&7)); + } + /* else its memory addressing */ + else { + op->type = UD_OP_MEM; + + /* 64bit addressing */ + if (u->adr_mode == 64) { + + op->base = UD_R_RAX + rm; + + /* get offset type */ + if (mod == 1) + op->offset = 8; + else if (mod == 2) + op->offset = 32; + else if (mod == 0 && (rm & 7) == 5) { + op->base = UD_R_RIP; + op->offset = 32; + } else op->offset = 0; + + /* Scale-Index-Base (SIB) */ + if ((rm & 7) == 4) { + inp_next(u); + + op->scale = (1 << SIB_S(inp_curr(u))) & ~1; + op->index = UD_R_RAX + (SIB_I(inp_curr(u)) | (P_REX_X(u->pfx_rex) << 3)); + op->base = UD_R_RAX + (SIB_B(inp_curr(u)) | (P_REX_B(u->pfx_rex) << 3)); + + /* special conditions for base reference */ + if (op->index == UD_R_RSP) { + op->index = UD_NONE; + op->scale = UD_NONE; + } + + if (op->base == UD_R_RBP || op->base == UD_R_R13) { + if (mod == 0) + op->base = UD_NONE; + if (mod == 1) + op->offset = 8; + else op->offset = 32; + } + } + } + + /* 32-Bit addressing mode */ + else if (u->adr_mode == 32) { + + /* get base */ + op->base = UD_R_EAX + rm; + + /* get offset type */ + if (mod == 1) + op->offset = 8; + else if (mod == 2) + op->offset = 32; + else if (mod == 0 && rm == 5) { + op->base = UD_NONE; + op->offset = 32; + } else op->offset = 0; + + /* Scale-Index-Base (SIB) */ + if ((rm & 7) == 4) { + inp_next(u); + + op->scale = (1 << SIB_S(inp_curr(u))) & ~1; + op->index = UD_R_EAX + (SIB_I(inp_curr(u)) | (P_REX_X(u->pfx_rex) << 3)); + op->base = UD_R_EAX + (SIB_B(inp_curr(u)) | (P_REX_B(u->pfx_rex) << 3)); + + if (op->index == UD_R_ESP) { + op->index = UD_NONE; + op->scale = UD_NONE; + } + + /* special condition for base reference */ + if (op->base == UD_R_EBP) { + if (mod == 0) + op->base = UD_NONE; + if (mod == 1) + op->offset = 8; + else op->offset = 32; + } + } + } + + /* 16bit addressing mode */ + else { + switch (rm) { + case 0: op->base = UD_R_BX; op->index = UD_R_SI; break; + case 1: op->base = UD_R_BX; op->index = UD_R_DI; break; + case 2: op->base = UD_R_BP; op->index = UD_R_SI; break; + case 3: op->base = UD_R_BP; op->index = UD_R_DI; break; + case 4: op->base = UD_R_SI; break; + case 5: op->base = UD_R_DI; break; + case 6: op->base = UD_R_BP; break; + case 7: op->base = UD_R_BX; break; + } + + if (mod == 0 && rm == 6) { + op->offset= 16; + op->base = UD_NONE; + } + else if (mod == 1) + op->offset = 8; + else if (mod == 2) + op->offset = 16; + } + } + + /* extract offset, if any */ + switch(op->offset) { + case 8 : op->lval.ubyte = inp_uint8(u); break; + case 16: op->lval.uword = inp_uint16(u); break; + case 32: op->lval.udword = inp_uint32(u); break; + case 64: op->lval.uqword = inp_uint64(u); break; + default: break; + } + + /* resolve register encoded in reg field */ + if (opreg) { + opreg->type = UD_OP_REG; + opreg->size = resolve_oprsize(u, reg_size); + if (reg_type == T_GPR) + opreg->base = decode_gpr(u, opreg->size, reg); + else opreg->base = resolve_reg(u, reg_type, reg); + } +} + +/* ----------------------------------------------------------------------------- + * decode_o() - Decodes offset + * ----------------------------------------------------------------------------- + */ +static void +decode_o(struct ud* u, unsigned int s, struct ud_operand *op) +{ + switch (u->adr_mode) { + case 64: + op->offset = 64; + op->lval.uqword = inp_uint64(u); + break; + case 32: + op->offset = 32; + op->lval.udword = inp_uint32(u); + break; + case 16: + op->offset = 16; + op->lval.uword = inp_uint16(u); + break; + default: + return; + } + op->type = UD_OP_MEM; + op->size = resolve_oprsize(u, s); +} + +/* ----------------------------------------------------------------------------- + * disasm_operands() - Disassembles Operands. + * ----------------------------------------------------------------------------- + */ +static void +disasm_operands(register struct ud* u) +{ + + + /* mopXt = map entry, operand X, type; */ + enum map_operand_type mop1t = u->mapen->operand1.type; + enum map_operand_type mop2t = u->mapen->operand2.type; + enum map_operand_type mop3t = u->mapen->operand3.type; + + /* mopXs = map entry, operand X, size */ + unsigned int mop1s = u->mapen->operand1.size; + unsigned int mop2s = u->mapen->operand2.size; + unsigned int mop3s = u->mapen->operand3.size; + + /* iop = instruction operand */ + register struct ud_operand* iop = u->operand; + + switch(mop1t) { + + case OP_A : + decode_a(u, &(iop[0])); + break; + + /* M[b] ... */ + case OP_M : + if (MODRM_MOD(inp_peek(u)) == 3) + u->error= 1; + /* E, G/P/V/I/CL/1/S */ + case OP_E : + if (mop2t == OP_G) { + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_GPR); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + else if (mop3t == OP_CL) { + iop[2].type = UD_OP_REG; + iop[2].base = UD_R_CL; + iop[2].size = 8; + } + } + else if (mop2t == OP_P) + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_MMX); + else if (mop2t == OP_V) + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_XMM); + else if (mop2t == OP_S) + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_SEG); + else { + decode_modrm(u, &(iop[0]), mop1s, T_GPR, NULL, 0, T_NONE); + if (mop2t == OP_CL) { + iop[1].type = UD_OP_REG; + iop[1].base = UD_R_CL; + iop[1].size = 8; + } else if (mop2t == OP_I1) { + iop[1].type = UD_OP_CONST; + u->operand[1].lval.udword = 1; + } else if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + } + break; + + /* G, E/PR[,I]/VR */ + case OP_G : + + if (mop2t == OP_M) { + if (MODRM_MOD(inp_peek(u)) == 3) + u->error= 1; + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_GPR); + } else if (mop2t == OP_E) { + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_GPR); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + } else if (mop2t == OP_PR) { + decode_modrm(u, &(iop[1]), mop2s, T_MMX, &(iop[0]), mop1s, T_GPR); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + } else if (mop2t == OP_VR) { + if (MODRM_MOD(inp_peek(u)) != 3) + u->error = 1; + decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_GPR); + } else if (mop2t == OP_W) + decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_GPR); + break; + + /* AL..BH, I/O/DX */ + case OP_AL : case OP_CL : case OP_DL : case OP_BL : + case OP_AH : case OP_CH : case OP_DH : case OP_BH : + + iop[0].type = UD_OP_REG; + iop[0].base = UD_R_AL + (mop1t - OP_AL); + iop[0].size = 8; + + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + else if (mop2t == OP_DX) { + iop[1].type = UD_OP_REG; + iop[1].base = UD_R_DX; + iop[1].size = 16; + } + else if (mop2t == OP_O) + decode_o(u, mop2s, &(iop[1])); + break; + + /* rAX[r8]..rDI[r15], I/rAX..rDI/O */ + case OP_rAXr8 : case OP_rCXr9 : case OP_rDXr10 : case OP_rBXr11 : + case OP_rSPr12: case OP_rBPr13: case OP_rSIr14 : case OP_rDIr15 : + case OP_rAX : case OP_rCX : case OP_rDX : case OP_rBX : + case OP_rSP : case OP_rBP : case OP_rSI : case OP_rDI : + + iop[0].type = UD_OP_REG; + iop[0].base = resolve_gpr64(u, mop1t); + + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + else if (mop2t >= OP_rAX && mop2t <= OP_rDI) { + iop[1].type = UD_OP_REG; + iop[1].base = resolve_gpr64(u, mop2t); + } + else if (mop2t == OP_O) { + decode_o(u, mop2s, &(iop[1])); + iop[0].size = resolve_oprsize(u, mop2s); + } + break; + + /* AL[r8b]..BH[r15b], I */ + case OP_ALr8b : case OP_CLr9b : case OP_DLr10b : case OP_BLr11b : + case OP_AHr12b: case OP_CHr13b: case OP_DHr14b : case OP_BHr15b : + { + ud_type_t gpr = (mop1t - OP_ALr8b) + UD_R_AL + + (P_REX_B(u->pfx_rex) << 3); + if (UD_R_AH <= gpr && u->pfx_rex) + gpr = gpr + 4; + iop[0].type = UD_OP_REG; + iop[0].base = gpr; + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + break; + } + + /* eAX..eDX, DX/I */ + case OP_eAX : case OP_eCX : case OP_eDX : case OP_eBX : + case OP_eSP : case OP_eBP : case OP_eSI : case OP_eDI : + + iop[0].type = UD_OP_REG; + iop[0].base = resolve_gpr32(u, mop1t); + if (mop2t == OP_DX) { + iop[1].type = UD_OP_REG; + iop[1].base = UD_R_DX; + iop[1].size = 16; + } else if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + break; + + /* ES..GS */ + case OP_ES : case OP_CS : case OP_DS : + case OP_SS : case OP_FS : case OP_GS : + + /* in 64bits mode, only fs and gs are allowed */ + if (u->dis_mode == 64) + if (mop1t != OP_FS && mop1t != OP_GS) + u->error= 1; + iop[0].type = UD_OP_REG; + iop[0].base = (mop1t - OP_ES) + UD_R_ES; + iop[0].size = 16; + + break; + + /* J */ + case OP_J : + decode_imm(u, mop1s, &(iop[0])); + iop[0].type = UD_OP_JIMM; + break ; + + /* PR, I */ + case OP_PR: + if (MODRM_MOD(inp_peek(u)) != 3) + u->error = 1; + decode_modrm(u, &(iop[0]), mop1s, T_MMX, NULL, 0, T_NONE); + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + break; + + /* VR, I */ + case OP_VR: + if (MODRM_MOD(inp_peek(u)) != 3) + u->error = 1; + decode_modrm(u, &(iop[0]), mop1s, T_XMM, NULL, 0, T_NONE); + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + break; + + /* P, Q[,I]/W/E[,I] */ + case OP_P : + if (mop2t == OP_Q) { + decode_modrm(u, &(iop[1]), mop2s, T_MMX, &(iop[0]), mop1s, T_MMX); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + } else if (mop2t == OP_W) + decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_MMX); + else if (mop2t == OP_E) { + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_MMX); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + } + break; + + /* R, C/D */ + case OP_R : + if (mop2t == OP_C) + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_CRG); + else if (mop2t == OP_D) + decode_modrm(u, &(iop[0]), mop1s, T_GPR, &(iop[1]), mop2s, T_DBG); + break; + + /* C, R */ + case OP_C : + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_CRG); + break; + + /* D, R */ + case OP_D : + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_DBG); + break; + + /* Q, P */ + case OP_Q : + decode_modrm(u, &(iop[0]), mop1s, T_MMX, &(iop[1]), mop2s, T_MMX); + break; + + /* S, E */ + case OP_S : + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_SEG); + break; + + /* W, V */ + case OP_W : + decode_modrm(u, &(iop[0]), mop1s, T_XMM, &(iop[1]), mop2s, T_XMM); + break; + + /* V, W[,I]/Q/M/E */ + case OP_V : + if (mop2t == OP_W) { + /* special cases for movlps and movhps */ + if (MODRM_MOD(inp_peek(u)) == 3) { + if (u->mnemonic == UD_Imovlps) + u->mnemonic = UD_Imovhlps; + else + if (u->mnemonic == UD_Imovhps) + u->mnemonic = UD_Imovlhps; + } + decode_modrm(u, &(iop[1]), mop2s, T_XMM, &(iop[0]), mop1s, T_XMM); + if (mop3t == OP_I) + decode_imm(u, mop3s, &(iop[2])); + } else if (mop2t == OP_Q) + decode_modrm(u, &(iop[1]), mop2s, T_MMX, &(iop[0]), mop1s, T_XMM); + else if (mop2t == OP_M) { + if (MODRM_MOD(inp_peek(u)) == 3) + u->error= 1; + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_XMM); + } else if (mop2t == OP_E) { + decode_modrm(u, &(iop[1]), mop2s, T_GPR, &(iop[0]), mop1s, T_XMM); + } + break; + + /* DX, eAX/AL */ + case OP_DX : + iop[0].type = UD_OP_REG; + iop[0].base = UD_R_DX; + iop[0].size = 16; + + if (mop2t == OP_eAX) { + iop[1].type = UD_OP_REG; + iop[1].base = resolve_gpr32(u, mop2t); + } else if (mop2t == OP_AL) { + iop[1].type = UD_OP_REG; + iop[1].base = UD_R_AL; + iop[1].size = 8; + } + + break; + + /* I, I/AL/eAX */ + case OP_I : + decode_imm(u, mop1s, &(iop[0])); + if (mop2t == OP_I) + decode_imm(u, mop2s, &(iop[1])); + else if (mop2t == OP_AL) { + iop[1].type = UD_OP_REG; + iop[1].base = UD_R_AL; + iop[1].size = 16; + } else if (mop2t == OP_eAX) { + iop[1].type = UD_OP_REG; + iop[1].base = resolve_gpr32(u, mop2t); + } + break; + + /* O, AL/eAX */ + case OP_O : + decode_o(u, mop1s, &(iop[0])); + iop[1].type = UD_OP_REG; + iop[1].size = resolve_oprsize(u, mop1s); + if (mop2t == OP_AL) + iop[1].base = UD_R_AL; + else if (mop2t == OP_eAX) + iop[1].base = resolve_gpr32(u, mop2t); + else if (mop2t == OP_rAX) + iop[1].base = resolve_gpr64(u, mop2t); + break; + + /* 3 */ + case OP_I3 : + iop[0].type = UD_OP_CONST; + iop[0].lval.sbyte = 3; + break; + + /* ST(n), ST(n) */ + case OP_ST0 : case OP_ST1 : case OP_ST2 : case OP_ST3 : + case OP_ST4 : case OP_ST5 : case OP_ST6 : case OP_ST7 : + + iop[0].type = UD_OP_REG; + iop[0].base = (mop1t-OP_ST0) + UD_R_ST0; + iop[0].size = 0; + + if (mop2t >= OP_ST0 && mop2t <= OP_ST7) { + iop[1].type = UD_OP_REG; + iop[1].base = (mop2t-OP_ST0) + UD_R_ST0; + iop[1].size = 0; + } + break; + + /* AX */ + case OP_AX: + iop[0].type = UD_OP_REG; + iop[0].base = UD_R_AX; + iop[0].size = 16; + break; + + /* none */ + default : + iop[0].type = iop[1].type = iop[2].type = UD_NONE; + } +} + +/* ----------------------------------------------------------------------------- + * clear_insn() - clear instruction pointer + * ----------------------------------------------------------------------------- + */ +void clear_insn(register struct ud* u) +{ + u->error = 0; + u->pfx_seg = 0; + u->pfx_opr = 0; + u->pfx_adr = 0; + u->pfx_lock = 0; + u->pfx_repne = 0; + u->pfx_rep = 0; + u->pfx_seg = 0; + u->pfx_rex = 0; + u->pfx_insn= 0; + u->mnemonic = UD_Inone; + u->mapen = NULL; + + memset(&u->operand[0], 0, sizeof(struct ud_operand)); + memset(&u->operand[1], 0, sizeof(struct ud_operand)); + memset(&u->operand[2], 0, sizeof(struct ud_operand)); +} + +/* ============================================================================= + * ud_decode() - Instruction decoder. Returns the number of bytes decoded. + * ============================================================================= + */ +extern unsigned int ud_decode(register struct ud* u) +{ + unsigned int p; /* (bool) denotes end of prefixes */ + unsigned int i; /* prefix counter */ + char* src_hex; + unsigned char *src_ptr; + + inp_start(u); + + /* [1] Clear the decode/output fields */ + + clear_insn(u); + + /* [2] Extract Prefixes */ + + inp_next(u); + + for (i = 0, p = 0; p == 0; ++i) { + if ((inp_curr(u) & 0xF0) == 0x40) { /* REX */ + if (u->dis_mode == 64) { + u->pfx_rex = inp_curr(u); + inp_next(u); + } else p = 1; /* Bail out, its an inc/dec */ + } + else switch(inp_curr(u)) { + case 0x2E : u->pfx_seg = UD_R_CS; inp_next(u); break; + case 0x36 : u->pfx_seg = UD_R_SS; inp_next(u); break; + case 0x3E : u->pfx_seg = UD_R_DS; inp_next(u); break; + case 0x26 : u->pfx_seg = UD_R_ES; inp_next(u); break; + case 0x64 : u->pfx_seg = UD_R_FS; inp_next(u); break; + case 0x65 : u->pfx_seg = UD_R_GS; inp_next(u); break; + case 0x66 : u->pfx_insn = u->pfx_opr = 0x66; inp_next(u); break; + case 0x67 : u->pfx_adr = 0x67; inp_next(u); break; + case 0xF0 : u->pfx_lock= 0xF0; inp_next(u); break; + case 0xF2 : u->pfx_insn = u->pfx_repne=0xF2; inp_next(u); break; + case 0xF3 : u->pfx_insn = u->pfx_rep = 0xF3; inp_next(u); break; + default : p = 1; + } + + /* if >= MAX_PREFIXES, disintegrate */ + if (i >= MAX_PREFIXES) { + u->error= 1; + break; + } + } + + /* rewind back one byte in stream */ + inp_back(u); + + /* [3] Search opcode map */ + + ud_search_map(u); + + /* [4] Set mode flags */ + + if (u->dis_mode == 64) { /* set 64bit-mode flags */ + u->pfx_rex = u->pfx_rex & P_REX_MASK(u->mapen->prefix); + u->default64 = P_DEF64(u->mapen->prefix); + u->error = P_INV64(u->mapen->prefix); + + if (P_REX(u->mapen->prefix) && P_REX_W(u->pfx_rex)) + u->opr_mode = 64; + else if (u->pfx_opr) + u->opr_mode = 16; + else u->opr_mode = (u->default64) ? 64 : 32; + + u->adr_mode = (u->pfx_adr) ? 32 : 64; + } + else if (u->dis_mode == 32) { /* set 32bit-mode flags */ + u->opr_mode = (u->pfx_opr) ? 16 : 32; + u->adr_mode = (u->pfx_adr) ? 16 : 32; + } + else if (u->dis_mode == 16) { /* set 16bit-mode flags */ + u->opr_mode = (u->pfx_opr) ? 32 : 16; + u->adr_mode = (u->pfx_adr) ? 32 : 16; + } + + u->c1 = (P_C1(u->mapen->prefix)) ? 1 : 0; + u->c2 = (P_C2(u->mapen->prefix)) ? 1 : 0; + u->c3 = (P_C3(u->mapen->prefix)) ? 1 : 0; + + /* [5] Disassembled operands */ + + disasm_operands(u); + + /* [6] Resolve mode related and other mnemonic issues */ + + if (P_DEPM(u->mapen->prefix)) + u->mnemonic = resolve_mnemonic(u); + + u->br_far = 0; + u->br_near = 0; + + if (u->mnemonic == UD_Icall || u->mnemonic == UD_Ijmp) { + if (u->operand[0].size == SZ_WP) { + u->operand[0].size = 16; + u->br_far = 1; + u->br_near= 0; + } else if (u->operand[0].size == SZ_DP) { + u->operand[0].size = 32; + u->br_far = 1; + u->br_near= 0; + } else { + u->br_far = 0; + u->br_near= 1; + } + } else if (u->mnemonic == UD_I3dnow) + u->mnemonic = ud_map_get_3dnow(inp_curr(u)); + + /* [7] Check for errors */ + + if (u->error) { + clear_insn(u); + u->mapen = ud_me_invalid(); + u->mnemonic = u->mapen->mnemonic; + } + + /* [8] Generate hexadecimal code */ + + u->insn_offset = u->pc; + u->insn_fill = 0; + src_ptr = inp_sess(u); + + src_hex = (char*) u->insn_hexcode; + + for (i = 0; i < u->inp_ctr; ++i, ++src_ptr) { + sprintf(src_hex, "%02x", *src_ptr & 0xFF); + src_hex += 2; + } + + /* [9] Update program counter */ + + u->pc += u->inp_ctr; + + /* [10] Return the number of bytes disassemled */ + + return u->inp_ctr; +} diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/extern.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/extern.h Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,67 @@ +/* ----------------------------------------------------------------------------- + * extern.h + * + * Copyright (c) 2004, 2005, 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ +#ifndef UD_EXTERN_H +#define UD_EXTERN_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include "types.h" + +/* ============================= PUBLIC API ================================= */ + +extern void ud_init(struct ud*); + +extern void ud_set_mode(struct ud*, uint8_t); + +extern void ud_set_pc(struct ud*, uint64_t); + +extern void ud_set_input_hook(struct ud*, int (*)(struct ud*)); + +extern void ud_set_input_buffer(struct ud*, uint8_t*, size_t); + +#ifndef __UD_STANDALONE__ +extern void ud_set_input_file(struct ud*, FILE*); +#endif /* __UD_STANDALONE__ */ + +extern void ud_set_vendor(struct ud*, unsigned); + +extern void ud_set_syntax(struct ud*, void (*)(struct ud*)); + +extern void ud_input_skip(struct ud*, size_t); + +extern int ud_input_end(struct ud*); + +extern unsigned int ud_decode(struct ud*); + +extern unsigned int ud_disassemble(struct ud*); + +extern void ud_translate_intel(struct ud*); + +extern void ud_translate_att(struct ud*); + +extern char* ud_insn_asm(struct ud* u); + +extern uint8_t* ud_insn_ptr(struct ud* u); + +extern uint64_t ud_insn_off(struct ud*); + +extern char* ud_insn_hex(struct ud*); + +extern unsigned int ud_insn_len(struct ud* u); + +extern const char* ud_lookup_mnemonic(enum ud_mnemonic_code c); + +/* ========================================================================== */ + +#ifdef __cplusplus +} +#endif +#endif diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/input.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/input.c Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,218 @@ +/* ----------------------------------------------------------------------------- + * input.c + * + * Copyright (c) 2004, 2005, 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ +#include "extern.h" +#include "types.h" +#include "input.h" + +/* ----------------------------------------------------------------------------- + * inp_buff_hook() - Hook for buffered inputs. + * ----------------------------------------------------------------------------- + */ +static int +inp_buff_hook(struct ud* u) +{ + if (u->inp_buff < u->inp_buff_end) + return *u->inp_buff++; + else return -1; +} + +#ifndef __UD_STANDALONE__ +/* ----------------------------------------------------------------------------- + * inp_file_hook() - Hook for FILE inputs. + * ----------------------------------------------------------------------------- + */ +static int +inp_file_hook(struct ud* u) +{ + return fgetc(u->inp_file); +} +#endif /* __UD_STANDALONE__*/ + +/* ============================================================================= + * ud_inp_set_hook() - Sets input hook. + * ============================================================================= + */ +extern void +ud_set_input_hook(register struct ud* u, int (*hook)(struct ud*)) +{ + u->inp_hook = hook; + inp_init(u); +} + +/* ============================================================================= + * ud_inp_set_buffer() - Set buffer as input. + * ============================================================================= + */ +extern void +ud_set_input_buffer(register struct ud* u, uint8_t* buf, size_t len) +{ + u->inp_hook = inp_buff_hook; + u->inp_buff = buf; + u->inp_buff_end = buf + len; + inp_init(u); +} + +#ifndef __UD_STANDALONE__ +/* ============================================================================= + * ud_input_set_file() - Set buffer as input. + * ============================================================================= + */ +extern void +ud_set_input_file(register struct ud* u, FILE* f) +{ + u->inp_hook = inp_file_hook; + u->inp_file = f; + inp_init(u); +} +#endif /* __UD_STANDALONE__ */ + +/* ============================================================================= + * ud_input_skip() - Skip n input bytes. + * ============================================================================= + */ +extern void +ud_input_skip(struct ud* u, size_t n) +{ + while (n--) { + u->inp_hook(u); + } +} + +/* ============================================================================= + * ud_input_end() - Test for end of input. + * ============================================================================= + */ +extern int +ud_input_end(struct ud* u) +{ + return (u->inp_curr == u->inp_fill) && u->inp_end; +} + +/* ----------------------------------------------------------------------------- + * inp_next() - Loads and returns the next byte from input. + * + * inp_curr and inp_fill are pointers to the cache. The program is written based + * on the property that they are 8-bits in size, and will eventually wrap around + * forminh a circular buffer. So, the size of the cache is 256 in size, kind of + * unnecessary yet optimized. + * + * A buffer inp_sess stores the bytes disassembled for a single session. + * ----------------------------------------------------------------------------- + */ +extern uint8_t +inp_next(struct ud* u) +{ + int c; + + if (u->inp_curr != u->inp_fill) + c = u->inp_cache[++u->inp_curr]; + else if (u->inp_end || (c = u->inp_hook(u)) == -1) { + u->error = 1; + u->inp_end = 1; + return 0; + } else { + u->inp_curr = ++u->inp_fill; + u->inp_cache[u->inp_fill] = c; + } + + u->inp_sess[u->inp_ctr++] = c; + + return (uint8_t)c; +} + +/* ----------------------------------------------------------------------------- + * inp_back() - Move back a single byte in the stream. + * ----------------------------------------------------------------------------- + */ +extern void +inp_back(struct ud* u) +{ + if (u->inp_ctr > 0) { + --u->inp_curr; + --u->inp_ctr; + } +} + +/* ----------------------------------------------------------------------------- + * inp_peek() - Peek into the next byte in source. + * ----------------------------------------------------------------------------- + */ +extern uint8_t +inp_peek(struct ud* u) +{ + uint8_t r = inp_next(u); + inp_back(u); + return r; +} + +/* ----------------------------------------------------------------------------- + * inp_move() - Move ahead n input bytes. + * ----------------------------------------------------------------------------- + */ +extern void +inp_move(struct ud* u, size_t n) +{ + while (n--) + inp_next(u); +} + +/*------------------------------------------------------------------------------ + * inp_uintN() - return uintN from source. + *------------------------------------------------------------------------------ + */ +extern uint8_t +inp_uint8(struct ud* u) +{ + return inp_next(u); +} + +extern uint16_t +inp_uint16(struct ud* u) +{ + uint16_t r, ret; + + ret = inp_next(u); + r = inp_next(u); + return ret | (r << 8); +} + +extern uint32_t +inp_uint32(struct ud* u) +{ + uint32_t r, ret; + + ret = inp_next(u); + r = inp_next(u); + ret = ret | (r << 8); + r = inp_next(u); + ret = ret | (r << 16); + r = inp_next(u); + return ret | (r << 24); +} + +extern uint64_t +inp_uint64(struct ud* u) +{ + uint64_t r, ret; + + ret = inp_next(u); + r = inp_next(u); + ret = ret | (r << 8); + r = inp_next(u); + ret = ret | (r << 16); + r = inp_next(u); + ret = ret | (r << 24); + r = inp_next(u); + ret = ret | (r << 32); + r = inp_next(u); + ret = ret | (r << 40); + r = inp_next(u); + ret = ret | (r << 48); + r = inp_next(u); + return ret | (r << 56); +} diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/input.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/input.h Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,49 @@ +/* ----------------------------------------------------------------------------- + * input.h + * + * Copyright (c) 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ +#ifndef UD_INPUT_H +#define UD_INPUT_H + +#include "types.h" + +uint8_t inp_next(struct ud*); +uint8_t inp_peek(struct ud*); +uint8_t inp_uint8(struct ud*); +uint16_t inp_uint16(struct ud*); +uint32_t inp_uint32(struct ud*); +uint64_t inp_uint64(struct ud*); +void inp_move(struct ud*, size_t); +void inp_back(struct ud*); + +/* inp_init() - Initializes the input system. */ +#define inp_init(u) \ +do { \ + u->inp_curr = 0; \ + u->inp_fill = 0; \ + u->inp_ctr = 0; \ + u->inp_end = 0; \ +} while (0) + +/* inp_start() - Should be called before each de-code operation. */ +#define inp_start(u) u->inp_ctr = 0 + +/* inp_back() - Resets the current pointer to its position before the current + * instruction disassembly was started. + */ +#define inp_reset(u) \ +do { \ + u->inp_curr -= u->inp_ctr; \ + u->inp_ctr = 0; \ +} while (0) + +/* inp_sess() - Returns the pointer to current session. */ +#define inp_sess(u) (u->inp_sess) + +/* inp_cur() - Returns the current input byte. */ +#define inp_curr(u) ((u)->inp_cache[(u)->inp_curr]) + +#endif diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/mnemonics.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/mnemonics.c Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,605 @@ +/* Do not edit, generated by mnemonics.pl */ +const char* ud_mnemonics[] = +{ + "aaa", + "aad", + "aam", + "aas", + "adc", + "add", + "addpd", + "addps", + "addsd", + "addss", + "and", + "andnpd", + "andnps", + "andpd", + "andps", + "arpl", + "bound", + "bsf", + "bsr", + "bswap", + "bt", + "btc", + "btr", + "bts", + "call", + "cbw", + "cdqe", + "clc", + "cld", + "clflush", + "cli", + "clts", + "cmc", + "cmovo", + "cmovno", + "cmovb", + "cmovnb", + "cmovz", + "cmovnz", + "cmovbe", + "cmovnbe", + "cmovs", + "cmovns", + "cmovp", + "cmovnp", + "cmovl", + "cmovnl", + "cmovle", + "cmovnle", + "cmp", + "cmppd", + "cmpps", + "cmps", + "cmpsb", + "cmpsd", + "cmpsq", + "cmpss", + "cmpsw", + "cmpxchg", + "cmpxchg8b", + "comisd", + "comiss", + "cpuid", + "cqd", + "cqo", + "cvtdq2pd", + "cvtdq2ps", + "cvtpd2dq", + "cvtpd2pi", + "cvtpd2ps", + "cvtpi2pd", + "cvtpi2ps", + "cvtps2dq", + "cvtps2pd", + "cvtps2pi", + "cvtsd2si", + "cvtsd2ss", + "cvtsi2sd", + "cvtsi2ss", + "cvtss2sd", + "cvtss2si", + "cvttpd2dq", + "cvttpd2pi", + "cvttps2dq", + "cvttps2pi", + "cvttsd2si", + "cvttsi2sd", + "cvttsi2ss", + "cvttss2si", + "cwd", + "cwde", + "cdq", + "daa", + "das", + "dec", + "div", + "divpd", + "divps", + "divsd", + "divss", + "emms", + "enter", + "esc", + "f2xm1", + "fsxm1", + "fabs", + "fadd", + "faddp", + "fbld", + "fbstp", + "fchs", + "fclex", + "fcmovb", + "fcmovbe", + "fcmove", + "fcmovnb", + "fcmovnbe", + "fcmovne", + "fcmovnu", + "fcmovu", + "fcom", + "fcomi", + "fcomp", + "fcomip", + "fcompp", + "fcos", + "fdecstp", + "fdiv", + "fdivp", + "fdivr", + "fdivrp", + "femms", + "ffree", + "fiadd", + "ficom", + "ficomp", + "fidiv", + "fidivr", + "fidw", + "fidwr", + "fild", + "fimul", + "fincstp", + "finit", + "fist", + "fistp", + "fisub", + "fisubr", + "fld", + "fld1", + "fldcw", + "fldenv", + "fldl2e", + "fldl2t", + "fldlg2", + "fldln2", + "fldlpi", + "fldx", + "fldz", + "fmul", + "fmulp", + "fnclex", + "fncstp", + "fninit", + "fnop", + "fnsave", + "fnstcw", + "fnstenv", + "fnstsw", + "fpatan", + "fprem", + "fprem1", + "fptan", + "fpxtract", + "frndint", + "frstor", + "fsave", + "fscale", + "fsin", + "fsincos", + "fsqrt", + "fst", + "fstcw", + "fstenv", + "fstp", + "fstsw", + "fsub", + "fsubp", + "fsubr", + "fsubrp", + "ftst", + "fucom", + "fucomi", + "fucomip", + "fucomp", + "fucompp", + "fwait", + "fxam", + "fxch", + "fxrstor", + "fxsave", + "fxtract", + "fyl2x", + "fyl2xp1", + "hlt", + "idiv", + "imul", + "in", + "inc", + "ins", + "insb", + "insd", + "insw", + "int", + "into", + "invd", + "invlpg", + "iretw", + "iretd", + "iretq", + "jcxz", + "jecxz", + "jmp", + "jrcxz", + "jo", + "jno", + "jb", + "jnb", + "jz", + "jnz", + "jbe", + "jnbe", + "js", + "jns", + "jp", + "jnp", + "jl", + "jnl", + "jle", + "jnle", + "lahf", + "lar", + "ldmxcsr", + "lds", + "lea", + "leave", + "les", + "lfence", + "lfs", + "lgdt", + "lgs", + "lidt", + "lldt", + "lmsw", + "lock", + "lods", + "lodsb", + "lodsd", + "lodsq", + "lodsw", + "loop", + "loope", + "loopn", + "loopne", + "loopnz", + "loopz", + "lsl", + "lss", + "ltr", + "maskmovdqu", + "maskmovq", + "maxpd", + "maxps", + "maxsd", + "maxss", + "mfence", + "minpd", + "minps", + "minsd", + "minss", + "mov", + "movapd", + "movaps", + "movd", + "movdq2q", + "movdqa", + "movdqu", + "movhlps", + "movhpd", + "movhps", + "movlhps", + "movlpd", + "movlps", + "movmskpd", + "movmskps", + "movnig", + "movntdq", + "movnti", + "movntpd", + "movntps", + "movntq", + "movq", + "movq2dq", + "movqa", + "movs", + "movsb", + "movsd", + "movsq", + "movss", + "movsw", + "movsx", + "movsxd", + "movupd", + "movups", + "movzx", + "mul", + "mulpd", + "mulps", + "mulsd", + "mulss", + "neg", + "nop", + "not", + "or", + "orpd", + "orps", + "out", + "outs", + "outsb", + "outsd", + "outsw", + "packssdw", + "packsswb", + "packusdw", + "packuswb", + "paddb", + "paddd", + "paddq", + "paddsb", + "paddsw", + "paddusb", + "paddusw", + "paddw", + "pand", + "pandn", + "pavgb", + "pavgusb", + "pavgw", + "pcmpeqb", + "pcmpeqd", + "pcmpeqw", + "pcmpgtb", + "pcmpgtd", + "pcmpgtw", + "pextrw", + "pf2id", + "pf2iw", + "pfacc", + "pfadd", + "pfcmpeq", + "pfcmpge", + "pfcmpgt", + "pfmax", + "pfmin", + "pfmul", + "pfnacc", + "pfpnacc", + "pfrcp", + "pfrcpit1", + "pfrcpit2", + "pfrsqit1", + "pfrsqrt", + "pfsub", + "pfsubr", + "pi2fd", + "pi2fw", + "pinsrw", + "pmaddwd", + "pmaxsw", + "pmaxub", + "pminsw", + "pminub", + "pmovmskb", + "pmulhrw", + "pmulhuw", + "pmulhw", + "pmullw", + "pmuludq", + "pop", + "popa", + "popad", + "popfw", + "popfd", + "popfq", + "por", + "prefetch", + "psadbw", + "pshufd", + "pshufhw", + "pshuflw", + "pshufw", + "pslld", + "pslldq", + "psllq", + "psllw", + "psrad", + "psraw", + "psraq", + "psrld", + "psrldq", + "psrlq", + "psrlw", + "psubb", + "psubd", + "psubq", + "psubsb", + "psubsw", + "psubusb", + "psubusw", + "psubw", + "pswapd", + "punpckhbw", + "punpckhdq", + "punpckhqdq", + "punpckhwd", + "punpcklbw", + "punpckldq", + "punpcklqdq", + "punpcklwd", + "push", + "pusha", + "pushad", + "pushfw", + "pushfd", + "pushfq", + "pxor", + "rcl", + "rcpps", + "rcpss", + "rcr", + "rdivisr", + "rdmsr", + "rdpmc", + "rdtsc", + "rep", + "repne", + "ret", + "retf", + "rol", + "ror", + "rsm", + "rsqrtps", + "rsqrtss", + "sahf", + "sal", + "salc", + "sar", + "sbb", + "scas", + "scasb", + "scasd", + "scasq", + "scasw", + "seto", + "setno", + "setb", + "setnb", + "setz", + "setnz", + "setbe", + "setnbe", + "sets", + "setns", + "setp", + "setnp", + "setl", + "setnl", + "setle", + "setnle", + "sfence", + "sgdt", + "shl", + "shld", + "shr", + "shrd", + "shufpd", + "shufps", + "sidt", + "sldt", + "smsw", + "sqrtpd", + "sqrtps", + "sqrtsd", + "sqrtss", + "stc", + "std", + "sti", + "stmxcsr", + "stos", + "stosb", + "stosw", + "stosd", + "str", + "sub", + "subpd", + "subps", + "subsd", + "subss", + "swapgs", + "syscall", + "sysenter", + "sysexit", + "sysret", + "test", + "ucomisd", + "ucomiss", + "ud2", + "unpckhpd", + "unpckhps", + "unpcklpd", + "unpcklps", + "verr", + "verw", + "wait", + "wbinvd", + "wrmsr", + "xadd", + "xchg", + "xlat", + "xlatb", + "xor", + "xorpd", + "xorps", + "invalid", + "grp", + "a32", + "o32", + "es", + "fs", + "gs", + "cs", + "ds", + "ss", + "x87", + "3dnow", + "db", + "cmpxchg16b", + "stosq", + "int3", + "movsldup", + "movshdup", + "movddup", + "rdtscp", + "vmrun", + "vmmcall", + "vmload", + "vmsave", + "stgi", + "clgi", + "skinit", + "invlpga", + "ja", + "jae", + "jg", + "jge", + "jc", + "jnc", + "fisttp", + "prefetchnta", + "prefetcht0", + "prefetcht1", + "prefetcht2", + "cmovae", + "cmova", + "cmovge", + "cmovg", + "seta", + "setge", + "setg", + "pause", + "na", + "haddpd", + "hsubpd", + "addsubpd", + "haddps", + "hsubps", + "addsubps", + "lddqu", + "int1", + "vmcall", + "vmlaunch", + "vmresume", + "vmxoff", + "monitor", + "mwait", + "vmptrld", + "vmptrst", + "vmclear", + "vmxon", + "none", + "I3vil", +}; diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/mnemonics.dat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/mnemonics.dat Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,600 @@ +aaa +aad +aam +aas +adc +add +addpd +addps +addsd +addss +and +andnpd +andnps +andpd +andps +arpl +bound +bsf +bsr +bswap +bt +btc +btr +bts +call +cbw +cdqe +clc +cld +clflush +cli +clts +cmc +cmovo +cmovno +cmovb +cmovnb +cmovz +cmovnz +cmovbe +cmovnbe +cmovs +cmovns +cmovp +cmovnp +cmovl +cmovnl +cmovle +cmovnle +cmp +cmppd +cmpps +cmps +cmpsb +cmpsd +cmpsq +cmpss +cmpsw +cmpxchg +cmpxchg8b +comisd +comiss +cpuid +cqd +cqo +cvtdq2pd +cvtdq2ps +cvtpd2dq +cvtpd2pi +cvtpd2ps +cvtpi2pd +cvtpi2ps +cvtps2dq +cvtps2pd +cvtps2pi +cvtsd2si +cvtsd2ss +cvtsi2sd +cvtsi2ss +cvtss2sd +cvtss2si +cvttpd2dq +cvttpd2pi +cvttps2dq +cvttps2pi +cvttsd2si +cvttsi2sd +cvttsi2ss +cvttss2si +cwd +cwde +cdq +daa +das +dec +div +divpd +divps +divsd +divss +emms +enter +esc +f2xm1 +fsxm1 +fabs +fadd +faddp +fbld +fbstp +fchs +fclex +fcmovb +fcmovbe +fcmove +fcmovnb +fcmovnbe +fcmovne +fcmovnu +fcmovu +fcom +fcomi +fcomp +fcomip +fcompp +fcos +fdecstp +fdiv +fdivp +fdivr +fdivrp +femms +ffree +fiadd +ficom +ficomp +fidiv +fidivr +fidw +fidwr +fild +fimul +fincstp +finit +fist +fistp +fisub +fisubr +fld +fld1 +fldcw +fldenv +fldl2e +fldl2t +fldlg2 +fldln2 +fldlpi +fldx +fldz +fmul +fmulp +fnclex +fncstp +fninit +fnop +fnsave +fnstcw +fnstenv +fnstsw +fpatan +fprem +fprem1 +fptan +fpxtract +frndint +frstor +fsave +fscale +fsin +fsincos +fsqrt +fst +fstcw +fstenv +fstp +fstsw +fsub +fsubp +fsubr +fsubrp +ftst +fucom +fucomi +fucomip +fucomp +fucompp +fwait +fxam +fxch +fxrstor +fxsave +fxtract +fyl2x +fyl2xp1 +hlt +idiv +imul +in +inc +ins +insb +insd +insw +int +into +invd +invlpg +iretw +iretd +iretq +jcxz +jecxz +jmp +jrcxz +jo +jno +jb +jnb +jz +jnz +jbe +jnbe +js +jns +jp +jnp +jl +jnl +jle +jnle +lahf +lar +ldmxcsr +lds +lea +leave +les +lfence +lfs +lgdt +lgs +lidt +lldt +lmsw +lock +lods +lodsb +lodsd +lodsq +lodsw +loop +loope +loopn +loopne +loopnz +loopz +lsl +lss +ltr +maskmovdqu +maskmovq +maxpd +maxps +maxsd +maxss +mfence +minpd +minps +minsd +minss +mov +movapd +movaps +movd +movdq2q +movdqa +movdqu +movhlps +movhpd +movhps +movlhps +movlpd +movlps +movmskpd +movmskps +movnig +movntdq +movnti +movntpd +movntps +movntq +movq +movq2dq +movqa +movs +movsb +movsd +movsq +movss +movsw +movsx +movsxd +movupd +movups +movzx +mul +mulpd +mulps +mulsd +mulss +neg +nop +not +or +orpd +orps +out +outs +outsb +outsd +outsw +packssdw +packsswb +packusdw +packuswb +paddb +paddd +paddq +paddsb +paddsw +paddusb +paddusw +paddw +pand +pandn +pavgb +pavgusb +pavgw +pcmpeqb +pcmpeqd +pcmpeqw +pcmpgtb +pcmpgtd +pcmpgtw +pextrw +pf2id +pf2iw +pfacc +pfadd +pfcmpeq +pfcmpge +pfcmpgt +pfmax +pfmin +pfmul +pfnacc +pfpnacc +pfrcp +pfrcpit1 +pfrcpit2 +pfrsqit1 +pfrsqrt +pfsub +pfsubr +pi2fd +pi2fw +pinsrw +pmaddwd +pmaxsw +pmaxub +pminsw +pminub +pmovmskb +pmulhrw +pmulhuw +pmulhw +pmullw +pmuludq +pop +popa +popad +popfw +popfd +popfq +por +prefetch +psadbw +pshufd +pshufhw +pshuflw +pshufw +pslld +pslldq +psllq +psllw +psrad +psraw +psraq +psrld +psrldq +psrlq +psrlw +psubb +psubd +psubq +psubsb +psubsw +psubusb +psubusw +psubw +pswapd +punpckhbw +punpckhdq +punpckhqdq +punpckhwd +punpcklbw +punpckldq +punpcklqdq +punpcklwd +push +pusha +pushad +pushfw +pushfd +pushfq +pxor +rcl +rcpps +rcpss +rcr +rdivisr +rdmsr +rdpmc +rdtsc +rep +repne +ret +retf +rol +ror +rsm +rsqrtps +rsqrtss +sahf +sal +salc +sar +sbb +scas +scasb +scasd +scasq +scasw +seto +setno +setb +setnb +setz +setnz +setbe +setnbe +sets +setns +setp +setnp +setl +setnl +setle +setnle +sfence +sgdt +shl +shld +shr +shrd +shufpd +shufps +sidt +sldt +smsw +sqrtpd +sqrtps +sqrtsd +sqrtss +stc +std +sti +stmxcsr +stos +stosb +stosw +stosd +str +sub +subpd +subps +subsd +subss +swapgs +syscall +sysenter +sysexit +sysret +test +ucomisd +ucomiss +ud2 +unpckhpd +unpckhps +unpcklpd +unpcklps +verr +verw +wait +wbinvd +wrmsr +xadd +xchg +xlat +xlatb +xor +xorpd +xorps +invalid +grp +a32 +o32 +es +fs +gs +cs +ds +ss +x87 +3dnow +db +cmpxchg16b +stosq +int3 +movsldup +movshdup +movddup +rdtscp +vmrun +vmmcall +vmload +vmsave +stgi +clgi +skinit +invlpga +ja +jae +jg +jge +jc +jnc +fisttp +prefetchnta +prefetcht0 +prefetcht1 +prefetcht2 +cmovae +cmova +cmovge +cmovg +seta +setge +setg +pause +na +haddpd +hsubpd +addsubpd +haddps +hsubps +addsubps +lddqu +int1 +vmcall +vmlaunch +vmresume +vmxoff +monitor +mwait +vmptrld +vmptrst +vmclear +vmxon +none diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/mnemonics.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/mnemonics.h Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,612 @@ +/* Do not edit, Generated by mnemonics.pl */ + +#ifndef UD_MNEMONICS_H +#define UD_MNEMONICS_H + +extern const char* ud_mnemonics[]; + +enum ud_mnemonic_code +{ + UD_Iaaa, + UD_Iaad, + UD_Iaam, + UD_Iaas, + UD_Iadc, + UD_Iadd, + UD_Iaddpd, + UD_Iaddps, + UD_Iaddsd, + UD_Iaddss, + UD_Iand, + UD_Iandnpd, + UD_Iandnps, + UD_Iandpd, + UD_Iandps, + UD_Iarpl, + UD_Ibound, + UD_Ibsf, + UD_Ibsr, + UD_Ibswap, + UD_Ibt, + UD_Ibtc, + UD_Ibtr, + UD_Ibts, + UD_Icall, + UD_Icbw, + UD_Icdqe, + UD_Iclc, + UD_Icld, + UD_Iclflush, + UD_Icli, + UD_Iclts, + UD_Icmc, + UD_Icmovo, + UD_Icmovno, + UD_Icmovb, + UD_Icmovnb, + UD_Icmovz, + UD_Icmovnz, + UD_Icmovbe, + UD_Icmovnbe, + UD_Icmovs, + UD_Icmovns, + UD_Icmovp, + UD_Icmovnp, + UD_Icmovl, + UD_Icmovnl, + UD_Icmovle, + UD_Icmovnle, + UD_Icmp, + UD_Icmppd, + UD_Icmpps, + UD_Icmps, + UD_Icmpsb, + UD_Icmpsd, + UD_Icmpsq, + UD_Icmpss, + UD_Icmpsw, + UD_Icmpxchg, + UD_Icmpxchg8b, + UD_Icomisd, + UD_Icomiss, + UD_Icpuid, + UD_Icqd, + UD_Icqo, + UD_Icvtdq2pd, + UD_Icvtdq2ps, + UD_Icvtpd2dq, + UD_Icvtpd2pi, + UD_Icvtpd2ps, + UD_Icvtpi2pd, + UD_Icvtpi2ps, + UD_Icvtps2dq, + UD_Icvtps2pd, + UD_Icvtps2pi, + UD_Icvtsd2si, + UD_Icvtsd2ss, + UD_Icvtsi2sd, + UD_Icvtsi2ss, + UD_Icvtss2sd, + UD_Icvtss2si, + UD_Icvttpd2dq, + UD_Icvttpd2pi, + UD_Icvttps2dq, + UD_Icvttps2pi, + UD_Icvttsd2si, + UD_Icvttsi2sd, + UD_Icvttsi2ss, + UD_Icvttss2si, + UD_Icwd, + UD_Icwde, + UD_Icdq, + UD_Idaa, + UD_Idas, + UD_Idec, + UD_Idiv, + UD_Idivpd, + UD_Idivps, + UD_Idivsd, + UD_Idivss, + UD_Iemms, + UD_Ienter, + UD_Iesc, + UD_If2xm1, + UD_Ifsxm1, + UD_Ifabs, + UD_Ifadd, + UD_Ifaddp, + UD_Ifbld, + UD_Ifbstp, + UD_Ifchs, + UD_Ifclex, + UD_Ifcmovb, + UD_Ifcmovbe, + UD_Ifcmove, + UD_Ifcmovnb, + UD_Ifcmovnbe, + UD_Ifcmovne, + UD_Ifcmovnu, + UD_Ifcmovu, + UD_Ifcom, + UD_Ifcomi, + UD_Ifcomp, + UD_Ifcomip, + UD_Ifcompp, + UD_Ifcos, + UD_Ifdecstp, + UD_Ifdiv, + UD_Ifdivp, + UD_Ifdivr, + UD_Ifdivrp, + UD_Ifemms, + UD_Iffree, + UD_Ifiadd, + UD_Ificom, + UD_Ificomp, + UD_Ifidiv, + UD_Ifidivr, + UD_Ifidw, + UD_Ifidwr, + UD_Ifild, + UD_Ifimul, + UD_Ifincstp, + UD_Ifinit, + UD_Ifist, + UD_Ifistp, + UD_Ifisub, + UD_Ifisubr, + UD_Ifld, + UD_Ifld1, + UD_Ifldcw, + UD_Ifldenv, + UD_Ifldl2e, + UD_Ifldl2t, + UD_Ifldlg2, + UD_Ifldln2, + UD_Ifldlpi, + UD_Ifldx, + UD_Ifldz, + UD_Ifmul, + UD_Ifmulp, + UD_Ifnclex, + UD_Ifncstp, + UD_Ifninit, + UD_Ifnop, + UD_Ifnsave, + UD_Ifnstcw, + UD_Ifnstenv, + UD_Ifnstsw, + UD_Ifpatan, + UD_Ifprem, + UD_Ifprem1, + UD_Ifptan, + UD_Ifpxtract, + UD_Ifrndint, + UD_Ifrstor, + UD_Ifsave, + UD_Ifscale, + UD_Ifsin, + UD_Ifsincos, + UD_Ifsqrt, + UD_Ifst, + UD_Ifstcw, + UD_Ifstenv, + UD_Ifstp, + UD_Ifstsw, + UD_Ifsub, + UD_Ifsubp, + UD_Ifsubr, + UD_Ifsubrp, + UD_Iftst, + UD_Ifucom, + UD_Ifucomi, + UD_Ifucomip, + UD_Ifucomp, + UD_Ifucompp, + UD_Ifwait, + UD_Ifxam, + UD_Ifxch, + UD_Ifxrstor, + UD_Ifxsave, + UD_Ifxtract, + UD_Ifyl2x, + UD_Ifyl2xp1, + UD_Ihlt, + UD_Iidiv, + UD_Iimul, + UD_Iin, + UD_Iinc, + UD_Iins, + UD_Iinsb, + UD_Iinsd, + UD_Iinsw, + UD_Iint, + UD_Iinto, + UD_Iinvd, + UD_Iinvlpg, + UD_Iiretw, + UD_Iiretd, + UD_Iiretq, + UD_Ijcxz, + UD_Ijecxz, + UD_Ijmp, + UD_Ijrcxz, + UD_Ijo, + UD_Ijno, + UD_Ijb, + UD_Ijnb, + UD_Ijz, + UD_Ijnz, + UD_Ijbe, + UD_Ijnbe, + UD_Ijs, + UD_Ijns, + UD_Ijp, + UD_Ijnp, + UD_Ijl, + UD_Ijnl, + UD_Ijle, + UD_Ijnle, + UD_Ilahf, + UD_Ilar, + UD_Ildmxcsr, + UD_Ilds, + UD_Ilea, + UD_Ileave, + UD_Iles, + UD_Ilfence, + UD_Ilfs, + UD_Ilgdt, + UD_Ilgs, + UD_Ilidt, + UD_Illdt, + UD_Ilmsw, + UD_Ilock, + UD_Ilods, + UD_Ilodsb, + UD_Ilodsd, + UD_Ilodsq, + UD_Ilodsw, + UD_Iloop, + UD_Iloope, + UD_Iloopn, + UD_Iloopne, + UD_Iloopnz, + UD_Iloopz, + UD_Ilsl, + UD_Ilss, + UD_Iltr, + UD_Imaskmovdqu, + UD_Imaskmovq, + UD_Imaxpd, + UD_Imaxps, + UD_Imaxsd, + UD_Imaxss, + UD_Imfence, + UD_Iminpd, + UD_Iminps, + UD_Iminsd, + UD_Iminss, + UD_Imov, + UD_Imovapd, + UD_Imovaps, + UD_Imovd, + UD_Imovdq2q, + UD_Imovdqa, + UD_Imovdqu, + UD_Imovhlps, + UD_Imovhpd, + UD_Imovhps, + UD_Imovlhps, + UD_Imovlpd, + UD_Imovlps, + UD_Imovmskpd, + UD_Imovmskps, + UD_Imovnig, + UD_Imovntdq, + UD_Imovnti, + UD_Imovntpd, + UD_Imovntps, + UD_Imovntq, + UD_Imovq, + UD_Imovq2dq, + UD_Imovqa, + UD_Imovs, + UD_Imovsb, + UD_Imovsd, + UD_Imovsq, + UD_Imovss, + UD_Imovsw, + UD_Imovsx, + UD_Imovsxd, + UD_Imovupd, + UD_Imovups, + UD_Imovzx, + UD_Imul, + UD_Imulpd, + UD_Imulps, + UD_Imulsd, + UD_Imulss, + UD_Ineg, + UD_Inop, + UD_Inot, + UD_Ior, + UD_Iorpd, + UD_Iorps, + UD_Iout, + UD_Iouts, + UD_Ioutsb, + UD_Ioutsd, + UD_Ioutsw, + UD_Ipackssdw, + UD_Ipacksswb, + UD_Ipackusdw, + UD_Ipackuswb, + UD_Ipaddb, + UD_Ipaddd, + UD_Ipaddq, + UD_Ipaddsb, + UD_Ipaddsw, + UD_Ipaddusb, + UD_Ipaddusw, + UD_Ipaddw, + UD_Ipand, + UD_Ipandn, + UD_Ipavgb, + UD_Ipavgusb, + UD_Ipavgw, + UD_Ipcmpeqb, + UD_Ipcmpeqd, + UD_Ipcmpeqw, + UD_Ipcmpgtb, + UD_Ipcmpgtd, + UD_Ipcmpgtw, + UD_Ipextrw, + UD_Ipf2id, + UD_Ipf2iw, + UD_Ipfacc, + UD_Ipfadd, + UD_Ipfcmpeq, + UD_Ipfcmpge, + UD_Ipfcmpgt, + UD_Ipfmax, + UD_Ipfmin, + UD_Ipfmul, + UD_Ipfnacc, + UD_Ipfpnacc, + UD_Ipfrcp, + UD_Ipfrcpit1, + UD_Ipfrcpit2, + UD_Ipfrsqit1, + UD_Ipfrsqrt, + UD_Ipfsub, + UD_Ipfsubr, + UD_Ipi2fd, + UD_Ipi2fw, + UD_Ipinsrw, + UD_Ipmaddwd, + UD_Ipmaxsw, + UD_Ipmaxub, + UD_Ipminsw, + UD_Ipminub, + UD_Ipmovmskb, + UD_Ipmulhrw, + UD_Ipmulhuw, + UD_Ipmulhw, + UD_Ipmullw, + UD_Ipmuludq, + UD_Ipop, + UD_Ipopa, + UD_Ipopad, + UD_Ipopfw, + UD_Ipopfd, + UD_Ipopfq, + UD_Ipor, + UD_Iprefetch, + UD_Ipsadbw, + UD_Ipshufd, + UD_Ipshufhw, + UD_Ipshuflw, + UD_Ipshufw, + UD_Ipslld, + UD_Ipslldq, + UD_Ipsllq, + UD_Ipsllw, + UD_Ipsrad, + UD_Ipsraw, + UD_Ipsraq, + UD_Ipsrld, + UD_Ipsrldq, + UD_Ipsrlq, + UD_Ipsrlw, + UD_Ipsubb, + UD_Ipsubd, + UD_Ipsubq, + UD_Ipsubsb, + UD_Ipsubsw, + UD_Ipsubusb, + UD_Ipsubusw, + UD_Ipsubw, + UD_Ipswapd, + UD_Ipunpckhbw, + UD_Ipunpckhdq, + UD_Ipunpckhqdq, + UD_Ipunpckhwd, + UD_Ipunpcklbw, + UD_Ipunpckldq, + UD_Ipunpcklqdq, + UD_Ipunpcklwd, + UD_Ipush, + UD_Ipusha, + UD_Ipushad, + UD_Ipushfw, + UD_Ipushfd, + UD_Ipushfq, + UD_Ipxor, + UD_Ircl, + UD_Ircpps, + UD_Ircpss, + UD_Ircr, + UD_Irdivisr, + UD_Irdmsr, + UD_Irdpmc, + UD_Irdtsc, + UD_Irep, + UD_Irepne, + UD_Iret, + UD_Iretf, + UD_Irol, + UD_Iror, + UD_Irsm, + UD_Irsqrtps, + UD_Irsqrtss, + UD_Isahf, + UD_Isal, + UD_Isalc, + UD_Isar, + UD_Isbb, + UD_Iscas, + UD_Iscasb, + UD_Iscasd, + UD_Iscasq, + UD_Iscasw, + UD_Iseto, + UD_Isetno, + UD_Isetb, + UD_Isetnb, + UD_Isetz, + UD_Isetnz, + UD_Isetbe, + UD_Isetnbe, + UD_Isets, + UD_Isetns, + UD_Isetp, + UD_Isetnp, + UD_Isetl, + UD_Isetnl, + UD_Isetle, + UD_Isetnle, + UD_Isfence, + UD_Isgdt, + UD_Ishl, + UD_Ishld, + UD_Ishr, + UD_Ishrd, + UD_Ishufpd, + UD_Ishufps, + UD_Isidt, + UD_Isldt, + UD_Ismsw, + UD_Isqrtpd, + UD_Isqrtps, + UD_Isqrtsd, + UD_Isqrtss, + UD_Istc, + UD_Istd, + UD_Isti, + UD_Istmxcsr, + UD_Istos, + UD_Istosb, + UD_Istosw, + UD_Istosd, + UD_Istr, + UD_Isub, + UD_Isubpd, + UD_Isubps, + UD_Isubsd, + UD_Isubss, + UD_Iswapgs, + UD_Isyscall, + UD_Isysenter, + UD_Isysexit, + UD_Isysret, + UD_Itest, + UD_Iucomisd, + UD_Iucomiss, + UD_Iud2, + UD_Iunpckhpd, + UD_Iunpckhps, + UD_Iunpcklpd, + UD_Iunpcklps, + UD_Iverr, + UD_Iverw, + UD_Iwait, + UD_Iwbinvd, + UD_Iwrmsr, + UD_Ixadd, + UD_Ixchg, + UD_Ixlat, + UD_Ixlatb, + UD_Ixor, + UD_Ixorpd, + UD_Ixorps, + UD_Iinvalid, + UD_Igrp, + UD_Ia32, + UD_Io32, + UD_Ies, + UD_Ifs, + UD_Igs, + UD_Ics, + UD_Ids, + UD_Iss, + UD_Ix87, + UD_I3dnow, + UD_Idb, + UD_Icmpxchg16b, + UD_Istosq, + UD_Iint3, + UD_Imovsldup, + UD_Imovshdup, + UD_Imovddup, + UD_Irdtscp, + UD_Ivmrun, + UD_Ivmmcall, + UD_Ivmload, + UD_Ivmsave, + UD_Istgi, + UD_Iclgi, + UD_Iskinit, + UD_Iinvlpga, + UD_Ija, + UD_Ijae, + UD_Ijg, + UD_Ijge, + UD_Ijc, + UD_Ijnc, + UD_Ifisttp, + UD_Iprefetchnta, + UD_Iprefetcht0, + UD_Iprefetcht1, + UD_Iprefetcht2, + UD_Icmovae, + UD_Icmova, + UD_Icmovge, + UD_Icmovg, + UD_Iseta, + UD_Isetge, + UD_Isetg, + UD_Ipause, + UD_Ina, + UD_Ihaddpd, + UD_Ihsubpd, + UD_Iaddsubpd, + UD_Ihaddps, + UD_Ihsubps, + UD_Iaddsubps, + UD_Ilddqu, + UD_Iint1, + UD_Ivmcall, + UD_Ivmlaunch, + UD_Ivmresume, + UD_Ivmxoff, + UD_Imonitor, + UD_Imwait, + UD_Ivmptrld, + UD_Ivmptrst, + UD_Ivmclear, + UD_Ivmxon, + UD_Inone, + UD_I3vil +}; +#endif diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/mnemonics.pl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/mnemonics.pl Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,38 @@ +#!/usr/bin/perl +# +# mnemonics.pl - generates mnemonic{.h,.c} from mnemonics.dat +# +# Copyright (c) 2002, 2003, 2004 Vivek Mohan +# All rights reserved. +# See (LICENSE) +# +# + + +open(mnm_c,">mnemonics.c") || die "Couldn't create mnemonics.c."; +open(mnm_h,">mnemonics.h") || die "Couldn't create mnemonics.h."; + +print mnm_c "/* Do not edit, generated by mnemonics.pl */ \n"; +print mnm_c "const char* ud_mnemonics[] = \n{\n"; + +print mnm_h "/* Do not edit, Generated by mnemonics.pl */ \n\n"; +print mnm_h "#ifndef UD_MNEMONICS_H\n"; +print mnm_h "#define UD_MNEMONICS_H\n\n"; +print mnm_h "extern const char* ud_mnemonics[];\n\n"; +print mnm_h "enum ud_mnemonic_code \n{ \n"; + +while($mnm = ) { + chop($mnm); + print mnm_c " \"$mnm\",\n"; + print mnm_h " UD_I$mnm,\n"; +} + +print mnm_c " \"I3vil\",\n"; +print mnm_h " UD_I3vil\n"; + +print mnm_c "};\n"; +print mnm_h "};\n"; +print mnm_h "#endif\n"; + +close(mnm_c); +close(mnm_h); diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/opcmap.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/opcmap.c Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,3013 @@ +/* ----------------------------------------------------------------------------- + * opcmap.c + * + * Copyright (c) 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ + +#include "types.h" +#include "mnemonics.h" +#include "opcmap.h" +#include "input.h" + +/* operand types - check out the intel/amd manuals */ +#define Ap { OP_A, SZ_P } +#define E { OP_E, 0 } +#define Eb { OP_E, SZ_B } +#define Ew { OP_E, SZ_W } +#define Ev { OP_E, SZ_V } +#define Ed { OP_E, SZ_D } +#define Ez { OP_E, SZ_Z } +#define Ex { OP_E, SZ_MDQ } +#define Ep { OP_E, SZ_P } +#define G { OP_G, 0 } +#define Gb { OP_G, SZ_B } +#define Gw { OP_G, SZ_W } +#define Gv { OP_G, SZ_V } +#define Gvw { OP_G, SZ_MDQ } +#define Gd { OP_G, SZ_D } +#define Gx { OP_G, SZ_MDQ } +#define Gz { OP_G, SZ_Z } +#define M { OP_M, 0 } +#define Mb { OP_M, SZ_B } +#define Mw { OP_M, SZ_W } +#define Ms { OP_M, SZ_W } +#define Md { OP_M, SZ_D } +#define Mq { OP_M, SZ_Q } +#define Mt { OP_M, SZ_T } +#define I1 { OP_I1, 0 } +#define I3 { OP_I3, 0 } +#define Ib { OP_I, SZ_B } +#define Iw { OP_I, SZ_W } +#define Iv { OP_I, SZ_V } +#define Iz { OP_I, SZ_Z } +#define Jv { OP_J, SZ_V } +#define Jz { OP_J, SZ_Z } +#define Jb { OP_J, SZ_B } +#define R { OP_R, SZ_RDQ } +#define C { OP_C, 0 } +#define D { OP_D, 0 } +#define S { OP_S, 0 } +#define Ob { OP_O, SZ_B } +#define Ow { OP_O, SZ_W } +#define Ov { OP_O, SZ_V } +#define V { OP_V, 0 } +#define W { OP_W, 0 } +#define P { OP_P, 0 } +#define Q { OP_Q, 0 } +#define VR { OP_VR, 0 } +#define PR { OP_PR, 0 } +#define AL { OP_AL, 0 } +#define CL { OP_CL, 0 } +#define DL { OP_DL, 0 } +#define BL { OP_BL, 0 } +#define AH { OP_AH, 0 } +#define CH { OP_CH, 0 } +#define DH { OP_DH, 0 } +#define BH { OP_BH, 0 } +#define AX { OP_AX, 0 } +#define CX { OP_CX, 0 } +#define DX { OP_DX, 0 } +#define BX { OP_BX, 0 } +#define SI { OP_SI, 0 } +#define DI { OP_DI, 0 } +#define SP { OP_SP, 0 } +#define BP { OP_BP, 0 } +#define eAX { OP_eAX, 0 } +#define eCX { OP_eCX, 0 } +#define eDX { OP_eDX, 0 } +#define eBX { OP_eBX, 0 } +#define eSI { OP_eSI, 0 } +#define eDI { OP_eDI, 0 } +#define eSP { OP_eSP, 0 } +#define eBP { OP_eBP, 0 } +#define rAX { OP_rAX, 0 } +#define rCX { OP_rCX, 0 } +#define rBX { OP_rDX, 0 } +#define rDX { OP_rDX, 0 } +#define rSI { OP_rSI, 0 } +#define rDI { OP_rDI, 0 } +#define rSP { OP_rSP, 0 } +#define rBP { OP_rBP, 0 } +#define ES { OP_ES, 0 } +#define CS { OP_CS, 0 } +#define DS { OP_DS, 0 } +#define SS { OP_SS, 0 } +#define GS { OP_GS, 0 } +#define FS { OP_FS, 0 } +#define ST0 { OP_ST0, 0 } +#define ST1 { OP_ST1, 0 } +#define ST2 { OP_ST2, 0 } +#define ST3 { OP_ST3, 0 } +#define ST4 { OP_ST4, 0 } +#define ST5 { OP_ST5, 0 } +#define ST6 { OP_ST6, 0 } +#define ST7 { OP_ST7, 0 } +#define NOARG { 0, 0 } +#define ALr8b { OP_ALr8b,0 } +#define CLr9b { OP_CLr9b,0 } +#define DLr10b { OP_DLr10b,0 } +#define BLr11b { OP_BLr11b,0 } +#define AHr12b { OP_AHr12b,0 } +#define CHr13b { OP_CHr13b,0 } +#define DHr14b { OP_DHr14b,0 } +#define BHr15b { OP_BHr15b,0 } +#define rAXr8 { OP_rAXr8,0 } +#define rCXr9 { OP_rCXr9,0 } +#define rDXr10 { OP_rDXr10,0 } +#define rBXr11 { OP_rBXr11,0 } +#define rSPr12 { OP_rSPr12,0 } +#define rBPr13 { OP_rBPr13,0 } +#define rSIr14 { OP_rSIr14,0 } +#define rDIr15 { OP_rDIr15,0 } + +enum INSN_GROUPS +{ + GRP_80, + GRP_81, + GRP_82, + GRP_83, + GRP_8F, + GRP_C0, + GRP_C1, + GRP_C6, + GRP_C7, + GRP_D0, + GRP_D1, + GRP_D2, + GRP_D3, + GRP_F6, + GRP_F7, + GRP_FE, + GRP_FF, + GRP_0F00, + GRP_0F01, + GRP_0F0D, + GRP_0F18, + GRP_0F71, + GRP_0F72, + GRP_0F73, + GRP_0FAE, + GRP_0FBA, + GRP_0FB9, + GRP_0FC7 +}; + +/* 1 byte opcode */ +struct map_entry itab_1byte[0x100] = +{ + /* Instruction, op1, op2, op3, Valid Prefixes */ + +/* 00 */ { UD_Iadd, Eb, Gb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 01 */ { UD_Iadd, Ev, Gv, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 02 */ { UD_Iadd, Gb, Eb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 03 */ { UD_Iadd, Gv, Ev, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 04 */ { UD_Iadd, AL, Ib, NOARG, Pnone }, +/* 05 */ { UD_Iadd, rAX, Iz, NOARG, Po32 | REX(_W) }, +/* 06 */ { UD_Ipush, ES, NOARG, NOARG, Pinv64 }, +/* 07 */ { UD_Ipop, ES, NOARG, NOARG, Pinv64 }, +/* 08 */ { UD_Ior, Eb, Gb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 09 */ { UD_Ior, Ev, Gv, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 0A */ { UD_Ior, Gb, Eb, NOARG, Pa32 | REX(_X|_B|_R)}, +/* 0B */ { UD_Ior, Gv, Ev, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 0C */ { UD_Ior, AL, Ib, NOARG, Pnone }, +/* 0D */ { UD_Ior, rAX, Iz, NOARG, Po32 | REX(_W) }, +/* 0E */ { UD_Ipush, CS, NOARG, NOARG, Pinv64 }, +/* 0F */ { UD_Iesc, NOARG, NOARG, NOARG, Pnone }, +/* 10 */ { UD_Iadc, Eb, Gb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 11 */ { UD_Iadc, Ev, Gv, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 12 */ { UD_Iadc, Gb, Eb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 13 */ { UD_Iadc, Gv, Ev, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 14 */ { UD_Iadc, AL, Ib, NOARG, Pnone }, +/* 15 */ { UD_Iadc, rAX, Iz, NOARG, Po32 | REX(_W) }, +/* 16 */ { UD_Ipush, SS, NOARG, NOARG, Pinv64 }, +/* 17 */ { UD_Ipop, SS, NOARG, NOARG, Pinv64 }, +/* 18 */ { UD_Isbb, Eb, Gb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 19 */ { UD_Isbb, Ev, Gv, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 1A */ { UD_Isbb, Gb, Eb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 1B */ { UD_Isbb, Gv, Ev, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 1C */ { UD_Isbb, AL, Ib, NOARG, Pnone }, +/* 1D */ { UD_Isbb, rAX, Iz, NOARG, Po32 | REX(_W) }, +/* 1E */ { UD_Ipush, DS, NOARG, NOARG, Pinv64 }, +/* 1F */ { UD_Ipop, DS, NOARG, NOARG, Pinv64 }, +/* 20 */ { UD_Iand, Eb, Gb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 21 */ { UD_Iand, Ev, Gv, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 22 */ { UD_Iand, Gb, Eb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 23 */ { UD_Iand, Gv, Ev, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 24 */ { UD_Iand, AL, Ib, NOARG, Pnone }, +/* 25 */ { UD_Iand, rAX, Iz, NOARG, Po32 | REX(_W) }, +/* 26 */ { UD_Ies, ES, NOARG, NOARG, Pnone }, +/* 27 */ { UD_Idaa, NOARG, NOARG, NOARG, Pinv64 }, +/* 28 */ { UD_Isub, Eb, Gb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 29 */ { UD_Isub, Ev, Gv, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 2A */ { UD_Isub, Gb, Eb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 2B */ { UD_Isub, Gv, Ev, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 2C */ { UD_Isub, AL, Ib, NOARG, Pnone }, +/* 2D */ { UD_Isub, rAX, Iz, NOARG, Po32 | REX(_W) }, +/* 2E */ { UD_Ics, CS, NOARG, NOARG, Pnone }, +/* 2F */ { UD_Idas, NOARG, NOARG, NOARG, Pinv64 }, +/* 30 */ { UD_Ixor, Eb, Gb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 31 */ { UD_Ixor, Ev, Gv, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 32 */ { UD_Ixor, Gb, Eb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 33 */ { UD_Ixor, Gv, Ev, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 34 */ { UD_Ixor, AL, Ib, NOARG, Pnone }, +/* 35 */ { UD_Ixor, rAX, Iz, NOARG, Po32 | REX(_W) }, +/* 36 */ { UD_Iss, ES, NOARG, NOARG, Pinv64 }, +/* 37 */ { UD_Iaaa, NOARG, NOARG, NOARG, Pinv64 }, +/* 38 */ { UD_Icmp, Eb, Gb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 39 */ { UD_Icmp, Ev, Gv, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 3A */ { UD_Icmp, Gb, Eb, NOARG, Pa32 | REX(_X|_B|_R) }, +/* 3B */ { UD_Icmp, Gv, Ev, NOARG, Pa32 | Po32 | REX(_W|_R|_X|_B) }, +/* 3C */ { UD_Icmp, AL, Ib, NOARG, Pnone }, +/* 3D */ { UD_Icmp, rAX, Iz, NOARG, Po32 | REX(_W) }, +/* 3E */ { UD_Ids, ES, NOARG, NOARG, Pnone }, +/* 3F */ { UD_Iaas, NOARG, NOARG, NOARG, Pinv64 }, +/* 40 */ { UD_Iinc, eAX, NOARG, NOARG, Po32 }, +/* 41 */ { UD_Iinc, eCX, NOARG, NOARG, Po32 }, +/* 42 */ { UD_Iinc, eDX, NOARG, NOARG, Po32 }, +/* 43 */ { UD_Iinc, eBX, NOARG, NOARG, Po32 }, +/* 44 */ { UD_Iinc, eSP, NOARG, NOARG, Po32 }, +/* 45 */ { UD_Iinc, eBP, NOARG, NOARG, Po32 }, +/* 46 */ { UD_Iinc, eSI, NOARG, NOARG, Po32 }, +/* 47 */ { UD_Iinc, eDI, NOARG, NOARG, Po32 }, +/* 48 */ { UD_Idec, eAX, NOARG, NOARG, Po32 }, +/* 49 */ { UD_Idec, eCX, NOARG, NOARG, Po32 }, +/* 4A */ { UD_Idec, eDX, NOARG, NOARG, Po32 }, +/* 4B */ { UD_Idec, eBX, NOARG, NOARG, Po32 }, +/* 4C */ { UD_Idec, eSP, NOARG, NOARG, Po32 }, +/* 4D */ { UD_Idec, eBP, NOARG, NOARG, Po32 }, +/* 4E */ { UD_Idec, eSI, NOARG, NOARG, Po32 }, +/* 4F */ { UD_Idec, eDI, NOARG, NOARG, Po32 }, +/* 50 */ { UD_Ipush, rAXr8, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 51 */ { UD_Ipush, rCXr9, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 52 */ { UD_Ipush, rDXr10, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 53 */ { UD_Ipush, rBXr11, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 54 */ { UD_Ipush, rSPr12, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 55 */ { UD_Ipush, rBPr13, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 56 */ { UD_Ipush, rSIr14, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 57 */ { UD_Ipush, rDIr15, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 58 */ { UD_Ipop, rAXr8, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 59 */ { UD_Ipop, rCXr9, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 5A */ { UD_Ipop, rDXr10, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 5B */ { UD_Ipop, rBXr11, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 5C */ { UD_Ipop, rSPr12, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 5D */ { UD_Ipop, rBPr13, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 5E */ { UD_Ipop, rSIr14, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 5F */ { UD_Ipop, rDIr15, NOARG, NOARG, Po32 | Pdef64 | REX(_B) }, +/* 60 */ { UD_Ipusha, NOARG, NOARG, NOARG, Po32 | Pinv64 | PdepM }, +/* 61 */ { UD_Ipopa, NOARG, NOARG, NOARG, Po32 | Pinv64 | PdepM }, +/* 62 */ { UD_Ibound, Gv, M, NOARG, Po32 | Pa32 | Pinv64 }, +/* 63 */ { UD_Iarpl, Ew, Gw, NOARG, Pa32 | Pinv64 }, +/* 64 */ { UD_Ifs, ES, NOARG, NOARG, Pnone }, +/* 65 */ { UD_Igs, GS, NOARG, NOARG, Pnone }, +/* 66 */ { UD_Ia32, NOARG, NOARG, NOARG, Pnone }, +/* 67 */ { UD_Io32, NOARG, NOARG, NOARG, Pnone }, +/* 68 */ { UD_Ipush, Iz, NOARG, NOARG, Pc1 | Po32 }, +/* 69 */ { UD_Iimul, Gv, Ev, Iz, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 6A */ { UD_Ipush, Ib, NOARG, NOARG, Pnone }, +/* 6B */ { UD_Iimul, Gv, Ev, Ib, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 6C */ { UD_Iinsb, NOARG, NOARG, NOARG, Pnone }, +/* 6D */ { UD_Iinsw, NOARG, NOARG, NOARG, Po32 | PdepM }, +/* 6E */ { UD_Ioutsb, NOARG, NOARG, NOARG, Pnone }, +/* 6F */ { UD_Ioutsw, NOARG, NOARG, NOARG, Po32 | PdepM }, +/* 70 */ { UD_Ijo, Jb, NOARG, NOARG, Pnone }, +/* 71 */ { UD_Ijno, Jb, NOARG, NOARG, Pnone }, +/* 72 */ { UD_Ijb, Jb, NOARG, NOARG, Pnone }, +/* 73 */ { UD_Ijae, Jb, NOARG, NOARG, Pnone }, +/* 74 */ { UD_Ijz, Jb, NOARG, NOARG, Pnone }, +/* 75 */ { UD_Ijnz, Jb, NOARG, NOARG, Pnone }, +/* 76 */ { UD_Ijbe, Jb, NOARG, NOARG, Pnone }, +/* 77 */ { UD_Ija, Jb, NOARG, NOARG, Pnone }, +/* 78 */ { UD_Ijs, Jb, NOARG, NOARG, Pnone }, +/* 79 */ { UD_Ijns, Jb, NOARG, NOARG, Pnone }, +/* 7A */ { UD_Ijp, Jb, NOARG, NOARG, Pnone }, +/* 7B */ { UD_Ijnp, Jb, NOARG, NOARG, Pnone }, +/* 7C */ { UD_Ijl, Jb, NOARG, NOARG, Pnone }, +/* 7D */ { UD_Ijge, Jb, NOARG, NOARG, Pnone }, +/* 7E */ { UD_Ijle, Jb, NOARG, NOARG, Pnone }, +/* 7F */ { UD_Ijg, Jb, NOARG, NOARG, Pnone }, +/* 80 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_80 }, +/* 81 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_81 }, +/* 82 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_82 }, +/* 83 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_83 }, +/* 84 */ { UD_Itest, Eb, Gb, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 85 */ { UD_Itest, Ev, Gv, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 86 */ { UD_Ixchg, Eb, Gb, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 87 */ { UD_Ixchg, Ev, Gv, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 88 */ { UD_Imov, Eb, Gb, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 89 */ { UD_Imov, Ev, Gv, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 8A */ { UD_Imov, Gb, Eb, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 8B */ { UD_Imov, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 8C */ { UD_Imov, Ev, S, NOARG, Po32 | Pa32 | REX(_R|_X|_B) }, +/* 8D */ { UD_Ilea, Gv, M, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 8E */ { UD_Imov, S, Ev, NOARG, Po32 | Pa32 | REX(_R|_X|_B) }, +/* 8F */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_8F }, +/* 90 */ { UD_Ixchg, rAXr8, rAX, NOARG, Po32 | REX(_W|_B) }, +/* 91 */ { UD_Ixchg, rCXr9, rAX, NOARG, Po32 | REX(_W|_B) }, +/* 92 */ { UD_Ixchg, rDXr10, rAX, NOARG, Po32 | REX(_W|_B) }, +/* 93 */ { UD_Ixchg, rBXr11, rAX, NOARG, Po32 | REX(_W|_B) }, +/* 94 */ { UD_Ixchg, rSPr12, rAX, NOARG, Po32 | REX(_W|_B) }, +/* 95 */ { UD_Ixchg, rBPr13, rAX, NOARG, Po32 | REX(_W|_B) }, +/* 96 */ { UD_Ixchg, rSIr14, rAX, NOARG, Po32 | REX(_W|_B) }, +/* 97 */ { UD_Ixchg, rDIr15, rAX, NOARG, Po32 | REX(_W|_B) }, +/* 98 */ { UD_Icbw, NOARG, NOARG, NOARG, Po32 | PdepM | REX(_W) }, +/* 99 */ { UD_Icwd, NOARG, NOARG, NOARG, Po32 | PdepM | REX(_W) }, +/* 9A */ { UD_Icall, Ap, NOARG, NOARG, Pc1 | Po32 | Pinv64 }, +/* 9B */ { UD_Iwait, NOARG, NOARG, NOARG, Pnone }, +/* 9C */ { UD_Ipushfw, NOARG, NOARG, NOARG, Po32 | PdepM | Pdef64 }, +/* 9D */ { UD_Ipopfw, NOARG, NOARG, NOARG, Po32 | PdepM | Pdef64 }, +/* 9E */ { UD_Isahf, NOARG, NOARG, NOARG, Pnone }, +/* 9F */ { UD_Ilahf, NOARG, NOARG, NOARG, Pnone }, +/* A0 */ { UD_Imov, AL, Ob, NOARG, Pnone }, +/* A1 */ { UD_Imov, rAX, Ov, NOARG, Po32 | Pa32 | REX(_W) }, +/* A2 */ { UD_Imov, Ob, AL, NOARG, Pnone }, +/* A3 */ { UD_Imov, Ov, rAX, NOARG, Po32 | Pa32 | REX(_W) }, +/* A4 */ { UD_Imovsb, NOARG, NOARG, NOARG, Pnone }, +/* A5 */ { UD_Imovsw, NOARG, NOARG, NOARG, Po32 | PdepM | REX(_W) }, +/* A6 */ { UD_Icmpsb, NOARG, NOARG, NOARG, Pnone }, +/* A7 */ { UD_Icmpsw, NOARG, NOARG, NOARG, Po32 | PdepM | REX(_W) }, +/* A8 */ { UD_Itest, AL, Ib, NOARG, Pnone }, +/* A9 */ { UD_Itest, rAX, Iz, NOARG, Po32 | REX(_W) }, +/* AA */ { UD_Istosb, NOARG, NOARG, NOARG, Pnone }, +/* AB */ { UD_Istosw, NOARG, NOARG, NOARG, Po32 | PdepM | REX(_W) }, +/* AC */ { UD_Ilodsb, NOARG, NOARG, NOARG, Pnone }, +/* AD */ { UD_Ilodsw, NOARG, NOARG, NOARG, Po32 | PdepM | REX(_W) }, +/* AE */ { UD_Iscasb, NOARG, NOARG, NOARG, Pnone }, +/* AF */ { UD_Iscasw, NOARG, NOARG, NOARG, Po32 | PdepM | REX(_W) }, +/* B0 */ { UD_Imov, ALr8b, Ib, NOARG, REX(_B) }, +/* B1 */ { UD_Imov, CLr9b, Ib, NOARG, REX(_B) }, +/* B2 */ { UD_Imov, DLr10b, Ib, NOARG, REX(_B) }, +/* B3 */ { UD_Imov, BLr11b, Ib, NOARG, REX(_B) }, +/* B4 */ { UD_Imov, AHr12b, Ib, NOARG, REX(_B) }, +/* B5 */ { UD_Imov, CHr13b, Ib, NOARG, REX(_B) }, +/* B6 */ { UD_Imov, DHr14b, Ib, NOARG, REX(_B) }, +/* B7 */ { UD_Imov, BHr15b, Ib, NOARG, REX(_B) }, +/* B8 */ { UD_Imov, rAXr8, Iv, NOARG, Po32 | REX(_W|_B) }, +/* B9 */ { UD_Imov, rCXr9, Iv, NOARG, Po32 | REX(_W|_B) }, +/* BA */ { UD_Imov, rDXr10, Iv, NOARG, Po32 | REX(_W|_B) }, +/* BB */ { UD_Imov, rBXr11, Iv, NOARG, Po32 | REX(_W|_B) }, +/* BC */ { UD_Imov, rSPr12, Iv, NOARG, Po32 | REX(_W|_B) }, +/* BD */ { UD_Imov, rBPr13, Iv, NOARG, Po32 | REX(_W|_B) }, +/* BE */ { UD_Imov, rSIr14, Iv, NOARG, Po32 | REX(_W|_B) }, +/* BF */ { UD_Imov, rDIr15, Iv, NOARG, Po32 | REX(_W|_B) }, +/* C0 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_C0 }, +/* C1 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_C1 }, +/* C2 */ { UD_Iret, Iw, NOARG, NOARG, Pnone }, +/* C3 */ { UD_Iret, NOARG, NOARG, NOARG, Pnone }, +/* C4 */ { UD_Iles, Gv, M, NOARG, Po32 | Pa32 | Pinv64 }, +/* C5 */ { UD_Ilds, Gv, M, NOARG, Po32 | Pa32 | Pinv64 }, +/* C6 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_C6 }, +/* C7 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_C7 }, +/* C8 */ { UD_Ienter, Iw, Ib, NOARG, Pnone | Pdef64 }, +/* C9 */ { UD_Ileave, NOARG, NOARG, NOARG, Pnone }, +/* CA */ { UD_Iretf, Iw, NOARG, NOARG, Pnone }, +/* CB */ { UD_Iretf, NOARG, NOARG, NOARG, Pnone }, +/* CC */ { UD_Iint3, NOARG, NOARG, NOARG, Pnone }, +/* CD */ { UD_Iint, Ib, NOARG, NOARG, Pnone }, +/* CE */ { UD_Iinto, NOARG, NOARG, NOARG, Pinv64 }, +/* CF */ { UD_Iiretw, NOARG, NOARG, NOARG, Po32 | PdepM | REX(_W) }, +/* D0 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_D0 }, +/* D1 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_D1 }, +/* D2 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_D2 }, +/* D3 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_D3 }, +/* D4 */ { UD_Iaam, Ib, NOARG, NOARG, Pinv64 }, +/* D5 */ { UD_Iaad, Ib, NOARG, NOARG, Pinv64 }, +/* D6 */ { UD_Isalc, NOARG, NOARG, NOARG, Pinv64 }, +/* D7 */ { UD_Ixlatb, NOARG, NOARG, NOARG, REX(_W) }, +/* D8 */ { UD_Ix87, NOARG, NOARG, NOARG, Pnone }, +/* D9 */ { UD_Ix87, NOARG, NOARG, NOARG, Pnone }, +/* DA */ { UD_Ix87, NOARG, NOARG, NOARG, Pnone }, +/* DB */ { UD_Ix87, NOARG, NOARG, NOARG, Pnone }, +/* DC */ { UD_Ix87, NOARG, NOARG, NOARG, Pnone }, +/* DD */ { UD_Ix87, NOARG, NOARG, NOARG, Pnone }, +/* DE */ { UD_Ix87, NOARG, NOARG, NOARG, Pnone }, +/* DF */ { UD_Ix87, NOARG, NOARG, NOARG, Pnone }, +/* E0 */ { UD_Iloopnz, Jb, NOARG, NOARG, Pnone }, +/* E1 */ { UD_Iloope, Jb, NOARG, NOARG, Pnone }, +/* E2 */ { UD_Iloop, Jb, NOARG, NOARG, Pdef64 }, +/* E3 */ { UD_Ijcxz, Jb, NOARG, NOARG, Pa32 | PdepM }, +/* E4 */ { UD_Iin, AL, Ib, NOARG, Pnone }, +/* E5 */ { UD_Iin, eAX, Ib, NOARG, Pnone | Po32 }, +/* E6 */ { UD_Iout, Ib, AL, NOARG, Pnone }, +/* E7 */ { UD_Iout, Ib, eAX, NOARG, Po32 | Pnone }, +/* E8 */ { UD_Icall, Jz, NOARG, NOARG, Po32 | Pdef64 }, +/* E9 */ { UD_Ijmp, Jz, NOARG, NOARG, Po32 | Pdef64 }, +/* EA */ { UD_Ijmp, Ap, NOARG, NOARG, Pinv64 }, +/* EB */ { UD_Ijmp, Jb, NOARG, NOARG, Pnone }, +/* EC */ { UD_Iin, AL, DX, NOARG, Pnone }, +/* ED */ { UD_Iin, eAX, DX, NOARG, Po32 | Pnone }, +/* EE */ { UD_Iout, DX, AL, NOARG, Pnone }, +/* EF */ { UD_Iout, DX, eAX, NOARG, Po32 | Pnone }, +/* F0 */ { UD_Ilock, NOARG, NOARG, NOARG, Pnone }, +/* F1 */ { UD_Iint1, NOARG, NOARG, NOARG, Pnone }, +/* F2 */ { UD_Irepne, NOARG, NOARG, NOARG, Pnone }, +/* F3 */ { UD_Irep, NOARG, NOARG, NOARG, Pnone }, +/* F4 */ { UD_Ihlt, NOARG, NOARG, NOARG, Pnone }, +/* F5 */ { UD_Icmc, NOARG, NOARG, NOARG, Pnone }, +/* F6 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_F6 }, +/* F7 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_F7 }, +/* F8 */ { UD_Iclc, NOARG, NOARG, NOARG, Pnone }, +/* F9 */ { UD_Istc, NOARG, NOARG, NOARG, Pnone }, +/* FA */ { UD_Icli, NOARG, NOARG, NOARG, Pnone }, +/* FB */ { UD_Isti, NOARG, NOARG, NOARG, Pnone }, +/* FC */ { UD_Icld, NOARG, NOARG, NOARG, Pnone }, +/* FD */ { UD_Istd, NOARG, NOARG, NOARG, Pnone }, +/* FE */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_FE }, +/* FF */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_FF } + +}; + + +/* 2byte no-prefix opcodes */ +struct map_entry itab_2byte[0x100] = +{ +/* 00 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0F00 }, +/* 01 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0F01 }, +/* 02 */ { UD_Ilar, Gv, Ew, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 03 */ { UD_Ilsl, Gv, Ew, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 04 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 05 */ { UD_Isyscall, NOARG, NOARG, NOARG, Pnone }, +/* 06 */ { UD_Iclts, NOARG, NOARG, NOARG, Pnone }, +/* 07 */ { UD_Isysret, NOARG, NOARG, NOARG, Pnone }, +/* 08 */ { UD_Iinvd, NOARG, NOARG, NOARG, Pnone }, +/* 09 */ { UD_Iwbinvd, NOARG, NOARG, NOARG, Pnone }, +/* 0A */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 0B */ { UD_Iud2, NOARG, NOARG, NOARG, Pnone }, +/* 0C */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 0D */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0F0D }, +/* 0E */ { UD_Ifemms, NOARG, NOARG, NOARG, Pnone }, +/* 0F */ { UD_I3dnow, NOARG, NOARG, NOARG, Pnone }, +/* 10 */ { UD_Imovups, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 11 */ { UD_Imovups, W, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 12 */ { UD_Imovlps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 13 */ { UD_Imovlps, M, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 14 */ { UD_Iunpcklps,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 15 */ { UD_Iunpckhps,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 16 */ { UD_Imovhps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 17 */ { UD_Imovhps, M, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 18 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0F18 }, +/* 19 */ { UD_Inop, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 1A */ { UD_Inop, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 1B */ { UD_Inop, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 1C */ { UD_Inop, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 1D */ { UD_Inop, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 1E */ { UD_Inop, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 1F */ { UD_Inop, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 20 */ { UD_Imov, R, C, NOARG, REX(_R) }, +/* 21 */ { UD_Imov, R, D, NOARG, REX(_R) }, +/* 22 */ { UD_Imov, C, R, NOARG, REX(_R) }, +/* 23 */ { UD_Imov, D, R, NOARG, REX(_R) }, +/* 24 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 25 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 26 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 27 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 28 */ { UD_Imovaps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 29 */ { UD_Imovaps, W, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2A */ { UD_Icvtpi2ps,V, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2B */ { UD_Imovntps, M, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2C */ { UD_Icvttps2pi,P, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2D */ { UD_Icvtps2pi,P, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2E */ { UD_Iucomiss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2F */ { UD_Icomiss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 30 */ { UD_Iwrmsr, NOARG, NOARG, NOARG, }, +/* 31 */ { UD_Irdtsc, NOARG, NOARG, NOARG, }, +/* 32 */ { UD_Irdmsr, NOARG, NOARG, NOARG, }, +/* 33 */ { UD_Irdpmc, NOARG, NOARG, NOARG, }, +/* 34 */ { UD_Isysenter, NOARG, NOARG, NOARG, Pinv64 }, +/* 35 */ { UD_Isysexit, NOARG, NOARG, NOARG, Pinv64 }, +/* 36 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 37 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 38 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 39 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3A */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3B */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3C */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3D */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3E */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3F */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 40 */ { UD_Icmovo, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 41 */ { UD_Icmovno, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 42 */ { UD_Icmovb, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 43 */ { UD_Icmovae, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 44 */ { UD_Icmovz, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 45 */ { UD_Icmovnz, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 46 */ { UD_Icmovbe, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 47 */ { UD_Icmova, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 48 */ { UD_Icmovs, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 49 */ { UD_Icmovns, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 4A */ { UD_Icmovp, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 4B */ { UD_Icmovnp, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 4C */ { UD_Icmovl, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 4D */ { UD_Icmovge, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 4E */ { UD_Icmovle, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 4F */ { UD_Icmovg, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* 50 */ { UD_Imovmskps,Gd, VR, NOARG, Po32 | REX(_W|_R|_B) }, +/* 51 */ { UD_Isqrtps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 52 */ { UD_Irsqrtps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 53 */ { UD_Ircpps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 54 */ { UD_Iandps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 55 */ { UD_Iandnps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 56 */ { UD_Iorps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 57 */ { UD_Ixorps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 58 */ { UD_Iaddps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 59 */ { UD_Imulps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5A */ { UD_Icvtps2pd,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5B */ { UD_Icvtdq2ps,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5C */ { UD_Isubps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5D */ { UD_Iminps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5E */ { UD_Idivps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5F */ { UD_Imaxps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 60 */ { UD_Ipunpcklbw,P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 61 */ { UD_Ipunpcklwd,P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 62 */ { UD_Ipunpckldq,P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 63 */ { UD_Ipacksswb, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 64 */ { UD_Ipcmpgtb, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 65 */ { UD_Ipcmpgtw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 66 */ { UD_Ipcmpgtd, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 67 */ { UD_Ipackuswb,P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 68 */ { UD_Ipunpckhbw,P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 69 */ { UD_Ipunpckhwd,P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 6A */ { UD_Ipunpckhdq,P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 6B */ { UD_Ipackssdw,P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 6C */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6D */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6E */ { UD_Imovd, P, Ex, NOARG, Pc2 | Pa32 | REX(_R|_X|_B) }, +/* 6F */ { UD_Imovq, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 70 */ { UD_Ipshufw, P, Q, Ib, Pa32 | REX(_R|_X|_B) }, +/* 71 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0F71 }, +/* 72 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0F72 }, +/* 73 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0F73 }, +/* 74 */ { UD_Ipcmpeqb, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 75 */ { UD_Ipcmpeqw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 76 */ { UD_Ipcmpeqd, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 77 */ { UD_Iemms, NOARG, NOARG, NOARG, Pnone }, +/* 78 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 79 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7A */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7B */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7C */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7D */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7E */ { UD_Imovd, Ex, P, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, +/* 7F */ { UD_Imovq, Q, P, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 80 */ { UD_Ijo, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64}, +/* 81 */ { UD_Ijno, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 82 */ { UD_Ijb, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 83 */ { UD_Ijae, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 84 */ { UD_Ijz, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 85 */ { UD_Ijnz, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 86 */ { UD_Ijbe, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 87 */ { UD_Ija, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 88 */ { UD_Ijs, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 89 */ { UD_Ijns, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64}, +/* 8A */ { UD_Ijp, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 8B */ { UD_Ijnp, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 8C */ { UD_Ijl, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 8D */ { UD_Ijge, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 8E */ { UD_Ijle, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 8F */ { UD_Ijg, Jz, NOARG, NOARG, Pc1 | Po32 | Pdef64 }, +/* 90 */ { UD_Iseto, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 91 */ { UD_Isetno, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 92 */ { UD_Isetb, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 93 */ { UD_Isetnb, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 94 */ { UD_Isetz, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 95 */ { UD_Isetnz, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 96 */ { UD_Isetbe, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 97 */ { UD_Iseta, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 98 */ { UD_Isets, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 99 */ { UD_Isetns, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 9A */ { UD_Isetp, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 9B */ { UD_Isetnp, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 9C */ { UD_Isetl, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 9D */ { UD_Isetge, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 9E */ { UD_Isetle, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 9F */ { UD_Isetg, Eb, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +/* A0 */ { UD_Ipush, FS, NOARG, NOARG, Pnone }, +/* A1 */ { UD_Ipop, FS, NOARG, NOARG, Pnone }, +/* A2 */ { UD_Icpuid, NOARG, NOARG, NOARG, Pnone }, +/* A3 */ { UD_Ibt, Ev, Gv, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* A4 */ { UD_Ishld, Ev, Gv, Ib, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* A5 */ { UD_Ishld, Ev, Gv, CL, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* A6 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* A7 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* A8 */ { UD_Ipush, GS, NOARG, NOARG, Pnone }, +/* A9 */ { UD_Ipop, GS, NOARG, NOARG, Pnone }, +/* AA */ { UD_Irsm, NOARG, NOARG, NOARG, Pnone }, +/* AB */ { UD_Ibts, Ev, Gv, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* AC */ { UD_Ishrd, Ev, Gv, Ib, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* AD */ { UD_Ishrd, Ev, Gv, CL, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* AE */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0FAE }, +/* AF */ { UD_Iimul, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* B0 */ { UD_Icmpxchg, Eb, Gb, NOARG, Pa32 | REX(_R|_X|_B) }, +/* B1 */ { UD_Icmpxchg, Ev, Gv, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* B2 */ { UD_Ilss, Gz, M, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* B3 */ { UD_Ibtr, Ev, Gv, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* B4 */ { UD_Ilfs, Gz, M, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* B5 */ { UD_Ilgs, Gz, M, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* B6 */ { UD_Imovzx, Gv, Eb, NOARG, Pc2 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* B7 */ { UD_Imovzx, Gv, Ew, NOARG, Pc2 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* B8 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* B9 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0FB9 }, +/* BA */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0FBA }, +/* BB */ { UD_Ibtc, Ev, Gv, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* BC */ { UD_Ibsf, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* BD */ { UD_Ibsr, Gv, Ev, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* BE */ { UD_Imovsx, Gv, Eb, NOARG, Pc2 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* BF */ { UD_Imovsx, Gv, Ew, NOARG, Pc2 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* C0 */ { UD_Ixadd, Eb, Gb, NOARG, Po32 | Pa32 | REX(_R|_X|_B) }, +/* C1 */ { UD_Ixadd, Ev, Gv, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* C2 */ { UD_Icmpps, V, W, Ib, Pa32 | REX(_R|_X|_B) }, +/* C3 */ { UD_Imovnti, M, Gx, NOARG, Pa32 | REX(_W|_R|_X|_B) }, +/* C4 */ { UD_Ipinsrw, P, Ew, Ib, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* C5 */ { UD_Ipextrw, Gd, PR, Ib, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* C6 */ { UD_Ishufps, V, W, Ib, Pa32 | REX(_R|_X|_B) }, +/* C7 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0FC7 }, +/* C8 */ { UD_Ibswap, rAXr8, NOARG, NOARG, Po32 | REX(_W|_B) }, +/* C9 */ { UD_Ibswap, rCXr9, NOARG, NOARG, Po32 | REX(_W|_B) }, +/* CA */ { UD_Ibswap, rDXr10, NOARG, NOARG, Po32 | REX(_W|_B) }, +/* CB */ { UD_Ibswap, rBXr11, NOARG, NOARG, Po32 | REX(_W|_B) }, +/* CC */ { UD_Ibswap, rSPr12, NOARG, NOARG, Po32 | REX(_W|_B) }, +/* CD */ { UD_Ibswap, rBPr13, NOARG, NOARG, Po32 | REX(_W|_B) }, +/* CE */ { UD_Ibswap, rSIr14, NOARG, NOARG, Po32 | REX(_W|_B) }, +/* CF */ { UD_Ibswap, rDIr15, NOARG, NOARG, Po32 | REX(_W|_B) }, +/* D0 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D1 */ { UD_Ipsrlw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D2 */ { UD_Ipsrld, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D3 */ { UD_Ipsrlq, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D4 */ { UD_Ipaddq, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D5 */ { UD_Ipmullw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D6 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D7 */ { UD_Ipmovmskb,Gd, PR, NOARG, Pnone }, +/* D8 */ { UD_Ipsubusb, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D9 */ { UD_Ipsubusw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DA */ { UD_Ipminub, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DB */ { UD_Ipand, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DC */ { UD_Ipaddusb, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DD */ { UD_Ipaddusw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DE */ { UD_Ipmaxub, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DF */ { UD_Ipandn, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E0 */ { UD_Ipavgb, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E1 */ { UD_Ipsraw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E2 */ { UD_Ipsrad, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E3 */ { UD_Ipavgw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E4 */ { UD_Ipmulhuw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E5 */ { UD_Ipmulhw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E6 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E7 */ { UD_Imovntq, M, P, NOARG, Pnone }, +/* E8 */ { UD_Ipsubsb, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E9 */ { UD_Ipsubsw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* EA */ { UD_Ipminsw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* EB */ { UD_Ipor, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* EC */ { UD_Ipaddsb, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* ED */ { UD_Ipaddsw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* EE */ { UD_Ipmaxsw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* EF */ { UD_Ipxor, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F0 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F1 */ { UD_Ipsllw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F2 */ { UD_Ipslld, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F3 */ { UD_Ipsllq, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F4 */ { UD_Ipmuludq, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F5 */ { UD_Ipmaddwd, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F6 */ { UD_Ipsadbw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F7 */ { UD_Imaskmovq,P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F8 */ { UD_Ipsubb, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F9 */ { UD_Ipsubw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FA */ { UD_Ipsubd, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FB */ { UD_Ipsubq, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FC */ { UD_Ipaddb, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FD */ { UD_Ipaddw, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FE */ { UD_Ipaddd, P, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FF */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_2byte_prefixF3[0x100] = +{ +/* 00 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 01 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 02 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 03 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 04 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 05 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 06 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 07 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 08 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 09 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 10 */ { UD_Imovss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 11 */ { UD_Imovss, W, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 12 */ { UD_Imovsldup,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 13 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 14 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 15 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 16 */ { UD_Imovshdup,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 17 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 18 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 19 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 20 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 21 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 22 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 23 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 24 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 25 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 26 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 27 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 28 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 29 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 2A */ { UD_Icvtsi2ss,V, Ex, NOARG, Pc2 | Pa32 | REX(_R|_X|_B) }, +/* 2B */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 2C */ { UD_Icvttss2si,Gvw, W, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, +/* 2D */ { UD_Icvtss2si,Gvw, W, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, +/* 2E */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 2F */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 30 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 31 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 32 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 33 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 34 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 35 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 36 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 37 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 38 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 39 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 40 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 41 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 42 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 43 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 44 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 45 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 46 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 47 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 48 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 49 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 50 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 51 */ { UD_Isqrtss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 52 */ { UD_Irsqrtss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 53 */ { UD_Ircpss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 54 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 55 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 56 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 57 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 58 */ { UD_Iaddss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 59 */ { UD_Imulss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5A */ { UD_Icvtss2sd,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5B */ { UD_Icvttps2dq,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5C */ { UD_Isubss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5D */ { UD_Iminss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5E */ { UD_Idivss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5F */ { UD_Imaxss, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 60 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 61 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 62 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 63 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 64 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 65 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 66 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 67 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 68 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 69 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6A */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6B */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6C */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6D */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6E */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6F */ { UD_Imovdqu, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 70 */ { UD_Ipshufhw, V, W, Ib, Pa32 | REX(_R|_X|_B) }, +/* 71 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 72 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 73 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 74 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 75 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 76 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 77 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 78 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 79 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7A */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7B */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7C */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7D */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7E */ { UD_Imovq, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 7F */ { UD_Imovdqu, W, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 80 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 81 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 82 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 83 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 84 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 85 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 86 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 87 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 88 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 89 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 90 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 91 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 92 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 93 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 94 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 95 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 96 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 97 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 98 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 99 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A0 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A1 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A2 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A3 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A4 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A5 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A6 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A7 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A8 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A9 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AA */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AB */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AC */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AD */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AE */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AF */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B0 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B1 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B2 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B3 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B4 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B5 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B6 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B7 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B8 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B9 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BA */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BB */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BC */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BD */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BE */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BF */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* C0 */ { UD_Ixadd, Eb, Gb, NOARG, Pa32 | REX(_W|_R|_X|_B) }, +/* C1 */ { UD_Ixadd, Ev, Gv, NOARG, Pa32 | REX(_W|_R|_X|_B) }, +/* C2 */ { UD_Icmpss, V, W, Ib, Pa32 | REX(_R|_X|_B) }, +/* C3 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* C4 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* C5 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* C6 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* C7 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0FC7 }, +/* C8 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* C9 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CA */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CB */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CC */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CD */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CE */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CF */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* D0 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D1 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D2 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D3 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D4 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D5 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D6 */ { UD_Imovq2dq, V, PR, NOARG, Pa32 }, +/* D7 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D8 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D9 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* DA */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* DB */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* DC */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* DD */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* DE */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* CF */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E0 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E1 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E2 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E3 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E4 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E5 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E6 */ { UD_Icvtdq2pd,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E7 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E8 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E9 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* EA */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* EB */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* EC */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* ED */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* EE */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* EF */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F0 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F1 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F2 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F3 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F4 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F5 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F6 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F7 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F8 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F9 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FA */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FB */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FC */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FD */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FE */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FF */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_2byte_prefix66[0x100] = +{ +/* 00 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 01 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 02 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 03 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 04 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 05 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 06 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 07 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 08 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 09 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 10 */ { UD_Imovupd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 11 */ { UD_Imovupd, W, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 12 */ { UD_Imovlpd, V, M, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 13 */ { UD_Imovlpd, M, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 14 */ { UD_Iunpcklpd,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 15 */ { UD_Iunpckhpd,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 16 */ { UD_Imovhpd, V, M, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 17 */ { UD_Imovhpd, M, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 18 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 19 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 20 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 21 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 22 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 23 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 24 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 25 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 26 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 27 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 28 */ { UD_Imovapd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 29 */ { UD_Imovapd, W, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2A */ { UD_Icvtpi2pd,V, Q, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2B */ { UD_Imovntpd, M, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2C */ { UD_Icvttpd2pi,P, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2D */ { UD_Icvtpd2pi,P, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2E */ { UD_Iucomisd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 2F */ { UD_Icomisd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 30 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 31 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 32 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 33 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 34 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 35 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 36 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 37 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 38 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 39 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 3F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 40 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 41 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 42 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 43 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 44 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 45 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 46 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 47 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 48 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 49 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 50 */ { UD_Imovmskpd,Gd, VR, NOARG, Po32 | REX(_W|_R|_B) }, +/* 51 */ { UD_Isqrtpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 52 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 53 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 54 */ { UD_Iandpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 55 */ { UD_Iandnpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 56 */ { UD_Iorpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 57 */ { UD_Ixorpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 58 */ { UD_Iaddpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 59 */ { UD_Imulpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5A */ { UD_Icvtpd2ps,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5B */ { UD_Icvtps2dq,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5C */ { UD_Isubpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5D */ { UD_Iminpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5E */ { UD_Idivpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5F */ { UD_Imaxpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 60 */ { UD_Ipunpcklbw,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 61 */ { UD_Ipunpcklwd,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 62 */ { UD_Ipunpckldq,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 63 */ { UD_Ipacksswb,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 64 */ { UD_Ipcmpgtb, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 65 */ { UD_Ipcmpgtw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 66 */ { UD_Ipcmpgtd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 67 */ { UD_Ipackuswb,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 68 */ { UD_Ipunpckhbw,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 69 */ { UD_Ipunpckhwd,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 6A */ { UD_Ipunpckhdq,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 6B */ { UD_Ipackssdw,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 6C */ { UD_Ipunpcklqdq,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 6D */ { UD_Ipunpckhqdq,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 6E */ { UD_Imovd, V, Ex, NOARG, Pc2 | Pa32 | REX(_W|_R|_X|_B) }, +/* 6F */ { UD_Imovqa, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 70 */ { UD_Ipshufd, V, W, Ib, Pa32 | REX(_R|_X|_B) }, +/* 71 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0F71 }, +/* 72 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0F72 }, +/* 73 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0F73 }, +/* 74 */ { UD_Ipcmpeqb, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 75 */ { UD_Ipcmpeqw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 76 */ { UD_Ipcmpeqd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 77 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 78 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 79 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7A */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7B */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7C */ { UD_Ihaddpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 7D */ { UD_Ihsubpd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 7E */ { UD_Imovd, Ex, V, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, +/* 7F */ { UD_Imovdqa, W, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 80 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 81 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 82 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 83 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 84 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 85 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 86 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 87 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 88 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 89 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 90 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 91 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 92 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 93 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 94 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 95 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 96 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 97 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 98 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 99 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A0 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A1 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A2 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A3 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A4 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A5 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A6 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A7 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A8 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A9 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AA */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AB */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AC */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AD */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AE */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AF */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B0 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B1 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B2 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B3 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B4 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B5 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B6 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B7 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B8 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B9 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BA */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BB */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BC */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BD */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BE */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BF */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* C0 */ { UD_Ixadd, Eb, Gb, NOARG, Pa32 | REX(_W|_R|_X|_B) }, +/* C1 */ { UD_Ixadd, Ev, Gv, NOARG, Po32 | Pa32 | REX(_W|_R|_X|_B) }, +/* C2 */ { UD_Icmppd, V, W, Ib, Pa32 | REX(_R|_X|_B) }, +/* C3 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* C4 */ { UD_Ipinsrw, V, Ew, Ib, Pa32 | REX(_W|_R|_X|_B) }, +/* C5 */ { UD_Ipextrw, Gd, VR, Ib, Pa32 }, +/* C6 */ { UD_Ishufpd, V, W, Ib, Pa32 | REX(_R|_X|_B) }, +/* C7 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0FC7 }, +/* C8 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* C9 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CA */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CB */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CC */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CD */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CE */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CF */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* D0 */ { UD_Iaddsubpd,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D1 */ { UD_Ipsrlw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D2 */ { UD_Ipsrld, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D3 */ { UD_Ipsrlq, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D4 */ { UD_Ipaddq, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D5 */ { UD_Ipmullw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D6 */ { UD_Imovq, W, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D7 */ { UD_Ipmovmskb,Gd, VR, NOARG, Pnone }, +/* D8 */ { UD_Ipsubusb, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D9 */ { UD_Ipsubusw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DA */ { UD_Ipminub, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DB */ { UD_Ipand, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DC */ { UD_Ipaddusb, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DD */ { UD_Ipaddusw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DE */ { UD_Ipmaxub, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* DF */ { UD_Ipandn, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E0 */ { UD_Ipavgb, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E1 */ { UD_Ipsraw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E2 */ { UD_Ipsrad, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E3 */ { UD_Ipavgw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E4 */ { UD_Ipmulhuw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E5 */ { UD_Ipmulhw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E6 */ { UD_Icvttpd2dq,V, W, NOARG, Pnone }, +/* E7 */ { UD_Imovntdq, M, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E8 */ { UD_Ipsubsb, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E9 */ { UD_Ipsubsw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* EA */ { UD_Ipminsw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* EB */ { UD_Ipor, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* EC */ { UD_Ipaddsb, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* ED */ { UD_Ipaddsw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* EE */ { UD_Ipmaxsw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* EF */ { UD_Ipxor, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F0 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F1 */ { UD_Ipsllw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F2 */ { UD_Ipslld, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F3 */ { UD_Ipsllq, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F4 */ { UD_Ipmuludq, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F5 */ { UD_Ipmaddwd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F6 */ { UD_Ipsadbw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F7 */ { UD_Imaskmovq,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F8 */ { UD_Ipsubb, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F9 */ { UD_Ipsubw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FA */ { UD_Ipsubd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FB */ { UD_Ipsubq, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FC */ { UD_Ipaddb, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FD */ { UD_Ipaddw, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FE */ { UD_Ipaddd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* FF */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_2byte_prefixF2[0x100] = +{ +/* 00 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 01 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 02 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 03 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 04 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 05 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 06 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 07 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 08 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 09 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 0F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 10 */ { UD_Imovsd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 11 */ { UD_Imovsd, W, V, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 12 */ { UD_Imovddup, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 13 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 14 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 15 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 16 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 17 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 18 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 19 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 1F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 20 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 21 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 22 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 23 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 24 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 25 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 26 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 27 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 28 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 29 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 2A */ { UD_Icvtsi2sd,V, Ex, NOARG, Pc2 | Pa32 | REX(_W|_R|_X|_B) }, +/* 2B */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 2C */ { UD_Icvttsd2si,Gvw, W, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, +/* 2D */ { UD_Icvtsd2si,Gvw, W, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, +/* 2E */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 2F */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 30 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 31 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 32 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 33 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 34 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 35 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 36 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 37 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 38 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 39 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3A */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3B */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3C */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3D */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3E */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 3F */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 40 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 41 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 42 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 43 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 44 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 45 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 46 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 47 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 48 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 49 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 4F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 50 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 51 */ { UD_Isqrtsd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 52 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 53 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 54 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 55 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 56 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 57 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 58 */ { UD_Iaddsd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 59 */ { UD_Imulsd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5A */ { UD_Icvtsd2ss,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5B */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 5C */ { UD_Isubsd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5D */ { UD_Iminsd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5E */ { UD_Idivsd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 5F */ { UD_Imaxsd, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 60 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 61 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 62 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 63 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 64 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 65 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 66 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 67 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 68 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 69 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6A */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6B */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6C */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6D */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6E */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 6F */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 70 */ { UD_Ipshuflw, V, W, Ib, Pa32 | REX(_R|_X|_B) }, +/* 71 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 72 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 73 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 74 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 75 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 76 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 77 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 78 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 79 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7A */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7B */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7C */ { UD_Ihaddps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 7D */ { UD_Ihsubps, V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* 7E */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 7F */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* 80 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 81 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 82 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 83 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 84 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 85 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 86 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 87 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 88 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 89 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 8F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 90 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 91 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 92 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 93 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 94 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 95 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 96 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 97 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 98 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 99 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9A */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9B */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9C */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9D */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9E */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* 9F */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A0 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A1 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A2 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A3 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A4 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A5 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A6 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A7 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A8 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* A9 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AA */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AB */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AC */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AD */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AE */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* AF */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B0 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B1 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B2 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B3 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B4 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B5 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B6 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B7 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B8 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* B9 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BA */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BB */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BC */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BD */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BE */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* BF */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* C0 */ { UD_Ixadd, Eb, Gb, NOARG, Pa32 | REX(_W|_R|_X|_B) }, +/* C1 */ { UD_Ixadd, Ev, Gv, NOARG, Po32 | Pa32 | REX(_R|_X|_B) }, +/* C2 */ { UD_Icmpsd, V, W, Ib, Pa32 | REX(_R|_X|_B) }, +/* C3 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* C4 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* C5 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* C6 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* C7 */ { UD_Igrp, NOARG, NOARG, NOARG, GRP_0FC7 }, +/* C8 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* C9 */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CA */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CB */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CC */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CD */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CE */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* CF */ { UD_Ina, NOARG, NOARG, NOARG, Pnone }, +/* D0 */ { UD_Iaddsubps,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* D1 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D2 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D3 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D4 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D5 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D6 */ { UD_Imovdq2q, P, VR, NOARG, Pa32 }, +/* D7 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D8 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* D9 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* DA */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* DB */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* DC */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* DD */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* DE */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* DF */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E0 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E1 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E2 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E3 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E4 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E5 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E6 */ { UD_Icvtpd2dq,V, W, NOARG, Pa32 | REX(_R|_X|_B) }, +/* E7 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E8 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* E9 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* EA */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* EB */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* EC */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* ED */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* EE */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* EF */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F0 */ { UD_Ilddqu, V, M, NOARG, Pa32 | REX(_R|_X|_B) }, +/* F1 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F2 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F3 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F4 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F5 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F6 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F7 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F8 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* F9 */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FA */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FB */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FC */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FD */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FE */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +/* FF */ { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_g1_op80[0x8] = +{ + { UD_Iadd, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ior, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iadc, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isbb, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iand, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isub, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ixor, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Icmp, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) } +}; + +struct map_entry itab_g1_op81[0x8] = +{ + { UD_Iadd, Ev, Iz, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ior, Ev, Iz, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iadc, Ev, Iz, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isbb, Ev, Iz, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iand, Ev, Iz, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isub, Ev, Iz, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ixor, Ev, Iz, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Icmp, Ev, Iz, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) } +}; + +struct map_entry itab_g1_op82[0x8] = { + { UD_Iadd, Eb, Ib, NOARG, Pc1 | Pinv64 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ior, Eb, Ib, NOARG, Pc1 | Pinv64 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iadc, Eb, Ib, NOARG, Pc1 | Pinv64 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isbb, Eb, Ib, NOARG, Pc1 | Pinv64 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iand, Eb, Ib, NOARG, Pc1 | Pinv64 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isub, Eb, Ib, NOARG, Pc1 | Pinv64 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ixor, Eb, Ib, NOARG, Pc1 | Pinv64 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Icmp, Eb, Ib, NOARG, Pc1 | Pinv64 | Pa32 | REX(_W|_R|_X|_B) } +}; + +struct map_entry itab_g1_op83[0x8] = { + { UD_Iadd, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_R|_X|_B|_W) }, + { UD_Ior, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_R|_X|_B|_W) }, + { UD_Iadc, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_R|_X|_B|_W) }, + { UD_Isbb, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_R|_X|_B|_W) }, + { UD_Iand, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_R|_X|_B|_W) }, + { UD_Isub, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_R|_X|_B|_W) }, + { UD_Ixor, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_R|_X|_B|_W) }, + { UD_Icmp, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_R|_X|_B|_W) } +}; + +struct map_entry itab_g1A_op8F[0x8] = { + { UD_Ipop, Ev, NOARG, NOARG, Pc1 | Po32 | Pa32 | Pdef64 | REX(_W|_R|_X|_B) }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_g2_opC0[0x8] = { + { UD_Irol, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iror, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircl, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircr, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishl, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishr, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isal, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isar, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) } +}; + +struct map_entry itab_g2_opC1[0x8] = { + { UD_Irol, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iror, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircl, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircr, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishl, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishr, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isal, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isar, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) } +}; + +struct map_entry itab_g2_opD0[0x8] = { + { UD_Irol, Eb, I1, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iror, Eb, I1, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircl, Eb, I1, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircr, Eb, I1, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishl, Eb, I1, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishr, Eb, I1, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isal, Eb, I1, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isar, Eb, I1, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) } +}; + +struct map_entry itab_g2_opD1[0x8] = { + { UD_Irol, Ev, I1, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iror, Ev, I1, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircl, Ev, I1, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircr, Ev, I1, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishl, Ev, I1, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishr, Ev, I1, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iinvalid,Ev, I1, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isar, Ev, I1, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) } +}; + +struct map_entry itab_g2_opD2[0x8] = { + { UD_Irol, Eb, CL, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iror, Eb, CL, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircl, Eb, CL, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircr, Eb, CL, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishl, Eb, CL, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishr, Eb, CL, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isal, Eb, CL, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isar, Eb, CL, NOARG, Pa32 | REX(_W|_R|_X|_B) } +}; + +struct map_entry itab_g2_opD3[0x8] = { + { UD_Irol, Ev, CL, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iror, Ev, CL, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircl, Ev, CL, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ircr, Ev, CL, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishl, Ev, CL, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ishr, Ev, CL, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isal, Ev, CL, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Isar, Ev, CL, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) } +}; + +struct map_entry itab_g3_opF6[0x8] = { + { UD_Itest, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Itest, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Inot, Eb, NOARG, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ineg, Eb, NOARG, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Imul, Eb, NOARG, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iimul, Eb, NOARG, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Idiv, Eb, NOARG, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iidiv, Eb, NOARG, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) } +}; + +struct map_entry itab_g3_opF7[0x8] = { + { UD_Itest, Ev, Iz, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Itest, Ev, Iz, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Inot, Ev, NOARG, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ineg, Ev, NOARG, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Imul, Ev, NOARG, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iimul, Ev, NOARG, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Idiv, Ev, NOARG, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iidiv, Ev, NOARG, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) } +}; + +struct map_entry itab_g4_opFE[0x8] = { + { UD_Iinc, Eb, NOARG, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Idec, Eb, NOARG, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_g5_opFF[0x8] = { + { UD_Iinc, Ev, NOARG, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Idec, Ev, NOARG, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Icall, Ev, NOARG, NOARG, Pc1 | Po32 | Pa32 | Pdef64 | REX(_W|_R|_X|_B) }, + { UD_Icall, Ep, NOARG, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ijmp, Ev, NOARG, NOARG, Pc1 | Po32 | Pa32 | Pdef64 | REX(_W|_R|_X|_B) }, + { UD_Ijmp, Ep, NOARG, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ipush, Ev, NOARG, NOARG, Pc1 | Pdef64 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +/* group 6 */ +struct map_entry itab_g6_op0F00[0x8] = { + { UD_Isldt, M, NOARG, NOARG, Po32 | Pa32 | REX(_R|_X|_B) }, + { UD_Istr, M, NOARG, NOARG, Po32 | Pa32 | REX(_R|_X|_B) }, + { UD_Illdt, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Iltr, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Iverr, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Iverw, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + + +/* group 7 */ +struct map_entry itab_g7_op0F01[0x8] = { + { UD_Isgdt, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Isidt, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Ilgdt, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Ilidt, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Ismsw, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ilmsw, Ew, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Iinvlpg, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) } +}; + +/* group 7 -- Reg7 */ +struct map_entry itab_g7_op0F01_Reg7[0x8] = { + { UD_Iswapgs, NOARG, NOARG, NOARG, PdepM }, + { UD_Irdtscp, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +/* group 7 -- Reg7 */ +struct map_entry itab_g7_op0F01_Reg7_intel[0x8] = { + { UD_Iswapgs, NOARG, NOARG, NOARG, PdepM }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +/* group 7 -- Reg3 */ +struct map_entry itab_g7_op0F01_Reg3[0x8] = { + { UD_Ivmrun, NOARG, NOARG, NOARG, Pnone }, + { UD_Ivmmcall, NOARG, NOARG, NOARG, Pnone }, + { UD_Ivmload, NOARG, NOARG, NOARG, Pnone }, + { UD_Ivmsave, NOARG, NOARG, NOARG, Pnone }, + { UD_Istgi, NOARG, NOARG, NOARG, Pnone }, + { UD_Iclgi, NOARG, NOARG, NOARG, Pnone }, + { UD_Iskinit, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvlpga, NOARG, NOARG, NOARG, Pnone } +}; + +/* group 7 -- Reg0: Intel */ +struct map_entry itab_g7_op0F01_Reg0_intel[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ivmcall, NOARG, NOARG, NOARG, Pnone }, + { UD_Ivmlaunch, NOARG, NOARG, NOARG, Pnone }, + { UD_Ivmresume, NOARG, NOARG, NOARG, Pnone }, + { UD_Ivmxoff, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +/* group 7 -- Reg1: Intel */ +struct map_entry itab_g7_op0F01_Reg1_intel[0x8] = { + { UD_Imonitor, NOARG, NOARG, NOARG, Pnone }, + { UD_Imwait, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +/* group 8 */ +struct map_entry itab_g8_op0FBA[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ibt, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ibts, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ibtr, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ibtc, Ev, Ib, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, +}; + +/* group 9 */ +struct map_entry itab_g9_op0FC7[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Icmpxchg8b, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) | PdepM }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +/* group 9 - Intel */ +struct map_entry itab_g9_op0FC7_intel[0x8] = { + { UD_Ivmptrld, Mq, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Icmpxchg8b, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) | PdepM }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ivmptrst, Mq, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +}; + +/* group 9 - Intel */ +struct map_entry itab_g9_op0FC7_prefix66_intel[0x8] = { + { UD_Ivmclear, Mq, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +/* group 9 - Intel */ +struct map_entry itab_g9_op0FC7_prefixF3_intel[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ivmxon, Mq, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, +}; + +/* group A */ +struct map_entry itab_gA_op0FB9[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +/* group B */ +struct map_entry itab_gB_opC6[0x8] = { + { UD_Imov, Eb, Ib, NOARG, Pc1 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +/* group B */ +struct map_entry itab_gB_opC7[0x8] = { + { UD_Imov, Ev, Iz, NOARG, Pc1 | Po32 | Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +/* group C */ +struct map_entry itab_gC_op0F71[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsrlw, PR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsraw, PR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsllw, PR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +struct map_entry itab_gC_op0F71_prefix66[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsrlw, VR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsraw, VR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsllw, VR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +struct map_entry itab_gC_op0F71_prefixF3[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_gC_op0F71_prefixF2[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +/* group D */ +struct map_entry itab_gD_op0F72[0x8] = +{ + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsrld, PR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsrad, PR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipslld, PR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +/* group D, prefixed by 0x66 */ +struct map_entry itab_gD_op0F72_prefix66[0x8] = +{ + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsrld, VR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsrad, VR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipslld, VR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +struct map_entry itab_gD_op0F72_prefixF3[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_gD_op0F72_prefixF2[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +/* group E */ +struct map_entry itab_gE_op0F73[0x8] = +{ + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsrlq, PR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsllq, PR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_gE_op0F73_prefix66[0x8] = +{ + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsrlq, VR, Ib, NOARG, Pnone }, + { UD_Ipsrldq, VR, Ib, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ipsllq, VR, Ib, NOARG, Pnone }, + { UD_Ipslldq, VR, Ib, NOARG, Pnone } +}; + +struct map_entry itab_gE_op0F73_prefixF3[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_gE_op0F73_prefixF2[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +/* group F */ +struct map_entry itab_gF_op0FAE[0x8] = +{ + { UD_Ifxsave, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ifxrstor, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Ildmxcsr, Md, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Istmxcsr, Md, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iclflush, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, +}; + +struct map_entry itab_gF_op0FAE_prefix66[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_gF_op0FAE_prefixF3[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry itab_gF_op0FAE_prefixF2[0x8] = { + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +/* group F -- Extensions */ +struct map_entry itab_gF_op0FAE_Reg5 = { + UD_Ilfence, NOARG, NOARG, NOARG, Pnone +}; +struct map_entry itab_gF_op0FAE_Reg6 = { + UD_Imfence, NOARG, NOARG, NOARG, Pnone +}; +struct map_entry itab_gF_op0FAE_Reg7 = { + UD_Isfence, NOARG, NOARG, NOARG, Pnone +}; + +/* group 10 */ +struct map_entry itab_g10_op0F18[0x8] = { + { UD_Iprefetchnta, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iprefetcht0, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iprefetcht1, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iprefetcht2, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +/* group P */ +struct map_entry itab_gP_op0F0D[0x8] = { + { UD_Iprefetch, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iprefetch, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iprefetch, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iprefetch, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iprefetch, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iprefetch, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iprefetch, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) }, + { UD_Iprefetch, M, NOARG, NOARG, Pa32 | REX(_W|_R|_X|_B) } +}; + +struct +{ + struct map_entry *me_pfx_none; + struct map_entry *me_pfx_66; + struct map_entry *me_pfx_f2; + struct map_entry *me_pfx_f3; +} itab_groups[] = { + { itab_g1_op80, 0, 0, 0 }, + { itab_g1_op81, 0, 0, 0 }, + { itab_g1_op82, 0, 0, 0 }, + { itab_g1_op83, 0, 0, 0 }, + { itab_g1A_op8F, 0, 0, 0 }, + { itab_g2_opC0, 0, 0, 0 }, + { itab_g2_opC1, 0, 0, 0 }, + { itab_gB_opC6, 0, 0, 0 }, + { itab_gB_opC7, 0, 0, 0 }, + { itab_g2_opD0, 0, 0, 0 }, + { itab_g2_opD1, 0, 0, 0 }, + { itab_g2_opD2, 0, 0, 0 }, + { itab_g2_opD3, 0, 0, 0 }, + { itab_g3_opF6, 0, 0, 0 }, + { itab_g3_opF7, 0, 0, 0 }, + { itab_g4_opFE, 0, 0, 0 }, + { itab_g5_opFF, 0, 0, 0 }, + { itab_g6_op0F00, 0, 0, 0 }, + { itab_g7_op0F01, 0, 0, 0 }, + { itab_gP_op0F0D, 0, 0, 0 }, + { itab_g10_op0F18, 0, 0, 0 }, + { itab_gC_op0F71, itab_gC_op0F71_prefix66, itab_gC_op0F71_prefixF3, itab_gC_op0F71_prefixF2 }, + { itab_gD_op0F72, itab_gD_op0F72_prefix66, itab_gD_op0F72_prefixF3, itab_gD_op0F72_prefixF2 }, + { itab_gE_op0F73, itab_gE_op0F73_prefix66, itab_gE_op0F73_prefixF3, itab_gE_op0F73_prefixF2 }, + { itab_gF_op0FAE, itab_gF_op0FAE_prefix66, itab_gF_op0FAE_prefixF3, itab_gF_op0FAE_prefixF2 }, + { itab_g8_op0FBA, 0, 0, 0 }, + { itab_gA_op0FB9, 0, 0, 0 }, + { itab_g9_op0FC7, 0, 0, 0 }, + +#define ITAB_GROUPS_START_INTEL 28 + + { itab_g1_op80, 0, 0, 0 }, + { itab_g1_op81, 0, 0, 0 }, + { itab_g1_op82, 0, 0, 0 }, + { itab_g1_op83, 0, 0, 0 }, + { itab_g1A_op8F, 0, 0, 0 }, + { itab_g2_opC0, 0, 0, 0 }, + { itab_g2_opC1, 0, 0, 0 }, + { itab_gB_opC6, 0, 0, 0 }, + { itab_gB_opC7, 0, 0, 0 }, + { itab_g2_opD0, 0, 0, 0 }, + { itab_g2_opD1, 0, 0, 0 }, + { itab_g2_opD2, 0, 0, 0 }, + { itab_g2_opD3, 0, 0, 0 }, + { itab_g3_opF6, 0, 0, 0 }, + { itab_g3_opF7, 0, 0, 0 }, + { itab_g4_opFE, 0, 0, 0 }, + { itab_g5_opFF, 0, 0, 0 }, + { itab_g6_op0F00, 0, 0, 0 }, + { itab_g7_op0F01, 0, 0, 0 }, + { itab_gP_op0F0D, 0, 0, 0 }, + { itab_g10_op0F18, 0, 0, 0 }, + { itab_gC_op0F71, itab_gC_op0F71_prefix66, itab_gC_op0F71_prefixF3, itab_gC_op0F71_prefixF2 }, + { itab_gD_op0F72, itab_gD_op0F72_prefix66, itab_gD_op0F72_prefixF3, itab_gD_op0F72_prefixF2 }, + { itab_gE_op0F73, itab_gE_op0F73_prefix66, itab_gE_op0F73_prefixF3, itab_gE_op0F73_prefixF2 }, + { itab_gF_op0FAE, itab_gF_op0FAE_prefix66, itab_gF_op0FAE_prefixF3, itab_gF_op0FAE_prefixF2 }, + { itab_g8_op0FBA, 0, 0, 0 }, + { itab_gA_op0FB9, 0, 0, 0 }, + { itab_g9_op0FC7_intel, itab_g9_op0FC7_prefix66_intel, itab_g9_op0FC7_prefixF3_intel, 0 }, +}; + +/* D8 Opcode Map */ +struct map_entry itab_x87_opD8reg[0x8] = +{ + { UD_Ifadd, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifmul, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifcom, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifcomp, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifsub, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifsubr, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifdiv, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifdivr, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) } +}; + +/* D9 Opcode Map */ +struct map_entry itab_x87_opD9reg[0x8] = +{ + { UD_Ifld, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Iinvalid,NOARG, NOARG, NOARG, Pnone }, + { UD_Ifst, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifstp, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifldenv, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Ifldcw, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifnstenv,M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Ifnstcw, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) } +}; + +/* DA Opcode Map */ +struct map_entry itab_x87_opDAreg[0x8] = +{ + { UD_Ifiadd, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifimul, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ificom, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ificomp, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifisub, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifisubr, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifidiv, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifidivr, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) } +}; + +/* DB Opcode Map */ +struct map_entry itab_x87_opDBreg[0x8] = +{ + { UD_Ifild, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifisttp, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifist, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifistp, Md, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Iinvalid,NOARG, NOARG, NOARG, Pnone }, + { UD_Ifld, Mt, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Iinvalid,NOARG, NOARG, NOARG, Pnone }, + { UD_Ifstp, Mt, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) } +}; + +/* DC Opcode Map */ +struct map_entry itab_x87_opDCreg[0x8] = +{ + { UD_Ifadd, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifmul, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifcom, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifcomp, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifsub, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifsubr, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifdiv, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifdivr, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) } +}; + +/* DD Opcode Map */ +struct map_entry itab_x87_opDDreg[0x8] = +{ + { UD_Ifld, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifisttp, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifst, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifstp, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifrstor, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Iinvalid,NOARG, NOARG, NOARG, Pnone }, + { UD_Ifnsave, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Ifnstsw, M, NOARG, NOARG, Pa32 | REX(_R|_X|_B) } +}; + +/* DE Opcode Map */ +struct map_entry itab_x87_opDEreg[0x8] = +{ + { UD_Ifiadd, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifimul, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ificom, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ificomp, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifisub, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifisubr, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifidiv, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifidivr, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) } +}; + +/* DF Opcode Map */ +struct map_entry itab_x87_opDFreg[0x8] = +{ + { UD_Ifild, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifisttp, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifist, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifistp, Mw, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifbld, Mt, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Ifild, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) }, + { UD_Ifbstp, Mt, NOARG, NOARG, Pa32 | REX(_R|_X|_B) }, + { UD_Ifistp, Mq, NOARG, NOARG, Pc1 | Pa32 | REX(_R|_X|_B) } +}; + +struct map_entry itab_g_invalid[0x8] = +{ + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, +}; + +/* D8 Opcode Map */ +struct map_entry itab_x87_opD8[0x8*0x8] = +{ + { UD_Ifadd, ST0, ST0, NOARG, Pnone }, + { UD_Ifadd, ST0, ST1, NOARG, Pnone }, + { UD_Ifadd, ST0, ST2, NOARG, Pnone }, + { UD_Ifadd, ST0, ST3, NOARG, Pnone }, + { UD_Ifadd, ST0, ST4, NOARG, Pnone }, + { UD_Ifadd, ST0, ST5, NOARG, Pnone }, + { UD_Ifadd, ST0, ST6, NOARG, Pnone }, + { UD_Ifadd, ST0, ST7, NOARG, Pnone }, + { UD_Ifmul, ST0, ST0, NOARG, Pnone }, + { UD_Ifmul, ST0, ST1, NOARG, Pnone }, + { UD_Ifmul, ST0, ST2, NOARG, Pnone }, + { UD_Ifmul, ST0, ST3, NOARG, Pnone }, + { UD_Ifmul, ST0, ST4, NOARG, Pnone }, + { UD_Ifmul, ST0, ST5, NOARG, Pnone }, + { UD_Ifmul, ST0, ST6, NOARG, Pnone }, + { UD_Ifmul, ST0, ST7, NOARG, Pnone }, + { UD_Ifcom, ST0, ST0, NOARG, Pnone }, + { UD_Ifcom, ST0, ST1, NOARG, Pnone }, + { UD_Ifcom, ST0, ST2, NOARG, Pnone }, + { UD_Ifcom, ST0, ST3, NOARG, Pnone }, + { UD_Ifcom, ST0, ST4, NOARG, Pnone }, + { UD_Ifcom, ST0, ST5, NOARG, Pnone }, + { UD_Ifcom, ST0, ST6, NOARG, Pnone }, + { UD_Ifcom, ST0, ST7, NOARG, Pnone }, + { UD_Ifcomp, ST0, ST0, NOARG, Pnone }, + { UD_Ifcomp, ST0, ST1, NOARG, Pnone }, + { UD_Ifcomp, ST0, ST2, NOARG, Pnone }, + { UD_Ifcomp, ST0, ST3, NOARG, Pnone }, + { UD_Ifcomp, ST0, ST4, NOARG, Pnone }, + { UD_Ifcomp, ST0, ST5, NOARG, Pnone }, + { UD_Ifcomp, ST0, ST6, NOARG, Pnone }, + { UD_Ifcomp, ST0, ST7, NOARG, Pnone }, + { UD_Ifsub, ST0, ST0, NOARG, Pnone }, + { UD_Ifsub, ST0, ST1, NOARG, Pnone }, + { UD_Ifsub, ST0, ST2, NOARG, Pnone }, + { UD_Ifsub, ST0, ST3, NOARG, Pnone }, + { UD_Ifsub, ST0, ST4, NOARG, Pnone }, + { UD_Ifsub, ST0, ST5, NOARG, Pnone }, + { UD_Ifsub, ST0, ST6, NOARG, Pnone }, + { UD_Ifsub, ST0, ST7, NOARG, Pnone }, + { UD_Ifsubr, ST0, ST0, NOARG, Pnone }, + { UD_Ifsubr, ST0, ST1, NOARG, Pnone }, + { UD_Ifsubr, ST0, ST2, NOARG, Pnone }, + { UD_Ifsubr, ST0, ST3, NOARG, Pnone }, + { UD_Ifsubr, ST0, ST4, NOARG, Pnone }, + { UD_Ifsubr, ST0, ST5, NOARG, Pnone }, + { UD_Ifsubr, ST0, ST6, NOARG, Pnone }, + { UD_Ifsubr, ST0, ST7, NOARG, Pnone }, + { UD_Ifdiv, ST0, ST0, NOARG, Pnone }, + { UD_Ifdiv, ST0, ST1, NOARG, Pnone }, + { UD_Ifdiv, ST0, ST2, NOARG, Pnone }, + { UD_Ifdiv, ST0, ST3, NOARG, Pnone }, + { UD_Ifdiv, ST0, ST4, NOARG, Pnone }, + { UD_Ifdiv, ST0, ST5, NOARG, Pnone }, + { UD_Ifdiv, ST0, ST6, NOARG, Pnone }, + { UD_Ifdiv, ST0, ST7, NOARG, Pnone }, + { UD_Ifdivr, ST0, ST0, NOARG, Pnone }, + { UD_Ifdivr, ST0, ST1, NOARG, Pnone }, + { UD_Ifdivr, ST0, ST2, NOARG, Pnone }, + { UD_Ifdivr, ST0, ST3, NOARG, Pnone }, + { UD_Ifdivr, ST0, ST4, NOARG, Pnone }, + { UD_Ifdivr, ST0, ST5, NOARG, Pnone }, + { UD_Ifdivr, ST0, ST6, NOARG, Pnone }, + { UD_Ifdivr, ST0, ST7, NOARG, Pnone } +}; + +/* D9 Opcode Map */ +struct map_entry itab_x87_opD9[0x8*0x8] = +{ + { UD_Ifld, ST0, ST0, NOARG, Pnone }, + { UD_Ifld, ST0, ST1, NOARG, Pnone }, + { UD_Ifld, ST0, ST2, NOARG, Pnone }, + { UD_Ifld, ST0, ST3, NOARG, Pnone }, + { UD_Ifld, ST0, ST4, NOARG, Pnone }, + { UD_Ifld, ST0, ST5, NOARG, Pnone }, + { UD_Ifld, ST0, ST6, NOARG, Pnone }, + { UD_Ifld, ST0, ST7, NOARG, Pnone }, + { UD_Ifxch, ST0, ST0, NOARG, Pnone }, + { UD_Ifxch, ST0, ST1, NOARG, Pnone }, + { UD_Ifxch, ST0, ST2, NOARG, Pnone }, + { UD_Ifxch, ST0, ST3, NOARG, Pnone }, + { UD_Ifxch, ST0, ST4, NOARG, Pnone }, + { UD_Ifxch, ST0, ST5, NOARG, Pnone }, + { UD_Ifxch, ST0, ST6, NOARG, Pnone }, + { UD_Ifxch, ST0, ST7, NOARG, Pnone }, + { UD_Ifnop, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Inone, NOARG, NOARG, NOARG, Pnone }, + { UD_Inone, NOARG, NOARG, NOARG, Pnone }, + { UD_Inone, NOARG, NOARG, NOARG, Pnone }, + { UD_Inone, NOARG, NOARG, NOARG, Pnone }, + { UD_Inone, NOARG, NOARG, NOARG, Pnone }, + { UD_Inone, NOARG, NOARG, NOARG, Pnone }, + { UD_Inone, NOARG, NOARG, NOARG, Pnone }, + { UD_Inone, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifchs, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifabs, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iftst, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifxam, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifld1, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifldl2t, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifldl2e, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifldlpi, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifldlg2, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifldln2, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifldz, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_If2xm1, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifyl2x, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifptan, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifpatan, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifpxtract, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifprem1, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifdecstp, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifncstp, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifprem, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifyl2xp1, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifsqrt, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifsincos, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifrndint, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifscale, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifsin, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifcos, NOARG, NOARG, NOARG, Pnone } +}; + +/* DA Opcode Map */ +struct map_entry itab_x87_opDA[0x8*0x8] = { + { UD_Ifcmovb, ST0, ST0, NOARG, Pnone }, + { UD_Ifcmovb, ST0, ST1, NOARG, Pnone }, + { UD_Ifcmovb, ST0, ST2, NOARG, Pnone }, + { UD_Ifcmovb, ST0, ST3, NOARG, Pnone }, + { UD_Ifcmovb, ST0, ST4, NOARG, Pnone }, + { UD_Ifcmovb, ST0, ST5, NOARG, Pnone }, + { UD_Ifcmovb, ST0, ST6, NOARG, Pnone }, + { UD_Ifcmovb, ST0, ST7, NOARG, Pnone }, + { UD_Ifcmove, ST0, ST0, NOARG, Pnone }, + { UD_Ifcmove, ST0, ST1, NOARG, Pnone }, + { UD_Ifcmove, ST0, ST2, NOARG, Pnone }, + { UD_Ifcmove, ST0, ST3, NOARG, Pnone }, + { UD_Ifcmove, ST0, ST4, NOARG, Pnone }, + { UD_Ifcmove, ST0, ST5, NOARG, Pnone }, + { UD_Ifcmove, ST0, ST6, NOARG, Pnone }, + { UD_Ifcmove, ST0, ST7, NOARG, Pnone }, + { UD_Ifcmovbe, ST0, ST0, NOARG, Pnone }, + { UD_Ifcmovbe, ST0, ST1, NOARG, Pnone }, + { UD_Ifcmovbe, ST0, ST2, NOARG, Pnone }, + { UD_Ifcmovbe, ST0, ST3, NOARG, Pnone }, + { UD_Ifcmovbe, ST0, ST4, NOARG, Pnone }, + { UD_Ifcmovbe, ST0, ST5, NOARG, Pnone }, + { UD_Ifcmovbe, ST0, ST6, NOARG, Pnone }, + { UD_Ifcmovbe, ST0, ST7, NOARG, Pnone }, + { UD_Ifcmovu, ST0, ST0, NOARG, Pnone }, + { UD_Ifcmovu, ST0, ST1, NOARG, Pnone }, + { UD_Ifcmovu, ST0, ST2, NOARG, Pnone }, + { UD_Ifcmovu, ST0, ST3, NOARG, Pnone }, + { UD_Ifcmovu, ST0, ST4, NOARG, Pnone }, + { UD_Ifcmovu, ST0, ST5, NOARG, Pnone }, + { UD_Ifcmovu, ST0, ST6, NOARG, Pnone }, + { UD_Ifcmovu, ST0, ST7, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifucompp, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +/* DB Opcode Map */ +struct map_entry itab_x87_opDB[0x8*0x8] = +{ + { UD_Ifcmovnb, ST0, ST0, NOARG, Pnone }, + { UD_Ifcmovnb, ST0, ST1, NOARG, Pnone }, + { UD_Ifcmovnb, ST0, ST2, NOARG, Pnone }, + { UD_Ifcmovnb, ST0, ST3, NOARG, Pnone }, + { UD_Ifcmovnb, ST0, ST4, NOARG, Pnone }, + { UD_Ifcmovnb, ST0, ST5, NOARG, Pnone }, + { UD_Ifcmovnb, ST0, ST6, NOARG, Pnone }, + { UD_Ifcmovnb, ST0, ST7, NOARG, Pnone }, + { UD_Ifcmovne, ST0, ST0, NOARG, Pnone }, + { UD_Ifcmovne, ST0, ST1, NOARG, Pnone }, + { UD_Ifcmovne, ST0, ST2, NOARG, Pnone }, + { UD_Ifcmovne, ST0, ST3, NOARG, Pnone }, + { UD_Ifcmovne, ST0, ST4, NOARG, Pnone }, + { UD_Ifcmovne, ST0, ST5, NOARG, Pnone }, + { UD_Ifcmovne, ST0, ST6, NOARG, Pnone }, + { UD_Ifcmovne, ST0, ST7, NOARG, Pnone }, + { UD_Ifcmovnbe, ST0, ST0, NOARG, Pnone }, + { UD_Ifcmovnbe, ST0, ST1, NOARG, Pnone }, + { UD_Ifcmovnbe, ST0, ST2, NOARG, Pnone }, + { UD_Ifcmovnbe, ST0, ST3, NOARG, Pnone }, + { UD_Ifcmovnbe, ST0, ST4, NOARG, Pnone }, + { UD_Ifcmovnbe, ST0, ST5, NOARG, Pnone }, + { UD_Ifcmovnbe, ST0, ST6, NOARG, Pnone }, + { UD_Ifcmovnbe, ST0, ST7, NOARG, Pnone }, + { UD_Ifcmovnu, ST0, ST0, NOARG, Pnone }, + { UD_Ifcmovnu, ST0, ST1, NOARG, Pnone }, + { UD_Ifcmovnu, ST0, ST2, NOARG, Pnone }, + { UD_Ifcmovnu, ST0, ST3, NOARG, Pnone }, + { UD_Ifcmovnu, ST0, ST4, NOARG, Pnone }, + { UD_Ifcmovnu, ST0, ST5, NOARG, Pnone }, + { UD_Ifcmovnu, ST0, ST6, NOARG, Pnone }, + { UD_Ifcmovnu, ST0, ST7, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifclex, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifninit, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifucomi, ST0, ST0, NOARG, Pnone }, + { UD_Ifucomi, ST0, ST1, NOARG, Pnone }, + { UD_Ifucomi, ST0, ST2, NOARG, Pnone }, + { UD_Ifucomi, ST0, ST3, NOARG, Pnone }, + { UD_Ifucomi, ST0, ST4, NOARG, Pnone }, + { UD_Ifucomi, ST0, ST5, NOARG, Pnone }, + { UD_Ifucomi, ST0, ST6, NOARG, Pnone }, + { UD_Ifucomi, ST0, ST7, NOARG, Pnone }, + { UD_Ifcomi, ST0, ST0, NOARG, Pnone }, + { UD_Ifcomi, ST0, ST1, NOARG, Pnone }, + { UD_Ifcomi, ST0, ST2, NOARG, Pnone }, + { UD_Ifcomi, ST0, ST3, NOARG, Pnone }, + { UD_Ifcomi, ST0, ST4, NOARG, Pnone }, + { UD_Ifcomi, ST0, ST5, NOARG, Pnone }, + { UD_Ifcomi, ST0, ST6, NOARG, Pnone }, + { UD_Ifcomi, ST0, ST7, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +/* DC Opcode Map */ +struct map_entry itab_x87_opDC[0x8*0x8] = +{ + { UD_Ifadd, ST0, ST0, NOARG, Pnone }, + { UD_Ifadd, ST1, ST0, NOARG, Pnone }, + { UD_Ifadd, ST2, ST0, NOARG, Pnone }, + { UD_Ifadd, ST3, ST0, NOARG, Pnone }, + { UD_Ifadd, ST4, ST0, NOARG, Pnone }, + { UD_Ifadd, ST5, ST0, NOARG, Pnone }, + { UD_Ifadd, ST6, ST0, NOARG, Pnone }, + { UD_Ifadd, ST7, ST0, NOARG, Pnone }, + { UD_Ifmul, ST0, ST0, NOARG, Pnone }, + { UD_Ifmul, ST1, ST0, NOARG, Pnone }, + { UD_Ifmul, ST2, ST0, NOARG, Pnone }, + { UD_Ifmul, ST3, ST0, NOARG, Pnone }, + { UD_Ifmul, ST4, ST0, NOARG, Pnone }, + { UD_Ifmul, ST5, ST0, NOARG, Pnone }, + { UD_Ifmul, ST6, ST0, NOARG, Pnone }, + { UD_Ifmul, ST7, ST0, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifsubr, ST0, ST0, NOARG, Pnone }, + { UD_Ifsubr, ST1, ST0, NOARG, Pnone }, + { UD_Ifsubr, ST2, ST0, NOARG, Pnone }, + { UD_Ifsubr, ST3, ST0, NOARG, Pnone }, + { UD_Ifsubr, ST4, ST0, NOARG, Pnone }, + { UD_Ifsubr, ST5, ST0, NOARG, Pnone }, + { UD_Ifsubr, ST6, ST0, NOARG, Pnone }, + { UD_Ifsubr, ST7, ST0, NOARG, Pnone }, + { UD_Ifsub, ST0, ST0, NOARG, Pnone }, + { UD_Ifsub, ST1, ST0, NOARG, Pnone }, + { UD_Ifsub, ST2, ST0, NOARG, Pnone }, + { UD_Ifsub, ST3, ST0, NOARG, Pnone }, + { UD_Ifsub, ST4, ST0, NOARG, Pnone }, + { UD_Ifsub, ST5, ST0, NOARG, Pnone }, + { UD_Ifsub, ST6, ST0, NOARG, Pnone }, + { UD_Ifsub, ST7, ST0, NOARG, Pnone }, + { UD_Ifdivr, ST0, ST0, NOARG, Pnone }, + { UD_Ifdivr, ST1, ST0, NOARG, Pnone }, + { UD_Ifdivr, ST2, ST0, NOARG, Pnone }, + { UD_Ifdivr, ST3, ST0, NOARG, Pnone }, + { UD_Ifdivr, ST4, ST0, NOARG, Pnone }, + { UD_Ifdivr, ST5, ST0, NOARG, Pnone }, + { UD_Ifdivr, ST6, ST0, NOARG, Pnone }, + { UD_Ifdivr, ST7, ST0, NOARG, Pnone }, + { UD_Ifdiv, ST0, ST0, NOARG, Pnone }, + { UD_Ifdiv, ST1, ST0, NOARG, Pnone }, + { UD_Ifdiv, ST2, ST0, NOARG, Pnone }, + { UD_Ifdiv, ST3, ST0, NOARG, Pnone }, + { UD_Ifdiv, ST4, ST0, NOARG, Pnone }, + { UD_Ifdiv, ST5, ST0, NOARG, Pnone }, + { UD_Ifdiv, ST6, ST0, NOARG, Pnone }, + { UD_Ifdiv, ST7, ST0, NOARG, Pnone } +}; + +/* DD Opcode Map */ +struct map_entry itab_x87_opDD[0x8*0x8] = +{ + { UD_Iffree, ST0, NOARG, NOARG, Pnone }, + { UD_Iffree, ST1, NOARG, NOARG, Pnone }, + { UD_Iffree, ST2, NOARG, NOARG, Pnone }, + { UD_Iffree, ST3, NOARG, NOARG, Pnone }, + { UD_Iffree, ST4, NOARG, NOARG, Pnone }, + { UD_Iffree, ST5, NOARG, NOARG, Pnone }, + { UD_Iffree, ST6, NOARG, NOARG, Pnone }, + { UD_Iffree, ST7, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifst, ST0, NOARG, NOARG, Pnone }, + { UD_Ifst, ST1, NOARG, NOARG, Pnone }, + { UD_Ifst, ST2, NOARG, NOARG, Pnone }, + { UD_Ifst, ST3, NOARG, NOARG, Pnone }, + { UD_Ifst, ST4, NOARG, NOARG, Pnone }, + { UD_Ifst, ST5, NOARG, NOARG, Pnone }, + { UD_Ifst, ST6, NOARG, NOARG, Pnone }, + { UD_Ifst, ST7, NOARG, NOARG, Pnone }, + { UD_Ifstp, ST0, NOARG, NOARG, Pnone }, + { UD_Ifstp, ST1, NOARG, NOARG, Pnone }, + { UD_Ifstp, ST2, NOARG, NOARG, Pnone }, + { UD_Ifstp, ST3, NOARG, NOARG, Pnone }, + { UD_Ifstp, ST4, NOARG, NOARG, Pnone }, + { UD_Ifstp, ST5, NOARG, NOARG, Pnone }, + { UD_Ifstp, ST6, NOARG, NOARG, Pnone }, + { UD_Ifstp, ST7, NOARG, NOARG, Pnone }, + { UD_Ifucom, ST0, NOARG, NOARG, Pnone }, + { UD_Ifucom, ST1, NOARG, NOARG, Pnone }, + { UD_Ifucom, ST2, NOARG, NOARG, Pnone }, + { UD_Ifucom, ST3, NOARG, NOARG, Pnone }, + { UD_Ifucom, ST4, NOARG, NOARG, Pnone }, + { UD_Ifucom, ST5, NOARG, NOARG, Pnone }, + { UD_Ifucom, ST6, NOARG, NOARG, Pnone }, + { UD_Ifucom, ST7, NOARG, NOARG, Pnone }, + { UD_Ifucomp, ST0, NOARG, NOARG, Pnone }, + { UD_Ifucomp, ST1, NOARG, NOARG, Pnone }, + { UD_Ifucomp, ST2, NOARG, NOARG, Pnone }, + { UD_Ifucomp, ST3, NOARG, NOARG, Pnone }, + { UD_Ifucomp, ST4, NOARG, NOARG, Pnone }, + { UD_Ifucomp, ST5, NOARG, NOARG, Pnone }, + { UD_Ifucomp, ST6, NOARG, NOARG, Pnone }, + { UD_Ifucomp, ST7, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +/* DE Opcode Map */ +struct map_entry itab_x87_opDE[0x8*0x8] = +{ + { UD_Ifaddp, ST0, ST0, NOARG, Pnone }, + { UD_Ifaddp, ST1, ST0, NOARG, Pnone }, + { UD_Ifaddp, ST2, ST0, NOARG, Pnone }, + { UD_Ifaddp, ST3, ST0, NOARG, Pnone }, + { UD_Ifaddp, ST4, ST0, NOARG, Pnone }, + { UD_Ifaddp, ST5, ST0, NOARG, Pnone }, + { UD_Ifaddp, ST6, ST0, NOARG, Pnone }, + { UD_Ifaddp, ST7, ST0, NOARG, Pnone }, + { UD_Ifmulp, ST0, ST0, NOARG, Pnone }, + { UD_Ifmulp, ST1, ST0, NOARG, Pnone }, + { UD_Ifmulp, ST2, ST0, NOARG, Pnone }, + { UD_Ifmulp, ST3, ST0, NOARG, Pnone }, + { UD_Ifmulp, ST4, ST0, NOARG, Pnone }, + { UD_Ifmulp, ST5, ST0, NOARG, Pnone }, + { UD_Ifmulp, ST6, ST0, NOARG, Pnone }, + { UD_Ifmulp, ST7, ST0, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifcompp, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifsubrp, ST0, ST0, NOARG, Pnone }, + { UD_Ifsubrp, ST1, ST0, NOARG, Pnone }, + { UD_Ifsubrp, ST2, ST0, NOARG, Pnone }, + { UD_Ifsubrp, ST3, ST0, NOARG, Pnone }, + { UD_Ifsubrp, ST4, ST0, NOARG, Pnone }, + { UD_Ifsubrp, ST5, ST0, NOARG, Pnone }, + { UD_Ifsubrp, ST6, ST0, NOARG, Pnone }, + { UD_Ifsubrp, ST7, ST0, NOARG, Pnone }, + { UD_Ifsubp, ST0, ST0, NOARG, Pnone }, + { UD_Ifsubp, ST1, ST0, NOARG, Pnone }, + { UD_Ifsubp, ST2, ST0, NOARG, Pnone }, + { UD_Ifsubp, ST3, ST0, NOARG, Pnone }, + { UD_Ifsubp, ST4, ST0, NOARG, Pnone }, + { UD_Ifsubp, ST5, ST0, NOARG, Pnone }, + { UD_Ifsubp, ST6, ST0, NOARG, Pnone }, + { UD_Ifsubp, ST7, ST0, NOARG, Pnone }, + { UD_Ifdivrp, ST0, ST0, NOARG, Pnone }, + { UD_Ifdivrp, ST1, ST0, NOARG, Pnone }, + { UD_Ifdivrp, ST2, ST0, NOARG, Pnone }, + { UD_Ifdivrp, ST3, ST0, NOARG, Pnone }, + { UD_Ifdivrp, ST4, ST0, NOARG, Pnone }, + { UD_Ifdivrp, ST5, ST0, NOARG, Pnone }, + { UD_Ifdivrp, ST6, ST0, NOARG, Pnone }, + { UD_Ifdivrp, ST7, ST0, NOARG, Pnone }, + { UD_Ifdivp, ST0, ST0, NOARG, Pnone }, + { UD_Ifdivp, ST1, ST0, NOARG, Pnone }, + { UD_Ifdivp, ST2, ST0, NOARG, Pnone }, + { UD_Ifdivp, ST3, ST0, NOARG, Pnone }, + { UD_Ifdivp, ST4, ST0, NOARG, Pnone }, + { UD_Ifdivp, ST5, ST0, NOARG, Pnone }, + { UD_Ifdivp, ST6, ST0, NOARG, Pnone }, + { UD_Ifdivp, ST7, ST0, NOARG, Pnone } +}; + +/* DF Opcode Map */ +struct map_entry itab_x87_opDF[0x8*0x8] = +{ + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifnstsw, AX, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Ifucomip, ST0, ST0, NOARG, Pnone }, + { UD_Ifucomip, ST0, ST1, NOARG, Pnone }, + { UD_Ifucomip, ST0, ST2, NOARG, Pnone }, + { UD_Ifucomip, ST0, ST3, NOARG, Pnone }, + { UD_Ifucomip, ST0, ST4, NOARG, Pnone }, + { UD_Ifucomip, ST0, ST5, NOARG, Pnone }, + { UD_Ifucomip, ST0, ST6, NOARG, Pnone }, + { UD_Ifucomip, ST0, ST7, NOARG, Pnone }, + { UD_Ifcomip, ST0, ST0, NOARG, Pnone }, + { UD_Ifcomip, ST0, ST1, NOARG, Pnone }, + { UD_Ifcomip, ST0, ST2, NOARG, Pnone }, + { UD_Ifcomip, ST0, ST3, NOARG, Pnone }, + { UD_Ifcomip, ST0, ST4, NOARG, Pnone }, + { UD_Ifcomip, ST0, ST5, NOARG, Pnone }, + { UD_Ifcomip, ST0, ST6, NOARG, Pnone }, + { UD_Ifcomip, ST0, ST7, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }, + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone } +}; + +struct map_entry *itab_x87_reg[] = +{ + itab_x87_opD8reg, + itab_x87_opD9reg, + itab_x87_opDAreg, + itab_x87_opDBreg, + itab_x87_opDCreg, + itab_x87_opDDreg, + itab_x87_opDEreg, + itab_x87_opDFreg +}; + +struct map_entry *itab_x87[] = +{ + itab_x87_opD8, + itab_x87_opD9, + itab_x87_opDA, + itab_x87_opDB, + itab_x87_opDC, + itab_x87_opDD, + itab_x87_opDE, + itab_x87_opDF +}; + +/* AMD 3DNow! Instructions */ +struct map_entry itab_3DNow = + { UD_I3dnow, P, Q, NOARG }; +struct map_entry nop = + { UD_Inop, NOARG, NOARG, NOARG, Pnone }; +struct map_entry pause = + { UD_Ipause, NOARG, NOARG, NOARG, Pnone }; +struct map_entry movsxd = + { UD_Imovsxd, Gv, Ed, NOARG, Pc2 | Po32 | Pa32 | REX(_X|_W|_B|_R) }; +struct map_entry db = + { UD_Idb, Ib, NOARG, NOARG, Pnone }; +struct map_entry invalid = + { UD_Iinvalid, NOARG, NOARG, NOARG, Pnone }; + +struct map_entry* ud_me_db() { + return &db; +} + +struct map_entry* ud_me_invalid() { + return &invalid; +} + +/* 3D Now instructions with suffix */ +extern enum ud_mnemonic_code +ud_map_get_3dnow(uint8_t suffix) +{ + switch(suffix) { + case 0x0C: return UD_Ipi2fw; + case 0x0D: return UD_Ipi2fd; + case 0x1C: return UD_Ipf2iw; + case 0x1D: return UD_Ipf2id; + case 0x8A: return UD_Ipfnacc; + case 0x8E: return UD_Ipfpnacc; + case 0x90: return UD_Ipfcmpge; + case 0x94: return UD_Ipfmin; + case 0x96: return UD_Ipfrcp; + case 0x97: return UD_Ipfrsqrt; + case 0x9A: return UD_Ipfsub; + case 0x9E: return UD_Ipfadd; + case 0xA0: return UD_Ipfcmpgt; + case 0xA4: return UD_Ipfmax; + case 0xA6: return UD_Ipfrcpit1; + case 0xA7: return UD_Ipfrsqit1; + case 0xAA: return UD_Ipfsubr; + case 0xAE: return UD_Ipfacc; + case 0xB0: return UD_Ipfcmpeq; + case 0xB4: return UD_Ipfmul; + case 0xB6: return UD_Ipfrcpit2; + case 0xB7: return UD_Ipmulhrw; + case 0xBB: return UD_Ipswapd; + case 0xBF: return UD_Ipavgusb; + } + return(0); +} + +/* ----------------------------------------------------------------------------- + * search_1byte_insn() - Searches for 1-byte instructions. + * ----------------------------------------------------------------------------- + */ +static void +search_1byte_insn(register struct ud* u) +{ + u->mapen = &itab_1byte[inp_curr(u)]; + + if (inp_curr(u) == 0x90) { + if (!(u->dis_mode == 64 && P_REX_B(u->pfx_rex))) { + if (u->pfx_rep) { + u->mapen = &pause; + u->pfx_rep = 0; + } else u->mapen = &nop; + } + } else if (u->dis_mode == 64 && (u->mapen)->mnemonic == UD_Iarpl) + u->mapen = &movsxd; + + else if (u->mapen->mnemonic == UD_Igrp) + u->mapen = &itab_groups[u->mapen->prefix].me_pfx_none[MODRM_REG(inp_peek(u))]; + + else if ((u->mapen)->mnemonic == UD_Ix87) { + if (inp_peek(u) <= 0xBF) { + u->mapen = &itab_x87_reg[(inp_curr(u))-0xD8][MODRM_REG(inp_peek(u))]; + } + else { + u->mapen = &itab_x87[inp_curr(u)-0xD8][inp_peek(u)-0xC0]; + inp_next(u); + } + } +} + +/* ----------------------------------------------------------------------------- + * search_2byte_insn() - Searches for 2-byte instructions. + * ----------------------------------------------------------------------------- + */ +static void +search_2byte_insn(register struct ud* u) +{ + uint32_t gindex; + + inp_next(u); + + if (u->pfx_insn == 0x66) { + u->mapen = &itab_2byte_prefix66[inp_curr(u)]; + if (u->mapen != NULL && u->mapen->mnemonic != UD_Ina) + u->pfx_opr = 0; + } else if (u->pfx_insn == 0xF2) { + u->mapen = &itab_2byte_prefixF2[inp_curr(u)]; + if (u->mapen != NULL && u->mapen->mnemonic != UD_Ina) + u->pfx_repne = 0; + } else if (u->pfx_insn == 0xF3) { + u->mapen = &itab_2byte_prefixF3[inp_curr(u)]; + if (u->mapen != NULL && u->mapen->mnemonic != UD_Ina) + u->pfx_rep = 0; + } + + if (u->mapen == NULL || u->mapen->mnemonic == UD_Ina) + u->mapen = &itab_2byte[inp_curr(u)]; + + if (u->mapen->mnemonic == UD_I3dnow) + u->mapen = &itab_3DNow; + + if (u->mapen->mnemonic != UD_Igrp) + return; + + /* If instruction is in a Group */ + gindex = u->mapen->prefix + ((u->vendor == UD_VENDOR_INTEL) ? + ITAB_GROUPS_START_INTEL : 0); + + if (u->pfx_insn == 0x66 && itab_groups[gindex].me_pfx_66) { + u->mapen = &itab_groups[gindex].me_pfx_66[MODRM_REG(inp_peek(u))]; + if (u->mapen != NULL && u->mapen->mnemonic != UD_Ina) { + u->pfx_opr = 0; + return; + } + } + else if (u->pfx_insn == 0xF2 && itab_groups[gindex].me_pfx_f2) { + u->mapen = &itab_groups[gindex].me_pfx_f2[MODRM_REG(inp_peek(u))]; + if (u->mapen != NULL && u->mapen->mnemonic != UD_Ina) { + u->pfx_repne = 0; + return; + } + } + else if (u->pfx_insn == 0xF3 && itab_groups[gindex].me_pfx_f3) { + u->mapen = &itab_groups[gindex].me_pfx_f3[MODRM_REG(inp_peek(u))]; + if (u->mapen != NULL && u->mapen->mnemonic != UD_Ina) { + u->pfx_rep = 0; + return; + } + } + + if (! u->pfx_insn || u->mapen->mnemonic == UD_Igrp) + u->mapen = &itab_groups[gindex].me_pfx_none[MODRM_REG(inp_peek(u))]; + + /* 0F01 - opcode extensions */ + if (inp_curr(u) == 0x01) { + uint8_t reg = MODRM_REG(inp_peek(u)); + uint8_t mod = MODRM_MOD(inp_peek(u)); + uint8_t rm = MODRM_RM(inp_peek(u)); + + if (u->vendor == UD_VENDOR_INTEL) { + if (reg == 0 && mod == 3) { + u->mapen = &itab_g7_op0F01_Reg0_intel[rm]; + inp_next(u); + } else if (reg == 1 && mod == 3) { + u->mapen = &itab_g7_op0F01_Reg1_intel[rm]; + inp_next(u); + } else if (reg == 7 && mod == 3) { + u->mapen = &itab_g7_op0F01_Reg7_intel[rm]; + inp_next(u); + } + } + else { + if (reg == 3 && mod == 3) { + u->mapen = &itab_g7_op0F01_Reg3[rm]; + inp_next(u); + } else if (reg == 7 && mod == 3) { + u->mapen = &itab_g7_op0F01_Reg7[rm]; + inp_next(u); + } else u->mapen = &itab_g7_op0F01[reg]; + } + } + /* 0FAE - opcode extensions */ + else if (inp_curr(u) == 0xAE) { + uint8_t reg = MODRM_REG(inp_peek(u)); + uint8_t mod = MODRM_MOD(inp_peek(u)); + + if (reg == 5 && mod == 3) { + u->mapen = &itab_gF_op0FAE_Reg5; + inp_next(u); + } else if (reg == 6 && mod == 3) { + u->mapen = &itab_gF_op0FAE_Reg6; + inp_next(u); + } else if (reg == 7 && mod == 3) { + u->mapen = &itab_gF_op0FAE_Reg7; + inp_next(u); + } else u->mapen = &itab_gF_op0FAE[reg]; + } +} + +/* ============================================================================= + * ud_search_map() - Searches the x86 opcode table for the instruction + * corresponding to the opcode given by next byte in the byte stream. + * ============================================================================= + */ +void ud_search_map(register struct ud* u) +{ + inp_next(u); + + if (0x0F == inp_curr(u)) + search_2byte_insn(u); + else search_1byte_insn(u); + + u->mnemonic = u->mapen->mnemonic; +} + +/* ============================================================================= + * ud_lookup_mnemonic() - Looks-up the mnemonic code. + * ============================================================================= + */ +const char* ud_lookup_mnemonic(ud_mnemonic_code_t c) +{ + if (c < UD_I3vil) + return ud_mnemonics[c]; + return NULL; +} diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/opcmap.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/opcmap.h Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,173 @@ +/* ----------------------------------------------------------------------------- + * opcmap.h + * + * Copyright (c) 2005, 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ +#ifndef UD_OPCMAP_H +#define UD_OPCMAP_H + +#include "types.h" + + /* Prefixes/Macros */ + +#define Pnone 0x00 +#define Pa32 0x01 +#define P_A32(n) ((n) & 0x01) +#define Po32 0x04 +#define P_O32(n) ((n) & 0x04) +#define Pdef64 0x08 +#define P_DEF64(n) ((n) & 0x08) +#define Pinv64 0x10 +#define P_INV64(n) ((n) & 0x10) +#define Pc1 0x20 +#define P_C1(n) ((n) & 0x20) +#define Pc2 0x40 +#define P_C2(n) ((n) & 0x40) +#define Pc3 0x80 +#define P_C3(n) ((n) & 0x80) +#define PdepM 0x100 +#define P_DEPM(n) ((n) & 0x100) +#define REX(c) ((0x40 | c) << 16) +#define P_REX(c) (c & 0xFF0000) +#define P_REX_MASK(n) (0x40 | (0xF & ((n) >> 16))) +#define _W 8 +#define _R 4 +#define _X 2 +#define _B 1 +#define P_REX_W(r) ((0xF & (r)) >> 3) +#define P_REX_R(r) ((0x7 & (r)) >> 2) +#define P_REX_X(r) ((0x3 & (r)) >> 1) +#define P_REX_B(r) ((0x1 & (r)) >> 0) +#define SIB_S(b) ((b) >> 6) +#define SIB_I(b) (((b) >> 3) & 7) +#define SIB_B(b) ((b) & 7) +#define MODRM_REG(b) (((b) >> 3) & 7) +#define MODRM_NNN(b) (((b) >> 3) & 7) +#define MODRM_MOD(b) (((b) >> 6) & 3) +#define MODRM_RM(b) ((b) & 7) + +#define SZ_Z 1 +#define SZ_V 2 +#define SZ_P 3 +#define SZ_WP 4 +#define SZ_DP 5 +#define SZ_MDQ 6 +#define SZ_RDQ 7 +#define SZ_B 8 +#define SZ_W 16 +#define SZ_D 32 +#define SZ_Q 64 +#define SZ_T 80 + +/* ----------------------------------------------------------------------------- + * Enumeration of types of the operands in the opcode map. The naming was + * inspired by the AMD manuals. To understand the specifics, read the manuals. + * ----------------------------------------------------------------------------- + */ +enum map_operand_type +{ + OP_NONE = 0, + OP_A, + OP_E, + OP_M, + OP_G, + OP_I, + OP_AL, + OP_CL, + OP_DL, + OP_BL, + OP_AH, + OP_CH, + OP_DH, + OP_BH, + OP_ALr8b, + OP_CLr9b, + OP_DLr10b, + OP_BLr11b, + OP_AHr12b, + OP_CHr13b, + OP_DHr14b, + OP_BHr15b, + OP_AX, + OP_CX, + OP_DX, + OP_BX, + OP_SI, + OP_DI, + OP_SP, + OP_BP, + OP_rAX, + OP_rCX, + OP_rDX, + OP_rBX, + OP_rSP, + OP_rBP, + OP_rSI, + OP_rDI, + OP_rAXr8, + OP_rCXr9, + OP_rDXr10, + OP_rBXr11, + OP_rSPr12, + OP_rBPr13, + OP_rSIr14, + OP_rDIr15, + OP_eAX, + OP_eCX, + OP_eDX, + OP_eBX, + OP_eSP, + OP_eBP, + OP_eSI, + OP_eDI, + OP_ES, + OP_CS, + OP_SS, + OP_DS, + OP_FS, + OP_GS, + OP_ST0, + OP_ST1, + OP_ST2, + OP_ST3, + OP_ST4, + OP_ST5, + OP_ST6, + OP_ST7, + OP_J, + OP_S, + OP_O, + OP_I1, + OP_I3, + OP_V, + OP_W, + OP_Q, + OP_P, + OP_R, + OP_C, + OP_D, + OP_VR, + OP_PR +}; + +struct map_operand +{ + enum map_operand_type type; + uint8_t size; +}; + +struct map_entry +{ + enum ud_mnemonic_code mnemonic; + struct map_operand operand1; + struct map_operand operand2; + struct map_operand operand3; + uint32_t prefix; +}; + +void ud_search_map(struct ud*); +enum ud_mnemonic_code ud_map_get_3dnow(uint8_t); + +#endif diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/syn-att.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/syn-att.c Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,210 @@ +/* ----------------------------------------------------------------------------- + * syn-att.c + * + * Copyright (c) 2004, 2005, 2006 Vivek Mohan + * All rights reserved. See (LICENSE) + * ----------------------------------------------------------------------------- + */ + +#include "types.h" +#include "extern.h" +#include "opcmap.h" +#include "syn.h" + +/* ----------------------------------------------------------------------------- + * opr_cast() - Prints an operand cast. + * ----------------------------------------------------------------------------- + */ +static void +opr_cast(struct ud* u, struct ud_operand* op) +{ + switch(op->size) { + case 16 : case 32 : + mkasm(u, "*"); break; + default: break; + } +} + +/* ----------------------------------------------------------------------------- + * gen_operand() - Generates assembly output for each operand. + * ----------------------------------------------------------------------------- + */ +static void +gen_operand(struct ud* u, struct ud_operand* op) +{ + switch(op->type) { + case UD_OP_REG: + mkasm(u, "%%%s", ud_reg_tab[op->base - UD_R_AL]); + break; + + case UD_OP_MEM: + if (u->br_far) opr_cast(u, op); + if (u->pfx_seg) + mkasm(u, "%%%s:", ud_reg_tab[u->pfx_seg - UD_R_AL]); + if (op->offset == 8) { + if (op->lval.sbyte < 0) + mkasm(u, "-0x%x", (-op->lval.sbyte) & 0xff); + else mkasm(u, "0x%x", op->lval.sbyte); + } + else if (op->offset == 16) + mkasm(u, "0x%x", op->lval.uword); + else if (op->offset == 32) + mkasm(u, "0x%lx", op->lval.udword); + else if (op->offset == 64) + mkasm(u, "0x" FMT64 "x", op->lval.uqword); + + if (op->base) + mkasm(u, "(%%%s", ud_reg_tab[op->base - UD_R_AL]); + if (op->index) { + if (op->base) + mkasm(u, ","); + else mkasm(u, "("); + mkasm(u, "%%%s", ud_reg_tab[op->index - UD_R_AL]); + } + if (op->scale) + mkasm(u, ",%d", op->scale); + if (op->base || op->index) + mkasm(u, ")"); + break; + + case UD_OP_IMM: + switch (op->size) { + case 8: mkasm(u, "$0x%x", op->lval.ubyte); break; + case 16: mkasm(u, "$0x%x", op->lval.uword); break; + case 32: mkasm(u, "$0x%lx", op->lval.udword); break; + case 64: mkasm(u, "$0x" FMT64 "x", op->lval.uqword); break; + default: break; + } + break; + + case UD_OP_JIMM: + switch (op->size) { + case 8: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sbyte); + break; + case 16: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sword); + break; + case 32: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sdword); + break; + default:break; + } + break; + + case UD_OP_PTR: + switch (op->size) { + case 32: + mkasm(u, "$0x%x, $0x%x", op->lval.ptr.seg, + op->lval.ptr.off & 0xFFFF); + break; + case 48: + mkasm(u, "$0x%x, $0x%lx", op->lval.ptr.seg, + op->lval.ptr.off); + break; + } + break; + + default: return; + } +} + +/* ============================================================================= + * translates to AT&T syntax + * ============================================================================= + */ +extern void +ud_translate_att(struct ud *u) +{ + int size = 0; + + /* check if P_O32 prefix is used */ + if (! P_O32(u->mapen->prefix) && u->pfx_opr) { + switch (u->dis_mode) { + case 16: + mkasm(u, "o32 "); + break; + case 32: + case 64: + mkasm(u, "o16 "); + break; + } + } + + /* check if P_A32 prefix was used */ + if (! P_A32(u->mapen->prefix) && u->pfx_adr) { + switch (u->dis_mode) { + case 16: + mkasm(u, "a32 "); + break; + case 32: + mkasm(u, "a16 "); + break; + case 64: + mkasm(u, "a32 "); + break; + } + } + + if (u->pfx_lock) + mkasm(u, "lock "); + if (u->pfx_rep) + mkasm(u, "rep "); + if (u->pfx_repne) + mkasm(u, "repne "); + + /* special instructions */ + switch (u->mnemonic) { + case UD_Iretf: + mkasm(u, "lret "); + break; + case UD_Idb: + mkasm(u, ".byte 0x%x", u->operand[0].lval.ubyte); + return; + case UD_Ijmp: + case UD_Icall: + if (u->br_far) mkasm(u, "l"); + mkasm(u, "%s", ud_lookup_mnemonic(u->mnemonic)); + break; + case UD_Ibound: + case UD_Ienter: + if (u->operand[0].type != UD_NONE) + gen_operand(u, &u->operand[0]); + if (u->operand[1].type != UD_NONE) { + mkasm(u, ","); + gen_operand(u, &u->operand[1]); + } + return; + default: + mkasm(u, "%s", ud_lookup_mnemonic(u->mnemonic)); + } + + if (u->c1) + size = u->operand[0].size; + else if (u->c2) + size = u->operand[1].size; + else if (u->c3) + size = u->operand[2].size; + + if (size == 8) + mkasm(u, "b"); + else if (size == 16) + mkasm(u, "w"); + else if (size == 64) + mkasm(u, "q"); + + mkasm(u, " "); + + if (u->operand[2].type != UD_NONE) { + gen_operand(u, &u->operand[2]); + mkasm(u, ", "); + } + + if (u->operand[1].type != UD_NONE) { + gen_operand(u, &u->operand[1]); + mkasm(u, ", "); + } + + if (u->operand[0].type != UD_NONE) + gen_operand(u, &u->operand[0]); +} diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/syn-intel.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/syn-intel.c Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,205 @@ +/* ----------------------------------------------------------------------------- + * syn-intel.c + * + * Copyright (c) 2002, 2003, 2004 Vivek Mohan + * All rights reserved. See (LICENSE) + * ----------------------------------------------------------------------------- + */ + +#include "types.h" +#include "extern.h" +#include "opcmap.h" +#include "syn.h" + +/* ----------------------------------------------------------------------------- + * opr_cast() - Prints an operand cast. + * ----------------------------------------------------------------------------- + */ +static void +opr_cast(struct ud* u, struct ud_operand* op) +{ + switch(op->size) { + case 8: mkasm(u, "byte " ); break; + case 16: mkasm(u, "word " ); break; + case 32: mkasm(u, "dword "); break; + case 64: mkasm(u, "qword "); break; + case 80: mkasm(u, "tbyte "); break; + default: break; + } + if (u->br_far) + mkasm(u, "far "); + else if (u->br_near) + mkasm(u, "near "); +} + +/* ----------------------------------------------------------------------------- + * gen_operand() - Generates assembly output for each operand. + * ----------------------------------------------------------------------------- + */ +static void gen_operand(struct ud* u, struct ud_operand* op, int syn_cast) +{ + switch(op->type) { + case UD_OP_REG: + mkasm(u, ud_reg_tab[op->base - UD_R_AL]); + break; + + case UD_OP_MEM: { + + int op_f = 0; + + if (syn_cast) + opr_cast(u, op); + + mkasm(u, "["); + + if (u->pfx_seg) + mkasm(u, "%s:", ud_reg_tab[u->pfx_seg - UD_R_AL]); + + if (op->base) { + mkasm(u, "%s", ud_reg_tab[op->base - UD_R_AL]); + op_f = 1; + } + + if (op->index) { + if (op_f) + mkasm(u, "+"); + mkasm(u, "%s", ud_reg_tab[op->index - UD_R_AL]); + op_f = 1; + } + + if (op->scale) + mkasm(u, "*%d", op->scale); + + if (op->offset == 8) { + if (op->lval.sbyte < 0) + mkasm(u, "-0x%x", -op->lval.sbyte); + else mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.sbyte); + } + else if (op->offset == 16) + mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.uword); + else if (op->offset == 32) { + if (u->adr_mode == 64) { + if (op->lval.sdword < 0) + mkasm(u, "-0x%x", -op->lval.sdword); + else mkasm(u, "%s0x%x", (op_f) ? "+" : "", op->lval.sdword); + } + else mkasm(u, "%s0x%lx", (op_f) ? "+" : "", op->lval.udword); + } + else if (op->offset == 64) + mkasm(u, "%s0x" FMT64 "x", (op_f) ? "+" : "", op->lval.uqword); + + mkasm(u, "]"); + break; + } + + case UD_OP_IMM: + if (syn_cast) opr_cast(u, op); + switch (op->size) { + case 8: mkasm(u, "0x%x", op->lval.ubyte); break; + case 16: mkasm(u, "0x%x", op->lval.uword); break; + case 32: mkasm(u, "0x%lx", op->lval.udword); break; + case 64: mkasm(u, "0x" FMT64 "x", op->lval.uqword); break; + default: break; + } + break; + + case UD_OP_JIMM: + if (syn_cast) opr_cast(u, op); + switch (op->size) { + case 8: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sbyte); + break; + case 16: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sword); + break; + case 32: + mkasm(u, "0x" FMT64 "x", u->pc + op->lval.sdword); + break; + default:break; + } + break; + + case UD_OP_PTR: + switch (op->size) { + case 32: + mkasm(u, "word 0x%x:0x%x", op->lval.ptr.seg, + op->lval.ptr.off & 0xFFFF); + break; + case 48: + mkasm(u, "dword 0x%x:0x%lx", op->lval.ptr.seg, + op->lval.ptr.off); + break; + } + break; + + case UD_OP_CONST: + if (syn_cast) opr_cast(u, op); + mkasm(u, "%d", op->lval.udword); + break; + + default: return; + } +} + +/* ============================================================================= + * translates to intel syntax + * ============================================================================= + */ +extern void ud_translate_intel(struct ud* u) +{ + /* -- prefixes -- */ + + /* check if P_O32 prefix is used */ + if (! P_O32(u->mapen->prefix) && u->pfx_opr) { + switch (u->dis_mode) { + case 16: + mkasm(u, "o32 "); + break; + case 32: + case 64: + mkasm(u, "o16 "); + break; + } + } + + /* check if P_A32 prefix was used */ + if (! P_A32(u->mapen->prefix) && u->pfx_adr) { + switch (u->dis_mode) { + case 16: + mkasm(u, "a32 "); + break; + case 32: + mkasm(u, "a16 "); + break; + case 64: + mkasm(u, "a32 "); + break; + } + } + + if (u->pfx_lock) + mkasm(u, "lock "); + if (u->pfx_rep) + mkasm(u, "rep "); + if (u->pfx_repne) + mkasm(u, "repne "); + + /* print the instruction mnemonic */ + mkasm(u, "%s ", ud_lookup_mnemonic(u->mnemonic)); + + /* operand 1 */ + if (u->operand[0].type != UD_NONE) { + gen_operand(u, &u->operand[0], u->c1); + } + /* operand 2 */ + if (u->operand[1].type != UD_NONE) { + mkasm(u, ", "); + gen_operand(u, &u->operand[1], u->c2); + } + + /* operand 3 */ + if (u->operand[2].type != UD_NONE) { + mkasm(u, ", "); + gen_operand(u, &u->operand[2], u->c3); + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/syn.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/syn.c Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,61 @@ +/* ----------------------------------------------------------------------------- + * syn.c + * + * Copyright (c) 2002, 2003, 2004 Vivek Mohan + * All rights reserved. See (LICENSE) + * ----------------------------------------------------------------------------- + */ + +/* ----------------------------------------------------------------------------- + * Intel Register Table - Order Matters (types.h)! + * ----------------------------------------------------------------------------- + */ +const char* ud_reg_tab[] = +{ + "al", "cl", "dl", "bl", + "ah", "ch", "dh", "bh", + "spl", "bpl", "sil", "dil", + "r8b", "r9b", "r10b", "r11b", + "r12b", "r13b", "r14b", "r15b", + + "ax", "cx", "dx", "bx", + "sp", "bp", "si", "di", + "r8w", "r9w", "r10w", "r11w", + "r12w", "r13W" , "r14w", "r15w", + + "eax", "ecx", "edx", "ebx", + "esp", "ebp", "esi", "edi", + "r8d", "r9d", "r10d", "r11d", + "r12d", "r13d", "r14d", "r15d", + + "rax", "rcx", "rdx", "rbx", + "rsp", "rbp", "rsi", "rdi", + "r8", "r9", "r10", "r11", + "r12", "r13", "r14", "r15", + + "es", "cs", "ss", "ds", + "fs", "gs", + + "cr0", "cr1", "cr2", "cr3", + "cr4", "cr5", "cr6", "cr7", + "cr8", "cr9", "cr10", "cr11", + "cr12", "cr13", "cr14", "cr15", + + "dr0", "dr1", "dr2", "dr3", + "dr4", "dr5", "dr6", "dr7", + "dr8", "dr9", "dr10", "dr11", + "dr12", "dr13", "dr14", "dr15", + + "mm0", "mm1", "mm2", "mm3", + "mm4", "mm5", "mm6", "mm7", + + "st0", "st1", "st2", "st3", + "st4", "st5", "st6", "st7", + + "xmm0", "xmm1", "xmm2", "xmm3", + "xmm4", "xmm5", "xmm6", "xmm7", + "xmm8", "xmm9", "xmm10", "xmm11", + "xmm12", "xmm13", "xmm14", "xmm15", + + "rip" +}; diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/syn.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/syn.h Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,25 @@ +/* ----------------------------------------------------------------------------- + * syn.h + * + * Copyright (c) 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ +#ifndef UD_SYN_H +#define UD_SYN_H + +#include +#include +#include "types.h" + +extern const char* ud_reg_tab[]; + +static void mkasm(struct ud* u, const char* fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + u->insn_fill += vsprintf((char*) u->insn_buffer + u->insn_fill, fmt, ap); + va_end(ap); +} + +#endif diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/types.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/types.h Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,194 @@ +/* ----------------------------------------------------------------------------- + * types.h + * + * Copyright (c) 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ +#ifndef UD_TYPES_H +#define UD_TYPES_H + +#include + +#ifdef _MSC_VER +# define FMT64 "%I64" + typedef unsigned __int8 uint8_t; + typedef unsigned __int16 uint16_t; + typedef unsigned __int32 uint32_t; + typedef unsigned __int64 uint64_t; + typedef __int8 int8_t; + typedef __int16 int16_t; + typedef __int32 int32_t; + typedef __int64 int64_t; +#else +# define FMT64 "%ll" +# include +#endif + +#include "mnemonics.h" + +/* ----------------------------------------------------------------------------- + * All possible "types" of objects in udis86. Order is Important! + * ----------------------------------------------------------------------------- + */ +enum ud_type +{ + UD_NONE, + + /* 8 bit GPRs */ + UD_R_AL, UD_R_CL, UD_R_DL, UD_R_BL, + UD_R_AH, UD_R_CH, UD_R_DH, UD_R_BH, + UD_R_SPL, UD_R_BPL, UD_R_SIL, UD_R_DIL, + UD_R_R8B, UD_R_R9B, UD_R_R10B, UD_R_R11B, + UD_R_R12B, UD_R_R13B, UD_R_R14B, UD_R_R15B, + + /* 16 bit GPRs */ + UD_R_AX, UD_R_CX, UD_R_DX, UD_R_BX, + UD_R_SP, UD_R_BP, UD_R_SI, UD_R_DI, + UD_R_R8W, UD_R_R9W, UD_R_R10W, UD_R_R11W, + UD_R_R12W, UD_R_R13W, UD_R_R14W, UD_R_R15W, + + /* 32 bit GPRs */ + UD_R_EAX, UD_R_ECX, UD_R_EDX, UD_R_EBX, + UD_R_ESP, UD_R_EBP, UD_R_ESI, UD_R_EDI, + UD_R_R8D, UD_R_R9D, UD_R_R10D, UD_R_R11D, + UD_R_R12D, UD_R_R13D, UD_R_R14D, UD_R_R15D, + + /* 64 bit GPRs */ + UD_R_RAX, UD_R_RCX, UD_R_RDX, UD_R_RBX, + UD_R_RSP, UD_R_RBP, UD_R_RSI, UD_R_RDI, + UD_R_R8, UD_R_R9, UD_R_R10, UD_R_R11, + UD_R_R12, UD_R_R13, UD_R_R14, UD_R_R15, + + /* segment registers */ + UD_R_ES, UD_R_CS, UD_R_SS, UD_R_DS, + UD_R_FS, UD_R_GS, + + /* control registers*/ + UD_R_CR0, UD_R_CR1, UD_R_CR2, UD_R_CR3, + UD_R_CR4, UD_R_CR5, UD_R_CR6, UD_R_CR7, + UD_R_CR8, UD_R_CR9, UD_R_CR10, UD_R_CR11, + UD_R_CR12, UD_R_CR13, UD_R_CR14, UD_R_CR15, + + /* debug registers */ + UD_R_DR0, UD_R_DR1, UD_R_DR2, UD_R_DR3, + UD_R_DR4, UD_R_DR5, UD_R_DR6, UD_R_DR7, + UD_R_DR8, UD_R_DR9, UD_R_DR10, UD_R_DR11, + UD_R_DR12, UD_R_DR13, UD_R_DR14, UD_R_DR15, + + /* mmx registers */ + UD_R_MM0, UD_R_MM1, UD_R_MM2, UD_R_MM3, + UD_R_MM4, UD_R_MM5, UD_R_MM6, UD_R_MM7, + + /* x87 registers */ + UD_R_ST0, UD_R_ST1, UD_R_ST2, UD_R_ST3, + UD_R_ST4, UD_R_ST5, UD_R_ST6, UD_R_ST7, + + /* extended multimedia registers */ + UD_R_XMM0, UD_R_XMM1, UD_R_XMM2, UD_R_XMM3, + UD_R_XMM4, UD_R_XMM5, UD_R_XMM6, UD_R_XMM7, + UD_R_XMM8, UD_R_XMM9, UD_R_XMM10, UD_R_XMM11, + UD_R_XMM12, UD_R_XMM13, UD_R_XMM14, UD_R_XMM15, + + UD_R_RIP, + + /* Operand Types */ + UD_OP_REG, UD_OP_MEM, UD_OP_PTR, UD_OP_IMM, + UD_OP_JIMM, UD_OP_CONST +}; + +/* ----------------------------------------------------------------------------- + * struct ud_operand - Disassembled instruction Operand. + * ----------------------------------------------------------------------------- + */ +struct ud_operand +{ + enum ud_type type; + uint8_t size; + union { + int8_t sbyte; + uint8_t ubyte; + int16_t sword; + uint16_t uword; + int32_t sdword; + uint32_t udword; + int64_t sqword; + uint64_t uqword; + + struct { + uint16_t seg; + uint32_t off; + } ptr; + } lval; + + enum ud_type base; + enum ud_type index; + uint8_t offset; + uint8_t scale; +}; + +/* ----------------------------------------------------------------------------- + * struct ud - The udis86 object. + * ----------------------------------------------------------------------------- + */ +struct ud +{ + int (*inp_hook) (struct ud*); + uint8_t inp_curr; + uint8_t inp_fill; + FILE* inp_file; + uint8_t inp_ctr; + uint8_t* inp_buff; + uint8_t* inp_buff_end; + uint8_t inp_end; + void (*translator)(struct ud*); + uint64_t insn_offset; + char insn_hexcode[32]; + char insn_buffer[64]; + unsigned int insn_fill; + uint8_t dis_mode; + uint64_t pc; + uint8_t vendor; + struct map_entry* mapen; + enum ud_mnemonic_code mnemonic; + struct ud_operand operand[3]; + uint8_t error; + uint8_t pfx_rex; + uint8_t pfx_seg; + uint8_t pfx_opr; + uint8_t pfx_adr; + uint8_t pfx_lock; + uint8_t pfx_rep; + uint8_t pfx_repe; + uint8_t pfx_repne; + uint8_t pfx_insn; + uint8_t default64; + uint8_t opr_mode; + uint8_t adr_mode; + uint8_t br_far; + uint8_t br_near; + uint8_t c1; + uint8_t c2; + uint8_t c3; + uint8_t inp_cache[256]; + uint8_t inp_sess[64]; + +}; + +/* ----------------------------------------------------------------------------- + * Type-definitions + * ----------------------------------------------------------------------------- + */ +typedef enum ud_type ud_type_t; +typedef enum ud_mnemonic_code ud_mnemonic_code_t; + +typedef struct ud ud_t; +typedef struct ud_operand ud_operand_t; + +#define UD_SYN_INTEL ud_translate_intel +#define UD_SYN_ATT ud_translate_att +#define UD_EOI -1 +#define UD_INP_CACHE_SZ 32 +#define UD_VENDOR_AMD 0 +#define UD_VENDOR_INTEL 1 +#endif diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/libudis86/udis86.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/libudis86/udis86.c Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,154 @@ +/* ----------------------------------------------------------------------------- + * udis86.c + * + * Copyright (c) 2004, 2005, 2006, Vivek Mohan + * All rights reserved. See LICENSE + * ----------------------------------------------------------------------------- + */ + +#include +#include +#include + +#include "input.h" +#include "extern.h" + +/* ============================================================================= + * ud_init() - Initializes ud_t object. + * ============================================================================= + */ +extern void +ud_init(struct ud* u) +{ + memset((void*)u, 0, sizeof(struct ud)); + ud_set_mode(u, 16); + u->mnemonic = UD_Iinvalid; + ud_set_pc(u, 0); +#ifndef __UD_STANDALONE__ + ud_set_input_file(u, stdin); +#endif /* __UD_STANDALONE__ */ +} + +/* ============================================================================= + * ud_disassemble() - disassembles one instruction and returns the number of + * bytes disassembled. A zero means end of disassembly. + * ============================================================================= + */ +extern unsigned int +ud_disassemble(struct ud* u) +{ + if (ud_input_end(u)) + return 0; + + + u->insn_buffer[0] = u->insn_hexcode[0] = 0; + + + if (ud_decode(u) == 0) + return 0; + if (u->translator) + u->translator(u); + return ud_insn_len(u); +} + +/* ============================================================================= + * ud_set_mode() - Set Disassemly Mode. + * ============================================================================= + */ +extern void +ud_set_mode(struct ud* u, uint8_t m) +{ + switch(m) { + case 16: + case 32: + case 64: u->dis_mode = m ; return; + default: u->dis_mode = 16; return; + } +} + +/* ============================================================================= + * ud_set_vendor() - Set vendor. + * ============================================================================= + */ +extern void +ud_set_vendor(struct ud* u, unsigned v) +{ + switch(v) { + case UD_VENDOR_INTEL: + u->vendor = v; + break; + default: + u->vendor = UD_VENDOR_AMD; + } +} + +/* ============================================================================= + * ud_set_pc() - Sets code origin. + * ============================================================================= + */ +extern void +ud_set_pc(struct ud* u, uint64_t o) +{ + u->pc = o; +} + +/* ============================================================================= + * ud_set_syntax() - Sets the output syntax. + * ============================================================================= + */ +extern void +ud_set_syntax(struct ud* u, void (*t)(struct ud*)) +{ + u->translator = t; +} + +/* ============================================================================= + * ud_insn() - returns the disassembled instruction + * ============================================================================= + */ +extern char* +ud_insn_asm(struct ud* u) +{ + return u->insn_buffer; +} + +/* ============================================================================= + * ud_insn_offset() - Returns the offset. + * ============================================================================= + */ +extern uint64_t +ud_insn_off(struct ud* u) +{ + return u->insn_offset; +} + + +/* ============================================================================= + * ud_insn_hex() - Returns hex form of disassembled instruction. + * ============================================================================= + */ +extern char* +ud_insn_hex(struct ud* u) +{ + return u->insn_hexcode; +} + +/* ============================================================================= + * ud_insn_ptr() - Returns code disassembled. + * ============================================================================= + */ +extern uint8_t* +ud_insn_ptr(struct ud* u) +{ + return u->inp_sess; +} + +/* ============================================================================= + * ud_insn_len() - Returns the count of bytes disassembled. + * ============================================================================= + */ +extern unsigned int +ud_insn_len(struct ud* u) +{ + return u->inp_ctr; +} diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/mkinstalldirs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/mkinstalldirs Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,40 @@ +#! /bin/sh +# mkinstalldirs --- make directory hierarchy +# Author: Noah Friedman +# Created: 1993-05-16 +# Public domain + +# $Id: mkinstalldirs,v 1.1.1.1 2006/02/04 09:13:58 vivek5797 Exp $ + +errstatus=0 + +for file +do + set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` + shift + + pathcomp= + for d + do + pathcomp="$pathcomp$d" + case "$pathcomp" in + -* ) pathcomp=./$pathcomp ;; + esac + + if test ! -d "$pathcomp"; then + echo "mkdir $pathcomp" + + mkdir "$pathcomp" || lasterr=$? + + if test ! -d "$pathcomp"; then + errstatus=$lasterr + fi + fi + + pathcomp="$pathcomp/" + done +done + +exit $errstatus + +# mkinstalldirs ends here diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/tests/Makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/tests/Makefile Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,35 @@ +# Makefile + +CC = cc +RM = rm + + +.SUFFIXES: .c .o +.c.o: + $(CC) -c $(CFLAGS) -o $@ $< + +OBJS = gen.o + +gen: $(OBJS) + $(CC) $(OBJS) -ludis86 -o gen +test16: gen + yasm -f bin -o test16.bin test16.asm + echo "[bits 16]" > test16.out + ./gen -16 < test16.bin >> test16.out + diff test16.asm test16.out | more +test32: gen + yasm -f bin -o test32.bin test32.asm + echo "[bits 32]" > test32.out + ./gen -32 < test32.bin >> test32.out + diff test32.asm test32.out | more +test64: gen + yasm -f bin -o test64.bin test64.asm + echo "[bits 64]" > test64.out + ./gen -64 < test64.bin >> test64.out + diff test64.asm test64.out | more +testjmp: gen + yasm -f bin -o testjmp.bin testjmp.asm + udcli -64 < testjmp.bin > testjmp.out + cat testjmp.out | more +clean: + $(RM) -f core ./*.o ./gen *~ *.bin *.out diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/tests/Makefile.win32 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/tests/Makefile.win32 Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,35 @@ +# Makefile + +CC = cl +RM = del + + +.SUFFIXES: .c .obj +.c.obj: + $(CC) -I.. -c $(CFLAGS) -o $@ $< + +OBJS = gen.obj + +gen.exe: $(OBJS) + $(CC) $(OBJS) ../libudis86/udis86.lib -o gen.exe +test16: gen.exe + yasm -f bin -o test16.bin test16.asm + echo [bits 16]> test16.out + gen -16 < test16.bin >> test16.out + diff test16.asm test16.out | more +test32: gen.exe + yasm -f bin -o test32.bin test32.asm + echo [bits 32]> test32.out + gen -32 < test32.bin >> test32.out + diff test32.asm test32.out | more +test64: gen.exe + yasm -f bin -o test64.bin test64.asm + echo [bits 64]> test64.out + gen -64 < test64.bin >> test64.out + diff test64.asm test64.out | more +testjmp: gen.exe + yasm -f bin -o testjmp.bin testjmp.asm + ..\udcli\udcli -64 < testjmp.bin > testjmp.out + type testjmp.out | more +clean: + $(RM) *.obj gen.exe *.bin *.out diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/tests/gen.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/tests/gen.c Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,32 @@ +#include +#include + +#ifdef _WIN32 +# include +# include +#endif + +/* help string */ +int main(int argc, char **argv) +{ + ud_t ud_obj; + +#ifdef _WIN32 + _setmode(_fileno(stdin), _O_BINARY); +#endif + + ud_init(&ud_obj); + ud_set_input_file(&ud_obj, stdin); + + if (strcmp(argv[1],"-16") == 0) + ud_set_mode(&ud_obj, 16); + else if (strcmp(argv[1],"-32") == 0) + ud_set_mode(&ud_obj, 32); + else if (strcmp(argv[1],"-64") == 0) + ud_set_mode(&ud_obj, 64); + + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + + while (ud_disassemble(&ud_obj)) + printf("\t%s\n", ud_insn_asm(&ud_obj)); +} diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/tests/test16.asm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/tests/test16.asm Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,2 @@ +[bits 16] + movzx eax, word [bx] diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/tests/test32.asm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/tests/test32.asm Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,238 @@ +[bits 32] + mov [0x1000], bx + mov [0x10], ax + mov ax, [0x10] + mov byte [bx+si], 0x10 + mov byte [bx+si+0x10], 0x10 + mov word [bp+0x0], 0x10 + mov word [bp+di+0x10], 0x10 + mov dword [si+0x10], 0x10 + mov word [di+0x10], 0x10 + mov dword [bx+0x10], 0x1000 + mov word [bx+0x1000], 0x1000 + mov dword [ebx+ecx*4], 0x100 + mov [eax+eax*2], eax + mov [edx+esi*8], ebp + mov dword [ecx*4+0x0], 0x100 + mov byte [cs:0x100000], 0x10 + mov word [eax+0x10], 0x10 + mov [eax+0x10], ax + mov [eax+0x1000], ebx + mov [ebp+eax+0x0], esi + mov [ebp+edi+0x100000], esp + mov byte [esp], 0x10 + add al, 0x10 + push es + pop es + adc eax, 0x10000 + and [eax], al + daa + inc ax + inc edx + push eax + push ax + pushad + bound eax, [eax] + bound ax, [ecx] + bsr ax, ax + bsf eax, [bx+si] + bswap eax + bt [eax], ax + btr ax, 0x10 + btc ebx, 0x10 + bts word [ebx], 0x10 + call ax + call word near [bx+si] + call eax + call dword near [eax+ecx] + call word 0x10:0x100 + call dword 0x10:0x10000 + call word far [eax] + call dword far [bp+si] + cbw + cwd + clc + cld + clflush [eax] + cmp eax, ebx + cmp ecx, [bx] + cmpsb + cmpsw + cmpsd + cmpxchg [eax], ax + cmpxchg8b [ebx] + cpuid + das + inc eax + inc word [ecx] + dec byte [si] + in al, 0x10 + in ax, 0x10 + in eax, 0x10 + insb + insw + insd + int 0x10 + into + lahf + lds ax, [eax] + les eax, [ebx] + lea ax, [eax] + lea eax, [bx+si] + leave + lodsb + lodsw + lodsd + test al, bl + test [eax], bl + test [eax], ebx + test [eax], bx + ret + ret 0x10 + aad 0x10 + aam 0x10 + salc + hlt + cmc + lock xchg ebx, eax + repne mov eax, ebx + rep mov eax, 0x10 + push cs + outsd + outsw + mov ax, es + mov bx, ds + mov [eax], es + mov [ebx+ecx], cs + mov cs, [ebx+ecx] + wait + pushfw + pushfd + lodsw + lodsd + retf 0x10 + int3 + into + iretw + iretd + lar eax, [eax] + lsl ax, [bx] + syscall + clts + sysret + movups xmm0, xmm1 + mov dr0, eax + wrmsr + rdmsr + rdtsc + rdpmc + sysenter + sysexit + cmovo eax, [eax] + cmovno eax, [bx] + cmovb eax, [eax] + cmovae eax, [bx] + cmovo eax, [eax] + cmovz eax, ebx + cmovnz eax, [eax] + cmovbe eax, [bx] + cmova eax, [bx] + movmskps eax, xmm0 + movmskpd eax, xmm0 + sqrtps xmm1, xmm0 + rsqrtps xmm1, xmm0 + rcpps xmm1, xmm0 + andps xmm1, xmm0 + orps xmm1, xmm0 + xorps xmm1, xmm0 + andnps xmm1, xmm0 + sqrtss xmm1, xmm0 + rsqrtss xmm1, xmm0 + rcpss xmm1, xmm0 + sqrtpd xmm1, xmm0 + andpd xmm1, xmm0 + andnpd xmm1, xmm0 + orpd xmm1, xmm0 + xorpd xmm1, xmm0 + sqrtsd xmm1, xmm0 + punpcklbw mm0, [eax] + punpcklwd mm0, mm1 + punpckldq mm0, mm1 + packsswb mm0, mm1 + packsswb mm0, mm1 + pcmpgtb mm0, mm1 + pcmpgtw mm0, mm1 + pcmpgtd mm0, mm1 + packuswb mm0, mm1 + punpcklbw xmm0, [eax] + punpcklwd xmm0, xmm1 + punpckldq xmm0, xmm1 + packsswb xmm0, xmm1 + packsswb xmm0, xmm1 + pcmpgtb xmm0, xmm1 + pcmpgtw xmm0, xmm1 + pcmpgtd xmm0, xmm1 + packuswb xmm0, xmm1 + pshufw mm0, mm1, 0x10 + pcmpeqb mm0, mm1 + pcmpeqw mm0, mm1 + pcmpeqd mm0, mm1 + pcmpeqb xmm0, xmm1 + pcmpeqw xmm0, xmm1 + pcmpeqd xmm0, xmm1 + emms + pshufhw xmm0, xmm1, 0x10 + pshufd xmm0, xmm1, 0x10 + pshuflw xmm0, xmm1, 0x10 + seto [eax] + setno [bx] + setz [es:eax+ecx*2+0x100] + push fs + pop fs + cpuid + bt [eax], eax + shld eax, ebx, 0x10 + shld [eax], bx, cl + cmpxchg [eax], eax + lss eax, [eax] + btr [eax], eax + movnti [eax], eax + psrlw mm0, 0x10 + fadd dword [eax] + imul eax, [eax], 0xf6 + movd dword [eax], xmm0 + movzx eax, word [eax] + push word [0x10] + insw + insd + fnstsw ax + fucomip st0, st1 + fcomip st0, st7 + fucomp st4 + fucom st5 + fstp st3 + fst st1 + ffree st0 + fdiv st7, st0 + fdivr st2, st0 + fsub st4, st0 + fsubr st6, st0 + fmul st0, st0 + fadd st5, st0 + ficom word [eax] + fidivr word [eax] + fimul word [ebx] + fisub word [ecx] + fld qword [bx+si] + fisttp qword [edx+0x100] + fnstsw [eax] + frstor [ebx] + prefetch [bx+si] + psrlq xmm0, 0x10 + psrldq xmm0, 0x10 + movsldup xmm0, [eax] + add [0xffffffff], eax + cvtsi2ss xmm1, dword [eax] + pause + pop dword [eax] + out 0x0, al diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/tests/test64.asm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/tests/test64.asm Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,142 @@ +[bits 64] + mov rax, 0x102030405060708 + mov [eax+0x10], ax + mov [eax+0x1000], ebx + mov [ebp+eax+0x0], esi + mov qword [ebp+edi+0x1000], 0x10 + mov byte [esp], 0x10 + mov [eax], rax + mov [r12], eax + mov [r13+r12+0x0], eax + mov [r8*4+0x0], sil + inc rax + dec rax + mov [rip+0x200], rax + mov rax, 0x10000 + push rax + push r12 + call word near [r8] + call qword near [rax] + call word far [r8] + call dword far [rax] + cbw + cwde + cdqe + cwd + cdq + cqo + cmovl rax, [rax] + cmovge eax, [rax] + clflush [r14] + cmp [rax], rax + cmp rbx, r12 + cmp r12d, r8d + cmpsb + cmpsw + cmpsd + cmpsq + cmpxchg [eax], r14 + cmpxchg8b [ebx] + inc r12d + inc dword [rax] + dec r11w + hlt + imul rax, [eax+ebx*8+0x100000], 0x10 + idiv dword [r12] + enter 0x100, 0x0 + enter 0x100, 0x1 + enter 0x100, 0x10 + in al, 0x10 + in ax, 0x10 + in eax, 0x10 + lfs eax, [eax] + lgs eax, [ebx] + lea eax, [rbx] + lea r11, [eax] + lodsb + lodsq + lodsd + push rax + push r11 + xchg [eax], sil + xchg [eax], ebx + xchg [eax], bx + xchg r8, rax + xchg r9, rax + xchg cx, ax + movsd + movsq + mov al, r11b + mov sil, al + mov r11b, dil + ret 0x10 + pop rax + pop r11 + pop qword [eax] + insd + outsd + mov [r14d], cs + mov cs, [ebx+ecx] + pushfq + scasq + lar rax, [eax] + lsl ax, [rbx] + movups xmm0, [r12d] + movupd xmm0, [r12d] + movsldup xmm0, [r12d] + movups xmm0, xmm1 + movlps xmm0, [rax] + movlps [rax], xmm0 + unpcklps xmm4, xmm5 + unpckhps xmm4, xmm5 + movhps xmm3, [eax] + movhps [rax], xmm3 + movss xmm0, [eax] + movss [eax], xmm0 + movlpd [eax], xmm0 + movlpd xmm0, [eax] + unpcklpd xmm2, xmm4 + unpckhpd xmm3, [eax+ebx*8+0xffffffff] + movhpd xmm3, [rax] + movhpd [rax], xmm2 + movsd xmm3, xmm4 + movddup xmm3, [rax] + mov dr0, rax + mov rax, dr1 + movnti [eax], eax + movnti [rax], rax + movd dword [eax], xmm0 + movd qword [eax], xmm0 + movd xmm11, qword [eax] + vmmcall + vmrun + clgi + stgi + mfence + lfence + sfence + clflush [rax] + mov cr8, rax + push qword [eax] + push word [eax] + add bh, bh + add dil, dil + add sil, bpl + add al, sil + prefetcht0 [eax] + prefetchnta [eax] + prefetch [eax] + add [r8], r9b + mov [rax-0x1], eax + inc rax + jmp qword near [eax] + jmp rax + mov [0x10], rax + mov rax, [0x10] + mov rax, 0x102030405060708 + nop + xchg r8, rax + push ax + push rax + push r11 + mov rax, [0x100] diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/tests/testjmp.asm --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/tests/testjmp.asm Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,17 @@ +[bits 64] + + jnz near x + jo near x + jno word x + jc near x + jnc word x + jae dword x + jcxz x + jecxz x + jrcxz x + jmp near x + call x + jmp word x + jmp dword x + jmp word [eax] +x: jmp qword [rax] diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/udcli/Makefile.in --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/udcli/Makefile.in Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,38 @@ +# Makefile +# udis86 - Cmd line interface. +# + +SHELL = @SHELL@ +top_srcdir = @top_srcdir@ +srcdir = @srcdir@ +CC = @CC@ +CFLAGS = @CFLAGS@ -Wall -O2 +LIBS = @LIBS@ +INSTALL = @INSTALL@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_DATA = @INSTALL_DATA@ +prefix = @prefix@ +exec_prefix = ${prefix} +bindir = $(exec_prefix)/bin +libdir = $(prefix)/lib +mandir = @mandir@ +includedir = @includedir@ +RM = rm + + +.SUFFIXES: .c .o +.c.o: + $(CC) -c $(CFLAGS) -o $@ $< + +OBJS = udcli.o ../libudis86/libudis86.a + +udcli: $(OBJS) + $(CC) $(CFLAGS) $(OBJS) -o udcli +install: udcli + $(INSTALL_PROGRAM) $(srcdir)/udcli $(INSTALLROOT)$(bindir)/udcli +uninstall: + $(RM) -f $(INSTALLROOT)$(bindir)/udcli +clean: + $(RM) -f core $(srcdir)/*.o $(srcdir)/udcli +distclean: clean + $(RM) -f udcli config.h Makefile *~ diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/udcli/Makefile.win32 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/udcli/Makefile.win32 Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,20 @@ +# Makefile +# udis86 - Cmd line interface. +# + +CC = cl +CFLAGS = -O2 +RM = del + + +.SUFFIXES: .c .obj +.c.obj: + $(CC) -c $(CFLAGS) -o $@ $< + +OBJS = udcli.obj ../libudis86/udis86.lib + +udcli: $(OBJS) + $(CC) $(OBJS) -o udcli.exe + +clean: + $(RM) *.obj udcli.exe diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/udcli/udcli.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/udcli/udcli.c Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,240 @@ +/* ----------------------------------------------------------------------------- + * udcli.c - front end to udis86. + * + * Copyright (c) 2004, 2005, 2006 Vivek Mohan + * All rights reserved. + * See (LICENSE) + * ----------------------------------------------------------------------------- + */ + +#include +#include +#include +#include +#include "../udis86.h" + +#if defined(__amd64__) || defined(__x86_64__) +# define FMT "l" +#else +# define FMT "ll" +#endif + +#ifdef _WIN32 +# include +# include +#endif + +/* help string */ +static char help[] = +{ + "Usage: %s [-option[s]] file\n" + "Options:\n" + " -16 : Set the disassembly mode to 16 bits. \n" + " -32 : Set the disassembly mode to 32 bits. (default)\n" + " -64 : Set the disassembly mode to 64 bits.\n" + " -intel : Set the output to INTEL (NASM like) syntax. (default)\n" + " -att : Set the output to AT&T (GAS like) syntax.\n" + " -v : Set vendor. = {intel, amd}.\n" + " -o : Set the value of program counter to . (default = 0)\n" + " -s : Set the number of bytes to skip before disassembly to .\n" + " -c : Set the number of bytes to disassemble to .\n" + " -x : Set the input mode to whitespace seperated 8-bit numbers in\n" + " hexadecimal representation. Example: 0f 01 ae 00\n" + " -noff : Do not display the offset of instructions.\n" + " -nohex : Do not display the hexadecimal code of instructions.\n" + " -h : Display this help message.\n" + "\n" + "Udcli is a front-end to the Udis86 Disassembler Library.\n" + "http://udis86.sourceforge.net/\n" +}; + +FILE* fptr = NULL; +uint64_t o_skip = 0; +uint64_t o_count = 0; +unsigned char o_do_count= 0; +unsigned char o_do_off = 1; +unsigned char o_do_hex = 1; +unsigned char o_do_x = 0; +unsigned o_vendor = UD_VENDOR_AMD; + +int input_hook_x(ud_t* u); +int input_hook_file(ud_t* u); + +int main(int argc, char **argv) +{ + char *prog_path = *argv; + char *s; + ud_t ud_obj; + int mode = 0; + + /* initialize */ + ud_init(&ud_obj); + ud_set_mode(&ud_obj, 32); + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + +#ifdef _WIN32 + _setmode(_fileno(stdin), _O_BINARY); +#endif + + fptr = stdin; + + argv++; + + /* loop through the args */ + while(--argc > 0) { + if (strcmp(*argv,"-16") == 0) { + ud_set_mode(&ud_obj, 16); + mode = 16; + } else if (strcmp(*argv,"-32") == 0) { + ud_set_mode(&ud_obj, 32); + mode = 32; + } else if (strcmp(*argv,"-64") == 0) { + ud_set_mode(&ud_obj, 64); + mode = 64; + } else if (strcmp(*argv,"-intel") == 0) + ud_set_syntax(&ud_obj, UD_SYN_INTEL); + else if (strcmp(*argv,"-att") == 0) + ud_set_syntax(&ud_obj, UD_SYN_ATT); + else if (strcmp(*argv,"-noff") == 0) + o_do_off = 0; + else if (strcmp(*argv,"-nohex") == 0) + o_do_hex = 0; + else if (strcmp(*argv,"-x") == 0) + o_do_x = 1; + else if (strcmp(*argv,"-s") == 0) + if (--argc) { + s = *(++argv); + if (sscanf(s, "%" FMT "d", &o_skip) == 0) + fprintf(stderr, "Invalid value given for -s.\n"); + } else { + fprintf(stderr, "No value given for -s.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + else if (strcmp(*argv,"-c") == 0) + if (--argc) { + o_do_count= 1; + s = *(++argv); + if (sscanf(s, "%" FMT "d", &o_count) == 0) + fprintf(stderr, "Invalid value given for -c.\n"); + } else { + fprintf(stderr, "No value given for -c.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + else if (strcmp(*argv,"-v") == 0) + if (--argc) { + s = *(++argv); + if (*s == 'i') + ud_set_vendor(&ud_obj, UD_VENDOR_INTEL); + } else { + fprintf(stderr, "No value given for -v.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + else if (strcmp(*argv,"-o") == 0) { + if (--argc) { + uint64_t pc = 0; + s = *(++argv); + if (sscanf(s, "%" FMT "x", &pc) == 0) + fprintf(stderr, "Invalid value given for -o.\n"); + ud_set_pc(&ud_obj, pc); + } else { + fprintf(stderr, "No value given for -o.\n"); + printf(help, prog_path); + exit(EXIT_FAILURE); + } + } else if((*argv)[0] == '-') { + fprintf(stderr, "Invalid option %s.\n", *argv); + printf(help, prog_path); + exit(EXIT_FAILURE); + } else { + static int i = 0; + s = *argv; + if (i) { + fprintf(stderr, "Multiple files specified.\n"); + exit(EXIT_FAILURE); + } else i = 1; + if ((fptr = fopen(s, "rb")) == NULL) { + fprintf(stderr, "Failed to open file: %s.\n", s); + exit(EXIT_FAILURE); + } + } + argv++; + } + + if (o_do_x) + ud_set_input_hook(&ud_obj, input_hook_x); + else ud_set_input_hook(&ud_obj, input_hook_file); + + if (o_skip) { + o_count += o_skip; + ud_input_skip(&ud_obj, o_skip); + } + + /* disassembly loop */ + while (ud_disassemble(&ud_obj)) { + if (o_do_off) + printf("%016" FMT "x ", ud_insn_off(&ud_obj)); + if (o_do_hex) { + char* hex1, *hex2; + char c; + hex1 = ud_insn_hex(&ud_obj); + hex2 = hex1 + 16; + c = hex1[16]; + hex1[16] = 0; + printf("%-16s %-24s", hex1, ud_insn_asm(&ud_obj)); + hex1[16] = c; + if (strlen(hex1) > 16) { + printf("\n"); + if (o_do_off) + printf("%15s -", ""); + printf("%-16s", hex2); + } + } + else printf(" %-24s", ud_insn_asm(&ud_obj)); + + printf("\n"); + } + + exit(EXIT_SUCCESS); + return 0; +} + +int input_hook_x(ud_t* u) +{ + unsigned int c, i; + + if (o_do_count) { + if (! o_count) + return UD_EOI; + else --o_count; + } + + i = fscanf(fptr, "%x", &c); + + if (i == EOF) + return UD_EOI; + if (i == 0) { + fprintf(stderr, "Error: Invalid input, should be in hexadecimal form (8-bit).\n"); + return UD_EOI; + } + if (c > 0xFF) + fprintf(stderr, "Warning: Casting non-8-bit input (%x), to %x.\n", c, c & 0xFF); + return (int) (c & 0xFF); +} + +int input_hook_file(ud_t* u) +{ + int c; + + if (o_do_count) { + if (! o_count) { + return -1; + } else o_count -- ; + } + + if ((c = fgetc(fptr)) == EOF) + return UD_EOI; + return c; +} diff -r 586e4a649642 -r 4a9dcbd9e54f udis86-1.4/udis86.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/udis86-1.4/udis86.h Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,15 @@ +/* ----------------------------------------------------------------------------- + * udis86.h + * + * Copyright (c) 2002, 2003, 2004 Vivek Mohan + * All rights reserved. See (LICENSE) + * ----------------------------------------------------------------------------- + */ + +#ifndef UDIS86_H +#define UDIS86_H + +#include "libudis86/types.h" +#include "libudis86/extern.h" + +#endif diff -r 586e4a649642 -r 4a9dcbd9e54f win32/accctrl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/accctrl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,424 @@ +/***********************************************************************\ +* accctrl.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.accctrl; + +private import win32.basetyps, win32.w32api, win32.winbase, win32.windef; + +// FIXME: check types and grouping of constants +// FIXME: check Windows version support + +static assert (_WIN32_WINNT_ONLY, + "win32.accctrl is available only if version WindowsNTonly, WindowsXP, " + "Windows2003 or WindowsVista is set"); + +alias LocalFree AccFree; + +const uint + ACTRL_RESERVED = 0x00000000, + ACTRL_ACCESS_PROTECTED = 0x00000001, + ACTRL_ACCESS_ALLOWED = 0x00000001, + ACTRL_ACCESS_DENIED = 0x00000002, + ACTRL_AUDIT_SUCCESS = 0x00000004, + ACTRL_AUDIT_FAILURE = 0x00000008, + ACTRL_SYSTEM_ACCESS = 0x04000000, + ACTRL_DELETE = 0x08000000, + ACTRL_READ_CONTROL = 0x10000000, + ACTRL_CHANGE_ACCESS = 0x20000000, + ACTRL_CHANGE_OWNER = 0x40000000, + ACTRL_SYNCHRONIZE = 0x80000000, + ACTRL_STD_RIGHTS_ALL = 0xf8000000; + +const uint + ACTRL_FILE_READ = 0x00000001, + ACTRL_FILE_WRITE = 0x00000002, + ACTRL_FILE_APPEND = 0x00000004, + ACTRL_FILE_READ_PROP = 0x00000008, + ACTRL_FILE_WRITE_PROP = 0x00000010, + ACTRL_FILE_EXECUTE = 0x00000020, + ACTRL_FILE_READ_ATTRIB = 0x00000080, + ACTRL_FILE_WRITE_ATTRIB = 0x00000100, + ACTRL_FILE_CREATE_PIPE = 0x00000200; + +const uint + ACTRL_DIR_LIST = 0x00000001, + ACTRL_DIR_CREATE_OBJECT = 0x00000002, + ACTRL_DIR_CREATE_CHILD = 0x00000004, + ACTRL_DIR_DELETE_CHILD = 0x00000040, + ACTRL_DIR_TRAVERSE = 0x00000020; + +const uint + ACTRL_KERNEL_TERMINATE = 0x00000001, + ACTRL_KERNEL_THREAD = 0x00000002, + ACTRL_KERNEL_VM = 0x00000004, + ACTRL_KERNEL_VM_READ = 0x00000008, + ACTRL_KERNEL_VM_WRITE = 0x00000010, + ACTRL_KERNEL_DUP_HANDLE = 0x00000020, + ACTRL_KERNEL_PROCESS = 0x00000040, + ACTRL_KERNEL_SET_INFO = 0x00000080, + ACTRL_KERNEL_GET_INFO = 0x00000100, + ACTRL_KERNEL_CONTROL = 0x00000200, + ACTRL_KERNEL_ALERT = 0x00000400, + ACTRL_KERNEL_GET_CONTEXT = 0x00000800, + ACTRL_KERNEL_SET_CONTEXT = 0x00001000, + ACTRL_KERNEL_TOKEN = 0x00002000, + ACTRL_KERNEL_IMPERSONATE = 0x00004000, + ACTRL_KERNEL_DIMPERSONATE = 0x00008000; + +const uint + ACTRL_PRINT_SADMIN = 0x00000001, + ACTRL_PRINT_SLIST = 0x00000002, + ACTRL_PRINT_PADMIN = 0x00000004, + ACTRL_PRINT_PUSE = 0x00000008, + ACTRL_PRINT_JADMIN = 0x00000010; + +const uint + ACTRL_SVC_GET_INFO = 0x00000001, + ACTRL_SVC_SET_INFO = 0x00000002, + ACTRL_SVC_STATUS = 0x00000004, + ACTRL_SVC_LIST = 0x00000008, + ACTRL_SVC_START = 0x00000010, + ACTRL_SVC_STOP = 0x00000020, + ACTRL_SVC_PAUSE = 0x00000040, + ACTRL_SVC_INTERROGATE = 0x00000080, + ACTRL_SVC_UCONTROL = 0x00000100; + +const uint + ACTRL_REG_QUERY = 0x00000001, + ACTRL_REG_SET = 0x00000002, + ACTRL_REG_CREATE_CHILD = 0x00000004, + ACTRL_REG_LIST = 0x00000008, + ACTRL_REG_NOTIFY = 0x00000010, + ACTRL_REG_LINK = 0x00000020; + +const uint + ACTRL_WIN_CLIPBRD = 0x00000001, + ACTRL_WIN_GLOBAL_ATOMS = 0x00000002, + ACTRL_WIN_CREATE = 0x00000004, + ACTRL_WIN_LIST_DESK = 0x00000008, + ACTRL_WIN_LIST = 0x00000010, + ACTRL_WIN_READ_ATTRIBS = 0x00000020, + ACTRL_WIN_WRITE_ATTRIBS = 0x00000040, + ACTRL_WIN_SCREEN = 0x00000080, + ACTRL_WIN_EXIT = 0x00000100; + +enum : uint { + ACTRL_ACCESS_NO_OPTIONS = 0x00000000, + ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES = 0x00000001 +} + +const TCHAR[] ACCCTRL_DEFAULT_PROVIDER = "Windows NT Access Provider"; + +const uint + TRUSTEE_ACCESS_ALLOWED = 0x00000001, + TRUSTEE_ACCESS_READ = 0x00000002, + TRUSTEE_ACCESS_WRITE = 0x00000004, + TRUSTEE_ACCESS_EXPLICIT = 0x00000001, + TRUSTEE_ACCESS_READ_WRITE = 0x00000006, + TRUSTEE_ACCESS_ALL = 0xFFFFFFFF; + +const uint + NO_INHERITANCE = 0x0, + SUB_OBJECTS_ONLY_INHERIT = 0x1, + SUB_CONTAINERS_ONLY_INHERIT = 0x2, + SUB_CONTAINERS_AND_OBJECTS_INHERIT = 0x3, + INHERIT_NO_PROPAGATE = 0x4, + INHERIT_ONLY = 0x8, + INHERITED_ACCESS_ENTRY = 0x10, + INHERITED_PARENT = 0x10000000, + INHERITED_GRANDPARENT = 0x20000000; + +alias ULONG INHERIT_FLAGS, ACCESS_RIGHTS; +alias ULONG* PINHERIT_FLAGS, PACCESS_RIGHTS; + +enum ACCESS_MODE { + NOT_USED_ACCESS, + GRANT_ACCESS, + SET_ACCESS, + DENY_ACCESS, + REVOKE_ACCESS, + SET_AUDIT_SUCCESS, + SET_AUDIT_FAILURE +} + +enum SE_OBJECT_TYPE { + SE_UNKNOWN_OBJECT_TYPE, + SE_FILE_OBJECT, + SE_SERVICE, + SE_PRINTER, + SE_REGISTRY_KEY, + SE_LMSHARE, + SE_KERNEL_OBJECT, + SE_WINDOW_OBJECT, + SE_DS_OBJECT, + SE_DS_OBJECT_ALL, + SE_PROVIDER_DEFINED_OBJECT, + SE_WMIGUID_OBJECT, + SE_REGISTRY_WOW64_32KEY +} + +enum TRUSTEE_TYPE { + TRUSTEE_IS_UNKNOWN, + TRUSTEE_IS_USER, + TRUSTEE_IS_GROUP, + TRUSTEE_IS_DOMAIN, + TRUSTEE_IS_ALIAS, + TRUSTEE_IS_WELL_KNOWN_GROUP, + TRUSTEE_IS_DELETED, + TRUSTEE_IS_INVALID, + TRUSTEE_IS_COMPUTER +} + +enum TRUSTEE_FORM { + TRUSTEE_IS_SID, + TRUSTEE_IS_NAME, + TRUSTEE_BAD_FORM, + TRUSTEE_IS_OBJECTS_AND_SID, + TRUSTEE_IS_OBJECTS_AND_NAME +} + +enum MULTIPLE_TRUSTEE_OPERATION { + NO_MULTIPLE_TRUSTEE, + TRUSTEE_IS_IMPERSONATE +} + +struct TRUSTEE_A { + TRUSTEE_A* pMultipleTrustee; + MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; + TRUSTEE_FORM TrusteeForm; + TRUSTEE_TYPE TrusteeType; + LPSTR ptstrName; +} +alias TRUSTEE_A TRUSTEEA; +alias TRUSTEE_A* PTRUSTEE_A, PTRUSTEEA; + +struct TRUSTEE_W { + TRUSTEE_W* pMultipleTrustee; + MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; + TRUSTEE_FORM TrusteeForm; + TRUSTEE_TYPE TrusteeType; + LPWSTR ptstrName; +} +alias TRUSTEE_W TRUSTEEW; +alias TRUSTEEW* PTRUSTEE_W, PTRUSTEEW; + +struct ACTRL_ACCESS_ENTRYA { + TRUSTEE_A Trustee; + ULONG fAccessFlags; + ACCESS_RIGHTS Access; + ACCESS_RIGHTS ProvSpecificAccess; + INHERIT_FLAGS Inheritance; + LPCSTR lpInheritProperty; +} +alias ACTRL_ACCESS_ENTRYA* PACTRL_ACCESS_ENTRYA; + +struct ACTRL_ACCESS_ENTRYW { + TRUSTEE_W Trustee; + ULONG fAccessFlags; + ACCESS_RIGHTS Access; + ACCESS_RIGHTS ProvSpecificAccess; + INHERIT_FLAGS Inheritance; + LPCWSTR lpInheritProperty; +} +alias ACTRL_ACCESS_ENTRYW* PACTRL_ACCESS_ENTRYW; + +struct ACTRL_ACCESS_ENTRY_LISTA { + ULONG cEntries; + ACTRL_ACCESS_ENTRYA* pAccessList; +} +alias ACTRL_ACCESS_ENTRY_LISTA* PACTRL_ACCESS_ENTRY_LISTA; + +struct ACTRL_ACCESS_ENTRY_LISTW { + ULONG cEntries; + ACTRL_ACCESS_ENTRYW* pAccessList; +} +alias ACTRL_ACCESS_ENTRY_LISTW* PACTRL_ACCESS_ENTRY_LISTW; + +struct ACTRL_PROPERTY_ENTRYA { + LPCSTR lpProperty; + PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList; + ULONG fListFlags; +} +alias ACTRL_PROPERTY_ENTRYA* PACTRL_PROPERTY_ENTRYA; + +struct ACTRL_PROPERTY_ENTRYW { + LPCWSTR lpProperty; + PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList; + ULONG fListFlags; +} +alias ACTRL_PROPERTY_ENTRYW* PACTRL_PROPERTY_ENTRYW; + +struct ACTRL_ACCESSA { + ULONG cEntries; + PACTRL_PROPERTY_ENTRYA pPropertyAccessList; +} +alias ACTRL_ACCESSA ACTRL_AUDITA; +alias ACTRL_ACCESSA* PACTRL_ACCESSA, PACTRL_AUDITA; + +struct ACTRL_ACCESSW { + ULONG cEntries; + PACTRL_PROPERTY_ENTRYW pPropertyAccessList; +} +alias ACTRL_ACCESSW ACTRL_AUDITW; +alias ACTRL_ACCESSW* PACTRL_ACCESSW, PACTRL_AUDITW; + +struct TRUSTEE_ACCESSA { + LPSTR lpProperty; + ACCESS_RIGHTS Access; + ULONG fAccessFlags; + ULONG fReturnedAccess; +} +alias TRUSTEE_ACCESSA* PTRUSTEE_ACCESSA; + +struct TRUSTEE_ACCESSW { + LPWSTR lpProperty; + ACCESS_RIGHTS Access; + ULONG fAccessFlags; + ULONG fReturnedAccess; +} +alias TRUSTEE_ACCESSW* PTRUSTEE_ACCESSW; + +struct ACTRL_OVERLAPPED { + union { + PVOID Provider; + ULONG Reserved1; + } + ULONG Reserved2; + HANDLE hEvent; +} +alias ACTRL_OVERLAPPED* PACTRL_OVERLAPPED; + +struct ACTRL_ACCESS_INFOA { + ULONG fAccessPermission; + LPSTR lpAccessPermissionName; +} +alias ACTRL_ACCESS_INFOA* PACTRL_ACCESS_INFOA; + +struct ACTRL_ACCESS_INFOW { + ULONG fAccessPermission; + LPWSTR lpAccessPermissionName; +} +alias ACTRL_ACCESS_INFOW* PACTRL_ACCESS_INFOW; + +struct ACTRL_CONTROL_INFOA { + LPSTR lpControlId; + LPSTR lpControlName; +} +alias ACTRL_CONTROL_INFOA* PACTRL_CONTROL_INFOA; + +struct ACTRL_CONTROL_INFOW { + LPWSTR lpControlId; + LPWSTR lpControlName; +} +alias ACTRL_CONTROL_INFOW* PACTRL_CONTROL_INFOW; + +struct EXPLICIT_ACCESS_A { + DWORD grfAccessPermissions; + ACCESS_MODE grfAccessMode; + DWORD grfInheritance; + TRUSTEE_A Trustee; +} +alias EXPLICIT_ACCESS_A EXPLICIT_ACCESSA; +alias EXPLICIT_ACCESS_A* PEXPLICIT_ACCESS_A, PEXPLICIT_ACCESSA; + +struct EXPLICIT_ACCESS_W { + DWORD grfAccessPermissions; + ACCESS_MODE grfAccessMode; + DWORD grfInheritance; + TRUSTEE_W Trustee; +} +alias EXPLICIT_ACCESS_W EXPLICIT_ACCESSW; +alias EXPLICIT_ACCESS_W* PEXPLICIT_ACCESS_W, PEXPLICIT_ACCESSW; + +struct OBJECTS_AND_SID { + DWORD ObjectsPresent; + GUID ObjectTypeGuid; + GUID InheritedObjectTypeGuid; + SID* pSid; +} +alias OBJECTS_AND_SID* POBJECTS_AND_SID; + +struct OBJECTS_AND_NAME_A { + DWORD ObjectsPresent; + SE_OBJECT_TYPE ObjectType; + LPSTR ObjectTypeName; + LPSTR InheritedObjectTypeName; + LPSTR ptstrName; +} +alias OBJECTS_AND_NAME_A* POBJECTS_AND_NAME_A; + +struct OBJECTS_AND_NAME_W { + DWORD ObjectsPresent; + SE_OBJECT_TYPE ObjectType; + LPWSTR ObjectTypeName; + LPWSTR InheritedObjectTypeName; + LPWSTR ptstrName; +} +alias OBJECTS_AND_NAME_W* POBJECTS_AND_NAME_W; + +static if (WINVER >= 0x501) { + struct INHERITED_FROMA { + LONG GenerationGap; + LPSTR AncestorName; + } + alias INHERITED_FROMA* PINHERITED_FROMA; + + struct INHERITED_FROMW { + LONG GenerationGap; + LPWSTR AncestorName; + } + alias INHERITED_FROMW* PINHERITED_FROMW; +} + +version (Unicode) { + alias TRUSTEEW TRUSTEE; + alias ACTRL_ACCESSW ACTRL_ACCESS; + alias ACTRL_ACCESS_ENTRY_LISTW ACTRL_ACCESS_ENTRY_LIST; + alias ACTRL_ACCESS_INFOW ACTRL_ACCESS_INFO; + alias ACTRL_ACCESS_ENTRYW ACTRL_ACCESS_ENTRY; + alias ACTRL_AUDITW ACTRL_AUDIT; + alias ACTRL_CONTROL_INFOW ACTRL_CONTROL_INFO; + alias EXPLICIT_ACCESSW EXPLICIT_ACCESS; + alias TRUSTEE_ACCESSW TRUSTEE_ACCESS; + alias OBJECTS_AND_NAME_W OBJECTS_AND_NAME_; + static if (WINVER >= 0x501) { + alias INHERITED_FROMW INHERITED_FROM; + } +} else { + alias TRUSTEEA TRUSTEE; + alias ACTRL_ACCESSA ACTRL_ACCESS; + alias ACTRL_ACCESS_ENTRY_LISTA ACTRL_ACCESS_ENTRY_LIST; + alias ACTRL_ACCESS_INFOA ACTRL_ACCESS_INFO; + alias ACTRL_ACCESS_ENTRYA ACTRL_ACCESS_ENTRY; + alias ACTRL_AUDITA ACTRL_AUDIT; + alias ACTRL_CONTROL_INFOA ACTRL_CONTROL_INFO; + alias EXPLICIT_ACCESSA EXPLICIT_ACCESS; + alias TRUSTEE_ACCESSA TRUSTEE_ACCESS; + alias OBJECTS_AND_NAME_A OBJECTS_AND_NAME_; + static if (WINVER >= 0x501) { + alias INHERITED_FROMA INHERITED_FROM; + } +} + +alias TRUSTEE TRUSTEE_; +alias TRUSTEE* PTRUSTEE, PTRUSTEE_; +alias ACTRL_ACCESS* PACTRL_ACCESS; +alias ACTRL_ACCESS_ENTRY_LIST* PACTRL_ACCESS_ENTRY_LIST; +alias ACTRL_ACCESS_INFO* PACTRL_ACCESS_INFO; +alias ACTRL_ACCESS_ENTRY* PACTRL_ACCESS_ENTRY; +alias ACTRL_AUDIT* PACTRL_AUDIT; +alias ACTRL_CONTROL_INFO* PACTRL_CONTROL_INFO; +alias EXPLICIT_ACCESS EXPLICIT_ACCESS_; +alias EXPLICIT_ACCESS* PEXPLICIT_ACCESS, PEXPLICIT_ACCESS_; +alias TRUSTEE_ACCESS* PTRUSTEE_ACCESS; +alias OBJECTS_AND_NAME_* POBJECTS_AND_NAME_; +static if (WINVER >= 0x501) { + alias INHERITED_FROM* PINHERITED_FROM; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/aclapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/aclapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,141 @@ +/***********************************************************************\ +* aclapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.aclapi; +pragma(lib, "advapi32.lib"); + +import win32.windows, win32.accctrl; + +static assert (_WIN32_WINNT_ONLY, + "win32.aclapi is available only if version WindowsNTonly, WindowsXP, " + "Windows2003 or WindowsVista is set"); + +extern (Windows) { + VOID BuildExplicitAccessWithNameA(PEXPLICIT_ACCESS_A, LPSTR, DWORD, + ACCESS_MODE, DWORD); + VOID BuildExplicitAccessWithNameW(PEXPLICIT_ACCESS_W, LPWSTR, DWORD, + ACCESS_MODE, DWORD); + DWORD BuildSecurityDescriptorA(PTRUSTEE_A, PTRUSTEE_A , ULONG, + PEXPLICIT_ACCESS_A, ULONG, PEXPLICIT_ACCESS_A, PSECURITY_DESCRIPTOR, + PULONG, PSECURITY_DESCRIPTOR*); + DWORD BuildSecurityDescriptorW(PTRUSTEE_W, PTRUSTEE_W , ULONG, + PEXPLICIT_ACCESS_W, ULONG, PEXPLICIT_ACCESS_W, PSECURITY_DESCRIPTOR, + PULONG, PSECURITY_DESCRIPTOR*); + VOID BuildTrusteeWithNameA(PTRUSTEE_A, LPSTR); + VOID BuildTrusteeWithNameW(PTRUSTEE_W, LPWSTR); + VOID BuildTrusteeWithObjectsAndNameA(PTRUSTEE_A, POBJECTS_AND_NAME_A, + SE_OBJECT_TYPE, LPSTR, LPSTR, LPSTR); + VOID BuildTrusteeWithObjectsAndNameW(PTRUSTEE_W, POBJECTS_AND_NAME_W, + SE_OBJECT_TYPE, LPWSTR, LPWSTR, LPWSTR); + VOID BuildTrusteeWithObjectsAndSidA(PTRUSTEE_A, POBJECTS_AND_SID, + GUID*, GUID*, PSID); + VOID BuildTrusteeWithObjectsAndSidW(PTRUSTEE_W, POBJECTS_AND_SID, + GUID*, GUID*, PSID); + VOID BuildTrusteeWithSidA(PTRUSTEE_A, PSID); + VOID BuildTrusteeWithSidW(PTRUSTEE_W, PSID); + DWORD GetAuditedPermissionsFromAclA(PACL, PTRUSTEE_A, PACCESS_MASK, + PACCESS_MASK); + DWORD GetAuditedPermissionsFromAclW(PACL, PTRUSTEE_W, PACCESS_MASK, + PACCESS_MASK); + DWORD GetEffectiveRightsFromAclA(PACL, PTRUSTEE_A, PACCESS_MASK); + DWORD GetEffectiveRightsFromAclW(PACL, PTRUSTEE_W, PACCESS_MASK); + DWORD GetExplicitEntriesFromAclA(PACL, PULONG, PEXPLICIT_ACCESS_A*); + DWORD GetExplicitEntriesFromAclW(PACL, PULONG, PEXPLICIT_ACCESS_W*); + static if (WINVER >= 0x501) { + DWORD GetInheritanceSourceA(LPSTR, SE_OBJECT_TYPE, + SECURITY_INFORMATION, BOOL, GUID**, DWORD, PACL, void*, + PGENERIC_MAPPING, PINHERITED_FROMA); + DWORD GetInheritanceSourceW(LPWSTR, SE_OBJECT_TYPE, + SECURITY_INFORMATION, BOOL, GUID**, DWORD, PACL, void*, + PGENERIC_MAPPING, PINHERITED_FROMW); + } + DWORD GetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, + PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); + DWORD GetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, + PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); + DWORD GetSecurityInfo(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, + PSID*, PSID*, PACL*, PACL*, PSECURITY_DESCRIPTOR*); + TRUSTEE_FORM GetTrusteeFormA(PTRUSTEE_A); + TRUSTEE_FORM GetTrusteeFormW(PTRUSTEE_W); + LPSTR GetTrusteeNameA(PTRUSTEE_A); + LPWSTR GetTrusteeNameW(PTRUSTEE_W); + TRUSTEE_TYPE GetTrusteeTypeA(PTRUSTEE_A); + TRUSTEE_TYPE GetTrusteeTypeW(PTRUSTEE_W); + DWORD LookupSecurityDescriptorPartsA(PTRUSTEE_A*, PTRUSTEE_A*, PULONG, + PEXPLICIT_ACCESS_A*, PULONG, PEXPLICIT_ACCESS_A*, + PSECURITY_DESCRIPTOR); + DWORD LookupSecurityDescriptorPartsW(PTRUSTEE_W*, PTRUSTEE_W*, PULONG, + PEXPLICIT_ACCESS_W*, PULONG, PEXPLICIT_ACCESS_W*, + PSECURITY_DESCRIPTOR); + DWORD SetEntriesInAclA(ULONG, PEXPLICIT_ACCESS_A, PACL, PACL*); + DWORD SetEntriesInAclW(ULONG, PEXPLICIT_ACCESS_W, PACL, PACL*); + DWORD SetNamedSecurityInfoA(LPSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, + PSID, PSID, PACL, PACL); + DWORD SetNamedSecurityInfoW(LPWSTR, SE_OBJECT_TYPE, SECURITY_INFORMATION, + PSID, PSID, PACL, PACL); + DWORD SetSecurityInfo(HANDLE, SE_OBJECT_TYPE, SECURITY_INFORMATION, PSID, + PSID, PACL, PACL); + VOID BuildImpersonateExplicitAccessWithNameA(PEXPLICIT_ACCESS_A, LPSTR, + PTRUSTEE_A, DWORD, ACCESS_MODE, DWORD); + VOID BuildImpersonateExplicitAccessWithNameW(PEXPLICIT_ACCESS_W, LPWSTR, + PTRUSTEE_W, DWORD, ACCESS_MODE, DWORD); + VOID BuildImpersonateTrusteeA(PTRUSTEE_A, PTRUSTEE_A); + VOID BuildImpersonateTrusteeW(PTRUSTEE_W, PTRUSTEE_W); + PTRUSTEE_A GetMultipleTrusteeA(PTRUSTEE_A); + PTRUSTEE_W GetMultipleTrusteeW(PTRUSTEE_W); + MULTIPLE_TRUSTEE_OPERATION GetMultipleTrusteeOperationA(PTRUSTEE_A); + MULTIPLE_TRUSTEE_OPERATION GetMultipleTrusteeOperationW(PTRUSTEE_W); +} + +version (Unicode) { + alias BuildExplicitAccessWithNameW BuildExplicitAccessWithName; + alias BuildSecurityDescriptorW BuildSecurityDescriptor; + alias BuildTrusteeWithNameW BuildTrusteeWithName; + alias BuildTrusteeWithObjectsAndNameW BuildTrusteeWithObjectsAndName; + alias BuildTrusteeWithObjectsAndSidW BuildTrusteeWithObjectsAndSid; + alias BuildTrusteeWithSidW BuildTrusteeWithSid; + alias GetAuditedPermissionsFromAclW GetAuditedPermissionsFromAcl; + alias GetEffectiveRightsFromAclW GetEffectiveRightsFromAcl; + alias GetExplicitEntriesFromAclW GetExplicitEntriesFromAcl; + alias GetNamedSecurityInfoW GetNamedSecurityInfo; + alias GetTrusteeFormW GetTrusteeForm; + alias GetTrusteeNameW GetTrusteeName; + alias GetTrusteeTypeW GetTrusteeType; + alias LookupSecurityDescriptorPartsW LookupSecurityDescriptorParts; + alias SetEntriesInAclW SetEntriesInAcl; + alias SetNamedSecurityInfoW SetNamedSecurityInfo; + alias BuildImpersonateExplicitAccessWithNameW + BuildImpersonateExplicitAccessWithName; + alias BuildImpersonateTrusteeW BuildImpersonateTrustee; + alias GetMultipleTrusteeW GetMultipleTrustee; + alias GetMultipleTrusteeOperationW GetMultipleTrusteeOperation; +} else { + alias BuildExplicitAccessWithNameA BuildExplicitAccessWithName; + alias BuildSecurityDescriptorA BuildSecurityDescriptor; + alias BuildTrusteeWithNameA BuildTrusteeWithName; + alias BuildTrusteeWithObjectsAndNameA BuildTrusteeWithObjectsAndName; + alias BuildTrusteeWithObjectsAndSidA BuildTrusteeWithObjectsAndSid; + alias BuildTrusteeWithSidA BuildTrusteeWithSid; + alias GetAuditedPermissionsFromAclA GetAuditedPermissionsFromAcl; + alias GetEffectiveRightsFromAclA GetEffectiveRightsFromAcl; + alias GetExplicitEntriesFromAclA GetExplicitEntriesFromAcl; + alias GetNamedSecurityInfoA GetNamedSecurityInfo; + alias GetTrusteeFormA GetTrusteeForm; + alias GetTrusteeNameA GetTrusteeName; + alias GetTrusteeTypeA GetTrusteeType; + alias LookupSecurityDescriptorPartsA LookupSecurityDescriptorParts; + alias SetEntriesInAclA SetEntriesInAcl; + alias SetNamedSecurityInfoA SetNamedSecurityInfo; + alias BuildImpersonateExplicitAccessWithNameA + BuildImpersonateExplicitAccessWithName; + alias BuildImpersonateTrusteeA BuildImpersonateTrustee; + alias GetMultipleTrusteeA GetMultipleTrustee; + alias GetMultipleTrusteeOperationA GetMultipleTrusteeOperation; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/aclui.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/aclui.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,120 @@ +/***********************************************************************\ +* aclui.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.aclui; +pragma(lib, "aclui.lib"); + +private import win32.w32api; + +static assert (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500, + "win32.aclui is available only if version WindowsXP, Windows2003 " + "or WindowsVista is set, or both Windows2000 and WindowsNTonly are set"); + +import win32.accctrl, win32.commctrl, win32.objbase; +private import win32.basetyps, win32.prsht, win32.unknwn, win32.windef, + win32.winuser; + + +struct SI_OBJECT_INFO { + DWORD dwFlags; + HINSTANCE hInstance; + LPWSTR pszServerName; + LPWSTR pszObjectName; + LPWSTR pszPageTitle; + GUID guidObjectType; +} +alias SI_OBJECT_INFO* PSI_OBJECT_INFO; + +// values for SI_OBJECT_INFO.dwFlags +const DWORD + SI_EDIT_PERMS = 0x00000000, + SI_EDIT_OWNER = 0x00000001, + SI_EDIT_AUDITS = 0x00000002, + SI_CONTAINER = 0x00000004, + SI_READONLY = 0x00000008, + SI_ADVANCED = 0x00000010, + SI_RESET = 0x00000020, + SI_OWNER_READONLY = 0x00000040, + SI_EDIT_PROPERTIES = 0x00000080, + SI_OWNER_RECURSE = 0x00000100, + SI_NO_ACL_PROTECT = 0x00000200, + SI_NO_TREE_APPLY = 0x00000400, + SI_PAGE_TITLE = 0x00000800, + SI_SERVER_IS_DC = 0x00001000, + SI_RESET_DACL_TREE = 0x00004000, + SI_RESET_SACL_TREE = 0x00008000, + SI_OBJECT_GUID = 0x00010000, + SI_EDIT_EFFECTIVE = 0x00020000, + SI_RESET_DACL = 0x00040000, + SI_RESET_SACL = 0x00080000, + SI_RESET_OWNER = 0x00100000, + SI_NO_ADDITIONAL_PERMISSION = 0x00200000, + SI_MAY_WRITE = 0x10000000, + SI_EDIT_ALL = SI_EDIT_PERMS | SI_EDIT_OWNER + | SI_EDIT_AUDITS; + +struct SI_ACCESS { + CPtr!(GUID) pguid; + ACCESS_MASK mask; + LPCWSTR pszName; + DWORD dwFlags; +} +alias SI_ACCESS* PSI_ACCESS; + +// values for SI_ACCESS.dwFlags +const DWORD + SI_ACCESS_SPECIFIC = 0x00010000, + SI_ACCESS_GENERAL = 0x00020000, + SI_ACCESS_CONTAINER = 0x00040000, + SI_ACCESS_PROPERTY = 0x00080000; + + +struct SI_INHERIT_TYPE { + CPtr!(GUID) pguid; + ULONG dwFlags; + LPCWSTR pszName; +} +alias SI_INHERIT_TYPE* PSI_INHERIT_TYPE; + +/* values for SI_INHERIT_TYPE.dwFlags + INHERIT_ONLY_ACE, CONTAINER_INHERIT_ACE, OBJECT_INHERIT_ACE + defined elsewhere */ + +enum SI_PAGE_TYPE { + SI_PAGE_PERM, + SI_PAGE_ADVPERM, + SI_PAGE_AUDIT, + SI_PAGE_OWNER +} + +const uint PSPCB_SI_INITDIALOG = WM_USER + 1; + +interface ISecurityInformation : IUnknown { + HRESULT GetObjectInformation(PSI_OBJECT_INFO); + HRESULT GetSecurity(SECURITY_INFORMATION, PSECURITY_DESCRIPTOR*, BOOL); + HRESULT SetSecurity(SECURITY_INFORMATION, PSECURITY_DESCRIPTOR); + HRESULT GetAccessRights(CPtr!(GUID), DWORD, PSI_ACCESS*, ULONG*, ULONG*); + HRESULT MapGeneric(CPtr!(GUID), UCHAR*, ACCESS_MASK*); + HRESULT GetInheritTypes(PSI_INHERIT_TYPE*, ULONG*); + HRESULT PropertySheetPageCallback(HWND, UINT, SI_PAGE_TYPE); +} +alias ISecurityInformation* LPSECURITYINFO; + +/* Comment from MinGW + * TODO: ISecurityInformation2, IEffectivePermission, ISecurityObjectTypeInfo + */ + +// FIXME: linkage attribute? +extern (C) /+DECLSPEC_IMPORT+/ extern const IID IID_ISecurityInformation; + +extern (Windows) { + HPROPSHEETPAGE CreateSecurityPage(LPSECURITYINFO psi); + BOOL EditSecurity(HWND hwndOwner, LPSECURITYINFO psi); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/basetsd.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/basetsd.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,129 @@ +/***********************************************************************\ +* basetsd.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.12 * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.basetsd; + +/* This template is used in these modules to declare constant pointer types, + * in order to support both D 1.x and 2.x. + */ +template CPtr(T) { + version (D_Version2) { + // must use mixin so that it doesn't cause a syntax error under D1 + mixin("alias const(T)* CPtr;"); + } else { + alias T* CPtr; + } +} + +// [SnakE 2009-02-23] Moved HANDLE definition here from winnt.d to avoid +// 'forwatd template reference' to CPtr from winnt.d caused by a circular +// import. + +typedef void* HANDLE; + +alias HANDLE* PHANDLE, LPHANDLE; + +version (Win64) { + alias long __int3264; + const ulong ADDRESS_TAG_BIT = 0x40000000000; + + alias long INT_PTR, LONG_PTR; + alias long* PINT_PTR, PLONG_PTR; + alias ulong UINT_PTR, ULONG_PTR, HANDLE_PTR; + alias ulong* PUINT_PTR, PULONG_PTR; + alias int HALF_PTR; + alias int* PHALF_PTR; + alias uint UHALF_PTR; + alias uint* PUHALF_PTR; + + /* *To* functions are conditioned out in MinGW. + * Presumably they're not working/tested yet. Comment: + TODO when WIN64 is here + */ +} else { + alias int __int3264; + const uint ADDRESS_TAG_BIT = 0x80000000; + + alias int INT_PTR, LONG_PTR; + alias int* PINT_PTR, PLONG_PTR; + alias uint UINT_PTR, ULONG_PTR, HANDLE_PTR; + alias uint* PUINT_PTR, PULONG_PTR; + alias short HALF_PTR; + alias short* PHALF_PTR; + alias ushort UHALF_PTR; + alias ushort* PUHALF_PTR; + + uint HandleToUlong(HANDLE h) { return cast(uint) h; } + int HandleToLong(HANDLE h) { return cast(int) h; } + HANDLE LongToHandle(LONG_PTR h) { return cast(HANDLE) h; } + uint PtrToUlong(CPtr!(void) p) { return cast(uint) p; } + uint PtrToUint(CPtr!(void) p) { return cast(uint) p; } + int PtrToInt(CPtr!(void) p) { return cast(int) p; } + ushort PtrToUshort(CPtr!(void) p) { return cast(ushort) p; } + short PtrToShort(CPtr!(void) p) { return cast(short) p; } + void* IntToPtr(int i) { return cast(void*) i; } + void* UIntToPtr(uint ui) { return cast(void*) ui; } + alias IntToPtr LongToPtr; + alias UIntToPtr ULongToPtr; +} + +alias UIntToPtr UintToPtr, UlongToPtr; + +enum : UINT_PTR { + MAXUINT_PTR = UINT_PTR.max +} + +enum : INT_PTR { + MAXINT_PTR = INT_PTR.max, + MININT_PTR = INT_PTR.min +} + +enum : ULONG_PTR { + MAXULONG_PTR = ULONG_PTR.max +} + +enum : LONG_PTR { + MAXLONG_PTR = LONG_PTR.max, + MINLONG_PTR = LONG_PTR.min +} + +enum : UHALF_PTR { + MAXUHALF_PTR = UHALF_PTR.max +} + +enum : HALF_PTR { + MAXHALF_PTR = HALF_PTR.max, + MINHALF_PTR = HALF_PTR.min +} + +alias byte INT8; +alias byte* PINT8; +alias ubyte UINT8; +alias ubyte* PUINT8; + +alias short INT16; +alias short* PINT16; +alias ushort UINT16; +alias ushort* PUINT16; + +alias int LONG32, INT32; +alias int* PLONG32, PINT32; +alias uint ULONG32, DWORD32, UINT32; +alias uint* PULONG32, PDWORD32, PUINT32; + +alias ULONG_PTR SIZE_T, DWORD_PTR; +alias ULONG_PTR* PSIZE_T, PDWORD_PTR; +alias LONG_PTR SSIZE_T; +alias LONG_PTR* PSSIZE_T; + +alias long LONG64, INT64; +alias long* PLONG64, PINT64; +alias ulong ULONG64, DWORD64, UINT64; +alias ulong* PULONG64, PDWORD64, PUINT64; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/basetyps.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/basetyps.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,24 @@ +/***********************************************************************\ +* basetyps.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.basetyps; + +private import win32.windef, win32.basetsd; + +align(1) struct GUID { // size is 16 + DWORD Data1; + WORD Data2; + WORD Data3; + BYTE[8] Data4; +} +alias GUID UUID, IID, CLSID, FMTID, uuid_t; +alias GUID* LPGUID, LPCLSID, LPIID; +alias CPtr!(GUID) REFGUID, REFIID, REFCLSID, REFFMTID; + +alias uint error_status_t, PROPID; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/cderr.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/cderr.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,50 @@ +/***********************************************************************\ +* cderr.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.cderr; + +enum { + CDERR_DIALOGFAILURE = 0xFFFF, + CDERR_GENERALCODES = 0x0000, + CDERR_STRUCTSIZE, + CDERR_INITIALIZATION, + CDERR_NOTEMPLATE, + CDERR_NOHINSTANCE, + CDERR_LOADSTRFAILURE, + CDERR_FINDRESFAILURE, + CDERR_LOADRESFAILURE, + CDERR_LOCKRESFAILURE, + CDERR_MEMALLOCFAILURE, + CDERR_MEMLOCKFAILURE, + CDERR_NOHOOK, + CDERR_REGISTERMSGFAIL, + PDERR_PRINTERCODES = 0x1000, + PDERR_SETUPFAILURE, + PDERR_PARSEFAILURE, + PDERR_RETDEFFAILURE, + PDERR_LOADDRVFAILURE, + PDERR_GETDEVMODEFAIL, + PDERR_INITFAILURE, + PDERR_NODEVICES, + PDERR_NODEFAULTPRN, + PDERR_DNDMMISMATCH, + PDERR_CREATEICFAILURE, + PDERR_PRINTERNOTFOUND, + PDERR_DEFAULTDIFFERENT, + CFERR_CHOOSEFONTCODES = 0x2000, + CFERR_NOFONTS, + CFERR_MAXLESSTHANMIN, + FNERR_FILENAMECODES = 0x3000, + FNERR_SUBCLASSFAILURE, + FNERR_INVALIDFILENAME, + FNERR_BUFFERTOOSMALL, + FRERR_FINDREPLACECODES = 0x4000, + FRERR_BUFFERLENGTHZERO, + CCERR_CHOOSECOLORCODES = 0x5000 +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/cguid.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/cguid.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,13 @@ +/***********************************************************************\ +* cguid.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.cguid; + +private import win32.basetyps; + diff -r 586e4a649642 -r 4a9dcbd9e54f win32/comcat.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/comcat.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,73 @@ +/***********************************************************************\ +* comcat.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.comcat; + +import win32.windows, win32.ole2; +private import win32.basetyps, win32.cguid, win32.objbase, win32.unknwn, + win32.windef, win32.wtypes; + +alias IEnumGUID* LPENUMGUID; + +interface IEnumGUID : IUnknown { + HRESULT Next(ULONG, GUID*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(LPENUMGUID*); +} + +alias GUID CATID; +alias REFGUID REFCATID; +alias GUID_NULL CATID_NULL; +alias IsEqualGUID IsEqualCATID; + +struct CATEGORYINFO { + CATID catid; + LCID lcid; + OLECHAR[128] szDescription; +} +alias CATEGORYINFO* LPCATEGORYINFO; + +alias IEnumGUID IEnumCATID; +alias LPENUMGUID LPENUMCATID; +alias IID_IEnumGUID IID_IEnumCATID; + +alias IEnumGUID IEnumCLSID; +alias LPENUMGUID LPENUMCLSID; +alias IID_IEnumGUID IID_IEnumCLSID; + +interface ICatInformation : IUnknown { + HRESULT EnumCategories(LCID, LPENUMCATEGORYINFO*); + HRESULT GetCategoryDesc(REFCATID, LCID, PWCHAR*); + HRESULT EnumClassesOfCategories(ULONG, CATID*, ULONG, CATID*, + LPENUMCLSID*); + HRESULT IsClassOfCategories(REFCLSID, ULONG, CATID*, ULONG, CATID*); + HRESULT EnumImplCategoriesOfClass(REFCLSID, LPENUMCATID*); + HRESULT EnumReqCategoriesOfClass(REFCLSID, LPENUMCATID*); +} +alias ICatInformation* LPCATINFORMATION; + +interface ICatRegister : IUnknown { + HRESULT RegisterCategories(ULONG, CATEGORYINFO*); + HRESULT UnRegisterCategories(ULONG, CATID*); + HRESULT RegisterClassImplCategories(REFCLSID, ULONG, CATID*); + HRESULT UnRegisterClassImplCategories(REFCLSID, ULONG, CATID*); + HRESULT RegisterClassReqCategories(REFCLSID, ULONG, CATID*); + HRESULT UnRegisterClassReqCategories(REFCLSID, ULONG, CATID*); +} +alias ICatRegister* LPCATREGISTER; + +interface IEnumCATEGORYINFO : IUnknown { + HRESULT Next(ULONG, CATEGORYINFO*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(LPENUMCATEGORYINFO*); +} +alias IEnumCATEGORYINFO* LPENUMCATEGORYINFO; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/commctrl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/commctrl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,5874 @@ +/***********************************************************************\ +* commctrl.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.12 * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.commctrl; +pragma(lib, "comctl32.lib"); + +private import win32.w32api, win32.windef, win32.winuser; +private import win32.winbase; // for SYSTEMTIME +private import win32.objfwd; // for LPSTREAM + +import win32.prsht; + +const COMCTL32_VERSION = 6; + +const TCHAR[] + DRAGLISTMSGSTRING = "commctrl_DragListMsg", + HOTKEY_CLASS = "msctls_hotkey32", + PROGRESS_CLASS = "msctls_progress32", + STATUSCLASSNAME = "msctls_statusbar32", + TOOLBARCLASSNAME = "ToolbarWindow32", + TOOLTIPS_CLASS = "tooltips_class32", + TRACKBAR_CLASS = "msctls_trackbar32", + UPDOWN_CLASS = "msctls_updown32", + ANIMATE_CLASS = "SysAnimate32", + DATETIMEPICK_CLASS = "SysDateTimePick32", + MONTHCAL_CLASS = "SysMonthCal32", + REBARCLASSNAME = "ReBarWindow32", + WC_COMBOBOXEX = "ComboBoxEx32", + WC_IPADDRESS = "SysIPAddress32", + WC_LISTVIEW = "SysListView32", + WC_TABCONTROL = "SysTabControl32", + WC_TREEVIEW = "SysTreeView32", + WC_HEADER = "SysHeader32", + WC_PAGESCROLLER = "SysPager", + WC_NATIVEFONTCTL = "NativeFontCtl", + WC_BUTTON = "Button", + WC_STATIC = "Static", + WC_EDIT = "Edit", + WC_LISTBOX = "ListBox", + WC_COMBOBOX = "ComboBox", + WC_SCROLLBAR = "ScrollBar", + WC_LINKA = "SysLink"; + +enum { + LVM_FIRST = 0x1000, + TV_FIRST = 0x1100, + HDM_FIRST = 0x1200 +} + +enum { + ACM_OPENA = WM_USER + 100, + ACM_PLAY = WM_USER + 101, + ACM_STOP = WM_USER + 102, + ACM_OPENW = WM_USER + 103 +} + +enum { + ACN_START = 1, + ACN_STOP +} + +enum { + CBEIF_TEXT = 0x00000001, + CBEIF_IMAGE = 0x00000002, + CBEIF_SELECTEDIMAGE = 0x00000004, + CBEIF_OVERLAY = 0x00000008, + CBEIF_INDENT = 0x00000010, + CBEIF_LPARAM = 0x00000020, + CBEIF_DI_SETITEM = 0x10000000 +} + +enum { + RBN_FIRST = -831U, + RBN_LAST = -859U, + MCN_FIRST = -750U, + MCN_LAST = -759U, + DTN_FIRST = -760U, + DTN_LAST = -799U, + CBEN_FIRST = -800U, + CBEN_LAST = -830U +} + +enum { + CBEN_INSERTITEM = CBEN_FIRST - 1, + CBEN_DELETEITEM = CBEN_FIRST - 2, + CBEN_BEGINEDIT = CBEN_FIRST - 4, + CBEN_ENDEDITA = CBEN_FIRST - 5, + CBEN_ENDEDITW = CBEN_FIRST - 6 +} + +enum { + CBENF_KILLFOCUS = 1, + CBENF_RETURN, + CBENF_ESCAPE, + CBENF_DROPDOWN // = 4 +} + +const CBEMAXSTRLEN = 260; + +enum { + DL_BEGINDRAG = 1157, + DL_CANCELDRAG = 1160, + DL_DRAGGING = 1158, + DL_DROPPED = 1159, + DL_CURSORSET = 0, + DL_STOPCURSOR = 1, + DL_COPYCURSOR = 2, + DL_MOVECURSOR = 3 +} + +enum { + CCS_TOP = 1, + CCS_NOMOVEY = 2, + CCS_BOTTOM = 3, + CCS_NORESIZE = 4, + CCS_NOPARENTALIGN = 8, + CCS_ADJUSTABLE = 32, + CCS_NODIVIDER = 64 +} +static if (_WIN32_IE >= 0x300) { + enum { + CCS_VERT = 128, + CCS_LEFT = 129, + CCS_NOMOVEX = 130, + CCS_RIGHT = 131 + } +} + +enum { + ACS_CENTER = 0x0001, + ACS_TRANSPARENT = 0x0002, + ACS_AUTOPLAY = 0x0004, + ACS_TIMER = 0x0008 +} + +enum { + PGS_VERT = 0x00000000, + PGS_HORZ = 0x00000001, + PGS_AUTOSCROLL = 0x00000002, + PGS_DRAGNDROP = 0x00000004 +} + +const CMB_MASKED = 2; + +const MINSYSCOMMAND = SC_SIZE; + +enum { + SBT_OWNERDRAW = 0x1000, + SBT_NOBORDERS = 256, + SBT_POPOUT = 512, + SBT_RTLREADING = 1024 +} + +enum { + SB_SETTEXTA = WM_USER + 1, + SB_SETTEXTW = WM_USER + 11, + SB_GETTEXTA = WM_USER + 2, + SB_GETTEXTW = WM_USER + 13, + SB_GETTEXTLENGTHA = WM_USER + 3, + SB_GETTEXTLENGTHW = WM_USER + 12, + SB_SETPARTS = WM_USER + 4, + SB_GETPARTS = WM_USER + 6, + SB_GETBORDERS = WM_USER + 7, + SB_SETMINHEIGHT = WM_USER + 8, + SB_SIMPLE = WM_USER + 9, + SB_GETRECT = WM_USER + 10 +} + +enum { + MSGF_COMMCTRL_BEGINDRAG = 0x4200, + MSGF_COMMCTRL_SIZEHEADER = 0x4201, + MSGF_COMMCTRL_DRAGSELECT = 0x4202, + MSGF_COMMCTRL_TOOLBARCUST = 0x4203 +} + +enum { + ILC_COLOR = 0, + ILC_COLOR4 = 4, + ILC_COLOR8 = 8, + ILC_COLOR16 = 16, + ILC_COLOR24 = 24, + ILC_COLOR32 = 32, + ILC_COLORDDB = 254, + ILC_MASK = 1, + ILC_PALETTE = 2048 +} + +enum { + ILCF_MOVE, + ILCF_SWAP +} + +enum { + ILS_NORMAL = 0, + ILS_GLOW = 1, + ILS_SHADOW = 2, + ILS_SATURATE = 4, + ILS_ALPHA = 8, + ILD_BLEND25 = 2, + ILD_BLEND50 = 4, + ILD_SELECTED = 4, + ILD_BLEND = 4, + ILD_FOCUS = 2, + ILD_MASK = 16, + ILD_NORMAL = 0, + ILD_TRANSPARENT = 1, + ILD_IMAGE = 0x0020, + ILD_ROP = 0x0040, + ILD_OVERLAYMASK = 0x0F00, + ILD_PRESERVEALPHA = 0x1000, + ILD_SCALE = 0x2000, + ILD_DPISCALE = 0x4000 +} + +enum { + HDS_HORZ = 0, + HDS_BUTTONS = 2, + HDS_HIDDEN = 8 +} +static if (_WIN32_IE >= 0x400) { + enum { + HDS_HOTTRACK = 4, + HDS_DRAGDROP = 0x0040, + HDS_FULLDRAG = 0x0080 + } +} +static if (_WIN32_IE >= 0x500) { + enum { + HDS_FILTERBAR = 0x0100 + } +} + +enum { + NM_FIRST = 0, + NM_LAST = -99U, + LVN_FIRST = -100U, + LVN_LAST = -199U, + HDN_FIRST = -300U, + HDN_LAST = -399U, + TVN_FIRST = -400U, + TVN_LAST = -499U, + TTN_FIRST = -520U, + TTN_LAST = -549U, + TCN_FIRST = -550U, + TCN_LAST = -580U, + CDN_FIRST = -601U, /* also in commdlg.h */ + CDN_LAST = -699U, + TBN_FIRST = -700U, + TBN_LAST = -720U, + UDN_FIRST = -721U, + UDN_LAST = -740U +} +/*static if (_WIN32_IE >= 0x300) { + enum { + RBN_FIRST = -831U, + RBN_LAST = -859U, + MCN_FIRST = -750U, + MCN_LAST = -759U, + DTN_FIRST = -760U, + DTN_LAST = -799U, + CBEN_FIRST = -800U, + CBEN_LAST = -830U + } +}*/ +static if (_WIN32_IE >= 0x400) { + enum { + IPN_FIRST = -860U, + IPN_LAST = -879U, + IPN_FIELDCHANGED = IPN_FIRST, + SBN_FIRST = -880U, + SBN_LAST = -899U, + PGN_FIRST = -900U, + PGN_LAST = -950U, + PGN_SCROLL = PGN_FIRST-1, + PGN_CALCSIZE = PGN_FIRST-2 + } +} + +enum { + HDI_WIDTH = 1, + HDI_HEIGHT = 1, + HDI_TEXT = 2, + HDI_FORMAT = 4, + HDI_LPARAM = 8, + HDI_BITMAP = 16 +} +static if (_WIN32_IE >= 0x300) { + enum { + HDI_IMAGE = 32, + HDI_DI_SETITEM = 64, + HDI_ORDER = 128 + } +} +static if (_WIN32_IE >= 0x500) { + enum { + HDI_FILTER = 256 + } +} + +enum { + CBES_EX_NOEDITIMAGE = 0x00000001, + CBES_EX_NOEDITIMAGEINDENT = 0x00000002, + CBES_EX_PATHWORDBREAKPROC = 0x00000004 +} +static if (_WIN32_IE >= 0x400) { + enum { + CBES_EX_NOSIZELIMIT = 0x00000008, + CBES_EX_CASESENSITIVE = 0x00000010, + CBEN_GETDISPINFOA = CBEN_FIRST - 0, + CBEN_GETDISPINFOW = CBEN_FIRST - 7, + CBEN_DRAGBEGINA = CBEN_FIRST - 8, + CBEN_DRAGBEGINW = CBEN_FIRST - 9 + } +} + +enum { + HDF_LEFT, + HDF_RIGHT, + HDF_CENTER, + HDF_JUSTIFYMASK, + HDF_RTLREADING, // = 4 + HDF_OWNERDRAW = 0x8000, + HDF_STRING = 0x4000, + HDF_BITMAP = 0x2000 +} +static if (_WIN32_IE >= 0x300) { + enum { + HDF_BITMAP_ON_RIGHT = 0x1000, + HDF_IMAGE = 0x0800 + } +} + +enum { + CCM_FIRST = 0x2000, + CCM_LAST = CCM_FIRST + 0x200, + CCM_SETBKCOLOR = 8193, + CCM_SETCOLORSCHEME = 8194, + CCM_GETCOLORSCHEME = 8195, + CCM_GETDROPTARGET = 8196, + CCM_SETUNICODEFORMAT = 8197, + CCM_GETUNICODEFORMAT = 8198, + CCM_SETVERSION = 0x2007, + CCM_GETVERSION = 0x2008, + CCM_SETNOTIFYWINDOW = 0x2009 +} + +enum { + HDM_GETITEMCOUNT = HDM_FIRST, + HDM_INSERTITEMA = HDM_FIRST + 1, + HDM_INSERTITEMW = HDM_FIRST + 10, + HDM_DELETEITEM = HDM_FIRST + 2, + HDM_GETITEMA = HDM_FIRST + 3, + HDM_GETITEMW = HDM_FIRST + 11, + HDM_SETITEMA = HDM_FIRST + 4, + HDM_SETITEMW = HDM_FIRST + 12, + HDM_LAYOUT = HDM_FIRST + 5 +} +static if (_WIN32_IE >= 0x300) { + enum { + HDM_GETITEMRECT = HDM_FIRST + 7, + HDM_SETIMAGELIST = HDM_FIRST + 8, + HDM_GETIMAGELIST = HDM_FIRST + 9, + HDM_ORDERTOINDEX = HDM_FIRST + 15, + HDM_CREATEDRAGIMAGE = HDM_FIRST + 16, + HDM_GETORDERARRAY = HDM_FIRST + 17, + HDM_SETORDERARRAY = HDM_FIRST + 18, + HDM_SETHOTDIVIDER = HDM_FIRST + 19 + } +} +static if (_WIN32_IE >= 0x400) { + enum { + HDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT, + HDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT + } +} + +enum { + HHT_NOWHERE = 1, + HHT_ONHEADER = 2, + HHT_ONDIVIDER = 4, + HHT_ONDIVOPEN = 8, + HHT_ABOVE = 256, + HHT_BELOW = 512, + HHT_TORIGHT = 1024, + HHT_TOLEFT = 2048 +} + +enum { + HDM_HITTEST = HDM_FIRST + 6 +} + +enum { + HDN_ITEMCHANGINGA = HDN_FIRST -0, + HDN_ITEMCHANGINGW = HDN_FIRST -20, + HDN_ITEMCHANGEDA = HDN_FIRST -1, + HDN_ITEMCHANGEDW = HDN_FIRST -21, + HDN_ITEMCLICKA = HDN_FIRST -2, + HDN_ITEMCLICKW = HDN_FIRST -22, + HDN_ITEMDBLCLICKA = HDN_FIRST -3, + HDN_ITEMDBLCLICKW = HDN_FIRST -23, + HDN_DIVIDERDBLCLICKA = HDN_FIRST -5, + HDN_DIVIDERDBLCLICKW = HDN_FIRST -25, + HDN_BEGINTRACKA = HDN_FIRST -6, + HDN_BEGINTRACKW = HDN_FIRST -26, + HDN_ENDTRACKA = HDN_FIRST -7, + HDN_ENDTRACKW = HDN_FIRST -27, + HDN_TRACKA = HDN_FIRST -8, + HDN_TRACKW = HDN_FIRST -28 +} +static if (_WIN32_IE >= 0x300) { + enum { + HDN_ENDDRAG = (HDN_FIRST-11), + HDN_BEGINDRAG = (HDN_FIRST-10), + HDN_GETDISPINFOA = (HDN_FIRST-9), + HDN_GETDISPINFOW = (HDN_FIRST-29) + } +} + +static if (_WIN32_IE >= 0x400) { + enum { + HICF_OTHER = 0x00, + HICF_MOUSE = 0x01, + HICF_ARROWKEYS = 0x02, + HICF_ACCELERATOR = 0x04, + HICF_DUPACCEL = 0x08, + HICF_ENTERING = 0x10, + HICF_LEAVING = 0x20, + HICF_RESELECT = 0x40, + HICF_LMOUSE = 0x80, + HICF_TOGGLEDROPDOWN = 0x100 + } +} + +enum { + IPM_CLEARADDRESS = WM_USER + 100, + IPM_SETADDRESS = WM_USER + 101, + IPM_GETADDRESS = WM_USER + 102, + IPM_SETRANGE = WM_USER + 103, + IPM_SETFOCUS = WM_USER + 104, + IPM_ISBLANK = WM_USER + 105 +} + +static if (_WIN32_IE >= 0x500) { + enum { + I_INDENTCALLBACK = -1, + I_IMAGENONE = -2 + } +} + +enum { + TBSTATE_CHECKED = 1, + TBSTATE_PRESSED = 2, + TBSTATE_ENABLED = 4, + TBSTATE_HIDDEN = 8, + TBSTATE_INDETERMINATE = 16, + TBSTATE_WRAP = 32 +} +static if (_WIN32_IE >= 0x300) { + enum { + TBSTATE_ELLIPSES = 0x40 + } +} +static if (_WIN32_IE >= 0x400) { + enum { + TBSTATE_MARKED = 0x0080 + } +} + +enum { + TBSTYLE_BUTTON = 0, + TBSTYLE_SEP = 1, + TBSTYLE_CHECK = 2, + TBSTYLE_GROUP = 4, + TBSTYLE_CHECKGROUP = TBSTYLE_GROUP | TBSTYLE_CHECK +} +static if (_WIN32_IE >= 0x300) { + enum { + TBSTYLE_DROPDOWN = 8 + } +} +static if (_WIN32_IE >= 0x400) { + enum { + TBSTYLE_AUTOSIZE = 16, + TBSTYLE_NOPREFIX = 32 + } +} +enum { + TBSTYLE_TOOLTIPS = 256, + TBSTYLE_WRAPABLE = 512, + TBSTYLE_ALTDRAG = 1024 +} +static if (_WIN32_IE >= 0x300) { + enum { + TBSTYLE_FLAT = 2048, + TBSTYLE_LIST = 4096, + TBSTYLE_CUSTOMERASE = 8192 + } +} +static if (_WIN32_IE >= 0x400) { + enum { + TBSTYLE_REGISTERDROP = 0x4000, + TBSTYLE_TRANSPARENT = 0x8000, + TBSTYLE_EX_DRAWDDARROWS = 0x00000001 + } +} +static if (_WIN32_IE >= 0x501) { + enum { + TBSTYLE_EX_MIXEDBUTTONS = 8, + TBSTYLE_EX_HIDECLIPPEDBUTTONS = 16 + } +} +static if (_WIN32_WINNT >= 0x501) { + enum { + TBSTYLE_EX_DOUBLEBUFFER = 0x80 + } +} + +static if (_WIN32_IE >= 0x500) { + enum { + BTNS_BUTTON = TBSTYLE_BUTTON, + BTNS_SEP = TBSTYLE_SEP, + BTNS_CHECK = TBSTYLE_CHECK, + BTNS_GROUP = TBSTYLE_GROUP, + BTNS_CHECKGROUP = TBSTYLE_CHECKGROUP, + BTNS_DROPDOWN = TBSTYLE_DROPDOWN, + BTNS_AUTOSIZE = TBSTYLE_AUTOSIZE, + BTNS_NOPREFIX = TBSTYLE_NOPREFIX, + BTNS_WHOLEDROPDOWN = 0x0080 + } +} +static if (_WIN32_IE >= 0x501) { + enum { + BTNS_SHOWTEXT = 0x0040 + } +} + +static if (_WIN32_IE >= 0x400) { + enum { + TBCDRF_NOEDGES = 0x10000, + TBCDRF_HILITEHOTTRACK = 0x20000, + TBCDRF_NOOFFSET = 0x40000, + TBCDRF_NOMARK = 0x80000, + TBCDRF_NOETCHEDEFFECT = 0x100000 + } +} + +const HINST_COMMCTRL = cast(HINSTANCE) (-1); + +enum { + IDB_STD_SMALL_COLOR, + IDB_STD_LARGE_COLOR, + IDB_VIEW_SMALL_COLOR = 4, + IDB_VIEW_LARGE_COLOR = 5 +} +static if (_WIN32_IE >= 0x300) { + enum { + IDB_HIST_SMALL_COLOR = 8, + IDB_HIST_LARGE_COLOR = 9 + } +} + +enum { + STD_CUT, + STD_COPY, + STD_PASTE, + STD_UNDO, + STD_REDOW, + STD_DELETE, + STD_FILENEW, + STD_FILEOPEN, + STD_FILESAVE, + STD_PRINTPRE, + STD_PROPERTIES, + STD_HELP, + STD_FIND, + STD_REPLACE, + STD_PRINT // = 14 +} + +enum { + VIEW_LARGEICONS, + VIEW_SMALLICONS, + VIEW_LIST, + VIEW_DETAILS, + VIEW_SORTNAME, + VIEW_SORTSIZE, + VIEW_SORTDATE, + VIEW_SORTTYPE, + VIEW_PARENTFOLDER, + VIEW_NETCONNECT, + VIEW_NETDISCONNECT, + VIEW_NEWFOLDER // = 11 +} + +enum { + TB_ENABLEBUTTON = WM_USER + 1, + TB_CHECKBUTTON, + TB_PRESSBUTTON, + TB_HIDEBUTTON, + TB_INDETERMINATE, // = WM_USER + 5, + TB_ISBUTTONENABLED = WM_USER + 9, + TB_ISBUTTONCHECKED, + TB_ISBUTTONPRESSED, + TB_ISBUTTONHIDDEN, + TB_ISBUTTONINDETERMINATE, // = WM_USER + 13, + TB_SETSTATE = WM_USER + 17, + TB_GETSTATE = WM_USER + 18, + TB_ADDBITMAP = WM_USER + 19, + TB_DELETEBUTTON = WM_USER + 22, + TB_GETBUTTON, + TB_BUTTONCOUNT, + TB_COMMANDTOINDEX, + TB_SAVERESTOREA, + TB_CUSTOMIZE, + TB_ADDSTRINGA, + TB_GETITEMRECT, + TB_BUTTONSTRUCTSIZE, + TB_SETBUTTONSIZE, + TB_SETBITMAPSIZE, + TB_AUTOSIZE, // = WM_USER + 33, + TB_GETTOOLTIPS = WM_USER + 35, + TB_SETTOOLTIPS = WM_USER + 36, + TB_SETPARENT = WM_USER + 37, + TB_SETROWS = WM_USER + 39, + TB_GETROWS, + TB_GETBITMAPFLAGS, + TB_SETCMDID, + TB_CHANGEBITMAP, + TB_GETBITMAP, + TB_GETBUTTONTEXTA, + TB_REPLACEBITMAP, // = WM_USER + 46, + TB_GETBUTTONSIZE = WM_USER + 58, + TB_SETBUTTONWIDTH = WM_USER + 59, + TB_GETBUTTONTEXTW = WM_USER + 75, + TB_SAVERESTOREW = WM_USER + 76, + TB_ADDSTRINGW = WM_USER + 77, +} +static if (_WIN32_IE >= 0x400) { + enum { + TB_MARKBUTTON = WM_USER + 6 + } +} +static if (_WIN32_IE >= 0x400) { + enum { + TB_ISBUTTONHIGHLIGHTED = WM_USER + 14 + } +} +static if (_WIN32_IE >= 0x400) { + enum { + TB_ADDBUTTONSA = WM_USER + 20, + TB_INSERTBUTTONA = WM_USER + 21 + } +} else { + enum { + TB_ADDBUTTONS = WM_USER + 20, + TB_INSERTBUTTON = WM_USER + 21 + } +} +static if (_WIN32_IE >= 0x300) { + enum { + TB_SETINDENT = WM_USER + 47, + TB_SETIMAGELIST, + TB_GETIMAGELIST, + TB_LOADIMAGES, + TB_GETRECT, + TB_SETHOTIMAGELIST, + TB_GETHOTIMAGELIST, + TB_SETDISABLEDIMAGELIST, + TB_GETDISABLEDIMAGELIST, + TB_SETSTYLE, + TB_GETSTYLE, + //TB_GETBUTTONSIZE, + //TB_SETBUTTONWIDTH, + TB_SETMAXTEXTROWS, + TB_GETTEXTROWS // = WM_USER + 61 + } +} +static if (_WIN32_IE >= 0x400) { + enum { + TB_GETOBJECT = WM_USER + 62, + TB_GETBUTTONINFOW, + TB_SETBUTTONINFOW, + TB_GETBUTTONINFOA, + TB_SETBUTTONINFOA, + TB_INSERTBUTTONW, + TB_ADDBUTTONSW, + TB_HITTEST, // = WM_USER + 69 + TB_SETEXTENDEDSTYLE = WM_USER + 84, + TB_GETEXTENDEDSTYLE = WM_USER + 85, + TB_SETDRAWTEXTFLAGS = WM_USER + 70, + TB_GETHOTITEM, + TB_SETHOTITEM, + TB_SETANCHORHIGHLIGHT, + TB_GETANCHORHIGHLIGHT, // = WM_USER + 74 + TB_MAPACCELERATORA = WM_USER + 78, + TB_GETINSERTMARK, + TB_SETINSERTMARK, + TB_INSERTMARKHITTEST, + TB_MOVEBUTTON, + TB_GETMAXSIZE, + //TB_SETEXTENDEDSTYLE, + //TB_GETEXTENDEDSTYLE, + TB_GETPADDING, + TB_SETPADDING, + TB_SETINSERTMARKCOLOR, + TB_GETINSERTMARKCOLOR, + TB_MAPACCELERATORW, + TB_GETSTRINGW, + TB_GETSTRINGA, // = WM_USER + 92 + TB_SETCOLORSCHEME = CCM_SETCOLORSCHEME, + TB_GETCOLORSCHEME = CCM_GETCOLORSCHEME, + TB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT, + TB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT + } +} + +const TBBF_LARGE = 1; + +enum { + TBN_GETBUTTONINFOA = TBN_FIRST -0, + TBN_BEGINDRAG = TBN_FIRST -1, + TBN_ENDDRAG = TBN_FIRST -2, + TBN_BEGINADJUST = TBN_FIRST -3, + TBN_ENDADJUST = TBN_FIRST -4, + TBN_RESET = TBN_FIRST -5, + TBN_QUERYINSERT = TBN_FIRST -6, + TBN_QUERYDELETE = TBN_FIRST -7, + TBN_TOOLBARCHANGE = TBN_FIRST -8, + TBN_CUSTHELP = TBN_FIRST -9 +} +static if (_WIN32_IE >= 0x300) { + enum { + TBN_DROPDOWN = TBN_FIRST - 10 + } +} +static if (_WIN32_IE >= 0x400) { + enum { + TBN_HOTITEMCHANGE = TBN_FIRST - 13, + TBN_DRAGOUT = TBN_FIRST - 14, + TBN_DELETINGBUTTON = TBN_FIRST - 15, + TBN_GETDISPINFOA = TBN_FIRST - 16, + TBN_GETDISPINFOW = TBN_FIRST - 17, + TBN_GETINFOTIPA = TBN_FIRST - 18, + TBN_GETINFOTIPW = TBN_FIRST - 19, + TBN_GETBUTTONINFOW = TBN_FIRST - 20 + } +} +static if (_WIN32_IE >= 0x500) { + enum { + TBN_RESTORE = TBN_FIRST - 21, + TBN_SAVE = TBN_FIRST - 22, + TBN_INITCUSTOMIZE = TBN_FIRST - 23 + } + + enum { + TBNRF_HIDEHELP = 1, + TBNRF_ENDCUSTOMIZE + } + + enum { + TBNF_IMAGE = 1, + TBNF_TEXT = 2, + TBNF_DI_SETITEM = 0x10000000 + } +} + +enum { + TTS_ALWAYSTIP = 1, + TTS_NOPREFIX +} +static if(_WIN32_IE >= 0x500) { + enum { + TTS_NOANIMATE = 0x10, + TTS_NOFADE = 0x20, + TTS_BALLOON = 0x40, + TTS_CLOSE = 0x80 + } +} + +enum { + TTF_IDISHWND = 1, + TTF_CENTERTIP = 2, + TTF_RTLREADING = 4, + TTF_SUBCLASS = 16 +} +static if (_WIN32_IE >= 0x300) { + enum { + TTF_TRACK = 0x0020, + TTF_ABSOLUTE = 0x0080, + TTF_TRANSPARENT = 0x0100, + TTF_DI_SETITEM = 0x8000 + } + + static if (_WIN32_IE >= 0x501) { + enum { + TTF_PARSELINKS = 0x1000 + } + } + + enum { + TBCD_TICS = 1, + TBCD_THUMB, + TBCD_CHANNEL // = 3 + } +} + +static if (_WIN32_IE >= 0x400) { + enum { + TBDDRET_DEFAULT, + TBDDRET_NODEFAULT, + TBDDRET_TREATPRESSED + } + + enum { + TBIMHT_AFTER = 1, + TBIMHT_BACKGROUND + } +} + +enum { + TTDT_AUTOMATIC, + TTDT_RESHOW, + TTDT_AUTOPOP, + TTDT_INITIAL +} + +enum { + TTM_ACTIVATE = WM_USER + 1, + TTM_SETDELAYTIME = WM_USER + 3, + TTM_ADDTOOLA, + TTM_DELTOOLA, + TTM_NEWTOOLRECTA, + TTM_RELAYEVENT, + TTM_GETTOOLINFOA, + TTM_SETTOOLINFOA, + TTM_HITTESTA, + TTM_GETTEXTA, + TTM_UPDATETIPTEXTA, + TTM_GETTOOLCOUNT, + TTM_ENUMTOOLSA, + TTM_GETCURRENTTOOLA, + TTM_WINDOWFROMPOINT, // = WM_USER + 16 + TTM_ADDTOOLW = WM_USER + 50, + TTM_DELTOOLW, + TTM_NEWTOOLRECTW, + TTM_GETTOOLINFOW, + TTM_SETTOOLINFOW, + TTM_HITTESTW, + TTM_GETTEXTW, + TTM_UPDATETIPTEXTW, + TTM_ENUMTOOLSW, + TTM_GETCURRENTTOOLW // = WM_USER + 59 +} + +static if (_WIN32_IE >= 0x300) { + enum { + TTM_TRACKACTIVATE = WM_USER + 17, + TTM_TRACKPOSITION, + TTM_SETTIPBKCOLOR, + TTM_SETTIPTEXTCOLOR, + TTM_GETDELAYTIME, + TTM_GETTIPBKCOLOR, + TTM_GETTIPTEXTCOLOR, + TTM_SETMAXTIPWIDTH, + TTM_GETMAXTIPWIDTH, + TTM_SETMARGIN, + TTM_GETMARGIN, + TTM_POP // = WM_USER + 28 + } +} + +static if (_WIN32_IE >= 0x400) { // IE4.0 ??? + enum { + TTM_UPDATE = WM_USER + 29, + TTM_GETBUBBLESIZE, + TTM_ADJUSTRECT, + TTM_SETTITLEA, + TTM_SETTITLEW // = WM_USER + 33 + } +} + +enum { + TTN_GETDISPINFOA = TTN_FIRST - 0, + TTN_GETDISPINFOW = TTN_FIRST - 10, + TTN_NEEDTEXTA = TTN_GETDISPINFOA, + TTN_NEEDTEXTW = TTN_GETDISPINFOW, + TTN_SHOW = TTN_FIRST-1, + TTN_POP = TTN_FIRST-2 +} + +const UD_MAXVAL = 0x7fff; +const UD_MINVAL = -UD_MAXVAL; + +enum { + UDN_DELTAPOS = UDN_FIRST-1, + UDS_WRAP = 1, + UDS_SETBUDDYINT = 2, + UDS_ALIGNRIGHT = 4, + UDS_ALIGNLEFT = 8, + UDS_AUTOBUDDY = 16, + UDS_ARROWKEYS = 32, + UDS_HORZ = 64, + UDS_NOTHOUSANDS = 128 +} + +static if (_WIN32_IE >= 0x300) { + enum { + UDS_HOTTRACK = 0x0100 + } +} + +enum { + UDM_SETRANGE = WM_USER + 101, + UDM_GETRANGE, + UDM_SETPOS, + UDM_GETPOS, + UDM_SETBUDDY, + UDM_GETBUDDY, + UDM_SETACCEL, + UDM_GETACCEL, + UDM_SETBASE, + UDM_GETBASE // = WM_USER + 110 +} + +static if (_WIN32_IE >= 0x400) { + enum { + UDM_SETRANGE32 = WM_USER + 111, + UDM_GETRANGE32, + UDM_SETPOS32, + UDM_GETPOS32 // = WM_USER + 114 + } +} + +static if (_WIN32_IE >= 0x500) { + enum { + UDM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT, + UDM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT + } +} + +/*enum { + SB_SETTEXTA = WM_USER + 1, + SB_GETTEXTA, + SB_GETTEXTLENGTHA, + SB_SETPARTS, // = WM_USER + 4 + SB_GETPARTS = WM_USER + 6, + SB_GETBORDERS, + SB_SETMINHEIGHT, + SB_SIMPLE, + SB_GETRECT, + SB_SETTEXTW, + SB_GETTEXTLENGTHW, + SB_GETTEXTW // = WM_USER + 13 +}*/ + +/*enum { + SBT_OWNERDRAW = 0x1000, + SBT_NOBORDERS = 256, + SBT_POPOUT = 512, + SBT_RTLREADING = 1024 +}*/ + +static if(_WIN32_IE >= 0x400) { + enum { + SBT_TOOLTIPS = 0x0800, + SBN_SIMPLEMODECHANGE = SBN_FIRST + } +} + +enum { + TBS_AUTOTICKS = 1, + TBS_VERT = 2, + TBS_HORZ = 0, + TBS_TOP = 4, + TBS_BOTTOM = 0, + TBS_LEFT = 4, + TBS_RIGHT = 0, + TBS_BOTH = 8, + TBS_NOTICKS = 16, + TBS_ENABLESELRANGE = 32, + TBS_FIXEDLENGTH = 64, + TBS_NOTHUMB = 128 +} + +static if (_WIN32_IE >= 0x300) { + enum { + TBS_TOOLTIPS = 0x0100, + TBTS_TOP = 0, + TBTS_LEFT, + TBTS_BOTTOM, + TBTS_RIGHT // = 3 + } +} + +static if (_WIN32_IE >= 0x500) { + enum { + TBS_REVERSED = 0x0200 + } +} + +static if (_WIN32_IE >= 0x501) { + enum { + TBS_DOWNISLEFT = 0x0400 + } +} + +static if (_WIN32_IE >= 0x400) { + enum { + TBIF_BYINDEX = 0x80000000, + TBIF_COMMAND = 32, + TBIF_IMAGE = 1, + TBIF_LPARAM = 16, + TBIF_SIZE = 64, + TBIF_STATE = 4, + TBIF_STYLE = 8, + TBIF_TEXT = 2 + } +} + +enum { + TBM_GETPOS = WM_USER, + TBM_GETRANGEMIN, + TBM_GETRANGEMAX, + TBM_GETTIC, + TBM_SETTIC, + TBM_SETPOS, + TBM_SETRANGE, + TBM_SETRANGEMIN, + TBM_SETRANGEMAX, + TBM_CLEARTICS, + TBM_SETSEL, + TBM_SETSELSTART, + TBM_SETSELEND, // = WM_USER+12, + TBM_GETPTICS = WM_USER+14, + TBM_GETTICPOS, + TBM_GETNUMTICS, + TBM_GETSELSTART, + TBM_GETSELEND, + TBM_CLEARSEL, + TBM_SETTICFREQ, + TBM_SETPAGESIZE, + TBM_GETPAGESIZE, + TBM_SETLINESIZE, + TBM_GETLINESIZE, + TBM_GETTHUMBRECT, + TBM_GETCHANNELRECT, + TBM_SETTHUMBLENGTH, + TBM_GETTHUMBLENGTH, + TBM_SETTOOLTIPS, + TBM_GETTOOLTIPS, + TBM_SETTIPSIDE, + TBM_SETBUDDY, + TBM_GETBUDDY, // = WM_USER+33, + TBM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT, + TBM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +} + +enum { + TB_LINEUP, + TB_LINEDOWN, + TB_PAGEUP, + TB_PAGEDOWN, + TB_THUMBPOSITION, + TB_THUMBTRACK, + TB_TOP, + TB_BOTTOM, + TB_ENDTRACK // = 8 +} + +enum { + HOTKEYF_SHIFT = 1, + HOTKEYF_CONTROL = 2, + HOTKEYF_ALT = 4, + HOTKEYF_EXT = 8 +} + +enum { + HKCOMB_NONE = 1, + HKCOMB_S = 2, + HKCOMB_C = 4, + HKCOMB_A = 8, + HKCOMB_SC = 16, + HKCOMB_SA = 32, + HKCOMB_CA = 64, + HKCOMB_SCA = 128 +} + +enum { + HKM_SETHOTKEY = WM_USER + 1, + HKM_GETHOTKEY = WM_USER + 2, + HKM_SETRULES = WM_USER + 3 +} + +enum { + PBM_SETRANGE = WM_USER + 1, + PBM_SETPOS, + PBM_DELTAPOS, + PBM_SETSTEP, + PBM_STEPIT, // = WM_USER + 5 + PBM_SETRANGE32 = 1030, + PBM_GETRANGE, + PBM_GETPOS, + PBM_SETBARCOLOR, // = 1033 + PBM_SETBKCOLOR = CCM_SETBKCOLOR +} + +enum { + PBS_SMOOTH = 1, + PBS_VERTICAL = 4 +} + +enum { + LVS_ICON, + LVS_REPORT, + LVS_SMALLICON, + LVS_LIST, // = 3 + LVS_TYPEMASK = 3, + LVS_SINGLESEL = 4, + LVS_SHOWSELALWAYS = 8, + LVS_SORTASCENDING = 16, + LVS_SORTDESCENDING = 32, + LVS_SHAREIMAGELISTS = 64, + LVS_NOLABELWRAP = 128, + LVS_AUTOARRANGE = 256, + LVS_EDITLABELS = 512, + LVS_NOSCROLL = 0x2000, + LVS_TYPESTYLEMASK = 0xFC00, + LVS_ALIGNTOP = 0, + LVS_ALIGNLEFT = 0x800, + LVS_ALIGNMASK = 0xC00, + LVS_OWNERDRAWFIXED = 0x400, + LVS_NOCOLUMNHEADER = 0x4000, + LVS_NOSORTHEADER = 0x8000 +} + +static if (_WIN32_IE >= 0x300) { + enum { + CDIS_CHECKED = 8, + CDIS_DEFAULT = 32, + CDIS_DISABLED = 4, + CDIS_FOCUS = 16, + CDIS_GRAYED = 2, + CDIS_HOT = 64, + CDIS_SELECTED = 1, + CDIS_MARKED = 128, + CDIS_INDETERMINATE = 256 + } + + static if (_WIN32_WINNT >= 0x501) { + enum { + CDIS_SHOWKEYBOARDCUES = 512 + } + } + + enum { + CDDS_POSTERASE = 4, + CDDS_POSTPAINT = 2, + CDDS_PREERASE = 3, + CDDS_PREPAINT = 1, + CDDS_ITEM = 65536, + CDDS_ITEMPOSTERASE = 65540, + CDDS_ITEMPOSTPAINT = 65538, + CDDS_ITEMPREERASE = 65539, + CDDS_ITEMPREPAINT = 65537 + } + + static if (_WIN32_IE >= 0x400) { + enum { + CDDS_SUBITEM = 0x20000 + } + } + + enum { + CDRF_DODEFAULT = 0x00, + CDRF_NOTIFYITEMDRAW = 0x20, + CDRF_NOTIFYSUBITEMDRAW = 0x20, + CDRF_NOTIFYITEMERASE = 0x80, + CDRF_NOTIFYPOSTERASE = 0x40, + CDRF_NOTIFYPOSTPAINT = 0x10, + CDRF_NEWFONT = 0x02, + CDRF_SKIPDEFAULT = 0x04 + } + + static if (_WIN32_IE >= 0x400) { + enum { + LVBKIF_SOURCE_NONE = 0x00000000, + LVBKIF_SOURCE_HBITMAP = 0x00000001, + LVBKIF_SOURCE_URL = 0x00000002, + LVBKIF_SOURCE_MASK = 0x00000003, + LVBKIF_STYLE_NORMAL = 0x00000000, + LVBKIF_STYLE_TILE = 0x00000010, + LVBKIF_STYLE_MASK = 0x00000010 + } + } + + static if (_WIN32_WINNT >= 0x501) { + enum { + LVBKIF_FLAG_TILEOFFSET = 0x00000100, + LVBKIF_TYPE_WATERMARK = 0x10000000 + } + } + + enum { + LVS_OWNERDATA = 4096 + } + + enum { + LVS_EX_CHECKBOXES = 4, + LVS_EX_FULLROWSELECT = 32, + LVS_EX_GRIDLINES = 1, + LVS_EX_HEADERDRAGDROP = 16, + LVS_EX_ONECLICKACTIVATE = 64, + LVS_EX_SUBITEMIMAGES = 2, + LVS_EX_TRACKSELECT = 8, + LVS_EX_TWOCLICKACTIVATE = 128 + } + + enum { + LVSICF_NOINVALIDATEALL = 0x00000001, + LVSICF_NOSCROLL = 0x00000002 + } + + static if(_WIN32_IE >= 0x400) { + enum { + LVS_EX_FLATSB = 0x00000100, + LVS_EX_REGIONAL = 0x00000200, + LVS_EX_INFOTIP = 0x00000400, + LVS_EX_UNDERLINEHOT = 0x00000800, + LVS_EX_UNDERLINECOLD = 0x00001000, + LVS_EX_MULTIWORKAREAS = 0x00002000 + } + } + + static if(_WIN32_IE >= 0x500) { + enum { + LVS_EX_LABELTIP = 0x00004000, + LVS_EX_BORDERSELECT = 0x00008000 + } + } +} + +enum { + LVSIL_NORMAL, + LVSIL_SMALL, + LVSIL_STATE +} + +enum { + LVM_GETBKCOLOR = LVM_FIRST, + LVM_SETBKCOLOR, + LVM_GETIMAGELIST, + LVM_SETIMAGELIST, + LVM_GETITEMCOUNT, // = LVM_FIRST + 4 + LVM_SORTITEMSEX = LVM_FIRST + 81, + LVM_SETVIEW = LVM_FIRST + 142, + LVM_GETVIEW, // = LVM_FIRST + 143 + LVM_INSERTGROUP = LVM_FIRST + 145, + LVM_SETGROUPINFO = LVM_FIRST + 147, + LVM_GETGROUPINFO = LVM_FIRST + 149, + LVM_REMOVEGROUP, + LVM_MOVEGROUP, // = LVM_FIRST + 151 + LVM_SETGROUPMETRICS = LVM_FIRST + 155, + LVM_GETGROUPMETRICS, + LVM_ENABLEGROUPVIEW, + LVM_SORTGROUPS, + LVM_INSERTGROUPSORTED, + LVM_REMOVEALLGROUPS, + LVM_HASGROUP, + LVM_SETTILEVIEWINFO, + LVM_GETTILEVIEWINFO, + LVM_SETTILEINFO, + LVM_GETTILEINFO, + LVM_SETINSERTMARK, + LVM_GETINSERTMARK, + LVM_INSERTMARKHITTEST, + LVM_GETINSERTMARKRECT, + LVM_SETINSERTMARKCOLOR, + LVM_GETINSERTMARKCOLOR, // = LVM_FIRST + 171 + LVM_SETINFOTIP = LVM_FIRST + 173, + LVM_GETSELECTEDCOLUMN, + LVM_ISGROUPVIEWENABLED, + LVM_GETOUTLINECOLOR, + LVM_SETOUTLINECOLOR, // = LVM_FIRST + 177 + LVM_CANCELEDITLABEL = LVM_FIRST + 179, + LVM_MAPIDTOINDEX = LVM_FIRST + 181 +} + +static if (_WIN32_WINNT >= 0x501) { + enum { + LVM_SETSELECTEDCOLUMN = LVM_FIRST + 140 + } +} + +enum { + LVIF_TEXT = 1, + LVIF_IMAGE = 2, + LVIF_PARAM = 4, + LVIF_STATE = 8 +} + +static if (_WIN32_IE >= 0x300) { + enum { + LVIF_INDENT = 16, + LVIF_NORECOMPUTE = 2048 + } +} + +static if (_WIN32_WINNT >= 0x501) { + enum { + LVIF_GROUPID = 128, + LVIF_COLUMNS = 256 + } +} + +enum { + LVIS_FOCUSED = 1, + LVIS_SELECTED = 2, + LVIS_CUT = 4, + LVIS_DROPHILITED = 8, + LVIS_OVERLAYMASK = 0xF00, + LVIS_STATEIMAGEMASK = 0xF000 +} + +const LPWSTR LPSTR_TEXTCALLBACKW = cast(LPWSTR) -1; +const LPSTR LPSTR_TEXTCALLBACKA = cast(LPSTR) -1; + +const I_IMAGECALLBACK = -1; + +static if(_WIN32_IE >= 0x400) { + enum { + LVM_SETBKIMAGEA = LVM_FIRST + 68, + LVM_SETBKIMAGEW = LVM_FIRST + 138, + LVM_GETBKIMAGEA = LVM_FIRST + 69, + LVM_GETBKIMAGEW = LVM_FIRST + 139, + LV_MAX_WORKAREAS = 16, + LVM_SETWORKAREAS = LVM_FIRST + 65, + LVM_GETWORKAREAS = LVM_FIRST + 70, + LVM_GETNUMBEROFWORKAREAS = LVM_FIRST + 73, + LVM_GETSELECTIONMARK = LVM_FIRST + 66, + LVM_SETSELECTIONMARK = LVM_FIRST + 67, + LVM_SETHOVERTIME = LVM_FIRST + 71, + LVM_GETHOVERTIME = LVM_FIRST + 72, + LVM_SETTOOLTIPS = LVM_FIRST + 74, + LVM_GETTOOLTIPS = LVM_FIRST + 78, + LVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT, + LVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT + } +} + +enum { + LVNI_ALL, + LVNI_FOCUSED = 1, + LVNI_SELECTED = 2, + LVNI_CUT = 4, + LVNI_DROPHILITED = 8, + LVNI_ABOVE = 256, + LVNI_BELOW = 512, + LVNI_TOLEFT = 1024, + LVNI_TORIGHT = 2048 +} + +enum { + LVM_GETITEMA = LVM_FIRST + 5, + LVM_SETITEMA, + LVM_INSERTITEMA, + LVM_DELETEITEM, + LVM_DELETEALLITEMS, + LVM_GETCALLBACKMASK, + LVM_SETCALLBACKMASK, + LVM_GETNEXTITEM, + LVM_FINDITEMA, + LVM_GETITEMRECT, + LVM_SETITEMPOSITION, + LVM_GETITEMPOSITION, + LVM_GETSTRINGWIDTHA, + LVM_HITTEST, + LVM_ENSUREVISIBLE, + LVM_SCROLL, + LVM_REDRAWITEMS, + LVM_ARRANGE, + LVM_EDITLABELA, + LVM_GETEDITCONTROL, + LVM_GETCOLUMNA, + LVM_SETCOLUMNA, + LVM_INSERTCOLUMNA, + LVM_DELETECOLUMN, + LVM_GETCOLUMNWIDTH, + LVM_SETCOLUMNWIDTH, // = LVM_FIRST + 30, + LVM_CREATEDRAGIMAGE = LVM_FIRST + 33, + LVM_GETVIEWRECT, + LVM_GETTEXTCOLOR, + LVM_SETTEXTCOLOR, + LVM_GETTEXTBKCOLOR, + LVM_SETTEXTBKCOLOR, + LVM_GETTOPINDEX, + LVM_GETCOUNTPERPAGE, + LVM_GETORIGIN, + LVM_UPDATE, + LVM_SETITEMSTATE, + LVM_GETITEMSTATE, + LVM_GETITEMTEXTA, + LVM_SETITEMTEXTA, + LVM_SETITEMCOUNT, + LVM_SORTITEMS, + LVM_SETITEMPOSITION32, + LVM_GETSELECTEDCOUNT, + LVM_GETITEMSPACING, + LVM_GETISEARCHSTRINGA, // = LVM_FIRST + 52, + LVM_GETITEMW = LVM_FIRST + 75, + LVM_SETITEMW = LVM_FIRST + 76, + LVM_INSERTITEMW = LVM_FIRST + 77, + LVM_FINDITEMW = LVM_FIRST + 83, + LVM_GETSTRINGWIDTHW = LVM_FIRST + 87, + LVM_GETCOLUMNW = LVM_FIRST + 95, + LVM_SETCOLUMNW = LVM_FIRST + 96, + LVM_INSERTCOLUMNW = LVM_FIRST + 97, + LVM_GETITEMTEXTW = LVM_FIRST + 115, + LVM_SETITEMTEXTW, + LVM_GETISEARCHSTRINGW, + LVM_EDITLABELW // = LVM_FIRST + 118, +} + +static if (_WIN32_IE >= 0x300) { + enum { + LVM_GETHEADER = LVM_FIRST + 31, + LVM_SETICONSPACING = LVM_FIRST + 53, + LVM_SETEXTENDEDLISTVIEWSTYLE, + LVM_GETEXTENDEDLISTVIEWSTYLE, + LVM_GETSUBITEMRECT, + LVM_SUBITEMHITTEST, + LVM_SETCOLUMNORDERARRAY, + LVM_GETCOLUMNORDERARRAY, + LVM_SETHOTITEM, + LVM_GETHOTITEM, + LVM_SETHOTCURSOR, + LVM_GETHOTCURSOR, + LVM_APPROXIMATEVIEWRECT // = LVM_FIRST + 64, + } +} + +enum { + LVFI_PARAM = 1, + LVFI_STRING = 2, + LVFI_PARTIAL = 8, + LVFI_WRAP = 32, + LVFI_NEARESTXY = 64 +} + +enum { + LVIF_DI_SETITEM = 0x1000 +} + +enum { + LVIR_BOUNDS, + LVIR_ICON, + LVIR_LABEL, + LVIR_SELECTBOUNDS // = 3 +} + +enum { + LVHT_NOWHERE = 1, + LVHT_ONITEMICON = 2, + LVHT_ONITEMLABEL = 4, + LVHT_ONITEMSTATEICON = 8, + LVHT_ONITEM = LVHT_ONITEMICON | LVHT_ONITEMLABEL + | LVHT_ONITEMSTATEICON, + LVHT_ABOVE = 8, + LVHT_BELOW = 16, + LVHT_TORIGHT = 32, + LVHT_TOLEFT = 64 +} + +enum { + LVA_DEFAULT = 0, + LVA_ALIGNLEFT = 1, + LVA_ALIGNTOP = 2, + LVA_SNAPTOGRID = 5 +} + +enum { + LVCF_FMT = 1, + LVCF_WIDTH = 2, + LVCF_TEXT = 4, + LVCF_SUBITEM = 8 +} + +static if (_WIN32_IE >= 0x300) { + enum { + LVCF_IMAGE = 16, + LVCF_ORDER = 32 + } +} + +enum { + LVCFMT_LEFT, + LVCFMT_RIGHT, + LVCFMT_CENTER, + LVCFMT_JUSTIFYMASK // = 3 +} + +static if (_WIN32_IE >= 0x300) { + enum { + LVCFMT_IMAGE = 2048, + LVCFMT_BITMAP_ON_RIGHT = 4096, + LVCFMT_COL_HAS_IMAGES = 32768 + } +} + +enum { + LVSCW_AUTOSIZE = -1, + LVSCW_AUTOSIZE_USEHEADER = -2 +} + +enum { + LVN_ITEMCHANGING = LVN_FIRST, + LVN_ITEMCHANGED = LVN_FIRST - 1, + LVN_INSERTITEM = LVN_FIRST - 2, + LVN_DELETEITEM = LVN_FIRST - 3, + LVN_DELETEALLITEMS = LVN_FIRST - 4, + LVN_BEGINLABELEDITA = LVN_FIRST - 5, + LVN_ENDLABELEDITA = LVN_FIRST - 6, + LVN_COLUMNCLICK = LVN_FIRST - 8, + LVN_BEGINDRAG = LVN_FIRST - 9, + LVN_BEGINRDRAG = LVN_FIRST - 11, + LVN_GETDISPINFOA = LVN_FIRST - 50, + LVN_SETDISPINFOA = LVN_FIRST - 51, + LVN_KEYDOWN = LVN_FIRST - 55, + LVN_BEGINLABELEDITW = LVN_FIRST - 75, + LVN_ENDLABELEDITW = LVN_FIRST - 76, + LVN_GETDISPINFOW = LVN_FIRST - 77, + LVN_SETDISPINFOW = LVN_FIRST - 78 +} + +static if (_WIN32_IE >= 0x400) { + enum { + LVN_MARQUEEBEGIN = LVN_FIRST - 56, + LVN_GETINFOTIPA = LVN_FIRST - 57, + LVN_GETINFOTIPW = LVN_FIRST - 58, + LVKF_ALT = 1, + LVKF_CONTROL = 2, + LVKF_SHIFT = 4, + LVGIT_UNFOLDED = 1 + } +} + +enum { + TVS_HASBUTTONS = 1, + TVS_HASLINES = 2, + TVS_LINESATROOT = 4, + TVS_EDITLABELS = 8, + TVS_DISABLEDRAGDROP = 16, + TVS_SHOWSELALWAYS = 32 +} + +static if (_WIN32_IE >= 0x300) { + enum { + TVS_RTLREADING = 64, + TVS_NOTOOLTIPS = 128, + TVS_CHECKBOXES = 256, + TVS_TRACKSELECT = 512 + } +} + +static if (_WIN32_IE >= 0x400) { + enum { + TVS_SINGLEEXPAND = 1024, + TVS_INFOTIP = 2048, + TVS_FULLROWSELECT = 4096, + TVS_NOSCROLL = 8192, + TVS_NONEVENHEIGHT = 16384 + } +} + +static if (_WIN32_IE >= 0x500) { + enum { + TVS_NOHSCROLL = 0x8000 + } +} + +enum { + TVIF_TEXT = 1, + TVIF_IMAGE = 2, + TVIF_PARAM = 4, + TVIF_STATE = 8, + TVIF_HANDLE = 16, + TVIF_SELECTEDIMAGE = 32, + TVIF_CHILDREN = 64 +} + +static if (_WIN32_IE >= 0x400) { + enum { + TVIF_INTEGRAL = 0x0080 + } +} + +enum { + TVIS_FOCUSED = 1, + TVIS_SELECTED = 2, + TVIS_CUT = 4, + TVIS_DROPHILITED = 8, + TVIS_BOLD = 16, + TVIS_EXPANDED = 32, + TVIS_EXPANDEDONCE = 64, + TVIS_OVERLAYMASK = 0xF00, + TVIS_STATEIMAGEMASK = 0xF000, + TVIS_USERMASK = 0xF000 +} + +enum { + I_CHILDRENCALLBACK = -1 +} + +alias HANDLE HTREEITEM; + +const HTREEITEM + TVI_ROOT = cast(HTREEITEM) 0xFFFF0000, + TVI_FIRST = cast(HTREEITEM) 0xFFFF0001, + TVI_LAST = cast(HTREEITEM) 0xFFFF0002, + TVI_SORT = cast(HTREEITEM) 0xFFFF0003; + +enum { + TVSIL_NORMAL = 0, + TVSIL_STATE = 2 +} + +enum { + TVM_INSERTITEMA = TV_FIRST, + TVM_DELETEITEM = TV_FIRST + 1, + TVM_EXPAND = TV_FIRST + 2, + TVM_GETITEMRECT = TV_FIRST + 4, + TVM_GETCOUNT, + TVM_GETINDENT, + TVM_SETINDENT, + TVM_GETIMAGELIST, + TVM_SETIMAGELIST, + TVM_GETNEXTITEM, + TVM_SELECTITEM, + TVM_GETITEMA, + TVM_SETITEMA, + TVM_EDITLABELA, + TVM_GETEDITCONTROL, + TVM_GETVISIBLECOUNT, + TVM_HITTEST, + TVM_CREATEDRAGIMAGE, + TVM_SORTCHILDREN, + TVM_ENSUREVISIBLE, + TVM_SORTCHILDRENCB, + TVM_ENDEDITLABELNOW, + TVM_GETISEARCHSTRINGA, // = TV_FIRST + 23 + TVM_INSERTITEMW = TV_FIRST + 50, + TVM_GETITEMW = TV_FIRST + 62, + TVM_SETITEMW = TV_FIRST + 63, + TVM_GETISEARCHSTRINGW = TV_FIRST + 64, + TVM_EDITLABELW = TV_FIRST + 65 +} + +static if (_WIN32_IE >= 0x300) { + enum { + TVM_GETTOOLTIPS = TV_FIRST + 25, + TVM_SETTOOLTIPS = TV_FIRST + 24 + } +} + +static if (_WIN32_IE >= 0x400) { + enum { + TVM_SETINSERTMARK = TV_FIRST + 26, + TVM_SETITEMHEIGHT, + TVM_GETITEMHEIGHT, + TVM_SETBKCOLOR, + TVM_SETTEXTCOLOR, + TVM_GETBKCOLOR, + TVM_GETTEXTCOLOR, + TVM_SETSCROLLTIME, + TVM_GETSCROLLTIME, // = TV_FIRST + 34 + TVM_SETINSERTMARKCOLOR = TV_FIRST + 37, + TVM_GETINSERTMARKCOLOR = TV_FIRST + 38, + TVM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT, + TVM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT + } +} + +static if (_WIN32_IE >= 0x500) { + enum { + TVM_GETITEMSTATE = TV_FIRST + 39, + TVM_SETLINECOLOR = TV_FIRST + 40, + TVM_GETLINECOLOR = TV_FIRST + 41 + } +} + +enum { + TVE_COLLAPSE = 1, + TVE_EXPAND = 2, + TVE_TOGGLE = 3, + TVE_COLLAPSERESET = 0x8000 +} + +static if (_WIN32_IE >= 0x300) { + enum { + TVE_EXPANDPARTIAL = 0x4000 + } +} + +enum { + TVC_UNKNOWN, + TVC_BYMOUSE, + TVC_BYKEYBOARD // = 2 +} + +enum { + TVGN_ROOT, + TVGN_NEXT, + TVGN_PREVIOUS, + TVGN_PARENT, + TVGN_CHILD, + TVGN_FIRSTVISIBLE, + TVGN_NEXTVISIBLE, + TVGN_PREVIOUSVISIBLE, + TVGN_DROPHILITE, + TVGN_CARET // = 9 +} + +static if (_WIN32_IE >= 0x400) { + enum { + TVGN_LASTVISIBLE = 10 + } +} + +enum { + TVN_SELCHANGINGA = TVN_FIRST - 1, + TVN_SELCHANGEDA = TVN_FIRST - 2, + TVN_GETDISPINFOA = TVN_FIRST - 3, + TVN_SETDISPINFOA = TVN_FIRST - 4, + TVN_ITEMEXPANDINGA = TVN_FIRST - 5, + TVN_ITEMEXPANDEDA = TVN_FIRST - 6, + TVN_BEGINDRAGA = TVN_FIRST - 7, + TVN_BEGINRDRAGA = TVN_FIRST - 8, + TVN_DELETEITEMA = TVN_FIRST - 9, + TVN_BEGINLABELEDITA = TVN_FIRST - 10, + TVN_ENDLABELEDITA = TVN_FIRST - 11, + TVN_KEYDOWN = TVN_FIRST - 12, + TVN_SELCHANGINGW = TVN_FIRST - 50, + TVN_SELCHANGEDW = TVN_FIRST - 51, + TVN_GETDISPINFOW = TVN_FIRST - 52, + TVN_SETDISPINFOW = TVN_FIRST - 53, + TVN_ITEMEXPANDINGW = TVN_FIRST - 54, + TVN_ITEMEXPANDEDW = TVN_FIRST - 55, + TVN_BEGINDRAGW = TVN_FIRST - 56, + TVN_BEGINRDRAGW = TVN_FIRST - 57, + TVN_DELETEITEMW = TVN_FIRST - 58, + TVN_BEGINLABELEDITW = TVN_FIRST - 59, + TVN_ENDLABELEDITW = TVN_FIRST - 60 +} + +static if (_WIN32_IE >= 0x400) { + enum { + TVNRET_DEFAULT = 0, + TVNRET_SKIPOLD = 1, + TVNRET_SKIPNEW = 2, + TVN_GETINFOTIPA = TVN_FIRST - 13, + TVN_GETINFOTIPW = TVN_FIRST - 14, + TVN_SINGLEEXPAND = TVN_FIRST - 15 + } +} + +enum { + TVIF_DI_SETITEM = 0x1000 +} + +enum { + TVHT_NOWHERE = 1, + TVHT_ONITEMICON = 2, + TVHT_ONITEMLABEL = 4, + TVHT_ONITEMINDENT = 8, + TVHT_ONITEMBUTTON = 16, + TVHT_ONITEMRIGHT = 32, + TVHT_ONITEMSTATEICON = 64, + TVHT_ABOVE = 256, + TVHT_BELOW = 512, + TVHT_TORIGHT = 1024, + TVHT_TOLEFT = 2048, + TCHT_NOWHERE = 1, + TCHT_ONITEMICON = 2, + TCHT_ONITEMLABEL = 4, + TVHT_ONITEM = TVHT_ONITEMICON | TVHT_ONITEMLABEL + | TVHT_ONITEMSTATEICON, + TCHT_ONITEM = TCHT_ONITEMICON | TCHT_ONITEMLABEL +} + +enum { + TCS_TABS = 0, + TCS_RIGHTJUSTIFY = 0, + TCS_SINGLELINE = 0, + TCS_FORCEICONLEFT = 16, + TCS_FORCELABELLEFT = 32, + TCS_BUTTONS = 256, + TCS_MULTILINE = 512, + TCS_FIXEDWIDTH = 1024, + TCS_RAGGEDRIGHT = 2048, + TCS_FOCUSONBUTTONDOWN = 0x1000, + TCS_OWNERDRAWFIXED = 0x2000, + TCS_TOOLTIPS = 0x4000, + TCS_FOCUSNEVER = 0x8000 +} + +static if (_WIN32_IE >= 0x300) { + enum { + TCS_BOTTOM = 2, + TCS_RIGHT = 2, + TCS_VERTICAL = 128, + TCS_SCROLLOPPOSITE = 0x0001, + TCS_HOTTRACK = 0x0040, + TCS_MULTISELECT = 0x0004 + } +} + +static if(_WIN32_IE >= 0x400) { + enum { + TCS_FLATBUTTONS = 0x0008, + TCS_EX_FLATSEPARATORS = 0x00000001, + TCS_EX_REGISTERDROP = 0x00000002 + } +} + +enum { + TCIF_TEXT = 1, + TCIF_IMAGE = 2, + TCIF_RTLREADING = 4, + TCIF_PARAM = 8 +} + +static if (_WIN32_IE >= 0x400) { + enum { + TCIF_STATE = 16 + } +} + +enum { + TCIS_BUTTONPRESSED = 1 +} + +static if (_WIN32_IE >= 0x400) { + enum { + TCIS_HIGHLIGHTED = 2 + } +} + +enum { + TCM_FIRST = 0x1300, + TCM_GETIMAGELIST = TCM_FIRST + 2, + TCM_SETIMAGELIST, + TCM_GETITEMCOUNT, + TCM_GETITEMA, + TCM_SETITEMA, + TCM_INSERTITEMA, + TCM_DELETEITEM, + TCM_DELETEALLITEMS, + TCM_GETITEMRECT, + TCM_GETCURSEL, + TCM_SETCURSEL, + TCM_HITTEST, + TCM_SETITEMEXTRA, // = TCM_FIRST + 14 + TCM_ADJUSTRECT = TCM_FIRST + 40, + TCM_SETITEMSIZE, + TCM_REMOVEIMAGE, + TCM_SETPADDING, + TCM_GETROWCOUNT, + TCM_GETTOOLTIPS, + TCM_SETTOOLTIPS, + TCM_GETCURFOCUS, + TCM_SETCURFOCUS, + TCM_SETMINTABWIDTH, + TCM_DESELECTALL, // = TCM_FIRST + 50 + TCM_GETITEMW = TCM_FIRST + 60, + TCM_SETITEMW = TCM_FIRST + 61, + TCM_INSERTITEMW = TCM_FIRST + 62 +} + +static if (_WIN32_IE >=0x0400) { + enum { + TCM_HIGHLIGHTITEM = TCM_FIRST + 51, + TCM_SETEXTENDEDSTYLE = TCM_FIRST + 52, + TCM_GETEXTENDEDSTYLE = TCM_FIRST + 53, + TCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT, + TCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT + } +} + +enum { + TCN_KEYDOWN = TCN_FIRST, + TCN_SELCHANGE = TCN_FIRST - 1, + TCN_SELCHANGING = TCN_FIRST - 2 +} + +enum { + NM_OUTOFMEMORY = NM_FIRST - 1, + NM_CLICK = NM_FIRST - 2, + NM_DBLCLK = NM_FIRST - 3, + NM_RETURN = NM_FIRST - 4, + NM_RCLICK = NM_FIRST - 5, + NM_RDBLCLK = NM_FIRST - 6, + NM_SETFOCUS = NM_FIRST - 7, + NM_KILLFOCUS = NM_FIRST - 8, + NM_CUSTOMDRAW = NM_FIRST - 12, + NM_HOVER = NM_FIRST - 13, + NM_NCHITTEST = NM_FIRST - 14, + NM_KEYDOWN = NM_FIRST - 15, + NM_RELEASEDCAPTURE = NM_FIRST - 16, + NM_SETCURSOR = NM_FIRST - 17, + NM_CHAR = NM_FIRST - 18, + NM_TOOLTIPSCREATED = NM_FIRST - 19 +} + +enum { + SBARS_SIZEGRIP = 256 +} + +/*enum { + CCM_FIRST = 0x2000, + CCM_LAST = CCM_FIRST + 0x200, + CCM_SETBKCOLOR = 8193, + CCM_SETCOLORSCHEME = 8194, + CCM_GETCOLORSCHEME = 8195, + CCM_GETDROPTARGET = 8196, + CCM_SETUNICODEFORMAT = 8197, + CCM_GETUNICODEFORMAT = 8198, + CCM_SETVERSION = 0x2007, + CCM_GETVERSION = 0x2008, + CCM_SETNOTIFYWINDOW = 0x2009 +}*/ + +static if (_WIN32_WINNT >= 0x501) { + enum { + CCM_SETWINDOWTHEME = 0x200b, + CCM_DPISCALE = 0x200c + } +} + +enum { + ICC_LISTVIEW_CLASSES = 1, + ICC_TREEVIEW_CLASSES = 2, + ICC_BAR_CLASSES = 4, + ICC_TAB_CLASSES = 8, + ICC_UPDOWN_CLASS = 16, + ICC_PROGRESS_CLASS = 32, + ICC_HOTKEY_CLASS = 64, + ICC_ANIMATE_CLASS = 128, + ICC_WIN95_CLASSES = 255, + ICC_DATE_CLASSES = 256, + ICC_USEREX_CLASSES = 512, + ICC_COOL_CLASSES = 1024 +} + +static if (_WIN32_IE >= 0x400) { + enum { + INFOTIPSIZE = 1024, + ICC_INTERNET_CLASSES = 2048, + ICC_PAGESCROLLER_CLASS = 4096, + ICC_NATIVEFNTCTL_CLASS = 8192 + } +} + +static if (_WIN32_WINNT >= 0x501) { + enum { + ICC_STANDARD_CLASSES = 0x00004000, + ICC_LINK_CLASS = 0x00008000 + } +} + +enum { + GDTR_MIN = 1, + GDTR_MAX = 2 +} + +enum { + GMR_VISIBLE, + GMR_DAYSTATE +} + +enum { + GDT_ERROR = -1, + GDT_VALID = 0, + GDT_NONE = 1 +} + +enum { + DTS_SHORTDATEFORMAT = 0, + DTS_UPDOWN = 1, + DTS_SHOWNONE = 2, + DTS_LONGDATEFORMAT = 4, + DTS_TIMEFORMAT = 9, + DTS_APPCANPARSE = 16, + DTS_RIGHTALIGN = 32 +} + +static if (_WIN32_IE >= 0x500) { + enum { + DTS_SHORTDATECENTURYFORMAT = 0x000C + } +} + +enum { + MCS_DAYSTATE = 1, + MCS_MULTISELECT = 2, + MCS_WEEKNUMBERS = 4 +} + +static if (_WIN32_IE >= 0x400) { + enum { + MCS_NOTODAYCIRCLE = 0x0008, + MCS_NOTODAY = 0x0010 + } +} else { + enum { + MCS_NOTODAY = 0x0008 + } +} + +enum { + DTM_GETSYSTEMTIME = 0x1001, + DTM_SETSYSTEMTIME = 0x1002, + DTM_GETRANGE = 0x1003, + DTM_SETRANGE = 0x1004, + DTM_SETFORMATA = 0x1005, + DTM_SETMCCOLOR = 0x1006, + DTM_GETMCCOLOR = 0x1007, + DTM_GETMONTHCAL = 0x1008, + DTM_SETMCFONT = 0x1009, + DTM_GETMCFONT = 0x100a, + DTM_SETFORMATW = 0x1050 +} + +enum { + DTN_USERSTRINGA = -758U, + DTN_USERSTRINGW = -745U, + DTN_WMKEYDOWNA = -757U, + DTN_WMKEYDOWNW = -744U, + DTN_FORMATA = -756U, + DTN_FORMATW = -743U, + DTN_FORMATQUERYA = -755U, + DTN_FORMATQUERYW = -742U, + DTN_DROPDOWN = -754U, + DTN_CLOSEUP = -753U, + DTN_DATETIMECHANGE = -759U, +} + +enum { + MCM_GETCURSEL = 0x1001, + MCM_SETCURSEL = 0x1002, + MCM_GETMAXSELCOUNT = 0x1003, + MCM_SETMAXSELCOUNT = 0x1004, + MCM_GETSELRANGE = 0x1005, + MCM_SETSELRANGE = 0x1006, + MCM_GETMONTHRANGE = 0x1007, + MCM_SETDAYSTATE = 0x1008, + MCM_GETMINREQRECT = 0x1009, + MCM_SETCOLOR = 0x100a, + MCM_GETCOLOR = 0x100b, + MCM_SETTODAY = 0x100c, + MCM_GETTODAY = 0x100d, + MCM_HITTEST = 0x100e, + MCM_SETFIRSTDAYOFWEEK = 0x100f, + MCM_GETFIRSTDAYOFWEEK = 0x1010, + MCM_GETRANGE = 0x1011, + MCM_SETRANGE = 0x1012, + MCM_GETMONTHDELTA = 0x1013, + MCM_SETMONTHDELTA = 0x1014, + MCM_GETMAXTODAYWIDTH = 0x1015, + MCM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT, + MCM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT +} + +enum { + MCN_SELCHANGE = -749U, + MCN_GETDAYSTATE = -747U, + MCN_SELECT = -746U +} + +enum { + ODT_HEADER = 100, + ODT_TAB, + ODT_LISTVIEW // = 102 +} + +enum { + SB_SETBKCOLOR = 0x2001 +} + +static if (_WIN32_IE >= 0x300) { + enum { + SB_ISSIMPLE = 1038 + } + + enum { + MCSC_BACKGROUND, + MCSC_TEXT, + MCSC_TITLEBK, + MCSC_TITLETEXT, + MCSC_MONTHBK, + MCSC_TRAILINGTEXT // = 5 + } +} + +static if (_WIN32_IE >= 0x400) { + enum { + MCHT_TITLE = 0x10000, + MCHT_CALENDAR = 0x20000, + MCHT_TODAYLINK = 0x30000, + MCHT_NEXT = 0x1000000, + MCHT_PREV = 0x2000000, + MCHT_NOWHERE = 0x00, + MCHT_TITLEBK = MCHT_TITLE, + MCHT_TITLEMONTH = MCHT_TITLE | 0x0001, + MCHT_TITLEYEAR = MCHT_TITLE | 0x0002, + MCHT_TITLEBTNNEXT = MCHT_TITLE | MCHT_NEXT | 0x0003, + MCHT_TITLEBTNPREV = MCHT_TITLE | MCHT_PREV | 0x0003, + MCHT_CALENDARBK = MCHT_CALENDAR, + MCHT_CALENDARDATE = MCHT_CALENDAR | 0x0001, + MCHT_CALENDARDATENEXT = MCHT_CALENDARDATE | MCHT_NEXT, + MCHT_CALENDARDATEPREV = MCHT_CALENDARDATE | MCHT_PREV, + MCHT_CALENDARDAY = MCHT_CALENDAR | 0x0002, + MCHT_CALENDARWEEKNUM = MCHT_CALENDAR | 0x0003 + } +} + +enum { + RBS_TOOLTIPS = 256, + RBS_VARHEIGHT = 512, + RBS_BANDBORDERS = 1024, + RBS_FIXEDORDER = 2048 +} + +enum { + RBIM_IMAGELIST = 1 +} + +enum { + RB_SETCOLORSCHEME = CCM_SETCOLORSCHEME, + RB_GETCOLORSCHEME = CCM_GETCOLORSCHEME +} + +enum { + RBBS_BREAK = 0x0001, + RBBS_FIXEDSIZE = 0x0002, + RBBS_CHILDEDGE = 0x0004, + RBBS_HIDDEN = 0x0008, + RBBS_NOVERT = 0x0010, + RBBS_FIXEDBMP = 0x0020, + RBBS_VARIABLEHEIGHT = 0x0040, + RBBS_GRIPPERALWAYS = 0x0080, + RBBS_NOGRIPPER = 0x0100 +} + +static if (_WIN32_IE >= 0x500) { + enum { + RBBS_USECHEVRON = 0x0200 + } +} + +static if (_WIN32_IE >= 0x501) { + enum { + RBBS_HIDETITLE = 0x0400, + RBBS_TOPALIGN = 0x0800 + } +} + +enum { + RBBIM_STYLE = 1, + RBBIM_COLORS = 2, + RBBIM_TEXT = 4, + RBBIM_IMAGE = 8, + RBBIM_CHILD = 16, + RBBIM_CHILDSIZE = 32, + RBBIM_SIZE = 64, + RBBIM_BACKGROUND = 128, + RBBIM_ID = 256 +} + +enum { + RB_INSERTBANDA = WM_USER + 1, + RB_DELETEBAND, + RB_GETBARINFO, + RB_SETBARINFO, // = WM_USER + 4 + RB_SETBANDINFOA = WM_USER + 6, + RB_SETPARENT = WM_USER + 7, + RB_INSERTBANDW = WM_USER + 10, + RB_SETBANDINFOW, + RB_GETBANDCOUNT, + RB_GETROWCOUNT, + RB_GETROWHEIGHT // = WM_USER + 14, +} + +enum { + RBN_HEIGHTCHANGE = RBN_FIRST +} + +static if (_WIN32_IE >= 0x300) { + enum { + LVN_ODCACHEHINT = LVN_FIRST - 13, + LVN_ODFINDITEMA = LVN_FIRST - 52, + LVN_ODFINDITEMW = LVN_FIRST - 79, + LVN_ITEMACTIVATE = LVN_FIRST - 14, + LVN_ODSTATECHANGED = LVN_FIRST - 15 + } + + version (Unicode) { + enum { + LVN_ODFINDITEM = LVN_ODFINDITEMW + } + } else { + enum { + LVN_ODFINDITEM = LVN_ODFINDITEMA + } + } +} + +static if (_WIN32_IE >= 0x400) { + enum { + SB_SETICON = 1039, + SB_SETTIPTEXTA, + SB_SETTIPTEXTW, + SB_GETTIPTEXTA, + SB_GETTIPTEXTW, + SB_GETICON, // = 1044 + SB_SETUNICODEFORMAT = 0x2005, + SB_GETUNICODEFORMAT = 0x2006 + } + + enum { + PGF_INVISIBLE = 0, + PGF_NORMAL = 1, + PGF_GRAYED = 2, + PGF_DEPRESSED = 4, + PGF_HOT = 8 + } + + enum { + PGB_TOPORLEFT, + PGB_BOTTOMORRIGHT + } + + enum { + PGF_SCROLLUP = 1, + PGF_SCROLLDOWN = 2, + PGF_SCROLLLEFT = 4, + PGF_SCROLLRIGHT = 8 + } + + enum { + PGK_SHIFT = 1, + PGK_CONTROL = 2, + PGK_MENU = 4 + } + + enum { + PGF_CALCWIDTH = 1, + PGF_CALCHEIGHT = 2 + } + + enum { + PGM_FIRST = 0x1400, + PGM_SETCHILD = PGM_FIRST + 1, + PGM_RECALCSIZE, + PGM_FORWARDMOUSE, + PGM_SETBKCOLOR, + PGM_GETBKCOLOR, + PGM_SETBORDER, + PGM_GETBORDER, + PGM_SETPOS, + PGM_GETPOS, + PGM_SETBUTTONSIZE, + PGM_GETBUTTONSIZE, + PGM_GETBUTTONSTATE, // = PGM_FIRST + 12 + PGM_GETDROPTARGET = CCM_GETDROPTARGET + } + + enum { + RBS_REGISTERDROP = 4096, + RBS_AUTOSIZE = 8192, + RBS_VERTICALGRIPPER = 16384, + RBS_DBLCLKTOGGLE = 32768 + } + + enum { + RBBIM_IDEALSIZE = 512, + RBBIM_LPARAM = 1024, + RBBIM_HEADERSIZE = 2048 + } + + enum { + RB_HITTEST = WM_USER + 8, + RB_GETRECT = WM_USER + 9, + RB_IDTOINDEX = WM_USER + 16, + RB_GETTOOLTIPS, + RB_SETTOOLTIPS, + RB_SETBKCOLOR, + RB_GETBKCOLOR, + RB_SETTEXTCOLOR, + RB_GETTEXTCOLOR, + RB_SIZETORECT, + RB_BEGINDRAG, + RB_ENDDRAG, + RB_DRAGMOVE, + RB_GETBARHEIGHT, + RB_GETBANDINFOW, + RB_GETBANDINFOA, + RB_MINIMIZEBAND, + RB_MAXIMIZEBAND, // = WM_USER + 31 + RB_GETDROPTARGET = CCM_GETDROPTARGET, + RB_GETBANDBORDERS = WM_USER + 34, + RB_SHOWBAND = WM_USER + 35, + RB_SETPALETTE = WM_USER + 37, + RB_GETPALETTE = WM_USER + 38, + RB_MOVEBAND = WM_USER + 39, + RB_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT, + RB_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT + } + + enum { + RBN_GETOBJECT = RBN_FIRST - 1, + RBN_LAYOUTCHANGED = RBN_FIRST - 2, + RBN_AUTOSIZE = RBN_FIRST - 3, + RBN_BEGINDRAG = RBN_FIRST - 4, + RBN_ENDDRAG = RBN_FIRST - 5, + RBN_DELETINGBAND = RBN_FIRST - 6, + RBN_DELETEDBAND = RBN_FIRST - 7, + RBN_CHILDSIZE = RBN_FIRST - 8 + } + + enum { + RBNM_ID = 1, + RBNM_STYLE = 2, + RBNM_LPARAM = 4 + } + + enum { + RBHT_NOWHERE = 1, + RBHT_CAPTION, + RBHT_CLIENT, + RBHT_GRABBER + } + + version (Unicode) { + alias SB_SETTIPTEXTW SB_SETTIPTEXT; + alias SB_GETTIPTEXTW SB_GETTIPTEXT; + alias RB_GETBANDINFOW RB_GETBANDINFO; + } else { + alias SB_SETTIPTEXTA SB_SETTIPTEXT; + alias SB_GETTIPTEXTA SB_GETTIPTEXT; + alias RB_GETBANDINFOA RB_GETBANDINFO; + } +} else { + enum { + RB_GETBANDINFO = WM_USER + 5 + } +} + +enum { + CBEM_INSERTITEMA = WM_USER + 1, + CBEM_SETIMAGELIST, + CBEM_GETIMAGELIST, + CBEM_GETITEMA, + CBEM_SETITEMA, + CBEM_GETCOMBOCONTROL, + CBEM_GETEDITCONTROL, + CBEM_SETEXSTYLE, + CBEM_GETEXSTYLE, // = WM_USER + 9) + CBEM_DELETEITEM = CB_DELETESTRING +} + +static if (_WIN32_IE >= 0x400) { + enum { + CBEM_SETEXTENDEDSTYLE = WM_USER + 14, + CBEM_GETEXTENDEDSTYLE = WM_USER + 9, + CBEM_SETUNICODEFORMAT = CCM_SETUNICODEFORMAT, + CBEM_GETUNICODEFORMAT = CCM_GETUNICODEFORMAT + } +} + +enum { + CBEM_HASEDITCHANGED = WM_USER + 10, + CBEM_INSERTITEMW = WM_USER + 11, + CBEM_SETITEMW = WM_USER + 12, + CBEM_GETITEMW = WM_USER + 13 +} + +enum { + DA_LAST = 0x7fffffff +} + +enum { + DPA_APPEND = 0x7fffffff, + DPA_ERR = -1 +} + +enum { + DSA_APPEND = 0x7fffffff, + DSA_ERR = -1 +} + +enum { + DPAS_SORTED = 1, + DPAS_INSERTBEFORE = 2, + DPAS_INSERTAFTER = 4 +} + +static if (_WIN32_IE >= 0x400) { + enum { + WSB_PROP_CYVSCROLL = 1, + WSB_PROP_CXHSCROLL = 2, + WSB_PROP_CYHSCROLL = 4, + WSB_PROP_CXVSCROLL = 8, + WSB_PROP_CXHTHUMB = 16, + WSB_PROP_CYVTHUMB = 32, + WSB_PROP_VBKGCOLOR = 64, + WSB_PROP_HBKGCOLOR = 128, + WSB_PROP_VSTYLE = 256, + WSB_PROP_HSTYLE = 512, + WSB_PROP_WINSTYLE = 1024, + WSB_PROP_PALETTE = 2048, + WSB_PROP_MASK = 0xfff, + FSB_FLAT_MODE = 2, + FSB_ENCARTA_MODE = 1, + FSB_REGULAR_MODE = 0 + } +} + +static if (_WIN32_WINNT >= 0x0501) { + enum { + LIF_ITEMINDEX = 1, + LIF_STATE = 2, + LIF_ITEMID = 4, + LIF_URL = 8 + } + + enum { + LIS_FOCUSED = 1, + LIS_ENABLED = 2, + LIS_VISITED = 4 + } + + enum { + LM_HITTEST = WM_USER + 768, + LM_GETIDEALHEIGHT, + LM_SETITEM, + LM_GETITEM // = WM_USER + 771 + } + + const size_t MAX_LINKID_TEXT = 48; + const size_t L_MAX_URL_LENGTH = 2084; +} + + +struct COMBOBOXEXITEMA { + UINT mask; + int iItem; + LPSTR pszText; + int cchTextMax; + int iImage; + int iSelectedImage; + int iOverlay; + int iIndent; + LPARAM lParam; +} +alias COMBOBOXEXITEMA* PCOMBOBOXEXITEMA; +alias CPtr!(COMBOBOXEXITEMA) PCCOMBOEXITEMA; + +struct COMBOBOXEXITEMW { + UINT mask; + int iItem; + LPWSTR pszText; + int cchTextMax; + int iImage; + int iSelectedImage; + int iOverlay; + int iIndent; + LPARAM lParam; +} +alias COMBOBOXEXITEMW* PCOMBOBOXEXITEMW; +alias CPtr!(COMBOBOXEXITEMW) PCCOMBOEXITEMW; + +static if (_WIN32_IE >= 0x400) { + struct NMCOMBOBOXEXA { + NMHDR hdr; + COMBOBOXEXITEMA ceItem; + } + alias NMCOMBOBOXEXA* PNMCOMBOBOXEXA; + + struct NMCOMBOBOXEXW { + NMHDR hdr; + COMBOBOXEXITEMW ceItem; + } + alias NMCOMBOBOXEXW* PNMCOMBOBOXEXW; + + struct NMCBEDRAGBEGINW { + NMHDR hdr; + int iItemid; + WCHAR szText[CBEMAXSTRLEN]; + } + alias NMCBEDRAGBEGINW* LPNMCBEDRAGBEGINW, PNMCBEDRAGBEGINW; + + struct NMCBEDRAGBEGINA { + NMHDR hdr; + int iItemid; + char szText[CBEMAXSTRLEN]; + } + alias NMCBEDRAGBEGINA* LPNMCBEDRAGBEGINA, PNMCBEDRAGBEGINA; + + struct NMIPADDRESS { + NMHDR hdr; + int iField; + int iValue; + } + alias NMIPADDRESS* LPNMIPADDRESS; + + struct NMLVKEYDOWN { + NMHDR hdr; + WORD wVKey; + UINT flags; + } + alias NMLVKEYDOWN* LPNMLVKEYDOWN; + + struct NMPGCALCSIZE { + NMHDR hdr; + DWORD dwFlag; + int iWidth; + int iHeight; + } + alias NMPGCALCSIZE* LPNMPGCALCSIZE; + + struct NMPGSCROLL { + NMHDR hdr; + BOOL fwKeys; + RECT rcParent; + int iDir; + int iXpos; + int iYpos; + int iScroll; + } + alias NMPGSCROLL* LPNMPGSCROLL; + + struct NMSELCHANGE { + NMHDR nmhdr; + SYSTEMTIME stSelStart; + SYSTEMTIME stSelEnd; + } + alias NMSELCHANGE* LPNMSELCHANGE; + + struct NMTBHOTITEM { + NMHDR hdr; + int idOld; + int idNew; + DWORD dwFlags; + } + alias NMTBHOTITEM* LPNMTBHOTITEM; + + struct NMTBDISPINFOA { + NMHDR hdr; + DWORD dwMask; + int idCommand; + DWORD_PTR lParam; + int iImage; + LPSTR pszText; + int cchText; + } + alias NMTBDISPINFOA* LPNMTBDISPINFOA; + + struct NMTBDISPINFOW { + NMHDR hdr; + DWORD dwMask; + int idCommand; + DWORD_PTR lParam; + int iImage; + LPWSTR pszText; + int cchText; + } + alias NMTBDISPINFOW* LPNMTBDISPINFOW; + + struct NMTBGETINFOTIPA { + NMHDR hdr; + LPSTR pszText; + int cchTextMax; + int iItem; + LPARAM lParam; + } + alias NMTBGETINFOTIPA* LPNMTBGETINFOTIPA; + + struct NMTBGETINFOTIPW { + NMHDR hdr; + LPWSTR pszText; + int cchTextMax; + int iItem; + LPARAM lParam; + } + alias NMTBGETINFOTIPW* LPNMTBGETINFOTIPW; + + struct NMMOUSE { + NMHDR hdr; + DWORD_PTR dwItemSpec; + DWORD_PTR dwItemData; + POINT pt; + LPARAM dwHitInfo; + } + alias NMMOUSE* LPNMMOUSE; +} + +static if (_WIN32_IE >= 0x401) { + struct NMTOOLTIPSCREATED { + NMHDR hdr; + HWND hwndToolTips; + } + alias NMTOOLTIPSCREATED* LPNMTOOLTIPSCREATED; +} + +struct NMDATETIMECHANGE { + NMHDR nmhdr; + DWORD dwFlags; + SYSTEMTIME st; +} +alias NMDATETIMECHANGE* LPNMDATETIMECHANGE; + +struct NMCBEENDEDITW { + NMHDR hdr; + BOOL fChanged; + int iNewSelection; + WCHAR szText[CBEMAXSTRLEN]; + int iWhy; +} +alias NMCBEENDEDITW* LPNMCBEENDEDITW, PNMCBEENDEDITW; + +struct NMCBEENDEDITA { + NMHDR hdr; + BOOL fChanged; + int iNewSelection; + char szText[CBEMAXSTRLEN]; + int iWhy; +} +alias NMCBEENDEDITA* LPNMCBEENDEDITA, PNMCBEENDEDITA; + +struct COLORMAP { + COLORREF from; + COLORREF to; +} +alias COLORMAP* LPCOLORMAP; + +struct DRAGLISTINFO { + UINT uNotification; + HWND hWnd; + POINT ptCursor; +} +alias DRAGLISTINFO* LPDRAGLISTINFO; + +struct TBBUTTON { + int iBitmap; + int idCommand; + BYTE fsState; + BYTE fsStyle; + BYTE bReserved[2]; + DWORD dwData; + int iString; +} +alias TBBUTTON* PTBBUTTON, LPTBBUTTON; +alias CPtr!(TBBUTTON) LPCTBBUTTON; + +static if (_WIN32_IE >= 0x400) { + struct TBBUTTONINFOA { + UINT cbSize = TBBUTTONINFOA.sizeof; + DWORD dwMask; + int idCommand; + int iImage; + BYTE fsState; + BYTE fsStyle; + WORD cx; + DWORD lParam; + LPSTR pszText; + int cchText; + } + alias TBBUTTONINFOA* LPTBBUTTONINFOA; + + struct TBBUTTONINFOW { + UINT cbSize = TBBUTTONINFOW.sizeof; + DWORD dwMask; + int idCommand; + int iImage; + BYTE fsState; + BYTE fsStyle; + WORD cx; + DWORD lParam; + LPWSTR pszText; + int cchText; + } + alias TBBUTTONINFOW* LPTBBUTTONINFOW; + + struct TBINSERTMARK { + int iButton; + DWORD dwFlags; + } + alias TBINSERTMARK* LPTBINSERTMARK; + + struct LVBKIMAGEA { + ULONG ulFlags; + HBITMAP hbm; + LPSTR pszImage; + UINT cchImageMax; + int xOffsetPercent; + int yOffsetPercent; + } + alias LVBKIMAGEA* LPLVBKIMAGEA; + + struct LVBKIMAGEW { + ULONG ulFlags; + HBITMAP hbm; + LPWSTR pszImage; + UINT cchImageMax; + int xOffsetPercent; + int yOffsetPercent; + } + alias LVBKIMAGEW* LPLVBKIMAGEW; +} + +/*struct TBNOTIFY { + NMHDR hdr; + int iItem; + TBBUTTON tbButton; + int cchText; + LPTSTR pszText; +} +alias TBNOTIFY* LPTBNOTIFY; +*/ + +/*struct TBSAVEPARAMS { + HKEY hkr; + LPCTSTR pszSubKey; + LPCTSTR pszValueName; +}*/ + +struct IMAGEINFO { + HBITMAP hbmImage; + HBITMAP hbmMask; + int Unused1; + int Unused2; + RECT rcImage; +} +alias IMAGEINFO* LPIMAGEINFO; + +alias HANDLE HIMAGELIST; + +static if (_WIN32_IE >= 0x500) { + struct HDITEMA { + UINT mask; + int cxy; + LPSTR pszText; + HBITMAP hbm; + int cchTextMax; + int fmt; + LPARAM lParam; + int iImage; + int iOrder; + UINT type; + LPVOID pvFilter; + } + + struct HDITEMW { + UINT mask; + int cxy; + LPWSTR pszText; + HBITMAP hbm; + int cchTextMax; + int fmt; + LPARAM lParam; + int iImage; + int iOrder; + UINT type; + LPVOID pvFilter; + } +} else static if (_WIN32_IE >= 0x300) { + struct HDITEMA { + UINT mask; + int cxy; + LPSTR pszText; + HBITMAP hbm; + int cchTextMax; + int fmt; + LPARAM lParam; + int iImage; + int iOrder; + } + + struct HDITEMW { + UINT mask; + int cxy; + LPWSTR pszText; + HBITMAP hbm; + int cchTextMax; + int fmt; + LPARAM lParam; + int iImage; + int iOrder; + } +} else { + struct HDITEMA { + UINT mask; + int cxy; + LPSTR pszText; + HBITMAP hbm; + int cchTextMax; + int fmt; + LPARAM lParam; + } + + struct HDITEMW { + UINT mask; + int cxy; + LPWSTR pszText; + HBITMAP hbm; + int cchTextMax; + int fmt; + LPARAM lParam; + } +} +alias HDITEMA* LPHDITEMA; +alias HDITEMW* LPHDITEMW; + +deprecated { + alias HDITEMA HD_ITEMA; + alias HDITEMW HD_ITEMW; + //alias HDITEM HD_ITEM; fixme +} + +struct HD_LAYOUT { + RECT* prc; + WINDOWPOS* pwpos; +} +alias HDLAYOUT* LPHDLAYOUT; +deprecated alias HD_LAYOUT HDLAYOUT; + +struct HD_HITTESTINFO { + POINT pt; + UINT flags; + int iItem; +} +alias HD_HITTESTINFO* LPHDHITTESTINFO; + +struct HD_NOTIFYA { + NMHDR hdr; + int iItem; + int iButton; + HDITEMA* pitem; +} + +struct HD_NOTIFYW { + NMHDR hdr; + int iItem; + int iButton; + HDITEMW* pitem; +} + +/* FIXME: NMHEADER structure (base for all events of the comctl controls) + is the same as HD_NOTIFY depending on the value of _WIN32_IE macro. + I'm defining both for now. */ +struct NMHEADERA { + NMHDR hdr; + int iItem; + int iButton; + HDITEMA* pitem; +} +alias NMHEADERA* LPNMHEADERA; + +struct NMHEADERW { + NMHDR hdr; + int iItem; + int iButton; + HDITEMW* pitem; +} +alias NMHEADERW* LPNMHEADERW; + +version (Unicode) { + alias NMHEADERW NMHEADER; + alias LPNMHEADERW LPNMHEADER; +} else { + alias NMHEADERA NMHEADER; + alias LPNMHEADERA LPNMHEADER; +} +// End FIXME + +struct NMHDDISPINFOA { + NMHDR hdr; + int iItem; + UINT mask; + LPSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; +} +alias NMHDDISPINFOA* LPNMHDDISPINFOA; + +struct NMHDDISPINFOW { + NMHDR hdr; + int iItem; + UINT mask; + LPWSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; +} +alias NMHDDISPINFOW* LPNMHDDISPINFOW; + +struct NMCUSTOMDRAW { + NMHDR hdr; + DWORD dwDrawStage; + HDC hdc; + RECT rc; + DWORD dwItemSpec; + UINT uItemState; + LPARAM lItemlParam; +} +alias NMCUSTOMDRAW* LPNMCUSTOMDRAW; + +static if (_WIN32_IE >= 0x400) { + struct NMLVCUSTOMDRAW { + NMCUSTOMDRAW nmcd; + COLORREF clrText; + COLORREF clrTextBk; + int iSubItem; + } +} else { + struct NMLVCUSTOMDRAW { + NMCUSTOMDRAW nmcd; + COLORREF clrText; + COLORREF clrTextBk; + } +} +alias NMLVCUSTOMDRAW* LPNMLVCUSTOMDRAW; + +static if (_WIN32_IE >= 0x400) { + struct NMLVGETINFOTIPA { + NMHDR hdr; + DWORD dwFlags; + LPSTR pszText; + int cchTextMax; + int iItem; + int iSubItem; + LPARAM lParam; + } + alias NMLVGETINFOTIPA* LPNMLVGETINFOTIPA; + + struct NMLVGETINFOTIPW { + NMHDR hdr; + DWORD dwFlags; + LPWSTR pszText; + int cchTextMax; + int iItem; + int iSubItem; + LPARAM lParam; + } + alias NMLVGETINFOTIPW* LPNMLVGETINFOTIPW; +} + +static if (_WIN32_IE >= 0x400) { + struct NMTVCUSTOMDRAW { + NMCUSTOMDRAW nmcd; + COLORREF clrText; + COLORREF clrTextBk; + int iLevel; + } +} else { + struct NMTVCUSTOMDRAW { + NMCUSTOMDRAW nmcd; + COLORREF clrText; + COLORREF clrTextBk; + } +} +alias NMTVCUSTOMDRAW* LPNMTVCUSTOMDRAW; + +static if (_WIN32_IE >= 0x400) { + static if (_WIN32_WINNT >= 0x501) { + struct NMTBCUSTOMDRAW { + NMCUSTOMDRAW nmcd; + HBRUSH hbrMonoDither; + HBRUSH hbrLines; + HPEN hpenLines; + COLORREF clrText; + COLORREF clrMark; + COLORREF clrTextHighlight; + COLORREF clrBtnFace; + COLORREF clrBtnHighlight; + COLORREF clrHighlightHotTrack; + RECT rcText; + int nStringBkMode; + int nHLStringBkMode; + int iListGap; + } + } else { + struct NMTBCUSTOMDRAW { + NMCUSTOMDRAW nmcd; + HBRUSH hbrMonoDither; + HBRUSH hbrLines; + HPEN hpenLines; + COLORREF clrText; + COLORREF clrMark; + COLORREF clrTextHighlight; + COLORREF clrBtnFace; + COLORREF clrBtnHighlight; + COLORREF clrHighlightHotTrack; + RECT rcText; + int nStringBkMode; + int nHLStringBkMode; + } + } + alias NMTBCUSTOMDRAW* LPNMTBCUSTOMDRAW; + + struct NMITEMACTIVATE { + NMHDR hdr; + int iItem; + int iSubItem; + UINT uNewState; + UINT uOldState; + UINT uChanged; + POINT ptAction; + LPARAM lParam; + UINT uKeyFlags; + } + alias NMITEMACTIVATE* LPNMITEMACTIVATE; +} + +struct TBADDBITMAP { + HINSTANCE hInst; + UINT nID; +} +alias TBADDBITMAP* LPTBADDBITMAP; + +struct TBSAVEPARAMSA { + HKEY hkr; + LPCSTR pszSubKey; + LPCSTR pszValueName; +} + +struct TBSAVEPARAMSW { + HKEY hkr; + LPCWSTR pszSubKey; + LPCWSTR pszValueName; +} + +struct TBREPLACEBITMAP { + HINSTANCE hInstOld; + UINT nIDOld; + HINSTANCE hInstNew; + UINT nIDNew; + int nButtons; +} +alias TBREPLACEBITMAP* LPTBREPLACEBITMAP; + +static if (_WIN32_IE >= 0x500) { + struct NMTOOLBARA { + NMHDR hdr; + int iItem; + TBBUTTON tbButton; + int cchText; + LPSTR pszText; + RECT rcButton; + } + + struct NMTOOLBARW { + NMHDR hdr; + int iItem; + TBBUTTON tbButton; + int cchText; + LPWSTR pszText; + RECT rcButton; + } +} else { + struct NMTOOLBARA { + NMHDR hdr; + int iItem; + TBBUTTON tbButton; + int cchText; + LPSTR pszText; + } + + struct NMTOOLBARW { + NMHDR hdr; + int iItem; + TBBUTTON tbButton; + int cchText; + LPWSTR pszText; + } +} +alias NMTOOLBARA* LPNMTOOLBARA; +alias NMTOOLBARW* LPNMTOOLBARW; + +alias NMTOOLBARA TBNOTIFYA; +alias LPNMTOOLBARA LPTBNOTIFYA; + +alias NMTOOLBARW TBNOTIFYW; +alias LPNMTOOLBARW LPTBNOTIFYW; + +static if (_WIN32_WINNT >= 0x501) { + struct TOOLINFOA { + UINT cbSize = TOOLINFOA.sizeof; + UINT uFlags; + HWND hwnd; + UINT uId; + RECT rect; + HINSTANCE hinst; + LPSTR lpszText; + LPARAM lParam; + void* lpReserved; + } + + struct TOOLINFOW { + UINT cbSize = TOOLINFOW.sizeof; + UINT uFlags; + HWND hwnd; + UINT uId; + RECT rect; + HINSTANCE hinst; + LPWSTR lpszText; + LPARAM lParam; + void* lpReserved; + } + + const size_t + TTTOOLINFOA_V1_SIZE = TOOLINFOA.lParam.offsetof, + TTTOOLINFOW_V1_SIZE = TOOLINFOW.lParam.offsetof, + TTTOOLINFOA_V2_SIZE = TOOLINFOA.lpReserved.offsetof, + TTTOOLINFOW_V2_SIZE = TOOLINFOW.lpReserved.offsetof, + TTTOOLINFOA_V3_SIZE = TOOLINFOA.sizeof, + TTTOOLINFOW_V3_SIZE = TOOLINFOW.sizeof; +} else static if (_WIN32_IE >= 0x300) { + struct TOOLINFOA { + UINT cbSize = TOOLINFOA.sizeof; + UINT uFlags; + HWND hwnd; + UINT uId; + RECT rect; + HINSTANCE hinst; + LPSTR lpszText; + LPARAM lParam; + } + + struct TOOLINFOW { + UINT cbSize = TOOLINFOW.sizeof; + UINT uFlags; + HWND hwnd; + UINT uId; + RECT rect; + HINSTANCE hinst; + LPWSTR lpszText; + LPARAM lParam; + } + + const size_t + TTTOOLINFOA_V1_SIZE = TOOLINFOA.lParam.offsetof, + TTTOOLINFOW_V1_SIZE = TOOLINFOW.lParam.offsetof, + TTTOOLINFOA_V2_SIZE = TOOLINFOA.sizeof, + TTTOOLINFOW_V2_SIZE = TOOLINFOW.sizeof; +} else { + struct TOOLINFOA { + UINT cbSize = TOOLINFOA.sizeof; + UINT uFlags; + HWND hwnd; + UINT uId; + RECT rect; + HINSTANCE hinst; + LPSTR lpszText; + } + + struct TOOLINFOW { + UINT cbSize = TOOLINFOW.sizeof; + UINT uFlags; + HWND hwnd; + UINT uId; + RECT rect; + HINSTANCE hinst; + LPWSTR lpszText; + } + + const size_t + TTTOOLINFOA_V1_SIZE = TOOLINFOA.sizeof, + TTTOOLINFOW_V1_SIZE = TOOLINFOW.sizeof; +} +alias TOOLINFOA TTTOOLINFOA; +alias TOOLINFOW TTTOOLINFOW; +alias TTTOOLINFOA* LPTTTOOLINFOA, PTOOLINFOA, LPTOOLINFOA; +alias TTTOOLINFOW* LPTTTOOLINFOW, PTOOLINFOW, LPTOOLINFOW; + +struct TTHITTESTINFOA { + HWND hwnd; + POINT pt; + TOOLINFOA ti; +} +alias TTHITTESTINFOA* LPTTHITTESTINFOA, LPHITTESTINFOA; + +struct TTHITTESTINFOW { + HWND hwnd; + POINT pt; + TOOLINFOW ti; +} +alias TTHITTESTINFOW* LPTTHITTESTINFOW, LPHITTESTINFOW; + +static if (_WIN32_IE >= 0x300) { + struct NMTTDISPINFOA { + NMHDR hdr; + LPSTR lpszText; + char szText[80]; + HINSTANCE hinst; + UINT uFlags; + LPARAM lParam; + } + + struct NMTTDISPINFOW { + NMHDR hdr; + LPWSTR lpszText; + WCHAR szText[80]; + HINSTANCE hinst; + UINT uFlags; + LPARAM lParam; + } +} else { + struct NMTTDISPINFOA { + NMHDR hdr; + LPSTR lpszText; + char szText[80]; + HINSTANCE hinst; + UINT uFlags; + } + + struct NMTTDISPINFOW { + NMHDR hdr; + LPWSTR lpszText; + WCHAR szText[80]; + HINSTANCE hinst; + UINT uFlags; + } +} +alias NMTTDISPINFOA* LPNMTTDISPINFOA; +alias NMTTDISPINFOW* LPNMTTDISPINFOW; +alias NMTTDISPINFOA TOOLTIPTEXTA; +alias LPNMTTDISPINFOA LPTOOLTIPTEXTA; +alias NMTTDISPINFOW TOOLTIPTEXTW; +alias LPNMTTDISPINFOW LPTOOLTIPTEXTW; + +struct UDACCEL { + UINT nSec; + UINT nInc; +} +alias UDACCEL* LPUDACCEL; + +struct NMUPDOWN { + NMHDR hdr; + int iPos; + int iDelta; +} +alias NMUPDOWN* LPNMUPDOWN; + +deprecated { + alias NMUPDOWN NM_UPDOWN; + alias LPNMUPDOWN LPNM_UPDOWN; +} + +static if (_WIN32_WINNT >= 0x501) { + struct LVITEMA { + UINT mask; + int iItem; + int iSubItem; + UINT state; + UINT stateMask; + LPSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; + int iIndent; + int iGroupId; + UINT cColumns; + PUINT puColumns; + } + + struct LVITEMW { + UINT mask; + int iItem; + int iSubItem; + UINT state; + UINT stateMask; + LPWSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; + int iIndent; + int iGroupId; + UINT cColumns; + PUINT puColumns; + } +} else static if (_WIN32_IE >= 0x300) { + struct LVITEMA { + UINT mask; + int iItem; + int iSubItem; + UINT state; + UINT stateMask; + LPSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; + int iIndent; + } + + struct LVITEMW { + UINT mask; + int iItem; + int iSubItem; + UINT state; + UINT stateMask; + LPWSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; + int iIndent; + } +} else { + struct LVITEMA { + UINT mask; + int iItem; + int iSubItem; + UINT state; + UINT stateMask; + LPSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; + } + + struct LVITEMW { + UINT mask; + int iItem; + int iSubItem; + UINT state; + UINT stateMask; + LPWSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; + } +} +alias LVITEMA* LPLVITEMA; +alias LVITEMW* LPLVITEMW; +alias LVITEMA LV_ITEMA; +alias LVITEMW LV_ITEMW; + +struct LVFINDINFOA { + UINT flags; + LPCSTR psz; + LPARAM lParam; + POINT pt; + UINT vkDirection; +} + +struct LVFINDINFOW { + UINT flags; + LPCWSTR psz; + LPARAM lParam; + POINT pt; + UINT vkDirection; +} + +alias LVFINDINFOA* LPFINDINFOA; +alias LVFINDINFOA LV_FINDINFOA; +alias LVFINDINFOW* LPFINDINFOW; +alias LVFINDINFOW LV_FINDINFOW; + +struct NMLVFINDITEMA { + NMHDR hdr; + int iStart; + LVFINDINFOA lvfi; +} + +struct NMLVFINDITEMW { + NMHDR hdr; + int iStart; + LVFINDINFOW lvfi; +} + +alias NMLVFINDITEMA* PNMLVFINDITEMA, LPNMLVFINDITEMA; +alias NMLVFINDITEMW* PNMLVFINDITEMW, LPNMLVFINDITEMW; + +static if (_WIN32_IE >= 0x300) { + struct LVHITTESTINFO { + POINT pt; + UINT flags; + int iItem; + int iSubItem; + } +} else { + struct LVHITTESTINFO { + POINT pt; + UINT flags; + int iItem; + } +} +alias LVHITTESTINFO* LPLVHITTESTINFO; +alias LVHITTESTINFO LV_HITTESTINFO; + +static if (_WIN32_IE >= 0x300) { + struct LVCOLUMNA { + UINT mask; + int fmt; + int cx; + LPSTR pszText; + int cchTextMax; + int iSubItem; + int iImage; + int iOrder; + } + struct LVCOLUMNW { + UINT mask; + int fmt; + int cx; + LPWSTR pszText; + int cchTextMax; + int iSubItem; + int iImage; + int iOrder; + } +} else { + struct LVCOLUMNA { + UINT mask; + int fmt; + int cx; + LPSTR pszText; + int cchTextMax; + int iSubItem; + } + struct LVCOLUMNW { + UINT mask; + int fmt; + int cx; + LPWSTR pszText; + int cchTextMax; + int iSubItem; + } +} +alias LVCOLUMNA* LPLVCOLUMNA; +alias LVCOLUMNW* LPLVCOLUMNW; +alias LVCOLUMNA LV_COLUMNA; +alias LVCOLUMNW LV_COLUMNW; + +static if (_WIN32_WINNT >= 0x501) { + /* SG: The definitions in this static if block are from the MSDN docs. + * They are not in MinGW, but nonetheless required for macros that are. + */ + struct LVGROUP { + UINT cbSize = LVGROUP.sizeof; + UINT mask; + LPWSTR pszHeader; + int cchHeader; + LPWSTR pszFooter; + int cchFooter; + int iGroupId; + UINT stateMask; + UINT state; + UINT uAlign; + static if (_WIN32_WINNT >= 0x600) { + LPWSTR pszSubtitle; + UINT cchSubtitle; + LPWSTR pszTask; + UINT cchTask; + LPWSTR pszDescriptionTop; + UINT cchDescriptionTop; + LPWSTR pszDescriptionBottom; + UINT cchDescriptionBottom; + int iTitleImage; + int iExtendedImage; + int iFirstItem; // Read only + UINT cItems; // Read only + LPWSTR pszSubsetTitle; // NULL if group is not subset + UINT cchSubsetTitle; + } + } + alias LVGROUP* PLVGROUP; + + struct LVGROUPMETRICS { + UINT cbSize = LVGROUPMETRICS.sizeof; + UINT mask; + UINT Left; + UINT Top; + UINT Right; + UINT Bottom; + COLORREF crLeft; + COLORREF crTop; + COLORREF crRight; + COLORREF crBottom; + COLORREF crHeader; + COLORREF crFooter; + } + alias LVGROUPMETRICS* PLVGROUPMETRICS; + + struct LVINSERTMARK { + UINT cbSize = LVINSERTMARK.sizeof; + DWORD dwFlags; + int iItem; + DWORD dwReserved; + } + alias LVINSERTMARK* PLVINSERTMARK; + + struct LVTILEINFO { + UINT cbSize = LVTILEINFO.sizeof; + int iItem; + UINT cColumns; + PUINT puColumns; + static if (_WIN32_WINNT >= 0x600) { + int* piColFmt; + } + } + alias LVTILEINFO* PLVTILEINFO; + + struct LVTILEVIEWINFO { + UINT cbSize = LVTILEVIEWINFO.sizeof; + DWORD dwMask; + DWORD dwFlags; + SIZE sizeTile; + int cLines; + RECT rcLabelMargin; + } + alias LVTILEVIEWINFO* PLVTILEVIEWINFO; + + struct LVINSERTGROUPSORTED { + PFNLVGROUPCOMPARE pfnGroupCompare; + LPVOID* pvData; + LVGROUP lvGroup; + } + alias LVINSERTGROUPSORTED* PLVINSERTGROUPSORTED; + + alias int function(INT, INT, VOID*) PFNLVGROUPCOMPARE; + + struct LVSETINFOTIP { + UINT cbSize = LVSETINFOTIP.sizeof; + DWORD dwFlags; + LPWSTR pszText; + int iItem; + int iSubItem; + HBITMAP hbmp; + } + alias LVSETINFOTIP* PLVSETINFOTIP; +} + +alias int function(LPARAM, LPARAM, LPARAM) PFNLVCOMPARE; + +struct NMLISTVIEW { + NMHDR hdr; + int iItem; + int iSubItem; + UINT uNewState; + UINT uOldState; + UINT uChanged; + POINT ptAction; + LPARAM lParam; +} +alias NMLISTVIEW* LPNMLISTVIEW; + +deprecated { + alias NMLISTVIEW NM_LISTVIEW; + alias LPNMLISTVIEW LPNM_LISTVIEW; +} + +struct NMLVDISPINFOA { + NMHDR hdr; + LV_ITEMA item; +} +alias NMLVDISPINFOA* LPNMLVDISPINFOA; +alias NMLVDISPINFOA LV_DISPINFOA; + +struct NMLVDISPINFOW { + NMHDR hdr; + LV_ITEMW item; +} +alias NMLVDISPINFOW* LPNMLVDISPINFOW; +alias NMLVDISPINFOW LV_DISPINFOW; + +struct LV_KEYDOWN { + NMHDR hdr; + WORD wVKey; + UINT flags; +} + +struct NMLVCACHEHINT { + NMHDR hdr; + int iFrom; + int iTo; +} +alias NMLVCACHEHINT* LPNMLVCACHEHINT, PNM_CACHEHINT, LPNM_CACHEHINT; +alias NMLVCACHEHINT NM_CACHEHINT; + +struct TVITEMA { + UINT mask; + HTREEITEM hItem; + UINT state; + UINT stateMask; + LPSTR pszText; + int cchTextMax; + int iImage; + int iSelectedImage; + int cChildren; + LPARAM lParam; +} +alias TVITEMA* LPTVITEMA, LPTV_ITEMA; +alias TVITEMA TV_ITEMA; + +struct TVITEMW { + UINT mask; + HTREEITEM hItem; + UINT state; + UINT stateMask; + LPWSTR pszText; + int cchTextMax; + int iImage; + int iSelectedImage; + int cChildren; + LPARAM lParam; +} +alias TVITEMW* LPTVITEMW, LPTV_ITEMW; +alias TVITEMW TV_ITEMW; + +static if (_WIN32_IE >= 0x400) { + struct TVITEMEXA { + UINT mask; + HTREEITEM hItem; + UINT state; + UINT stateMask; + LPSTR pszText; + int cchTextMax; + int iImage; + int iSelectedImage; + int cChildren; + LPARAM lParam; + int iIntegral; + } + alias TVITEMEXA* LPTVITEMEXA; + + struct TVITEMEXW { + UINT mask; + HTREEITEM hItem; + UINT state; + UINT stateMask; + LPWSTR pszText; + int cchTextMax; + int iImage; + int iSelectedImage; + int cChildren; + LPARAM lParam; + int iIntegral; + } + alias TVITEMEXW* LPTVITEMEXW; +} + +static if (_WIN32_IE >= 0x400) { + struct TVINSERTSTRUCTA { + HTREEITEM hParent; + HTREEITEM hInsertAfter; + union { + TVITEMEXA itemex; + TV_ITEMA item; + } + } + + struct TVINSERTSTRUCTW { + HTREEITEM hParent; + HTREEITEM hInsertAfter; + union { + TVITEMEXW itemex; + TV_ITEMW item; + } + } +} else { + struct TVINSERTSTRUCTA { + HTREEITEM hParent; + HTREEITEM hInsertAfter; + TV_ITEMA item; + } + + struct TVINSERTSTRUCTW { + HTREEITEM hParent; + HTREEITEM hInsertAfter; + TV_ITEMW item; + } +} +alias TVINSERTSTRUCTA* LPTVINSERTSTRUCTA, LPTV_INSERTSTRUCTA; +alias TVINSERTSTRUCTA TV_INSERTSTRUCTA; +alias TVINSERTSTRUCTW* LPTVINSERTSTRUCTW, LPTV_INSERTSTRUCTW; +alias TVINSERTSTRUCTW TV_INSERTSTRUCTW; + +struct TVHITTESTINFO { + POINT pt; + UINT flags; + HTREEITEM hItem; +} +alias TVHITTESTINFO* LPTVHITTESTINFO, LPTV_HITTESTINFO; +alias TVHITTESTINFO TV_HITTESTINFO; + +alias int function(LPARAM, LPARAM, LPARAM) PFNTVCOMPARE; +struct TVSORTCB { + HTREEITEM hParent; + PFNTVCOMPARE lpfnCompare; + LPARAM lParam; +} +alias TVSORTCB* LPTVSORTCB, LPTV_SORTCB; +alias TVSORTCB TV_SORTCB; + +struct NMTREEVIEWA { + NMHDR hdr; + UINT action; + TV_ITEMA itemOld; + TV_ITEMA itemNew; + POINT ptDrag; +} +alias NMTREEVIEWA* LPNMTREEVIEWA, LPNM_TREEVIEWA; +alias NMTREEVIEWA NM_TREEVIEWA; + +struct NMTREEVIEWW { + NMHDR hdr; + UINT action; + TV_ITEMW itemOld; + TV_ITEMW itemNew; + POINT ptDrag; +} +alias NMTREEVIEWW* LPNMTREEVIEWW, LPNM_TREEVIEWW; +alias NMTREEVIEWW NM_TREEVIEWW; + +struct NMTVDISPINFOA { + NMHDR hdr; + TVITEMA item; +} +alias NMTVDISPINFOA* LPNMTVDISPINFOA; +alias NMTVDISPINFOA TV_DISPINFOA; + +struct NMTVDISPINFOW { + NMHDR hdr; + TVITEMW item; +} +alias NMTVDISPINFOW* LPNMTVDISPINFOW; +alias NMTVDISPINFOW TV_DISPINFOW; + +static if (_WIN32_IE >= 0x400) { + struct NMTVGETINFOTIPA { + NMHDR hdr; + LPSTR pszText; + int cchTextMax; + HTREEITEM hItem; + LPARAM lParam; + } + alias NMTVGETINFOTIPA* LPNMTVGETINFOTIPA; + + struct NMTVGETINFOTIPW { + NMHDR hdr; + LPWSTR pszText; + int cchTextMax; + HTREEITEM hItem; + LPARAM lParam; + } + alias NMTVGETINFOTIPW* LPNMTVGETINFOTIPW; +} + +struct TV_KEYDOWN { + NMHDR hdr; + WORD wVKey; + UINT flags; +} + +struct TC_ITEMHEADERA { + UINT mask; + UINT lpReserved1; + UINT lpReserved2; + LPSTR pszText; + int cchTextMax; + int iImage; +} + +struct TC_ITEMHEADERW { + UINT mask; + UINT lpReserved1; + UINT lpReserved2; + LPWSTR pszText; + int cchTextMax; + int iImage; +} + +static if (_WIN32_IE >= 0x300) { + struct TCITEMA { + UINT mask; + DWORD dwState; + DWORD dwStateMask; + LPSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; + } + + struct TCITEMW { + UINT mask; + DWORD dwState; + DWORD dwStateMask; + LPWSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; + } +} else { + struct TCITEMA { + UINT mask; + UINT lpReserved1; + UINT lpReserved2; + LPSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; + } + + struct TCITEMW { + UINT mask; + UINT lpReserved1; + UINT lpReserved2; + LPWSTR pszText; + int cchTextMax; + int iImage; + LPARAM lParam; + } +} +alias TCITEMA* LPTCITEMA; +alias TCITEMA TC_ITEMA; +alias TCITEMW* LPTCITEMW; +alias TCITEMW TC_ITEMW; + +struct TCHITTESTINFO { + POINT pt; + UINT flags; +} +alias TCHITTESTINFO* LPTCHITTESTINFO, LPTC_HITTESTINFO; +alias TCHITTESTINFO TC_HITTESTINFO; + +struct TC_KEYDOWN { + NMHDR hdr; + WORD wVKey; + UINT flags; +} + +static if (_WIN32_IE >= 0x300) { + struct INITCOMMONCONTROLSEX { + DWORD dwSize = INITCOMMONCONTROLSEX.sizeof; + DWORD dwICC; + } + alias INITCOMMONCONTROLSEX* LPINITCOMMONCONTROLSEX; +} + +struct PBRANGE { + int iLow; + int iHigh; +} +alias PBRANGE* PPBRANGE; + +struct COLORSCHEME { + DWORD dwSize = COLORSCHEME.sizeof; + COLORREF clrBtnHighlight; + COLORREF clrBtnShadow; +} +alias COLORSCHEME* LPCOLORSCHEME; + +struct MCHITTESTINFO { + UINT cbSize = MCHITTESTINFO.sizeof; + POINT pt; + UINT uHit; + SYSTEMTIME st; +} +alias MCHITTESTINFO* PMCHITTESTINFO; + +alias DWORD MONTHDAYSTATE; +alias MONTHDAYSTATE* LPMONTHDAYSTATE; + +struct NMDAYSTATE { + NMHDR nmhdr; + SYSTEMTIME stStart; + int cDayState; + LPMONTHDAYSTATE prgDayState; +} +alias NMDAYSTATE* LPNMDAYSTATE; + +struct REBARINFO { + UINT cbSize = REBARINFO.sizeof; + UINT fMask; + HIMAGELIST himl; +} +alias REBARINFO* LPREBARINFO; + +static if (_WIN32_IE >= 0x400) { + struct REBARBANDINFOA { + UINT cbSize = REBARBANDINFOA.sizeof; + UINT fMask; + UINT fStyle; + COLORREF clrFore; + COLORREF clrBack; + LPSTR lpText; + UINT cch; + int iImage; + HWND hwndChild; + UINT cxMinChild; + UINT cyMinChild; + UINT cx; + HBITMAP hbmBack; + UINT wID; + UINT cyChild; + UINT cyMaxChild; + UINT cyIntegral; + UINT cxIdeal; + LPARAM lParam; + UINT cxHeader; + } + + struct REBARBANDINFOW { + UINT cbSize = REBARBANDINFOW.sizeof; + UINT fMask; + UINT fStyle; + COLORREF clrFore; + COLORREF clrBack; + LPWSTR lpText; + UINT cch; + int iImage; + HWND hwndChild; + UINT cxMinChild; + UINT cyMinChild; + UINT cx; + HBITMAP hbmBack; + UINT wID; + UINT cyChild; + UINT cyMaxChild; + UINT cyIntegral; + UINT cxIdeal; + LPARAM lParam; + UINT cxHeader; + } + + enum : size_t { + REBARBANDINFOA_V3_SIZE = REBARBANDINFOA.cyChild.offsetof, + REBARBANDINFOW_V3_SIZE = REBARBANDINFOW.cyChild.offsetof + } +} else { + struct REBARBANDINFOA { + UINT cbSize = REBARBANDINFOA.sizeof; + UINT fMask; + UINT fStyle; + COLORREF clrFore; + COLORREF clrBack; + LPSTR lpText; + UINT cch; + int iImage; + HWND hwndChild; + UINT cxMinChild; + UINT cyMinChild; + UINT cx; + HBITMAP hbmBack; + UINT wID; + } + + struct REBARBANDINFOW { + UINT cbSize = REBARBANDINFOW.sizeof; + UINT fMask; + UINT fStyle; + COLORREF clrFore; + COLORREF clrBack; + LPWSTR lpText; + UINT cch; + int iImage; + HWND hwndChild; + UINT cxMinChild; + UINT cyMinChild; + UINT cx; + HBITMAP hbmBack; + UINT wID; + } + + enum : size_t { + REBARBANDINFOA_V3_SIZE = REBARBANDINFOA.sizeof, + REBARBANDINFOW_V3_SIZE = REBARBANDINFOW.sizeof + } +} +alias REBARBANDINFOA* LPREBARBANDINFOA; +alias CPtr!(REBARBANDINFOA) LPCREBARBANDINFOA; +alias REBARBANDINFOW* LPREBARBANDINFOW; +alias CPtr!(REBARBANDINFOW) LPCREBARBANDINFOW; + +static if (_WIN32_IE >= 0x300) { + struct NMLVODSTATECHANGE { + NMHDR hdr; + int iFrom; + int iTo; + UINT uNewState; + UINT uOldState; + } + alias NMLVODSTATECHANGE* LPNMLVODSTATECHANGE; + + static if (_WIN32_WINNT >= 0x501) { + struct IMAGELISTDRAWPARAMS { + DWORD cbSize = IMAGELISTDRAWPARAMS.sizeof; + HIMAGELIST himl; + int i; + HDC hdcDst; + int x; + int y; + int cx; + int cy; + int xBitmap; + int yBitmap; + COLORREF rgbBk; + COLORREF rgbFg; + UINT fStyle; + DWORD dwRop; + DWORD fState; + DWORD Frame; + COLORREF crEffect; + } + } else { + struct IMAGELISTDRAWPARAMS { + DWORD cbSize = IMAGELISTDRAWPARAMS.sizeof; + HIMAGELIST himl; + int i; + HDC hdcDst; + int x; + int y; + int cx; + int cy; + int xBitmap; + int yBitmap; + COLORREF rgbBk; + COLORREF rgbFg; + UINT fStyle; + DWORD dwRop; + } + } + alias IMAGELISTDRAWPARAMS* LPIMAGELISTDRAWPARAMS; +} + +static if (_WIN32_IE >= 0x400) { + struct NMREBARCHILDSIZE { + NMHDR hdr; + UINT uBand; + UINT wID; + RECT rcChild; + RECT rcBand; + } + alias NMREBARCHILDSIZE* LPNMREBARCHILDSIZE; + + struct NMREBAR { + NMHDR hdr; + DWORD dwMask; + UINT uBand; + UINT fStyle; + UINT wID; + LPARAM lParam; + } + alias NMREBAR* LPNMREBAR; + + struct NMRBAUTOSIZE { + NMHDR hdr; + BOOL fChanged; + RECT rcTarget; + RECT rcActual; + } + alias NMRBAUTOSIZE* LPNMRBAUTOSIZE; + + static if (_WIN32_IE >= 0x500) { + struct NMREBARCHEVRON { + NMHDR hdr; + UINT uBand; + UINT wID; + LPARAM lParam; + RECT rc; + LPARAM lParamNM; + } + alias NMREBARCHEVRON* LPNMREBARCHEVRON; + } + + struct RBHITTESTINFO { + POINT pt; + UINT flags; + int iBand; + } + alias RBHITTESTINFO* LPRBHITTESTINFO; +} + +alias HANDLE HDSA; +alias HANDLE HDPA; + +version (Unicode) { + alias HDITEMW HDITEM; + alias LPHDITEMW LPHDITEM; + alias TOOLINFOW TOOLINFO; + alias TOOLINFOW* PTOOLINFO, LPTOOLINFO; + alias TTHITTESTINFOW TTHITTESTINFO; + alias TTHITTESTINFOW* LPHITTESTINFO, LPTTHITTESTINFO; + alias TOOLTIPTEXTW TOOLTIPTEXT; + alias TOOLTIPTEXTW* LPTOOLTIPTEXT; + alias NMTTDISPINFOW NMTTDISPINFO; + alias NMTTDISPINFOW* LPNMTTDISPINFO; + alias TV_ITEMW TV_ITEM; + alias TV_ITEMW* LPTV_ITEM; + alias TVITEMW TVITEM; + alias TVITEMW* LPTVITEM; + + static if (_WIN32_IE >= 0x400) { + alias TVITEMEXW TVITEMEX; + alias TVITEMEXW* LPTVITEMEX; + } + + alias TV_INSERTSTRUCTW TV_INSERTSTRUCT; + alias TV_INSERTSTRUCTW* LPTV_INSERTSTRUCT; + alias TVINSERTSTRUCTW TVINSERTSTRUCT; + alias TVINSERTSTRUCTW* LPTVINSERTSTRUCT; + alias NM_TREEVIEWW NM_TREEVIEW; + alias NM_TREEVIEWW* LPNM_TREEVIEW; + alias NMTREEVIEWW NMTREEVIEW; + alias NMTREEVIEWW* LPNMTREEVIEW; + alias NMHDDISPINFOW NMHDDISPINFO; + alias NMHDDISPINFOW* LPNMHDDISPINFO; + + alias ACM_OPENW ACM_OPEN; + alias COMBOBOXEXITEMW COMBOBOXEXITEM; + alias PCOMBOBOXEXITEMW PCOMBOBOXEXITEM; + //alias PCCOMBOBOXEXITEMW PCCOMBOBOXEXITEM; fixme + alias CBEM_INSERTITEMW CBEM_INSERTITEM; + alias CBEM_SETITEMW CBEM_SETITEM; + alias CBEM_GETITEMW CBEM_GETITEM; + alias CBEN_ENDEDITW CBEN_ENDEDIT; + alias NMCBEENDEDITW NMCBEENDEDIT; + alias LPNMCBEENDEDITW LPNMCBEENDEDIT; + alias PNMCBEENDEDITW PNMCBEENDEDIT; + + static if (_WIN32_IE >= 0x400) { + alias NMCOMBOBOXEXW NMCOMBOBOXEX; + alias PNMCOMBOBOXEXW PNMCOMBOBOXEX; + alias CBEN_GETDISPINFOW CBEN_GETDISPINFO; + alias CBEN_DRAGBEGINW CBEN_DRAGBEGIN; + alias NMCBEDRAGBEGINW NMCBEDRAGBEGIN; + alias LPNMCBEDRAGBEGINW LPNMCBEDRAGBEGIN; + alias PNMCBEDRAGBEGINW PNMCBEDRAGBEGIN; + } + + alias SB_GETTEXTW SB_GETTEXT; + alias SB_SETTEXTW SB_SETTEXT; + alias SB_GETTEXTLENGTHW SB_GETTEXTLENGTH; + alias HDM_INSERTITEMW HDM_INSERTITEM; + alias HDM_GETITEMW HDM_GETITEM; + alias HDM_SETITEMW HDM_SETITEM; + alias HDN_ITEMCHANGINGW HDN_ITEMCHANGING; + alias HDN_ITEMCHANGEDW HDN_ITEMCHANGED; + alias HDN_ITEMCLICKW HDN_ITEMCLICK; + alias HDN_ITEMDBLCLICKW HDN_ITEMDBLCLICK; + alias HDN_DIVIDERDBLCLICKW HDN_DIVIDERDBLCLICK; + alias HDN_BEGINTRACKW HDN_BEGINTRACK; + alias HDN_ENDTRACKW HDN_ENDTRACK; + alias HDN_TRACKW HDN_TRACK; + + static if (_WIN32_IE >= 0x300) { + alias HDN_GETDISPINFOW HDN_GETDISPINFO; + } + + alias HD_NOTIFYW HD_NOTIFY; + alias TBSAVEPARAMSW TBSAVEPARAMS; + alias TB_GETBUTTONTEXTW TB_GETBUTTONTEXT; + alias TB_SAVERESTOREW TB_SAVERESTORE; + alias TB_ADDSTRINGW TB_ADDSTRING; + + static if (_WIN32_IE >= 0x400) { + alias TBN_GETBUTTONINFOW TBN_GETBUTTONINFO; // fixme + alias TB_GETBUTTONINFOW TB_GETBUTTONINFO; + alias TB_SETBUTTONINFOW TB_SETBUTTONINFO; + alias TB_INSERTBUTTONW TB_INSERTBUTTON; + alias TB_ADDBUTTONSW TB_ADDBUTTONS; + alias TB_MAPACCELERATORW TB_MAPACCELERATOR; + alias TB_GETSTRINGW TB_GETSTRING; + alias TBBUTTONINFOW TBBUTTONINFO; + alias LPTBBUTTONINFOW LPTBBUTTONINFO; + alias TBN_GETDISPINFOW TBN_GETDISPINFO; + alias NMTBDISPINFOW NMTBDISPINFO; + alias LPNMTBDISPINFOW LPNMTBDISPINFO; + alias NMTBGETINFOTIPW NMTBGETINFOTIP; + alias LPNMTBGETINFOTIPW LPNMTBGETINFOTIP; + } + + alias TBNOTIFYW TBNOTIFY; + alias LPTBNOTIFYW LPTBNOTIFY; + alias NMTOOLBARW NMTOOLBAR; + alias LPNMTOOLBARW LPNMTOOLBAR; + alias TTM_ADDTOOLW TTM_ADDTOOL; + alias TTM_DELTOOLW TTM_DELTOOL; + alias TTM_NEWTOOLRECTW TTM_NEWTOOLRECT; + alias TTM_GETTOOLINFOW TTM_GETTOOLINFO; + alias TTM_SETTOOLINFOW TTM_SETTOOLINFO; + alias TTM_HITTESTW TTM_HITTEST; + alias TTM_GETTEXTW TTM_GETTEXT; + alias TTM_UPDATETIPTEXTW TTM_UPDATETIPTEXT; + alias TTM_ENUMTOOLSW TTM_ENUMTOOLS; + alias TTM_GETCURRENTTOOLW TTM_GETCURRENTTOOL; + alias TTN_NEEDTEXTW TTN_NEEDTEXT; + alias TTN_GETDISPINFOW TTN_GETDISPINFO; + //alias SB_GETTEXTW SB_GETTEXT; + //alias SB_SETTEXTW SB_SETTEXT; + //alias SB_GETTEXTLENGTHW SB_GETTEXTLENGTH; + alias LV_ITEMW LV_ITEM; + alias LVITEMW LVITEM; + alias LVITEM* LPLVITEM; + alias LPSTR_TEXTCALLBACKW LPSTR_TEXTCALLBACK; + + static if (_WIN32_IE >= 0x400) { + alias LVBKIMAGEW LVBKIMAGE; + alias LPLVBKIMAGEW LPLVBKIMAGE; + alias LVM_SETBKIMAGEW LVM_SETBKIMAGE; + alias LVM_GETBKIMAGEW LVM_GETBKIMAGE; + } + + alias LVM_GETITEMW LVM_GETITEM; + alias LVM_SETITEMW LVM_SETITEM; + alias LVM_INSERTITEMW LVM_INSERTITEM; + alias LV_FINDINFOW LV_FINDINFO; + alias LVFINDINFOW LVFINDINFO; + alias LPFINDINFOW LPFINDINFO; + alias NMLVFINDITEMW NMLVFINDITEM; + alias PNMLVFINDITEMW PNMLVFINDITEM; + alias LPNMLVFINDITEMW LPNMLVFINDITEM; + alias LVM_FINDITEMW LVM_FINDITEM; + alias LVM_GETSTRINGWIDTHW LVM_GETSTRINGWIDTH; + alias LVM_EDITLABELW LVM_EDITLABEL; + alias LV_COLUMNW LV_COLUMN; + alias LVCOLUMNW LVCOLUMN; + alias LVCOLUMNW* LPLVCOLUMN; + alias LVM_GETCOLUMNW LVM_GETCOLUMN; + alias LVM_SETCOLUMNW LVM_SETCOLUMN; + alias LVM_INSERTCOLUMNW LVM_INSERTCOLUMN; + alias LVM_GETITEMTEXTW LVM_GETITEMTEXT; + alias LVM_SETITEMTEXTW LVM_SETITEMTEXT; + alias LVM_GETISEARCHSTRINGW LVM_GETISEARCHSTRING; + alias LVN_BEGINLABELEDITW LVN_BEGINLABELEDIT; + alias LVN_ENDLABELEDITW LVN_ENDLABELEDIT; + alias LVN_GETDISPINFOW LVN_GETDISPINFO; + alias LVN_SETDISPINFOW LVN_SETDISPINFO; + + static if (_WIN32_IE >= 0x400) { + alias LVN_GETINFOTIPW LVN_GETINFOTIP; + alias NMLVGETINFOTIPW NMLVGETINFOTIP; + alias LPNMLVGETINFOTIPW LPNMLVGETINFOTIP; + } + + alias LV_DISPINFOW LV_DISPINFO; + alias NMLVDISPINFOW NMLVDISPINFO; + alias LPNMLVDISPINFOW LPNMLVDISPINFO; + alias TVM_INSERTITEMW TVM_INSERTITEM; + alias TVM_GETITEMW TVM_GETITEM; + alias TVM_SETITEMW TVM_SETITEM; + alias TVM_EDITLABELW TVM_EDITLABEL; + alias TVM_GETISEARCHSTRINGW TVM_GETISEARCHSTRING; + alias NMTVDISPINFOW TV_DISPINFO; + alias NMTVDISPINFOW NMTVDISPINFO; + alias LPNMTVDISPINFOW LPNMTVDISPINFO; + + static if (_WIN32_IE >= 0x400) { + alias NMTVGETINFOTIPW NMTVGETINFOTIP; + alias LPNMTVGETINFOTIPW LPNMTVGETINFOTIP; + alias TVN_GETINFOTIPW TVN_GETINFOTIP; + } + + alias TVN_SELCHANGINGW TVN_SELCHANGING; + alias TVN_SELCHANGEDW TVN_SELCHANGED; + alias TVN_GETDISPINFOW TVN_GETDISPINFO; + alias TVN_SETDISPINFOW TVN_SETDISPINFO; + alias TVN_ITEMEXPANDINGW TVN_ITEMEXPANDING; + alias TVN_ITEMEXPANDEDW TVN_ITEMEXPANDED; + alias TVN_BEGINDRAGW TVN_BEGINDRAG; + alias TVN_BEGINRDRAGW TVN_BEGINRDRAG; + alias TVN_DELETEITEMW TVN_DELETEITEM; + alias TVN_BEGINLABELEDITW TVN_BEGINLABELEDIT; + alias TVN_ENDLABELEDITW TVN_ENDLABELEDIT; + alias TC_ITEMHEADERW TC_ITEMHEADER; + alias TC_ITEMW TC_ITEM; + alias TCITEMW TCITEM; + alias LPTCITEMW LPTCITEM; + alias TCM_GETITEMW TCM_GETITEM; + alias TCM_SETITEMW TCM_SETITEM; + alias TCM_INSERTITEMW TCM_INSERTITEM; + alias CreateStatusWindowW CreateStatusWindow; + alias DrawStatusTextW DrawStatusText; + alias ImageList_LoadImageW ImageList_LoadImage; + alias DTM_SETFORMATW DTM_SETFORMAT; + alias DTN_USERSTRINGW DTN_USERSTRING; + alias DTN_WMKEYDOWNW DTN_WMKEYDOWN; + alias DTN_FORMATW DTN_FORMAT; + alias DTN_FORMATQUERYW DTN_FORMATQUERY; + alias REBARBANDINFOW REBARBANDINFO; + alias REBARBANDINFO* LPREBARBANDINFO; + alias LPCREBARBANDINFOW LPCREBARBANDINFO; + alias REBARBANDINFOW_V3_SIZE REBARBANDINFO_V3_SIZE; + alias RB_INSERTBANDW RB_INSERTBAND; + alias RB_SETBANDINFOW RB_SETBANDINFO; +} else { + alias HDITEMA HDITEM; + alias LPHDITEMA LPHDITEM; + alias TOOLINFOA TOOLINFO; + alias TOOLINFOA* PTOOLINFO, LPTOOLINFO; + alias TTHITTESTINFOA TTHITTESTINFO; + alias TTHITTESTINFOA* LPHITTESTINFO, LPTTHITTESTINFO; + alias TOOLTIPTEXTA TOOLTIPTEXT; + alias TOOLTIPTEXTA* LPTOOLTIPTEXT; + alias NMTTDISPINFOA NMTTDISPINFO; + alias NMTTDISPINFOA* LPNMTTDISPINFO; + alias TV_ITEMA TV_ITEM; + alias TV_ITEMA* LPTV_ITEM; + alias TVITEMA TVITEM; + alias TVITEMA* LPTVITEM; + + static if (_WIN32_IE >= 0x400) { + alias TVITEMEXA TVITEMEX; + alias TVITEMEXA* LPTVITEMEX; + } + + alias TV_INSERTSTRUCTA TV_INSERTSTRUCT; + alias TV_INSERTSTRUCTA* LPTV_INSERTSTRUCT; + alias TVINSERTSTRUCTA TVINSERTSTRUCT; + alias TVINSERTSTRUCTA* LPTVINSERTSTRUCT; + alias NM_TREEVIEWA NM_TREEVIEW; + alias NM_TREEVIEWA* LPNM_TREEVIEW; + alias NMTREEVIEWA NMTREEVIEW; + alias NMTREEVIEWA* LPNMTREEVIEW; + alias NMHDDISPINFOW NMHDDISPINFO; + alias NMHDDISPINFOW* LPNMHDDISPINFO; + + alias ACM_OPENA ACM_OPEN; + alias COMBOBOXEXITEMA COMBOBOXEXITEM; + alias PCOMBOBOXEXITEMA PCOMBOBOXEXITEM; + //alias PCCOMBOBOXEXITEMA PCCOMBOBOXEXITEM; fixme + alias CBEM_INSERTITEMA CBEM_INSERTITEM; + alias CBEM_SETITEMA CBEM_SETITEM; + alias CBEM_GETITEMA CBEM_GETITEM; + alias CBEN_ENDEDITA CBEN_ENDEDIT; + alias NMCBEENDEDITA NMCBEENDEDIT; + alias LPNMCBEENDEDITA LPNMCBEENDEDIT; + alias PNMCBEENDEDITA PNMCBEENDEDIT; + + static if (_WIN32_IE >= 0x400) { + alias TB_GETBUTTONINFOA TB_GETBUTTONINFO; + alias TB_SETBUTTONINFOA TB_SETBUTTONINFO; + alias TB_INSERTBUTTONA TB_INSERTBUTTON; + alias TB_ADDBUTTONSA TB_ADDBUTTONS; + alias TB_MAPACCELERATORA TB_MAPACCELERATOR; + alias TB_GETSTRINGA TB_GETSTRING; + alias NMCOMBOBOXEXA NMCOMBOBOXEX; + alias PNMCOMBOBOXEXA PNMCOMBOBOXEX; + alias CBEN_DRAGBEGINA CBEN_DRAGBEGIN; + alias CBEN_GETDISPINFOA CBEN_GETDISPINFO; + alias NMCBEDRAGBEGINA NMCBEDRAGBEGIN; + alias LPNMCBEDRAGBEGINA LPNMCBEDRAGBEGIN; + alias PNMCBEDRAGBEGINA PNMCBEDRAGBEGIN; + alias TBN_GETDISPINFOA TBN_GETDISPINFO; + alias NMTBDISPINFOA NMTBDISPINFO; + alias LPNMTBDISPINFOA LPNMTBDISPINFO; + alias NMTBGETINFOTIPA NMTBGETINFOTIP; + alias LPNMTBGETINFOTIPA LPNMTBGETINFOTIP; + } + + alias SB_GETTEXTA SB_GETTEXT; + alias SB_SETTEXTA SB_SETTEXT; + alias SB_GETTEXTLENGTHA SB_GETTEXTLENGTH; + alias HDM_INSERTITEMA HDM_INSERTITEM; + alias HDM_GETITEMA HDM_GETITEM; + alias HDM_SETITEMA HDM_SETITEM; + alias HDN_ITEMCHANGINGA HDN_ITEMCHANGING; + alias HDN_ITEMCHANGEDA HDN_ITEMCHANGED; + alias HDN_ITEMCLICKA HDN_ITEMCLICK; + alias HDN_ITEMDBLCLICKA HDN_ITEMDBLCLICK; + alias HDN_DIVIDERDBLCLICKA HDN_DIVIDERDBLCLICK; + alias HDN_BEGINTRACKA HDN_BEGINTRACK; + alias HDN_ENDTRACKA HDN_ENDTRACK; + alias HDN_TRACKA HDN_TRACK; + + static if (_WIN32_IE >= 0x300) { + alias HDN_GETDISPINFOA HDN_GETDISPINFO; + } + + alias HD_NOTIFYA HD_NOTIFY; + alias TBSAVEPARAMSA TBSAVEPARAMS; + alias TB_GETBUTTONTEXTA TB_GETBUTTONTEXT; + alias TB_SAVERESTOREA TB_SAVERESTORE; + alias TB_ADDSTRINGA TB_ADDSTRING; + alias TBN_GETBUTTONINFOA TBN_GETBUTTONINFO; + + static if (_WIN32_IE >= 0x400) { + alias TBBUTTONINFOA TBBUTTONINFO; + alias LPTBBUTTONINFOA LPTBBUTTONINFO; + } + + alias TBNOTIFYA TBNOTIFY; + alias LPTBNOTIFYA LPTBNOTIFY; + alias NMTOOLBARA NMTOOLBAR; + alias LPNMTOOLBARA LPNMTOOLBAR; + alias TTM_ADDTOOLA TTM_ADDTOOL; + alias TTM_DELTOOLA TTM_DELTOOL; + alias TTM_NEWTOOLRECTA TTM_NEWTOOLRECT; + alias TTM_GETTOOLINFOA TTM_GETTOOLINFO; + alias TTM_SETTOOLINFOA TTM_SETTOOLINFO; + alias TTM_HITTESTA TTM_HITTEST; + alias TTM_GETTEXTA TTM_GETTEXT; + alias TTM_UPDATETIPTEXTA TTM_UPDATETIPTEXT; + alias TTM_ENUMTOOLSA TTM_ENUMTOOLS; + alias TTM_GETCURRENTTOOLA TTM_GETCURRENTTOOL; + alias TTN_NEEDTEXTA TTN_NEEDTEXT; + alias TTN_GETDISPINFOA TTN_GETDISPINFO; + alias LV_ITEMA LV_ITEM; + alias LVITEMA LVITEM; + alias LVITEM* LPLVITEM; + alias LPSTR_TEXTCALLBACKA LPSTR_TEXTCALLBACK; + + static if (_WIN32_IE >= 0x400) { + alias LVBKIMAGEA LVBKIMAGE; + alias LPLVBKIMAGEA LPLVBKIMAGE; + alias LVM_SETBKIMAGEA LVM_SETBKIMAGE; + alias LVM_GETBKIMAGEA LVM_GETBKIMAGE; + } + + alias LVM_GETITEMA LVM_GETITEM; + alias LVM_SETITEMA LVM_SETITEM; + alias LVM_INSERTITEMA LVM_INSERTITEM; + alias LV_FINDINFOA LV_FINDINFO; + alias LVFINDINFOA LVFINDINFO; + alias LPFINDINFOA LPFINDINFO; + alias NMLVFINDITEMA NMLVFINDITEM; + alias PNMLVFINDITEMA PNMLVFINDITEM; + alias LPNMLVFINDITEMA LPNMLVFINDITEM; + alias LVM_FINDITEMA LVM_FINDITEM; + alias LVM_GETSTRINGWIDTHA LVM_GETSTRINGWIDTH; + alias LVM_EDITLABELA LVM_EDITLABEL; + alias LV_COLUMNA LV_COLUMN; + alias LVCOLUMNA LVCOLUMN; + alias LVCOLUMNA* LPLVCOLUMN; + alias LVM_GETCOLUMNA LVM_GETCOLUMN; + alias LVM_SETCOLUMNA LVM_SETCOLUMN; + alias LVM_INSERTCOLUMNA LVM_INSERTCOLUMN; + alias LVM_GETITEMTEXTA LVM_GETITEMTEXT; + alias LVM_SETITEMTEXTA LVM_SETITEMTEXT; + alias LVM_GETISEARCHSTRINGA LVM_GETISEARCHSTRING; + alias LVN_BEGINLABELEDITA LVN_BEGINLABELEDIT; + alias LVN_ENDLABELEDITA LVN_ENDLABELEDIT; + alias LVN_GETDISPINFOA LVN_GETDISPINFO; + alias LVN_SETDISPINFOA LVN_SETDISPINFO; + + static if (_WIN32_IE >= 0x400) { + alias LVN_GETINFOTIPA LVN_GETINFOTIP; + alias NMLVGETINFOTIPA NMLVGETINFOTIP; + alias LPNMLVGETINFOTIPA LPNMLVGETINFOTIP; + } + + alias LV_DISPINFOA LV_DISPINFO; + alias NMLVDISPINFOA NMLVDISPINFO; + alias LPNMLVDISPINFOA LPNMLVDISPINFO; + alias TVM_INSERTITEMA TVM_INSERTITEM; + alias TVM_GETITEMA TVM_GETITEM; + alias TVM_SETITEMA TVM_SETITEM; + alias TVM_EDITLABELA TVM_EDITLABEL; + alias TVM_GETISEARCHSTRINGA TVM_GETISEARCHSTRING; + alias NMTVDISPINFOA TV_DISPINFO; + alias NMTVDISPINFOA NMTVDISPINFO; + alias LPNMTVDISPINFOA LPNMTVDISPINFO; + + static if (_WIN32_IE >= 0x400) { + alias NMTVGETINFOTIPA NMTVGETINFOTIP; + alias LPNMTVGETINFOTIPA LPNMTVGETINFOTIP; + alias TVN_GETINFOTIPA TVN_GETINFOTIP; + } + + alias TVN_SELCHANGINGA TVN_SELCHANGING; + alias TVN_SELCHANGEDA TVN_SELCHANGED; + alias TVN_GETDISPINFOA TVN_GETDISPINFO; + alias TVN_SETDISPINFOA TVN_SETDISPINFO; + alias TVN_ITEMEXPANDINGA TVN_ITEMEXPANDING; + alias TVN_ITEMEXPANDEDA TVN_ITEMEXPANDED; + alias TVN_BEGINDRAGA TVN_BEGINDRAG; + alias TVN_BEGINRDRAGA TVN_BEGINRDRAG; + alias TVN_DELETEITEMA TVN_DELETEITEM; + alias TVN_BEGINLABELEDITA TVN_BEGINLABELEDIT; + alias TVN_ENDLABELEDITA TVN_ENDLABELEDIT; + alias TC_ITEMHEADERA TC_ITEMHEADER; + alias TC_ITEMA TC_ITEM; + alias TCITEMA TCITEM; + alias LPTCITEMA LPTCITEM; + alias TCM_GETITEMA TCM_GETITEM; + alias TCM_SETITEMA TCM_SETITEM; + alias TCM_INSERTITEMA TCM_INSERTITEM; + alias CreateStatusWindowA CreateStatusWindow; + alias DrawStatusTextA DrawStatusText; + alias ImageList_LoadImageA ImageList_LoadImage; + alias DTM_SETFORMATA DTM_SETFORMAT; + alias DTN_USERSTRINGA DTN_USERSTRING; + alias DTN_WMKEYDOWNA DTN_WMKEYDOWN; + alias DTN_FORMATA DTN_FORMAT; + alias DTN_FORMATQUERYA DTN_FORMATQUERY; + alias REBARBANDINFOA REBARBANDINFO; + alias REBARBANDINFOA* LPREBARBANDINFO; + alias LPCREBARBANDINFOA LPCREBARBANDINFO; + alias REBARBANDINFOA_V3_SIZE REBARBANDINFO_V3_SIZE; + alias RB_INSERTBANDA RB_INSERTBAND; + alias RB_SETBANDINFOA RB_SETBANDINFO; +} + + +alias INT function(PVOID, PVOID) PFNDPAENUMCALLBACK; +alias INT function(PVOID, PVOID) PFNDSAENUMCALLBACK; +alias INT function(PVOID, PVOID, LPARAM) PFNDPACOMPARE; + +static if (_WIN32_WINNT >= 0x501) { + extern (Windows) + alias LRESULT function(HWND, UINT, WPARAM, LPARAM, UINT_PTR, DWORD_PTR) + SUBCLASSPROC; + + struct LITEM { + UINT mask; + int iLink; + UINT state; + UINT stateMask; + WCHAR[MAX_LINKID_TEXT] szID; + WCHAR[L_MAX_URL_LENGTH] szUrl; + } + alias LITEM* PLITEM; + + struct LHITTESTINFO { + POINT pt; + LITEM item; + } + alias LHITTESTINFO* PLHITTESTINFO; + + struct NMLINK { + NMHDR hdr; + LITEM item; + } + alias NMLINK* PNMLINK; +} + +uint INDEXTOOVERLAYMASK(uint i) { return i << 8; } +uint INDEXTOSTATEIMAGEMASK(uint i) { return i << 12; } + +template HANDLE_WM_NOTIFY(R) { + R HANDLE_WM_NOTIFY(HWND hwnd, WPARAM wParam, LPARAM lParam, + R function(HWND, int, NMHDR*) fn) { + return fn(hwnd, wParam, cast(NMHDR*) lParam); + } +} +int FORWARD_WM_NOTIFY(HWND hwnd, int idFrom, NMHDR* pnmhdr, + int function(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) fn) { + return fn(hwnd, WM_NOTIFY, idFrom, cast(LPARAM) pnmhdr); +} + +//#define CCSIZEOF_STRUCT(s, m) (((int)((PBYTE)(&((s*)0)->m)-((PBYTE)((s*)0))))+sizeof(((s*)0)->m)) + +LPARAM MAKEIPADDRESS(ubyte b1, ubyte b2, ubyte b3, ubyte b4) { + return (cast(DWORD) b1 << 24) + | (cast(DWORD) b2 << 16) + | (cast(DWORD) b3 << 8) + | (cast(DWORD) b4); +} + +LPARAM MAKEIPRANGE(ubyte low, ubyte high) { + return (cast(int) high << 8) | low; +} + +ubyte FIRST_IPADDRESS(LPARAM x) { + return cast(ubyte) (x >> 24); +} + +ubyte SECOND_IPADDRESS(LPARAM x) { + return cast(ubyte) (x >> 16); +} + +ubyte THIRD_IPADDRESS(LPARAM x) { + return cast(ubyte) (x >> 8); +} + +ubyte FOURTH_IPADDRESS(LPARAM x) { + return cast(ubyte) x; +} + +HWND Animate_Create(HWND hwndP, UINT id, DWORD dwStyle, + HINSTANCE hInstance) { + return CreateWindow(cast(TCHAR*)ANIMATE_CLASS.ptr, null, dwStyle, 0, 0, 0, 0, hwndP, + cast(HMENU) id, hInstance, null); +} + +BOOL Animate_Open(HWND hwnd, LPTSTR szName) { + return SendMessage(hwnd, ACM_OPEN, 0, cast(LPARAM) szName); +} + +BOOL Animate_OpenEx(HWND hwnd, HINSTANCE hInst, LPTSTR szName) { + return SendMessage(hwnd, ACM_OPEN, cast(WPARAM) hInst, + cast(LPARAM) szName); +} + +BOOL Animate_Play(HWND hwnd, int from, int to, int rep) { + return SendMessage(hwnd, ACM_PLAY, rep, + MAKELONG(cast(ushort) from, cast(ushort) to)); +} + +BOOL Animate_Stop(HWND hwnd) { + return SendMessage(hwnd, ACM_STOP, 0, 0); +} + +BOOL Animate_Close(HWND hwnd) { + return Animate_Open(hwnd, null); +} + +BOOL Animate_Seek(HWND hwnd, int frame) { + return Animate_Play(hwnd, frame, frame, 1); +} + +extern (Windows) { + HBITMAP CreateMappedBitmap(HINSTANCE, int, UINT, LPCOLORMAP, int); + HWND CreateStatusWindowA(LONG, LPCSTR, HWND, UINT); + HWND CreateStatusWindowW(LONG, LPCWSTR, HWND, UINT); + HWND CreateToolbarEx(HWND, DWORD, UINT, int, HINSTANCE, UINT, + LPCTBBUTTON, int, int, int, int, int, UINT); + HWND CreateUpDownControl(DWORD, int, int, int, int, HWND, int, HINSTANCE, + HWND, int, int, int); +} + +HWND DateTime_GetMonthCal(HWND hwnd) { + return cast(HWND) SendMessage(hwnd, DTM_GETMONTHCAL, 0, 0); +} + +COLORREF DateTime_GetMonthCalColor(HWND hwnd, int iColor) { + return cast(COLORREF) SendMessage(hwnd, DTM_GETMCCOLOR, iColor, 0); +} + +HFONT DateTime_GetMonthCalFont(HWND hwnd) { + return cast(HFONT) SendMessage(hwnd, DTM_GETMCFONT, 0, 0); +} + +DWORD DateTime_GetRange(HWND hwnd, LPSYSTEMTIME lpSysTimeArray) { + return SendMessage(hwnd, DTM_GETRANGE, 0, cast(LPARAM) lpSysTimeArray); +} + +DWORD DateTime_GetSystemtime(HWND hwnd, LPSYSTEMTIME lpSysTime) { + return SendMessage(hwnd, DTM_GETSYSTEMTIME, 0, cast(LPARAM) lpSysTime); +} + +BOOL DateTime_SetFormat(HWND hwnd, LPCTSTR lpszFormat) { + return cast(BOOL) SendMessage(hwnd, DTM_SETFORMAT, 0, + cast(LPARAM) lpszFormat); +} + +LRESULT DateTime_SetMonthCalColor(HWND hwnd, int iColor, COLORREF clr) { + return SendMessage(hwnd, DTM_SETMCCOLOR, cast(WPARAM) iColor, + cast(LPARAM) clr); +} + +void DateTime_SetMonthCalFont(HWND hwnd, HFONT hfont, BOOL fRedraw) { + SendMessage(hwnd, DTM_SETMCFONT, cast(WPARAM) hfont, fRedraw); +} + +BOOL DateTime_SetRange(HWND hwnd, WPARAM flags, LPSYSTEMTIME lpSysTimeArray) { + return cast(BOOL) SendMessage(hwnd, DTM_SETRANGE, flags, + cast(LPARAM) lpSysTimeArray); +} + +BOOL DateTime_SetSystemtime(HWND hwnd, WPARAM flag, LPSYSTEMTIME lpSysTime) { + return cast(BOOL) SendMessage(hwnd, DTM_SETSYSTEMTIME, flag, + cast(LPARAM) lpSysTime); +} + +extern (Windows) { + void DrawInsert(HWND, HWND, int); + void DrawStatusTextA(HDC, LPRECT, LPCSTR, UINT); + void DrawStatusTextW(HDC, LPRECT, LPCWSTR, UINT); + void GetEffectiveClientRect(HWND, LPRECT, LPINT); +} + +int Header_GetItemCount(HWND w) { + return SendMessage(w, HDM_GETITEMCOUNT, 0, 0); +} + +int Header_InsertItem(HWND w, int i, CPtr!(HDITEM) phdi) { + return SendMessage(w, HDM_INSERTITEM, i, cast(LPARAM) phdi); +} + +BOOL Header_DeleteItem(HWND w, int i) { + return cast(BOOL) SendMessage(w, HDM_DELETEITEM, i, 0); +} + +BOOL Header_GetItem(HWND w, int i, LPHDITEM phdi) { + return cast(BOOL) SendMessage(w, HDM_GETITEM, i, cast(LPARAM) phdi); +} + +BOOL Header_SetItem(HWND w, int i, CPtr!(HDITEM) phdi) { + return cast(BOOL) SendMessage(w, HDM_SETITEM, i, cast(LPARAM) phdi); +} + +BOOL Header_Layout(HWND w, LPHDLAYOUT playout) { + return SendMessage(w, HDM_LAYOUT, 0, cast(LPARAM) playout); +} + +static if (_WIN32_IE >= 0x300) { + int Header_OrderToIndex(HWND w, int i) { + return SendMessage(w, HDM_ORDERTOINDEX, i, 0); + } + + BOOL Header_GetItemRect(HWND w, int i, RECT* r) { + return cast(BOOL) SendMessage(w, HDM_GETITEMRECT, i, cast(LPARAM) r); + } + + BOOL Header_GetOrderArray(HWND w, int iSize, LPINT lpiArray) { + return cast(BOOL) SendMessage(w, HDM_GETORDERARRAY, iSize, + cast(LPARAM) lpiArray); + } + + BOOL Header_SetOrderArray(HWND w, int iSize, LPINT lpiArray) { + return cast(BOOL) SendMessage(w, HDM_SETORDERARRAY, iSize, + cast(LPARAM) lpiArray); + } + + HIMAGELIST Header_CreateDragImage(HWND w, int i) { + return cast(HIMAGELIST) SendMessage(w, HDM_CREATEDRAGIMAGE, i, 0); + } + + HIMAGELIST Header_SetImageList(HWND w, HIMAGELIST himl) { + return cast(HIMAGELIST) SendMessage(w, HDM_SETIMAGELIST, 0, + cast(LPARAM) himl); + } + + HIMAGELIST Header_GetImageList(HWND w) { + return cast(HIMAGELIST) SendMessage(w, HDM_GETIMAGELIST, 0, 0); + } +} + +static if (_WIN32_IE >= 0x400) { + BOOL Header_GetUnicodeFormat(HWND w) { + return cast(BOOL) SendMessage(w, HDM_GETUNICODEFORMAT, 0, 0); + } + + BOOL Header_SetUnicodeFormat(HWND w, BOOL fUnicode) { + return cast(BOOL) SendMessage(w, HDM_SETUNICODEFORMAT, fUnicode, 0); + } +} + +extern (Windows) { + HDSA DSA_Create(INT, INT); + BOOL DSA_Destroy(HDSA); + VOID DSA_DestroyCallback(HDSA, PFNDSAENUMCALLBACK, PVOID); + PVOID DSA_GetItemPtr(HDSA, INT); + INT DSA_InsertItem(HDSA, INT, PVOID); + HDPA DPA_Create(INT); + BOOL DPA_Destroy(HDPA); + PVOID DPA_DeletePtr(HDPA, INT); + BOOL DPA_DeleteAllPtrs(HDPA); + VOID DPA_EnumCallback(HDPA, PFNDPAENUMCALLBACK, PVOID); + VOID DPA_DestroyCallback(HDPA, PFNDPAENUMCALLBACK, PVOID); + BOOL DPA_SetPtr(HDPA, INT, PVOID); + INT DPA_InsertPtr(HDPA, INT, PVOID); + PVOID DPA_GetPtr(HDPA, INT_PTR); + BOOL DPA_Sort(HDPA, PFNDPACOMPARE, LPARAM); + INT DPA_Search(HDPA, PVOID, INT, PFNDPACOMPARE, LPARAM, UINT); + BOOL Str_SetPtrW(LPWSTR*, LPCWSTR); + + static if (_WIN32_IE >= 0x400) { + BOOL FlatSB_EnableScrollBar(HWND, INT, UINT); + BOOL FlatSB_ShowScrollBar(HWND, INT, BOOL); + BOOL FlatSB_GetScrollRange(HWND, INT, LPINT, LPINT); + BOOL FlatSB_GetScrollInfo(HWND, INT, LPSCROLLINFO); + INT FlatSB_GetScrollPos(HWND, INT); + BOOL FlatSB_GetScrollProp(HWND, INT, LPINT); + version (Win64) { + BOOL FlatSB_GetScrollPropPtr(HWND, INT, PINT_PTR); + } else { + alias FlatSB_GetScrollProp FlatSB_GetScrollPropPtr; + } + INT FlatSB_SetScrollPos(HWND, INT, INT, BOOL); + INT FlatSB_SetScrollInfo(HWND, INT, LPSCROLLINFO, BOOL); + INT FlatSB_SetScrollRange(HWND, INT, INT, INT, BOOL); + BOOL FlatSB_SetScrollProp(HWND, UINT, INT_PTR, BOOL); + alias FlatSB_SetScrollProp FlatSB_SetScrollPropPtr; + BOOL InitializeFlatSB(HWND); + HRESULT UninitializeFlatSB(HWND); + } + + static if (_WIN32_WINNT >= 0x501) { + BOOL SetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR); + BOOL GetWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR, DWORD_PTR*); + BOOL RemoveWindowSubclass(HWND, SUBCLASSPROC, UINT_PTR); + LRESULT DefSubclassProc(HWND, UINT, WPARAM, LPARAM); + INT DrawShadowText(HDC, LPCWSTR, UINT, RECT*, DWORD, COLORREF, + COLORREF, INT, INT); + } + + int ImageList_Add(HIMAGELIST, HBITMAP, HBITMAP); + int ImageList_AddMasked(HIMAGELIST, HBITMAP, COLORREF); + BOOL ImageList_BeginDrag(HIMAGELIST, int, int, int); + HIMAGELIST ImageList_Create(int, int, UINT, int, int); + BOOL ImageList_Destroy(HIMAGELIST); + BOOL ImageList_DragEnter(HWND, int, int); + BOOL ImageList_DragLeave(HWND); + BOOL ImageList_DragMove(int, int); + BOOL ImageList_DragShowNolock(BOOL); + BOOL ImageList_Draw(HIMAGELIST, int, HDC, int, int, UINT); + BOOL ImageList_DrawEx(HIMAGELIST, int, HDC, int, int, int, int, COLORREF, + COLORREF, UINT); + void ImageList_EndDrag(PVOID); + COLORREF ImageList_GetBkColor(HIMAGELIST); + HIMAGELIST ImageList_GetDragImage(LPPOINT, LPPOINT); + HICON ImageList_GetIcon(HIMAGELIST, int, UINT); + BOOL ImageList_GetIconSize(HIMAGELIST, int*, int*); + int ImageList_GetImageCount(HIMAGELIST); + BOOL ImageList_GetImageInfo(HIMAGELIST, int, IMAGEINFO*); + HIMAGELIST ImageList_LoadImageA(HINSTANCE, LPCSTR, int, int, COLORREF, + UINT, UINT); + HIMAGELIST ImageList_LoadImageW(HINSTANCE, LPCWSTR, int, int, COLORREF, + UINT, UINT); + HIMAGELIST ImageList_Merge(HIMAGELIST, int, HIMAGELIST, int, int, int); + BOOL ImageList_Remove(HIMAGELIST, int); + BOOL ImageList_Replace(HIMAGELIST, int, HBITMAP, HBITMAP); + int ImageList_ReplaceIcon(HIMAGELIST, int, HICON); + COLORREF ImageList_SetBkColor(HIMAGELIST, COLORREF); + BOOL ImageList_SetDragCursorImage(HIMAGELIST, int, int, int); + BOOL ImageList_SetIconSize(HIMAGELIST, int, int); + BOOL ImageList_SetOverlayImage(HIMAGELIST, int, int); + + //#ifdef _OBJIDL_H + HIMAGELIST ImageList_Read(LPSTREAM); + BOOL ImageList_Write(HIMAGELIST, LPSTREAM); + //#endif + + static if (_WIN32_IE >= 0x400) { + HIMAGELIST ImageList_Duplicate(HIMAGELIST himl); + } + + void InitCommonControls(); + + static if (_WIN32_IE >= 0x300) { + BOOL InitCommonControlsEx(LPINITCOMMONCONTROLSEX); + } + + int LBItemFromPt(HWND, POINT, BOOL); +} + +int ImageList_AddIcon(HIMAGELIST himl, HICON hicon) { + return ImageList_ReplaceIcon(himl, -1, hicon); +} + +HICON ImageList_ExtractIcon(HINSTANCE hi, HIMAGELIST himl, int i) { + return ImageList_GetIcon(himl, i, 0); +} + +HIMAGELIST ImageList_LoadBitmap(HINSTANCE hi, LPCTSTR lpbmp, int cx, + int cGrow, COLORREF crMask) { + return ImageList_LoadImage(hi, lpbmp, cx, cGrow, crMask, IMAGE_BITMAP, 0); +} + +BOOL ImageList_RemoveAll(HIMAGELIST himl) { + return ImageList_Remove(himl, -1); +} + +COLORREF ListView_GetBkColor(HWND w) { + return cast(COLORREF) SendMessage(w, LVM_GETBKCOLOR, 0, 0); +} + +HIMAGELIST ListView_GetImageList(HWND w, int i) { + return cast(HIMAGELIST) SendMessage(w, LVM_GETIMAGELIST, i, 0); +} + +int ListView_GetItemCount(HWND w) { + return SendMessage(w, LVM_GETITEMCOUNT, 0, 0); +} + +BOOL ListView_GetItem(HWND w, LPLVITEM pitem) { + return cast(BOOL) SendMessage(w, LVM_GETITEM, 0, cast(LPARAM) pitem); +} + +BOOL ListView_SetBkColor(HWND w, COLORREF c) { + return cast(BOOL) SendMessage(w, LVM_SETBKCOLOR, 0, cast(LPARAM) c); +} + +HIMAGELIST ListView_SetImageList(HWND w, HIMAGELIST h, int i) { + return cast(HIMAGELIST) SendMessage(w, LVM_SETIMAGELIST, i, + cast(LPARAM) h); +} + +BOOL ListView_SetItem(HWND w, CPtr!(LV_ITEM) i) { + return cast(BOOL) SendMessage(w, LVM_SETITEM, 0, cast(LPARAM) i); +} + +int ListView_InsertItem(HWND w, CPtr!(LV_ITEM) i) { + return SendMessage(w, LVM_INSERTITEM, 0, cast(LPARAM) i); +} + +BOOL ListView_DeleteItem(HWND w, int i) { + return cast(BOOL) SendMessage(w, LVM_DELETEITEM, i, 0); +} + +BOOL ListView_DeleteAllItems(HWND w) { + return cast(BOOL) SendMessage(w, LVM_DELETEALLITEMS, 0, 0); +} + +UINT ListView_GetCallbackMask(HWND w) { + return cast(UINT) SendMessage(w, LVM_GETCALLBACKMASK, 0, 0); +} + +BOOL ListView_SetCallbackMask(HWND w, UINT m) { + return cast(BOOL) SendMessage(w, LVM_SETCALLBACKMASK, m, 0); +} + +int ListView_GetNextItem(HWND w, int i, UINT f) { + return SendMessage(w, LVM_GETNEXTITEM, i, MAKELPARAM(cast(ushort)f, 0)); +} + +int ListView_FindItem(HWND w, int i, CPtr!(LV_FINDINFO) p) { + return SendMessage(w, LVM_FINDITEM, i, cast(LPARAM) p); +} + +BOOL ListView_GetItemRect(HWND w, int i, LPRECT p, int c) { + return cast(BOOL) SendMessage(w, LVM_GETITEMRECT, i, p ? + (p.left = c, cast(LPARAM) p) : 0); +} + +BOOL ListView_SetItemPosition(HWND w, int i, int x, int y) { + return cast(BOOL) SendMessage(w, LVM_SETITEMPOSITION, i, MAKELPARAM(cast(ushort)x, cast(ushort)y)); +} + +BOOL ListView_GetItemPosition(HWND w, int i, POINT* p) { + return cast(BOOL) SendMessage(w, LVM_GETITEMPOSITION, i, cast(LPARAM) p); +} + +DWORD ListView_GetItemSpacing(HWND w, BOOL f) { + return cast(DWORD) SendMessage(w, LVM_GETITEMSPACING, f, 0); +} + +int ListView_GetStringWidth(HWND w, LPCSTR s) { + return SendMessage(w, LVM_GETSTRINGWIDTH, 0, cast(LPARAM) s); +} + +int ListView_HitTest(HWND w, LPLVHITTESTINFO p) { + return SendMessage(w, LVM_HITTEST, 0, cast(LPARAM) p); +} + +BOOL ListView_EnsureVisible(HWND w, int i, BOOL f) { + return cast(BOOL) SendMessage(w, LVM_ENSUREVISIBLE, i, MAKELPARAM(cast(ushort)f, 0)); +} + +BOOL ListView_Scroll(HWND w, int dx, int dy) { + return cast(BOOL) SendMessage(w, LVM_SCROLL, dx, dy); +} + +BOOL ListView_RedrawItems(HWND w, int f, int l) { + return cast(BOOL) SendMessage(w, LVM_REDRAWITEMS, f, l); +} + +BOOL ListView_Arrange(HWND w, UINT c) { + return cast(BOOL) SendMessage(w, LVM_ARRANGE, c, 0); +} + +HWND ListView_EditLabel(HWND w, int i) { + return cast(HWND) SendMessage(w, LVM_EDITLABEL, i, 0); +} + +HWND ListView_GetEditControl(HWND w) { + return cast(HWND) SendMessage(w, LVM_GETEDITCONTROL, 0, 0); +} + +BOOL ListView_GetColumn(HWND w, int i, LPLVCOLUMN p) { + return cast(BOOL) SendMessage(w, LVM_GETCOLUMN, i, cast(LPARAM) p); +} + +BOOL ListView_SetColumn(HWND w, int i, CPtr!(LV_COLUMN) p) { + return cast(BOOL) SendMessage(w, LVM_SETCOLUMN, i, cast(LPARAM) p); +} + +int ListView_InsertColumn(HWND w, int i, CPtr!(LV_COLUMN) p) { + return SendMessage(w, LVM_INSERTCOLUMN, i, cast(LPARAM) p); +} + +BOOL ListView_DeleteColumn(HWND w, int i) { + return cast(BOOL) SendMessage(w, LVM_DELETECOLUMN, i, 0); +} + +int ListView_GetColumnWidth(HWND w, int i) { + return SendMessage(w, LVM_GETCOLUMNWIDTH, i, 0); +} + +BOOL ListView_SetColumnWidth(HWND w, int i, int x) { + return cast(BOOL) SendMessage(w, LVM_SETCOLUMNWIDTH, i, MAKELPARAM(cast(ushort)x, 0)); +} + +HIMAGELIST ListView_CreateDragImage(HWND w, int i, LPPOINT p) { + return cast(HIMAGELIST) SendMessage(w, LVM_CREATEDRAGIMAGE, i, + cast(LPARAM) p); +} + +BOOL ListView_GetViewRect(HWND w, RECT* p) { + return cast(BOOL) SendMessage(w, LVM_GETVIEWRECT, 0, cast(LPARAM) p); +} + +COLORREF ListView_GetTextColor(HWND w) { + return cast(COLORREF) SendMessage(w, LVM_GETTEXTCOLOR, 0, 0); +} + +BOOL ListView_SetTextColor(HWND w, COLORREF c) { + return cast(BOOL) SendMessage(w, LVM_SETTEXTCOLOR, 0, cast(LPARAM) c); +} + +COLORREF ListView_GetTextBkColor(HWND w) { + return cast(COLORREF) SendMessage(w, LVM_GETTEXTBKCOLOR, 0, 0); +} + +BOOL ListView_SetTextBkColor(HWND w, COLORREF c) { + return cast(BOOL) SendMessage(w, LVM_SETTEXTBKCOLOR, 0, cast(LPARAM) c); +} + +int ListView_GetTopIndex(HWND w) { + return SendMessage(w, LVM_GETTOPINDEX, 0, 0); +} + +int ListView_GetCountPerPage(HWND w) { + return SendMessage(w, LVM_GETCOUNTPERPAGE, 0, 0); +} + +BOOL ListView_GetOrigin(HWND w, LPPOINT p) { + return cast(BOOL) SendMessage(w, LVM_GETORIGIN, 0, cast(LPARAM) p); +} + +BOOL ListView_Update(HWND w, WPARAM i) { + return cast(BOOL) SendMessage(w, LVM_UPDATE, i, 0); +} + +void ListView_SetItemState(HWND w, int i, UINT d, UINT m) { + LV_ITEM _lvi; + _lvi.stateMask = m; + _lvi.state = d; + SendMessage(w, LVM_SETITEMSTATE, i, cast(LPARAM) &_lvi); +} + +UINT ListView_GetItemState(HWND w, int i, UINT m) { + return cast(UINT) SendMessage(w, LVM_GETITEMSTATE, i, m); +} + +void ListView_GetItemText(HWND w, int i, int iS, LPTSTR s, int n) { + LV_ITEM _lvi; + _lvi.iSubItem = iS; + _lvi.cchTextMax = n; + _lvi.pszText = s; + SendMessage(w, LVM_GETITEMTEXT, i, cast(LPARAM) &_lvi); +} + +void ListView_SetItemText(HWND w, int i, int iS, LPTSTR s) { + LV_ITEM _lvi; + _lvi.iSubItem = iS; + _lvi.pszText = s; + SendMessage(w, LVM_SETITEMTEXT, i, cast(LPARAM) &_lvi); +} + +void ListView_SetItemCount(HWND w, int n) { + SendMessage(w, LVM_SETITEMCOUNT, n, 0); +} + +BOOL ListView_SortItems(HWND w, PFNLVCOMPARE f, LPARAM l) { + return cast(BOOL) SendMessage(w, LVM_SORTITEMS, l, cast(LPARAM) f); +} + +void ListView_SetItemPosition32(HWND w, int i, int x, int y) { + POINT p; + p.x = x; + p.y = y; + SendMessage(w, LVM_SETITEMPOSITION32, i, cast(LPARAM) &p); +} + +UINT ListView_GetSelectedCount(HWND w) { + return cast(UINT) SendMessage(w, LVM_GETSELECTEDCOUNT, 0, 0); +} + +UINT ListView_GetCheckState(HWND w, UINT i) { + return ((cast(UINT) SendMessage(w, LVM_GETITEMSTATE, i, LVIS_STATEIMAGEMASK)) >> 12) - 1; +} + +void ListView_SetCheckState(HWND w, UINT i, BOOL f) { + ListView_SetItemState(w, i, INDEXTOSTATEIMAGEMASK(f ? 2 : 1), + LVIS_STATEIMAGEMASK); +} + +BOOL ListView_GetISearchString(HWND w, LPSTR lpsz) { + return cast(BOOL) SendMessage(w, LVM_GETISEARCHSTRING, 0, + cast(LPARAM) lpsz); +} + +void ListView_CancelEditLabel(HWND w) { + SendMessage(w, LVM_CANCELEDITLABEL, 0, 0); +} + +int ListView_EnableGroupView(HWND w, BOOL i) { + return cast(int) SendMessage(w, LVM_ENABLEGROUPVIEW, i, 0); +} + +static if (_WIN32_WINDOWS >= 0x410 && (_WIN32_WINNT >= 0x500 || _WIN32_IE >= 0x500)) { + BOOL ListView_SortItemsEx(HWND w, PFNLVCOMPARE c, LPARAM p) { + return SendMessage(w, LVM_SORTITEMSEX, cast(WPARAM) p, cast(LPARAM)c); + } +} + +static if (_WIN32_WINNT >= 0x501) { + int ListView_GetGroupInfo(HWND w, int i, PLVGROUP p) { + return SendMessage(w, LVM_GETGROUPINFO, i, cast(LPARAM) p); + } + + void ListView_GetGroupMetrics(HWND w, PLVGROUPMETRICS p) { + SendMessage(w, LVM_GETGROUPMETRICS, 0, cast(LPARAM) p); + } + + BOOL ListView_GetInsertMark(HWND w, PLVINSERTMARK p) { + return SendMessage(w, LVM_GETINSERTMARK, 0, cast(LPARAM) p); + } + + COLORREF ListView_GetInsertMarkColor(HWND w) { + return SendMessage(w, LVM_GETINSERTMARKCOLOR, 0, 0); + } + + int ListView_GetInsertMarkRect(HWND w, LPRECT p) { + return SendMessage(w, LVM_GETINSERTMARKRECT, 0, cast(LPARAM) p); + } + + COLORREF ListView_GetOutlineColor(HWND w) { + return SendMessage(w, LVM_GETOUTLINECOLOR, 0, 0); + } + + UINT ListView_GetSelectedColumn(HWND w) { + return SendMessage(w, LVM_GETSELECTEDCOLUMN, 0, 0); + } + + void ListView_GetTileInfo(HWND w, PLVTILEINFO p) { + SendMessage(w, LVM_GETTILEINFO, 0, cast(LPARAM) p); + } + + void ListView_GetTileViewInfo(HWND w, PLVTILEVIEWINFO p) { + SendMessage(w, LVM_GETTILEVIEWINFO, 0, cast(LPARAM) p); + } + + DWORD ListView_GetView(HWND w) { + return SendMessage(w, LVM_GETVIEW, 0, 0); + } + + BOOL ListView_HasGroup(HWND w, int i) { + return SendMessage(w, LVM_HASGROUP, i, 0); + } + + int ListView_InsertGroup(HWND w, int i, PLVGROUP p) { + return SendMessage(w, LVM_INSERTGROUP, i, cast(LPARAM) p); + } + + void ListView_InsertGroupSorted(HWND w, PLVINSERTGROUPSORTED p) { + SendMessage(w, LVM_INSERTGROUPSORTED, cast(WPARAM) p, 0); + } + + BOOL ListView_InsertMarkHitTest(HWND w, LPPOINT p, PLVINSERTMARK t) { + return SendMessage(w, LVM_INSERTMARKHITTEST, cast(WPARAM) p, cast(LPARAM) t); + } + + BOOL ListView_IsGroupViewEnabled(HWND w) { + return SendMessage(w, LVM_ISGROUPVIEWENABLED, 0, 0); + } + + UINT ListView_MapIDToIndex(HWND w, UINT i) { + return SendMessage(w, LVM_MAPIDTOINDEX, i, 0); + } + + /* ??? MSDN documents this as "Not implemented", except in relation to + * Windows CE/Mobile. + */ + void ListView_MoveGroup(HWND w, int i, int t) { + SendMessage(w, LVM_MOVEGROUP, i, t); + } + + void ListView_RemoveAllGroups(HWND w) { + SendMessage(w, LVM_REMOVEALLGROUPS, 0, 0); + } + + int ListView_RemoveGroup(HWND w, int i) { + return SendMessage(w, LVM_REMOVEGROUP, i, 0); + } + + int ListView_SetGroupInfo(HWND w, int i, PLVGROUP p) { + return SendMessage(w, LVM_SETGROUPINFO, i, cast(LPARAM) p); + } + + void ListView_SetGroupMetrics(HWND w, PLVGROUPMETRICS p) { + SendMessage(w, LVM_SETGROUPMETRICS, 0, cast(LPARAM) p); + } + + BOOL ListView_SetInfoTip(HWND w, PLVSETINFOTIP p) { + return SendMessage(w, LVM_SETINFOTIP, 0, cast(LPARAM) p); + } + + BOOL ListView_SetInsertMark(HWND w, PLVINSERTMARK p) { + return SendMessage(w, LVM_SETINSERTMARK, 0, cast(LPARAM) p); + } + + COLORREF ListView_SetInsertMarkColor(HWND w, COLORREF c) { + return SendMessage(w, LVM_SETINSERTMARKCOLOR, 0, c); + } + + COLORREF ListView_SetOutlineColor(HWND w, COLORREF c) { + return SendMessage(w, LVM_SETOUTLINECOLOR, 0, c); + } + + void ListView_SetSelectedColumn(HWND w, int i) { + SendMessage(w, LVM_SETSELECTEDCOLUMN, i, 0); + } + + BOOL ListView_SetTileInfo(HWND w, PLVTILEINFO p) { + return SendMessage(w, LVM_SETTILEINFO, 0, cast(LPARAM) p); + } + + BOOL ListView_SetTileViewInfo(HWND w, PLVTILEVIEWINFO p) { + return SendMessage(w, LVM_SETTILEVIEWINFO, 0, cast(LPARAM) p); + } + + int ListView_SetView(HWND w, DWORD i) { + return SendMessage(w, LVM_SETVIEW, i, 0); + } + + int ListView_SortGroups(HWND w, PFNLVGROUPCOMPARE c, LPVOID p) { + return SendMessage(w, LVM_SORTGROUPS, cast(WPARAM) c, cast(LPARAM) p); + } +} + +static if (_WIN32_WINNT >= 0x501) { + enum { + CBM_FIRST = 0x1700, + CB_SETMINVISIBLE = CBM_FIRST + 1, + CB_GETMINVISIBLE = CBM_FIRST + 2 + } + + BOOL ComboBox_SetMinVisible(HWND w, INT i) { + return cast(BOOL) SendMessage(w, CB_SETMINVISIBLE, cast(WPARAM) i, 0); + } + + int ComboBox_GetMinVisible(HWND w) { + return SendMessage(w, CB_GETMINVISIBLE, 0, 0); + } +} + +extern (Windows) BOOL MakeDragList(HWND); +extern (Windows) void MenuHelp(UINT, WPARAM, LPARAM, HMENU, HINSTANCE, HWND, + PUINT); + +COLORREF MonthCal_GetColor(HWND hwnd, INT icolor) { + return cast(COLORREF) SendMessage(hwnd, MCM_GETCOLOR, + cast(WPARAM) icolor, 0); +} + +BOOL MonthCal_GetCurSel(HWND hwnd, LPSYSTEMTIME lpsystime) { + return cast(BOOL) SendMessage(hwnd, MCM_GETCURSEL, 0, + cast(LPARAM) lpsystime); +} + +DWORD MonthCal_GetFirstDayOfWeek(HWND hwnd) { + return cast(DWORD) SendMessage(hwnd, MCM_GETFIRSTDAYOFWEEK, 0, 0); +} + +DWORD MonthCal_GetMaxSelCount(HWND hwnd) { + return cast(DWORD) SendMessage(hwnd, MCM_GETMAXSELCOUNT, 0, 0); +} + +DWORD MonthCal_GetMaxTodayWidth(HWND hwnd) { + return cast(DWORD) SendMessage(hwnd, MCM_GETMAXTODAYWIDTH, 0, 0); +} + +BOOL MonthCal_GetMinReqRect(HWND hwnd, LPRECT lpRectInfo) { + return cast(BOOL) SendMessage(hwnd, MCM_GETMINREQRECT, 0, + cast(LPARAM) lpRectInfo); +} + +INT MonthCal_GetMonthDelta(HWND hwnd) { + return SendMessage(hwnd, MCM_GETMONTHDELTA, 0, 0); +} + +INT MonthCal_GetMonthRange(HWND hwnd, DWORD flag, LPSYSTEMTIME systimearray) { + return SendMessage(hwnd, MCM_GETMONTHRANGE, cast(WPARAM) flag, + cast(LPARAM) systimearray); +} + +DWORD MonthCal_GetRange(HWND hwnd, LPSYSTEMTIME systimearray) { + return cast(DWORD) SendMessage(hwnd, MCM_GETRANGE, 0, + cast(LPARAM) systimearray); +} + +BOOL MonthCal_GetSelRange(HWND hwnd, LPSYSTEMTIME systimearray) { + return cast(BOOL) SendMessage(hwnd, MCM_GETSELRANGE, 0, + cast(LPARAM) systimearray); +} + +BOOL MonthCal_GetToday(HWND hwnd, LPSYSTEMTIME systime) { + return cast(BOOL) SendMessage(hwnd, MCM_GETTODAY, 0, + cast(LPARAM) systime); +} + +BOOL MonthCal_GetUnicodeFormat(HWND hwnd) { + return cast(BOOL) SendMessage(hwnd, MCM_GETUNICODEFORMAT, 0, 0); +} + +DWORD MonthCal_HitTest(HWND hwnd, PMCHITTESTINFO pmchittest) { + return cast(DWORD) SendMessage(hwnd, MCM_HITTEST, 0, + cast(LPARAM) pmchittest); +} + +COLORREF MonthCal_SetColor(HWND hwnd, INT icolor, COLORREF clr) { + return cast(COLORREF) SendMessage(hwnd, MCM_SETCOLOR, cast(WPARAM) icolor, + cast(LPARAM) clr); +} + +BOOL MonthCal_SetCurSel(HWND hwnd, LPSYSTEMTIME lpsystime) { + return cast(BOOL) SendMessage(hwnd, MCM_SETCURSEL, 0, + cast(LPARAM) lpsystime); +} + +BOOL MonthCal_SetDayState(HWND hwnd, INT imonths, LPMONTHDAYSTATE lpdatestatearray) { + return cast(BOOL) SendMessage(hwnd, MCM_SETDAYSTATE, cast(WPARAM) imonths, + cast(LPARAM) lpdatestatearray); +} + +DWORD MonthCal_SetFirstDayOfWeek(HWND hwnd, INT iday) { + return cast(DWORD) SendMessage(hwnd, MCM_SETFIRSTDAYOFWEEK, 0, + cast(LPARAM) iday); +} + +BOOL MonthCal_SetMaxSelCount(HWND hwnd, UINT imax) { + return cast(BOOL) SendMessage(hwnd, MCM_SETMAXSELCOUNT, + cast(WPARAM) imax, 0); +} + +INT MonthCal_SetMonthDelta(HWND hwnd, INT idelta) { + return SendMessage(hwnd, MCM_SETMONTHDELTA, cast(WPARAM) idelta, 0); +} + +BOOL MonthCal_SetSelRange(HWND hwnd, LPSYSTEMTIME systimearray) { + return cast(BOOL) SendMessage(hwnd, MCM_SETSELRANGE, 0, + cast(LPARAM) systimearray); +} + +void MonthCal_SetToday(HWND hwnd, LPSYSTEMTIME systime) { + SendMessage(hwnd, MCM_SETTODAY, 0, cast(LPARAM) systime); +} + +BOOL MonthCal_SetUnicodeFormat(HWND hwnd, BOOL unicode) { + return cast(BOOL) SendMessage(hwnd, MCM_SETUNICODEFORMAT, + cast(WPARAM) unicode, 0); +} + +BOOL MonthCal_SetRange(HWND w, DWORD f, LPSYSTEMTIME st) { + return cast(BOOL) SendMessage(w, MCM_SETRANGE, cast(WPARAM) f, + cast(LPARAM) st); +} + +extern (Windows) BOOL ShowHideMenuCtl(HWND, UINT, PINT); + +BOOL TabCtrl_GetItem(HWND w, int i, LPTCITEM p) { + return cast(BOOL) SendMessage(w, TCM_GETITEM, i, cast(LPARAM) p); +} + +BOOL TabCtrl_SetItem(HWND w, int i, LPTCITEM p) { + return cast(BOOL) SendMessage(w, TCM_SETITEM, i, cast(LPARAM) p); +} + +int TabCtrl_InsertItem(HWND w, int i, CPtr!(TC_ITEM) p) { + return SendMessage(w, TCM_INSERTITEM, i, cast(LPARAM) p); +} + +BOOL TabCtrl_DeleteItem(HWND w, int i) { + return cast(BOOL) SendMessage(w, TCM_DELETEITEM, i, 0); +} + +BOOL TabCtrl_DeleteAllItems(HWND w) { + return cast(BOOL) SendMessage(w, TCM_DELETEALLITEMS, 0, 0); +} + +BOOL TabCtrl_GetItemRect(HWND w, int i, LPRECT p) { + return cast(BOOL) SendMessage(w, TCM_GETITEMRECT, i, cast(LPARAM) p); +} + +int TabCtrl_GetCurSel(HWND w) { + return SendMessage(w, TCM_GETCURSEL, 0, 0); +} + +int TabCtrl_SetCurSel(HWND w, int i) { + return SendMessage(w, TCM_SETCURSEL, i, 0); +} + +int TabCtrl_HitTest(HWND w, LPTCHITTESTINFO p) { + return SendMessage(w, TCM_HITTEST, 0, cast(LPARAM) p); +} + +BOOL TabCtrl_SetItemExtra(HWND w, int c) { + return cast(BOOL) SendMessage(w, TCM_SETITEMEXTRA, c, 0); +} + +int TabCtrl_AdjustRect(HWND w, BOOL b, LPRECT p) { + return SendMessage(w, TCM_ADJUSTRECT, b, cast(LPARAM) p); +} + +DWORD TabCtrl_SetItemSize(HWND w, int x, int y) { + return cast(DWORD) SendMessage(w, TCM_SETITEMSIZE, 0, MAKELPARAM(cast(ushort)x, cast(ushort)y)); +} + +void TabCtrl_RemoveImage(HWND w, int i) { + SendMessage(w, TCM_REMOVEIMAGE, i, 0); +} + +void TabCtrl_SetPadding(HWND w, int x, int y) { + SendMessage(w, TCM_SETPADDING, 0, MAKELPARAM(cast(ushort)x, cast(ushort)y)); +} + +int TabCtrl_GetRowCount(HWND w) { + return SendMessage(w, TCM_GETROWCOUNT, 0, 0); +} + +HWND TabCtrl_GetToolTips(HWND w) { + return cast(HWND) SendMessage(w, TCM_GETTOOLTIPS, 0, 0); +} + +void TabCtrl_SetToolTips(HWND w, HWND t) { + SendMessage(w, TCM_SETTOOLTIPS, cast(WPARAM) t, 0); +} + +int TabCtrl_GetCurFocus(HWND w) { + return SendMessage(w, TCM_GETCURFOCUS, 0, 0); +} + +void TabCtrl_SetCurFocus(HWND w, int i) { + SendMessage(w, TCM_SETCURFOCUS, i, 0); +} + +HIMAGELIST TabCtrl_GetImageList(HWND w) { + return cast(HIMAGELIST) SendMessage(w, TCM_GETIMAGELIST, 0, 0); +} + +HIMAGELIST TabCtrl_SetImageList(HWND w, HIMAGELIST h) { + return cast(HIMAGELIST) SendMessage(w, TCM_SETIMAGELIST, 0, + cast(LPARAM) h); +} + +int TabCtrl_GetItemCount(HWND w) { + return SendMessage(w, TCM_GETITEMCOUNT, 0, 0); +} + +extern (Windows) BOOL _TrackMouseEvent(LPTRACKMOUSEEVENT); + +HTREEITEM TreeView_InsertItem(HWND w, LPTVINSERTSTRUCT i) { + return cast(HTREEITEM) SendMessage(w, TVM_INSERTITEM, 0, cast(LPARAM) i); +} + +BOOL TreeView_DeleteItem(HWND w, HTREEITEM i) { + return cast(BOOL) SendMessage(w, TVM_DELETEITEM, 0, cast(LPARAM) i); +} + +BOOL TreeView_DeleteAllItems(HWND w) { + return cast(BOOL) SendMessage(w, TVM_DELETEITEM, 0, cast(LPARAM) TVI_ROOT); +} + +BOOL TreeView_Expand(HWND w, HTREEITEM i, UINT c) { + return cast(BOOL) SendMessage(w, TVM_EXPAND, c, cast(LPARAM) i); +} + +BOOL TreeView_GetItemRect(HWND w, HTREEITEM i, LPRECT p, BOOL c) { + *cast(HTREEITEM*) p = i; + return cast(BOOL) SendMessage(w, TVM_GETITEMRECT, c, cast(LPARAM) p); +} + +UINT TreeView_GetCount(HWND w) { + return cast(UINT) SendMessage(w, TVM_GETCOUNT, 0, 0); +} + +UINT TreeView_GetIndent(HWND w) { + return cast(UINT) SendMessage(w, TVM_GETINDENT, 0, 0); +} + +BOOL TreeView_SetIndent(HWND w, INT i) { + return cast(BOOL) SendMessage(w, TVM_SETINDENT, i, 0); +} + +HIMAGELIST TreeView_GetImageList(HWND w, INT i) { + return cast(HIMAGELIST) SendMessage(w, TVM_GETIMAGELIST, i, 0); +} + +HIMAGELIST TreeView_SetImageList(HWND w, HIMAGELIST h, INT i) { + return cast(HIMAGELIST) SendMessage(w, TVM_SETIMAGELIST, i, + cast(LPARAM) h); +} + +HTREEITEM TreeView_GetNextItem(HWND w, HTREEITEM i, UINT c) { + return cast(HTREEITEM) SendMessage(w, TVM_GETNEXTITEM, c, cast(LPARAM) i); +} + +HTREEITEM TreeView_GetChild(HWND w, HTREEITEM i) { + return TreeView_GetNextItem(w, i, TVGN_CHILD); +} + +HTREEITEM TreeView_GetNextSibling(HWND w, HTREEITEM i) { + return TreeView_GetNextItem(w, i, TVGN_NEXT); +} + +HTREEITEM TreeView_GetPrevSibling(HWND w, HTREEITEM i) { + return TreeView_GetNextItem(w, i, TVGN_PREVIOUS); +} + +HTREEITEM TreeView_GetParent(HWND w, HTREEITEM i) { + return TreeView_GetNextItem(w, i, TVGN_PARENT); +} + +HTREEITEM TreeView_GetFirstVisible(HWND w) { + return TreeView_GetNextItem(w, null, TVGN_FIRSTVISIBLE); +} + +HTREEITEM TreeView_GetNextVisible(HWND w, HTREEITEM i) { + return TreeView_GetNextItem(w, i, TVGN_NEXTVISIBLE); +} + +HTREEITEM TreeView_GetPrevVisible(HWND w, HTREEITEM i) { + return TreeView_GetNextItem(w, i, TVGN_PREVIOUSVISIBLE); +} + +HTREEITEM TreeView_GetSelection(HWND w) { + return TreeView_GetNextItem(w, null, TVGN_CARET); +} + +HTREEITEM TreeView_GetDropHilight(HTREEITEM w) { + return TreeView_GetNextItem(w, null, TVGN_DROPHILITE); +} + +HTREEITEM TreeView_GetRoot(HWND w) { + return TreeView_GetNextItem(w, null, TVGN_ROOT); +} + +BOOL TreeView_Select(HWND w, HTREEITEM i, UINT c) { + return cast(BOOL) SendMessage(w, TVM_SELECTITEM, c, cast(LPARAM) i); +} + +BOOL TreeView_SelectItem(HWND w, HTREEITEM i) { + return TreeView_Select(w, i, TVGN_CARET); +} + +BOOL TreeView_SelectDropTarget(HWND w, HTREEITEM i) { + return TreeView_Select(w, i, TVGN_DROPHILITE); +} + +BOOL TreeView_SelectSetFirstVisible(HWND w, HTREEITEM i) { + return TreeView_Select(w, i, TVGN_FIRSTVISIBLE); +} + +BOOL TreeView_GetItem(HWND w, LPTVITEM i) { + return cast(BOOL) SendMessage(w, TVM_GETITEM, 0, cast(LPARAM) i); +} + +BOOL TreeView_SetItem(HWND w, CPtr!(TV_ITEM) i) { + return cast(BOOL) SendMessage(w, TVM_SETITEM, 0, cast(LPARAM) i); +} + +HWND TreeView_EditLabel(HWND w, HTREEITEM i) { + return cast(HWND) SendMessage(w, TVM_EDITLABEL, 0, cast(LPARAM) i); +} + +HWND TreeView_GetEditControl(HWND w) { + return cast(HWND) SendMessage(w, TVM_GETEDITCONTROL, 0, 0); +} + +UINT TreeView_GetVisibleCount(HWND w) { + return cast(UINT) SendMessage(w, TVM_GETVISIBLECOUNT, 0, 0); +} + +HTREEITEM TreeView_HitTest(HWND w, LPTVHITTESTINFO p) { + return cast(HTREEITEM) SendMessage(w, TVM_HITTEST, 0, cast(LPARAM) p); +} + +HIMAGELIST TreeView_CreateDragImage(HWND w, HTREEITEM i) { + return cast(HIMAGELIST) SendMessage(w, TVM_CREATEDRAGIMAGE, 0, + cast(LPARAM) i); +} + +BOOL TreeView_SortChildren(HWND w, HTREEITEM i, BOOL r) { + return cast(BOOL) SendMessage(w, TVM_SORTCHILDREN, r, cast(LPARAM) i); +} + +BOOL TreeView_EnsureVisible(HWND w, HTREEITEM i) { + return cast(BOOL) SendMessage(w, TVM_ENSUREVISIBLE, 0, cast(LPARAM) i); +} + +BOOL TreeView_SortChildrenCB(HWND w, LPTVSORTCB s, BOOL r) { + return cast(BOOL) SendMessage(w, TVM_SORTCHILDRENCB, r, cast(LPARAM) s); +} + +BOOL TreeView_EndEditLabelNow(HWND w, BOOL f) { + return cast(BOOL) SendMessage(w, TVM_ENDEDITLABELNOW, f, 0); +} + +BOOL TreeView_GetISearchString(HWND w, LPTSTR s) { + return cast(BOOL) SendMessage(w, TVM_GETISEARCHSTRING, 0, cast(LPARAM) s); +} + +static if (_WIN32_IE >= 0x300) { + DWORD ListView_ApproximateViewRect(HWND w, int iw, int ih, int i) { + return cast(DWORD) SendMessage(w, LVM_APPROXIMATEVIEWRECT, i, + MAKELPARAM(cast(ushort)iw, cast(ushort)ih)); + } + + DWORD ListView_SetExtendedListViewStyle(HWND w, DWORD s) { + return cast(DWORD) SendMessage(w, LVM_SETEXTENDEDLISTVIEWSTYLE, 0, s); + } + + DWORD ListView_GetExtendedListViewStyle(HWND w) { + return cast(DWORD) SendMessage(w, LVM_GETEXTENDEDLISTVIEWSTYLE, 0, 0); + } + + BOOL ListView_SetColumnOrderArray(HWND w, int i, int* a) { + return cast(BOOL) SendMessage(w, LVM_SETCOLUMNORDERARRAY, + cast(WPARAM) i, cast(LPARAM) a); + } + + BOOL ListView_GetColumnOrderArray(HWND w, int i, int* a) { + return cast(BOOL) SendMessage(w, LVM_GETCOLUMNORDERARRAY, + cast(WPARAM) i, cast(LPARAM) a); + } + + HWND ListView_GetHeader(HWND w) { + return cast(HWND) SendMessage(w, LVM_GETHEADER, 0, 0); + } + + HCURSOR ListView_GetHotCursor(HWND w) { + return cast(HCURSOR) SendMessage(w, LVM_GETHOTCURSOR, 0, 0); + } + + INT ListView_GetHotItem(HWND w) { + return SendMessage(w, LVM_GETHOTITEM, 0, 0); + } + + BOOL ListView_GetSubItemRect(HWND w, int i, int isi, int c, LPRECT p) { + return cast(BOOL) SendMessage(w, LVM_GETSUBITEMRECT, i, + p ? (p.left = c, p.top = isi, cast(LPARAM) p) : 0); + } + + HCURSOR ListView_SetHotCursor(HWND w, HCURSOR c) { + return cast(HCURSOR) SendMessage(w, LVM_SETHOTCURSOR, 0, + cast(LPARAM) c); + } + + INT ListView_SetHotItem(HWND w, INT i) { + return SendMessage(w, LVM_SETHOTITEM, cast(WPARAM) i, 0); + } + + DWORD ListView_SetIconSpacing(HWND w, int x, int y) { + return cast(DWORD) SendMessage(w, LVM_SETICONSPACING, 0, + MAKELONG(cast(ushort)x, cast(ushort)y)); + } + + INT ListView_SubItemHitTest(HWND w, LPLVHITTESTINFO p) { + return SendMessage(w, LVM_SUBITEMHITTEST, 0, cast(LPARAM) p); + } + + BOOL ListView_SetItemCountEx(HWND w, int i, DWORD f) { + return cast(BOOL) SendMessage(w, LVM_SETITEMCOUNT, i, cast(LPARAM) f); + } + + extern (Windows) { + WINBOOL ImageList_SetImageCount(HIMAGELIST, UINT); + WINBOOL ImageList_Copy(HIMAGELIST, int, HIMAGELIST, int, UINT); + WINBOOL ImageList_DrawIndirect(IMAGELISTDRAWPARAMS*); + } + + int TabCtrl_SetMinTabWidth(HWND hwnd, int x) { + return SendMessage(hwnd, TCM_SETMINTABWIDTH, 0, x); + } + + VOID TabCtrl_DeselectAll(HWND hwnd, UINT fExcludeFocus) { + SendMessage(hwnd, TCM_DESELECTALL, fExcludeFocus, 0); + } + + HWND TreeView_GetToolTips(HWND w) { + return cast(HWND) SendMessage(w, TVM_GETTOOLTIPS, 0, 0); + } + + HWND TreeView_SetToolTips(HWND w, HWND wt) { + return cast(HWND) SendMessage(w, TVM_SETTOOLTIPS, cast(WPARAM) wt, 0); + } +} + +static if (_WIN32_IE >= 0x400) { + BOOL ListView_GetBkImage(HWND h, LPLVBKIMAGE plvbki) { + return cast(BOOL) SendMessage(h, LVM_GETBKIMAGE, 0, + cast(LPARAM) plvbki); + } + + BOOL ListView_SetBkImage(HWND h, LPLVBKIMAGE plvbki) { + return cast(BOOL) SendMessage(h, LVM_SETBKIMAGE, 0, + cast(LPARAM) plvbki); + } + + DWORD ListView_SetExtendedListViewStyleEx(HWND w, DWORD m, DWORD s) { + return cast(DWORD) SendMessage(w, LVM_SETEXTENDEDLISTVIEWSTYLE, m, s); + } + + VOID ListView_SetWorkAreas(HWND w, INT n, LPRECT r) { + SendMessage(w, LVM_SETWORKAREAS, cast(WPARAM) n, cast(LPARAM) r); + } + + VOID ListView_GetWorkAreas(HWND w, INT n, LPRECT r) { + SendMessage(w, LVM_GETWORKAREAS, cast(WPARAM) n, cast(LPARAM) r); + } + + BOOL ListView_GetNumberOfWorkAreas(HWND w, LPUINT n) { + return cast(BOOL) SendMessage(w, LVM_GETNUMBEROFWORKAREAS, 0, + cast(LPARAM) n); + } + + DWORD ListView_SetHoverTime(HWND w, DWORD t) { + return cast(DWORD) SendMessage(w, LVM_SETHOVERTIME, 0, + cast(LPARAM) t); + } + + DWORD ListView_GetHoverTime(HWND w) { + return cast(DWORD) SendMessage(w, LVM_GETHOVERTIME, 0, 0); + } + + INT ListView_GetSelectionMark(HWND w) { + return SendMessage(w, LVM_GETSELECTIONMARK, 0, 0); + } + + INT ListView_SetSelectionMark(HWND w, INT i) { + return SendMessage(w, LVM_SETSELECTIONMARK, 0, cast(LPARAM) i); + } + + HWND ListView_SetToolTips(HWND w, HWND n) { + return cast(HWND) SendMessage(w, LVM_SETTOOLTIPS, cast(WPARAM) n, 0); + } + + HWND ListView_GetToolTips(HWND w) { + return cast(HWND) SendMessage(w, LVM_GETTOOLTIPS, 0, 0); + } + + BOOL ListView_SetUnicodeFormat(HWND w, BOOL f) { + return cast(BOOL) SendMessage(w, LVM_SETUNICODEFORMAT, + cast(WPARAM) f, 0); + } + + BOOL ListView_GetUnicodeFormat(HWND w) { + return cast(BOOL) SendMessage(w, LVM_GETUNICODEFORMAT, 0, 0); + } + + BOOL TabCtrl_HighlightItem(HWND hwnd, INT i, WORD fHighlight) { + return cast(BOOL) SendMessage(hwnd, TCM_HIGHLIGHTITEM, + cast(WPARAM) i, cast(LPARAM) MAKELONG(fHighlight, 0)); + } + + DWORD TabCtrl_SetExtendedStyle(HWND hwnd, DWORD dw) { + return cast(DWORD) SendMessage(hwnd, TCM_SETEXTENDEDSTYLE, 0, dw); + } + + DWORD TabCtrl_GetExtendedStyle(HWND hwnd) { + return cast(DWORD) SendMessage(hwnd, TCM_GETEXTENDEDSTYLE, 0, 0); + } + + BOOL TabCtrl_SetUnicodeFormat(HWND hwnd, HWND fUnicode) { + return cast(BOOL) SendMessage(hwnd, TCM_SETUNICODEFORMAT, + cast(WPARAM) fUnicode, 0); + } + + BOOL TabCtrl_GetUnicodeFormat(HWND hwnd) { + return cast(BOOL) SendMessage(hwnd, TCM_GETUNICODEFORMAT, 0, 0); + } + + COLORREF TreeView_GetBkColor(HWND w) { + return cast(COLORREF) SendMessage(w, TVM_GETBKCOLOR, 0, 0); + } + + COLORREF TreeView_GetInsertMarkColor(HWND w) { + return cast(COLORREF) SendMessage(w, TVM_GETINSERTMARKCOLOR, 0, 0); + } + + int TreeView_GetItemHeight(HWND w) { + return SendMessage(w, TVM_GETITEMHEIGHT, 0, 0); + } + + UINT TreeView_GetScrollTime(HWND w) { + return cast(UINT) SendMessage(w, TVM_GETSCROLLTIME, 0, 0); + } + + COLORREF TreeView_GetTextColor(HWND w) { + return cast(COLORREF) SendMessage(w, TVM_GETTEXTCOLOR, 0, 0); + } + + COLORREF TreeView_SetBkColor(HWND w, COLORREF c) { + return cast(COLORREF) SendMessage(w, TVM_SETBKCOLOR, 0, + cast(LPARAM) c); + } + + COLORREF TreeView_SetInsertMarkColor(HWND w, COLORREF c) { + return cast(COLORREF) SendMessage(w, TVM_SETINSERTMARKCOLOR, 0, + cast(LPARAM) c); + } + + int TreeView_SetItemHeight(HWND w, SHORT h) { + return SendMessage(w, TVM_SETITEMHEIGHT, cast(WPARAM) h, 0); + } + + UINT TreeView_SetScrollTime(HWND w, UINT t) { + return cast(UINT) SendMessage(w, TVM_SETSCROLLTIME, cast(WPARAM) t, 0); + } + + COLORREF TreeView_SetTextColor(HWND w, COLORREF c) { + return cast(COLORREF) SendMessage(w, TVM_SETTEXTCOLOR, 0, + cast(LPARAM) c); + } + + BOOL TreeView_SetInsertMark(HWND w, HTREEITEM i, BOOL a) { + return cast(BOOL) SendMessage(w, TVM_SETINSERTMARK, cast(WPARAM) a, + cast(LPARAM) i); + } + + BOOL TreeView_SetUnicodeFormat(HWND w, BOOL u) { + return cast(BOOL) SendMessage(w, TVM_SETUNICODEFORMAT, + cast(WPARAM) u, 0); + } + + BOOL TreeView_GetUnicodeFormat(HWND w) { + return cast(BOOL) SendMessage(w, TVM_GETUNICODEFORMAT, 0, 0); + } + + HTREEITEM TreeView_GetLastVisible(HWND w) { + return TreeView_GetNextItem(w, null, TVGN_LASTVISIBLE); + } +} + +static if (_WIN32_IE >= 0x500) { + UINT TreeView_GetItemState(HWND w, HTREEITEM i, UINT m) { + return cast(UINT) SendMessage(w, TVM_GETITEMSTATE, cast(WPARAM) i, + cast(LPARAM) m); + } + + BOOL TreeView_SetItemState(HWND w, HTREEITEM i, UINT d, UINT m) { + TVITEM _tvi; + _tvi.mask = TVIF_STATE; + _tvi.hItem = i; + _tvi.stateMask = m; + _tvi.state = d; + return cast(BOOL) SendMessage(w, TVM_SETITEM, 0, cast(LPARAM) &_tvi); + } +} + + +//#ifdef _WIN32_WCE // these are PPC only +/+ +extern (Windows) { + HWND CommandBar_Create(HINSTANCE, HWND, int); + BOOL CommandBar_Show(HWND, BOOL); + int CommandBar_AddBitmap(HWND, HINSTANCE, int, int, int, int); + HWND CommandBar_InsertComboBox(HWND, HINSTANCE, int, UINT, WORD, WORD); + BOOL CommandBar_InsertMenubar(HWND, HINSTANCE, WORD, WORD ); + BOOL CommandBar_InsertMenubarEx(HWND, HINSTANCE, LPTSTR, WORD); + BOOL CommandBar_DrawMenuBar(HWND, WORD); + HMENU CommandBar_GetMenu(HWND, WORD); + BOOL CommandBar_AddAdornments(HWND, DWORD, DWORD); + int CommandBar_Height(HWND hwndCB); +} + +// MinGW: These two are not in the DLL +void CommandBar_InsertButton(HWND hwnd, int i, LPTBBUTTON lptbbutton) { + SendMessage(hwnd, TB_INSERTBUTTON, i, lptbbutton); +} +alias DestroyWindow CommandBar_Destroy; ++/ +//#endif // _WIN32_WCE diff -r 586e4a649642 -r 4a9dcbd9e54f win32/commdlg.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/commdlg.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,698 @@ +/***********************************************************************\ +* commdlg.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.12 * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.commdlg; +pragma(lib, "comdlg32.lib"); + +private import win32.w32api; +import win32.windef, win32.winuser; +import win32.wingdi; // for LPLOGFONTA + +const TCHAR[] + LBSELCHSTRING = "commdlg_LBSelChangedNotify", + SHAREVISTRING = "commdlg_ShareViolation", + FILEOKSTRING = "commdlg_FileNameOK", + COLOROKSTRING = "commdlg_ColorOK", + SETRGBSTRING = "commdlg_SetRGBColor", + HELPMSGSTRING = "commdlg_help", + FINDMSGSTRING = "commdlg_FindReplace"; + +enum : UINT { + CDN_FIRST = -601, // also in commctrl.h + CDN_LAST = -699, + CDN_INITDONE = CDN_FIRST, + CDN_SELCHANGE = CDN_FIRST - 1, + CDN_FOLDERCHANGE = CDN_FIRST - 2, + CDN_SHAREVIOLATION = CDN_FIRST - 3, + CDN_HELP = CDN_FIRST - 4, + CDN_FILEOK = CDN_FIRST - 5, + CDN_TYPECHANGE = CDN_FIRST - 6 +} + +enum : UINT { + CDM_FIRST = WM_USER + 100, + CDM_LAST = WM_USER + 200, + CDM_GETSPEC = CDM_FIRST, + CDM_GETFILEPATH, + CDM_GETFOLDERPATH, + CDM_GETFOLDERIDLIST, + CDM_SETCONTROLTEXT, + CDM_HIDECONTROL, + CDM_SETDEFEXT // = CDM_FIRST + 6 +} + +// flags for ChooseColor +enum : DWORD { + CC_RGBINIT = 0x0001, + CC_FULLOPEN = 0x0002, + CC_PREVENTFULLOPEN = 0x0004, + CC_SHOWHELP = 0x0008, + CC_ENABLEHOOK = 0x0010, + CC_ENABLETEMPLATE = 0x0020, + CC_ENABLETEMPLATEHANDLE = 0x0040, + CC_SOLIDCOLOR = 0x0080, + CC_ANYCOLOR = 0x0100 +} + +// flags for ChooseFont +enum : DWORD { + CF_SCREENFONTS = 0x00000001, + CF_PRINTERFONTS = 0x00000002, + CF_BOTH = 0x00000003, + CF_SHOWHELP = 0x00000004, + CF_ENABLEHOOK = 0x00000008, + CF_ENABLETEMPLATE = 0x00000010, + CF_ENABLETEMPLATEHANDLE = 0x00000020, + CF_INITTOLOGFONTSTRUCT = 0x00000040, + CF_USESTYLE = 0x00000080, + CF_EFFECTS = 0x00000100, + CF_APPLY = 0x00000200, + CF_ANSIONLY = 0x00000400, + CF_SCRIPTSONLY = CF_ANSIONLY, + CF_NOVECTORFONTS = 0x00000800, + CF_NOOEMFONTS = 0x00000800, + CF_NOSIMULATIONS = 0x00001000, + CF_LIMITSIZE = 0x00002000, + CF_FIXEDPITCHONLY = 0x00004000, + CF_WYSIWYG = 0x00008000, + CF_FORCEFONTEXIST = 0x00010000, + CF_SCALABLEONLY = 0x00020000, + CF_TTONLY = 0x00040000, + CF_NOFACESEL = 0x00080000, + CF_NOSTYLESEL = 0x00100000, + CF_NOSIZESEL = 0x00200000, + CF_SELECTSCRIPT = 0x00400000, + CF_NOSCRIPTSEL = 0x00800000, + CF_NOVERTFONTS = 0x01000000 +} + +// Font type for ChooseFont +enum : WORD { + BOLD_FONTTYPE = 0x0100, + ITALIC_FONTTYPE = 0x0200, + REGULAR_FONTTYPE = 0x0400, + SCREEN_FONTTYPE = 0x2000, + PRINTER_FONTTYPE = 0x4000, + SIMULATED_FONTTYPE = 0x8000 +} + +enum : UINT { + WM_CHOOSEFONT_GETLOGFONT = WM_USER + 1, + WM_CHOOSEFONT_SETLOGFONT = WM_USER + 101, + WM_CHOOSEFONT_SETFLAGS = WM_USER + 102 +} + +// flags for OpenFileName +enum : DWORD { + OFN_SHAREWARN = 0, + OFN_SHARENOWARN = 0x000001, + OFN_READONLY = 0x000001, + OFN_SHAREFALLTHROUGH = 0x000002, + OFN_OVERWRITEPROMPT = 0x000002, + OFN_HIDEREADONLY = 0x000004, + OFN_NOCHANGEDIR = 0x000008, + OFN_SHOWHELP = 0x000010, + OFN_ENABLEHOOK = 0x000020, + OFN_ENABLETEMPLATE = 0x000040, + OFN_ENABLETEMPLATEHANDLE = 0x000080, + OFN_NOVALIDATE = 0x000100, + OFN_ALLOWMULTISELECT = 0x000200, + OFN_EXTENSIONDIFFERENT = 0x000400, + OFN_PATHMUSTEXIST = 0x000800, + OFN_FILEMUSTEXIST = 0x001000, + OFN_CREATEPROMPT = 0x002000, + OFN_SHAREAWARE = 0x004000, + OFN_NOREADONLYRETURN = 0x008000, + OFN_NOTESTFILECREATE = 0x010000, + OFN_NONETWORKBUTTON = 0x020000, + OFN_NOLONGNAMES = 0x040000, + OFN_EXPLORER = 0x080000, + OFN_NODEREFERENCELINKS = 0x100000, + OFN_LONGNAMES = 0x200000, + OFN_ENABLESIZING = 0x800000 +} + +enum : DWORD { + FR_DOWN = 0x00000001, + FR_WHOLEWORD = 0x00000002, + FR_MATCHCASE = 0x00000004, + FR_FINDNEXT = 0x00000008, + FR_REPLACE = 0x00000010, + FR_REPLACEALL = 0x00000020, + FR_DIALOGTERM = 0x00000040, + FR_SHOWHELP = 0x00000080, + FR_ENABLEHOOK = 0x00000100, + FR_ENABLETEMPLATE = 0x00000200, + FR_NOUPDOWN = 0x00000400, + FR_NOMATCHCASE = 0x00000800, + FR_NOWHOLEWORD = 0x00001000, + FR_ENABLETEMPLATEHANDLE = 0x00002000, + FR_HIDEUPDOWN = 0x00004000, + FR_HIDEMATCHCASE = 0x00008000, + FR_HIDEWHOLEWORD = 0x00010000, + FR_MATCHDIAC = 0x20000000, + FR_MATCHKASHIDA = 0x40000000, + FR_MATCHALEFHAMZA = 0x80000000 +} + +enum : DWORD { + PD_ALLPAGES = 0, + PD_SELECTION = 0x000001, + PD_PAGENUMS = 0x000002, + PD_NOSELECTION = 0x000004, + PD_NOPAGENUMS = 0x000008, + PD_COLLATE = 0x000010, + PD_PRINTTOFILE = 0x000020, + PD_PRINTSETUP = 0x000040, + PD_NOWARNING = 0x000080, + PD_RETURNDC = 0x000100, + PD_RETURNIC = 0x000200, + PD_RETURNDEFAULT = 0x000400, + PD_SHOWHELP = 0x000800, + PD_ENABLEPRINTHOOK = 0x001000, + PD_ENABLESETUPHOOK = 0x002000, + PD_ENABLEPRINTTEMPLATE = 0x004000, + PD_ENABLESETUPTEMPLATE = 0x008000, + PD_ENABLEPRINTTEMPLATEHANDLE = 0x010000, + PD_ENABLESETUPTEMPLATEHANDLE = 0x020000, + PD_USEDEVMODECOPIES = 0x040000, + PD_USEDEVMODECOPIESANDCOLLATE = 0x040000, + PD_DISABLEPRINTTOFILE = 0x080000, + PD_HIDEPRINTTOFILE = 0x100000, + PD_NONETWORKBUTTON = 0x200000 +} + +static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + enum : DWORD { + PD_CURRENTPAGE = 0x00400000, + PD_NOCURRENTPAGE = 0x00800000, + PD_EXCLUSIONFLAGS = 0x01000000, + PD_USELARGETEMPLATE = 0x10000000, + } + + enum : HRESULT { + PD_RESULT_CANCEL, + PD_RESULT_PRINT, + PD_RESULT_APPLY + } + + const DWORD START_PAGE_GENERAL = 0xFFFFFFFF; +} + +enum { + PSD_DEFAULTMINMARGINS = 0, + PSD_INWININIINTLMEASURE = 0, + PSD_MINMARGINS = 0x000001, + PSD_MARGINS = 0x000002, + PSD_INTHOUSANDTHSOFINCHES = 0x000004, + PSD_INHUNDREDTHSOFMILLIMETERS = 0x000008, + PSD_DISABLEMARGINS = 0x000010, + PSD_DISABLEPRINTER = 0x000020, + PSD_NOWARNING = 0x000080, + PSD_DISABLEORIENTATION = 0x000100, + PSD_DISABLEPAPER = 0x000200, + PSD_RETURNDEFAULT = 0x000400, + PSD_SHOWHELP = 0x000800, + PSD_ENABLEPAGESETUPHOOK = 0x002000, + PSD_ENABLEPAGESETUPTEMPLATE = 0x008000, + PSD_ENABLEPAGESETUPTEMPLATEHANDLE = 0x020000, + PSD_ENABLEPAGEPAINTHOOK = 0x040000, + PSD_DISABLEPAGEPAINTING = 0x080000 +} + +enum : UINT { + WM_PSD_PAGESETUPDLG = WM_USER, + WM_PSD_FULLPAGERECT, + WM_PSD_MINMARGINRECT, + WM_PSD_MARGINRECT, + WM_PSD_GREEKTEXTRECT, + WM_PSD_ENVSTAMPRECT, + WM_PSD_YAFULLPAGERECT // = WM_USER + 6 +} + +enum : int { + CD_LBSELNOITEMS = -1, + CD_LBSELCHANGE, + CD_LBSELSUB, + CD_LBSELADD +} + +const WORD DN_DEFAULTPRN = 1; + +/+ +// Both MinGW and the windows docs indicate that there are macros for the send messages +// the controls. These seem to be totally unnecessary -- and at least one of MinGW or +// Windows Docs is buggy! + +int CommDlg_OpenSave_GetSpec(HWND hWndControl, LPARAM lparam, WPARAM wParam) { + return SendMessage(hWndControl, CDM_GETSPEC, wParam, lParam); +} + +int CommDlg_OpenSave_GetFilePath(HWND hWndControl, LPARAM lparam, WPARAM wParam) { + return SendMessage(hWndControl, CDM_GETFILEPATH, wParam, lParam); +} + +int CommDlg_OpenSave_GetFolderPath(HWND hWndControl, LPARAM lparam, WPARAM wParam) { + return SendMessage(hWndControl, CDM_GETFOLDERPATH, wParam, lParam); +} + +int CommDlg_OpenSave_GetFolderIDList(HWND hWndControl, LPARAM lparam, WPARAM wParam) { + return SendMessage(hWndControl, CDM_GETFOLDERIDLIST, wParam, lParam); +} + +void CommDlg_OpenSave_SetControlText(HWND hWndControl, LPARAM lparam, WPARAM wParam) { + return SendMessage(hWndControl, CDM_SETCONTROLTEXT, wParam, lParam); +} + +void CommDlg_OpenSave_HideControl(HWND hWndControl, WPARAM wParam) { + return SendMessage(hWndControl, CDM_HIDECONTROL, wParam, 0); +} + +void CommDlg_OpenSave_SetDefExt(HWND hWndControl, TCHAR* lparam) { + return SendMessage(hWndControl, CDM_SETCONTROLTEXT, 0, cast(LPARAM)lParam); +} + +// These aliases seem even more unnecessary +alias CommDlg_OpenSave_GetSpec + CommDlg_OpenSave_GetSpecA, CommDlg_OpenSave_GetSpecW; +alias CommDlg_OpenSave_GetFilePath + CommDlg_OpenSave_GetFilePathA, CommDlg_OpenSave_GetFilePathW; +alias CommDlg_OpenSave_GetFolderPath + CommDlg_OpenSave_GetFolderPathA, CommDlg_OpenSave_GetFolderPathW; ++/ + +// Callbacks. +extern(Windows) { +alias UINT function (HWND, UINT, WPARAM, LPARAM) + LPCCHOOKPROC, LPCFHOOKPROC, LPFRHOOKPROC, LPOFNHOOKPROC, + LPPAGEPAINTHOOK, LPPAGESETUPHOOK, LPSETUPHOOKPROC, LPPRINTHOOKPROC; +} + +align (1): + +struct CHOOSECOLORA { + DWORD lStructSize = CHOOSECOLORA.sizeof; + HWND hwndOwner; + HWND hInstance; + COLORREF rgbResult; + COLORREF* lpCustColors; + DWORD Flags; + LPARAM lCustData; + LPCCHOOKPROC lpfnHook; + LPCSTR lpTemplateName; +} +alias CHOOSECOLORA* LPCHOOSECOLORA; + +struct CHOOSECOLORW { + DWORD lStructSize = CHOOSECOLORW.sizeof; + HWND hwndOwner; + HWND hInstance; + COLORREF rgbResult; + COLORREF* lpCustColors; + DWORD Flags; + LPARAM lCustData; + LPCCHOOKPROC lpfnHook; + LPCWSTR lpTemplateName; +} +alias CHOOSECOLORW* LPCHOOSECOLORW; + +align (4) struct CHOOSEFONTA { + DWORD lStructSize = CHOOSEFONTA.sizeof; + HWND hwndOwner; + HDC hDC; + LPLOGFONTA lpLogFont; + INT iPointSize; + DWORD Flags; + DWORD rgbColors; + LPARAM lCustData; + LPCFHOOKPROC lpfnHook; + LPCSTR lpTemplateName; + HINSTANCE hInstance; + LPSTR lpszStyle; + WORD nFontType; + //WORD ___MISSING_ALIGNMENT__; + INT nSizeMin; + INT nSizeMax; +} +alias CHOOSEFONTA* LPCHOOSEFONTA; + +align (4) struct CHOOSEFONTW { + DWORD lStructSize = CHOOSEFONTW.sizeof; + HWND hwndOwner; + HDC hDC; + LPLOGFONTW lpLogFont; + INT iPointSize; + DWORD Flags; + DWORD rgbColors; + LPARAM lCustData; + LPCFHOOKPROC lpfnHook; + LPCWSTR lpTemplateName; + HINSTANCE hInstance; + LPWSTR lpszStyle; + WORD nFontType; + //WORD ___MISSING_ALIGNMENT__; + INT nSizeMin; + INT nSizeMax; +} +alias CHOOSEFONTW* LPCHOOSEFONTW; + +struct DEVNAMES { + WORD wDriverOffset; + WORD wDeviceOffset; + WORD wOutputOffset; + WORD wDefault; +} +alias DEVNAMES* LPDEVNAMES; + +struct FINDREPLACEA { + DWORD lStructSize = FINDREPLACEA.sizeof; + HWND hwndOwner; + HINSTANCE hInstance; + DWORD Flags; + LPSTR lpstrFindWhat; + LPSTR lpstrReplaceWith; + WORD wFindWhatLen; + WORD wReplaceWithLen; + LPARAM lCustData; + LPFRHOOKPROC lpfnHook; + LPCSTR lpTemplateName; +} +alias FINDREPLACEA* LPFINDREPLACEA; + +struct FINDREPLACEW { + DWORD lStructSize = FINDREPLACEW.sizeof; + HWND hwndOwner; + HINSTANCE hInstance; + DWORD Flags; + LPWSTR lpstrFindWhat; + LPWSTR lpstrReplaceWith; + WORD wFindWhatLen; + WORD wReplaceWithLen; + LPARAM lCustData; + LPFRHOOKPROC lpfnHook; + LPCWSTR lpTemplateName; +} +alias FINDREPLACEW* LPFINDREPLACEW; + +struct OPENFILENAMEA { + DWORD lStructSize = OPENFILENAMEA.sizeof; + HWND hwndOwner; + HINSTANCE hInstance; + LPCSTR lpstrFilter; + LPSTR lpstrCustomFilter; + DWORD nMaxCustFilter; + DWORD nFilterIndex; + LPSTR lpstrFile; + DWORD nMaxFile; + LPSTR lpstrFileTitle; + DWORD nMaxFileTitle; + LPCSTR lpstrInitialDir; + LPCSTR lpstrTitle; + DWORD Flags; + WORD nFileOffset; + WORD nFileExtension; + LPCSTR lpstrDefExt; + DWORD lCustData; + LPOFNHOOKPROC lpfnHook; + LPCSTR lpTemplateName; +} +alias OPENFILENAMEA* LPOPENFILENAMEA; + +struct OPENFILENAMEW { + DWORD lStructSize = OPENFILENAMEW.sizeof; + HWND hwndOwner; + HINSTANCE hInstance; + LPCWSTR lpstrFilter; + LPWSTR lpstrCustomFilter; + DWORD nMaxCustFilter; + DWORD nFilterIndex; + LPWSTR lpstrFile; + DWORD nMaxFile; + LPWSTR lpstrFileTitle; + DWORD nMaxFileTitle; + LPCWSTR lpstrInitialDir; + LPCWSTR lpstrTitle; + DWORD Flags; + WORD nFileOffset; + WORD nFileExtension; + LPCWSTR lpstrDefExt; + DWORD lCustData; + LPOFNHOOKPROC lpfnHook; + LPCWSTR lpTemplateName; +} +alias OPENFILENAMEW* LPOPENFILENAMEW; + +const size_t OPENFILENAME_SIZE_VERSION_400 = 76; + +struct OFNOTIFYA { + NMHDR hdr; + LPOPENFILENAMEA lpOFN; + LPSTR pszFile; +} +alias OFNOTIFYA* LPOFNOTIFYA; + +struct OFNOTIFYW { + NMHDR hdr; + LPOPENFILENAMEW lpOFN; + LPWSTR pszFile; +} +alias OFNOTIFYW* LPOFNOTIFYW; + +struct PAGESETUPDLGA { + DWORD lStructSize = PAGESETUPDLGA.sizeof; + HWND hwndOwner; + HGLOBAL hDevMode; + HGLOBAL hDevNames; + DWORD Flags; + POINT ptPaperSize; + RECT rtMinMargin; + RECT rtMargin; + HINSTANCE hInstance; + LPARAM lCustData; + LPPAGESETUPHOOK lpfnPageSetupHook; + LPPAGEPAINTHOOK lpfnPagePaintHook; + LPCSTR lpPageSetupTemplateName; + HGLOBAL hPageSetupTemplate; +} +alias PAGESETUPDLGA* LPPAGESETUPDLGA; + +struct PAGESETUPDLGW { + DWORD lStructSize = PAGESETUPDLGW.sizeof; + HWND hwndOwner; + HGLOBAL hDevMode; + HGLOBAL hDevNames; + DWORD Flags; + POINT ptPaperSize; + RECT rtMinMargin; + RECT rtMargin; + HINSTANCE hInstance; + LPARAM lCustData; + LPPAGESETUPHOOK lpfnPageSetupHook; + LPPAGEPAINTHOOK lpfnPagePaintHook; + LPCWSTR lpPageSetupTemplateName; + HGLOBAL hPageSetupTemplate; +} +alias PAGESETUPDLGW* LPPAGESETUPDLGW; + +struct PRINTDLGA { + DWORD lStructSize = PRINTDLGA.sizeof; + HWND hwndOwner; + HANDLE hDevMode; + HANDLE hDevNames; + HDC hDC; + DWORD Flags; + WORD nFromPage; + WORD nToPage; + WORD nMinPage; + WORD nMaxPage; + WORD nCopies; + HINSTANCE hInstance; + DWORD lCustData; + LPPRINTHOOKPROC lpfnPrintHook; + LPSETUPHOOKPROC lpfnSetupHook; + LPCSTR lpPrintTemplateName; + LPCSTR lpSetupTemplateName; + HANDLE hPrintTemplate; + HANDLE hSetupTemplate; +} +alias PRINTDLGA* LPPRINTDLGA; + +struct PRINTDLGW { + DWORD lStructSize = PRINTDLGW.sizeof; + HWND hwndOwner; + HANDLE hDevMode; + HANDLE hDevNames; + HDC hDC; + DWORD Flags; + WORD nFromPage; + WORD nToPage; + WORD nMinPage; + WORD nMaxPage; + WORD nCopies; + HINSTANCE hInstance; + DWORD lCustData; + LPPRINTHOOKPROC lpfnPrintHook; + LPSETUPHOOKPROC lpfnSetupHook; + LPCWSTR lpPrintTemplateName; + LPCWSTR lpSetupTemplateName; + HANDLE hPrintTemplate; + HANDLE hSetupTemplate; +} +alias PRINTDLGW* LPPRINTDLGW; + +static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + import win32.unknwn; // for LPUNKNOWN + import win32.prsht; // for HPROPSHEETPAGE + + struct PRINTPAGERANGE { + DWORD nFromPage; + DWORD nToPage; + } + alias PRINTPAGERANGE* LPPRINTPAGERANGE; + + struct PRINTDLGEXA { + DWORD lStructSize = PRINTDLGEXA.sizeof; + HWND hwndOwner; + HGLOBAL hDevMode; + HGLOBAL hDevNames; + HDC hDC; + DWORD Flags; + DWORD Flags2; + DWORD ExclusionFlags; + DWORD nPageRanges; + DWORD nMaxPageRanges; + LPPRINTPAGERANGE lpPageRanges; + DWORD nMinPage; + DWORD nMaxPage; + DWORD nCopies; + HINSTANCE hInstance; + LPCSTR lpPrintTemplateName; + LPUNKNOWN lpCallback; + DWORD nPropertyPages; + HPROPSHEETPAGE* lphPropertyPages; + DWORD nStartPage; + DWORD dwResultAction; + } + alias PRINTDLGEXA* LPPRINTDLGEXA; + + struct PRINTDLGEXW { + DWORD lStructSize = PRINTDLGEXW.sizeof; + HWND hwndOwner; + HGLOBAL hDevMode; + HGLOBAL hDevNames; + HDC hDC; + DWORD Flags; + DWORD Flags2; + DWORD ExclusionFlags; + DWORD nPageRanges; + DWORD nMaxPageRanges; + LPPRINTPAGERANGE lpPageRanges; + DWORD nMinPage; + DWORD nMaxPage; + DWORD nCopies; + HINSTANCE hInstance; + LPCWSTR lpPrintTemplateName; + LPUNKNOWN lpCallback; + DWORD nPropertyPages; + HPROPSHEETPAGE* lphPropertyPages; + DWORD nStartPage; + DWORD dwResultAction; + } + alias PRINTDLGEXW* LPPRINTDLGEXW; + +} // _WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500 + +extern (Windows) { + BOOL ChooseColorA(LPCHOOSECOLORA); + BOOL ChooseColorW(LPCHOOSECOLORW); + BOOL ChooseFontA(LPCHOOSEFONTA); + BOOL ChooseFontW(LPCHOOSEFONTW); + DWORD CommDlgExtendedError(); + HWND FindTextA(LPFINDREPLACEA); + HWND FindTextW(LPFINDREPLACEW); + short GetFileTitleA(LPCSTR, LPSTR, WORD); + short GetFileTitleW(LPCWSTR, LPWSTR, WORD); + BOOL GetOpenFileNameA(LPOPENFILENAMEA); + BOOL GetOpenFileNameW(LPOPENFILENAMEW); + BOOL GetSaveFileNameA(LPOPENFILENAMEA); + BOOL GetSaveFileNameW(LPOPENFILENAMEW); + BOOL PageSetupDlgA(LPPAGESETUPDLGA); + BOOL PageSetupDlgW(LPPAGESETUPDLGW); + BOOL PrintDlgA(LPPRINTDLGA); + BOOL PrintDlgW(LPPRINTDLGW); + HWND ReplaceTextA(LPFINDREPLACEA); + HWND ReplaceTextW(LPFINDREPLACEW); + + static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + HRESULT PrintDlgExA(LPPRINTDLGEXA); + HRESULT PrintDlgExW(LPPRINTDLGEXW); + } +} + +version (Unicode) { + alias CHOOSECOLORW CHOOSECOLOR; + alias CHOOSEFONTW CHOOSEFONT; + alias FINDREPLACEW FINDREPLACE; + alias OPENFILENAMEW OPENFILENAME; + alias OFNOTIFYW OFNOTIFY; + alias PAGESETUPDLGW PAGESETUPDLG; + alias PRINTDLGW PRINTDLG; + + alias ChooseColorW ChooseColor; + alias ChooseFontW ChooseFont; + alias FindTextW FindText; + alias GetFileTitleW GetFileTitle; + alias GetOpenFileNameW GetOpenFileName; + alias GetSaveFileNameW GetSaveFileName; + alias PageSetupDlgW PageSetupDlg; + alias PrintDlgW PrintDlg; + alias ReplaceTextW ReplaceText; + + static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + alias PRINTDLGEXW PRINTDLGEX; + alias PrintDlgExW PrintDlgEx; + } + +} else { // UNICODE + + alias CHOOSECOLORA CHOOSECOLOR; + alias CHOOSEFONTA CHOOSEFONT; + alias FINDREPLACEA FINDREPLACE; + alias OPENFILENAMEA OPENFILENAME; + alias OFNOTIFYA OFNOTIFY; + alias PAGESETUPDLGA PAGESETUPDLG; + alias PRINTDLGA PRINTDLG; + + alias ChooseColorA ChooseColor; + alias ChooseFontA ChooseFont; + alias FindTextA FindText; + alias GetFileTitleA GetFileTitle; + alias GetOpenFileNameA GetOpenFileName; + alias GetSaveFileNameA GetSaveFileName; + alias PageSetupDlgA PageSetupDlg; + alias PrintDlgA PrintDlg; + alias ReplaceTextA ReplaceText; + + static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + alias PRINTDLGEXA PRINTDLGEX; + alias PrintDlgExA PrintDlgEx; + } + +} // UNICODE + +alias CHOOSECOLOR* LPCHOOSECOLOR; +alias CHOOSEFONT* LPCHOOSEFONT; +alias FINDREPLACE* LPFINDREPLACE; +alias OPENFILENAME* LPOPENFILENAME; +alias OFNOTIFY* LPOFNOTIFY; +alias PAGESETUPDLG* LPPAGESETUPDLG; +alias PRINTDLG* LPPRINTDLG; +static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + alias PRINTDLGEX* LPPRINTDLGEX; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/core.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/core.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,45 @@ +/***********************************************************************\ +* core.d * +* * +* Helper module for the Windows API * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.core; + +/** + The core Windows API functions. + + Importing this file is equivalent to the C code: + --- + #define WIN32_LEAN_AND_MEAN + #include "windows.h" + --- + +*/ + +public import win32.windef; +public import win32.winnt; +public import win32.wincon; +public import win32.winbase; +public import win32.wingdi; +public import win32.winuser; +public import win32.winnls; +public import win32.winver; +public import win32.winnetwk; + +// We can't use static if for imports, build gets confused. +// static if (_WIN32_WINNT_ONLY) import win32.winsvc; +version (WindowsVista) { + version = WIN32_WINNT_ONLY; +} else version (Windows2003) { + version = WIN32_WINNT_ONLY; +} else version (WindowsXP) { + version = WIN32_WINNT_ONLY; +} else version (WindowsNTonly) { + version = WIN32_WINNT_ONLY; +} + +version (WIN32_WINNT_ONLY) { + public import win32.winsvc; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/cpl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/cpl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,77 @@ +/***********************************************************************\ +* cpl.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.cpl; + +private import win32.windef, win32.winuser; + +enum : uint { + WM_CPL_LAUNCH = WM_USER + 1000, + WM_CPL_LAUNCHED +} + +enum : uint { + CPL_DYNAMIC_RES, + CPL_INIT, + CPL_GETCOUNT, + CPL_INQUIRE, + CPL_SELECT, + CPL_DBLCLK, + CPL_STOP, + CPL_EXIT, + CPL_NEWINQUIRE, + CPL_STARTWPARMSA, + CPL_STARTWPARMSW, // = 10 + CPL_SETUP = 200 +} + +extern (Windows) alias LONG function(HWND, UINT, LONG, LONG) APPLET_PROC; + +struct CPLINFO { + int idIcon; + int idName; + int idInfo; + LONG lData; +} +alias CPLINFO* LPCPLINFO; + +struct NEWCPLINFOA { + DWORD dwSize = NEWCPLINFOA.sizeof; + DWORD dwFlags; + DWORD dwHelpContext; + LONG lData; + HICON hIcon; + CHAR[32] szName; + CHAR[64] szInfo; + CHAR[128] szHelpFile; +} +alias NEWCPLINFOA* LPNEWCPLINFOA; + +struct NEWCPLINFOW { + DWORD dwSize = NEWCPLINFOW.sizeof; + DWORD dwFlags; + DWORD dwHelpContext; + LONG lData; + HICON hIcon; + WCHAR[32] szName; + WCHAR[64] szInfo; + WCHAR[128] szHelpFile; +} +alias NEWCPLINFOW* LPNEWCPLINFOW; + +version (Unicode) { + alias CPL_STARTWPARMSW CPL_STARTWPARMS; + alias NEWCPLINFOW NEWCPLINFO; +} else { + alias CPL_STARTWPARMSA CPL_STARTWPARMS; + alias NEWCPLINFOA NEWCPLINFO; +} + +alias NEWCPLINFO* LPNEWCPLINFO; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/cplext.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/cplext.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,19 @@ +/***********************************************************************\ +* cplext.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.cplext; + +enum : uint { + CPLPAGE_MOUSE_BUTTONS = 1, + CPLPAGE_MOUSE_PTRMOTION = 2, + CPLPAGE_MOUSE_WHEEL = 3, + CPLPAGE_KEYBOARD_SPEED = 1, + CPLPAGE_DISPLAY_BACKGROUND = 1 +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/custcntl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/custcntl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,122 @@ +/***********************************************************************\ +* custcntl.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.custcntl; + +private import win32.windef; + +// FIXME: check type +const CCF_NOTEXT = 1; + +const size_t + CCHCCCLASS = 32, + CCHCCDESC = 32, + CCHCCTEXT = 256; + +struct CCSTYLEA { + DWORD flStyle; + DWORD flExtStyle; + CHAR[CCHCCTEXT] szText; + LANGID lgid; + WORD wReserved1; +} +alias CCSTYLEA* LPCCSTYLEA; + +struct CCSTYLEW { + DWORD flStyle; + DWORD flExtStyle; + WCHAR[CCHCCTEXT] szText; + LANGID lgid; + WORD wReserved1; +} +alias CCSTYLEW* LPCCSTYLEW; + +struct CCSTYLEFLAGA { + DWORD flStyle; + DWORD flStyleMask; + LPSTR pszStyle; +} +alias CCSTYLEFLAGA* LPCCSTYLEFLAGA; + +struct CCSTYLEFLAGW { + DWORD flStyle; + DWORD flStyleMask; + LPWSTR pszStyle; +} +alias CCSTYLEFLAGW* LPCCSTYLEFLAGW; + +struct CCINFOA { + CHAR[CCHCCCLASS] szClass; + DWORD flOptions; + CHAR[CCHCCDESC] szDesc; + UINT cxDefault; + UINT cyDefault; + DWORD flStyleDefault; + DWORD flExtStyleDefault; + DWORD flCtrlTypeMask; + CHAR[CCHCCTEXT] szTextDefault; + INT cStyleFlags; + LPCCSTYLEFLAGA aStyleFlags; + LPFNCCSTYLEA lpfnStyle; + LPFNCCSIZETOTEXTA lpfnSizeToText; + DWORD dwReserved1; + DWORD dwReserved2; +} +alias CCINFOA* LPCCINFOA; + +struct CCINFOW { + WCHAR[CCHCCCLASS] szClass; + DWORD flOptions; + WCHAR[CCHCCDESC] szDesc; + UINT cxDefault; + UINT cyDefault; + DWORD flStyleDefault; + DWORD flExtStyleDefault; + DWORD flCtrlTypeMask; + WCHAR[CCHCCTEXT] szTextDefault; + INT cStyleFlags; + LPCCSTYLEFLAGW aStyleFlags; + LPFNCCSTYLEW lpfnStyle; + LPFNCCSIZETOTEXTW lpfnSizeToText; + DWORD dwReserved1; + DWORD dwReserved2; +} +alias CCINFOW* LPCCINFOW; + +extern (Windows) { + alias BOOL function(HWND, LPCCSTYLEA) LPFNCCSTYLEA; + alias BOOL function(HWND, LPCCSTYLEW) LPFNCCSTYLEW; + alias INT function(DWORD, DWORD, HFONT, LPSTR) LPFNCCSIZETOTEXTA; + alias INT function(DWORD, DWORD, HFONT, LPWSTR) LPFNCCSIZETOTEXTW; + alias UINT function(LPCCINFOA) LPFNCCINFOA; + alias UINT function(LPCCINFOW) LPFNCCINFOW; + UINT CustomControlInfoA(LPCCINFOA acci); + UINT CustomControlInfoW(LPCCINFOW acci); +} + +version (Unicode) { + alias CCSTYLEW CCSTYLE; + alias CCSTYLEFLAGW CCSTYLEFLAG; + alias CCINFOW CCINFO; + alias LPFNCCSTYLEW LPFNCCSTYLE; + alias LPFNCCSIZETOTEXTW LPFNCCSIZETOTEXT; + alias LPFNCCINFOW LPFNCCINFO; +} else { + alias CCSTYLEA CCSTYLE; + alias CCSTYLEFLAGA CCSTYLEFLAG; + alias CCINFOA CCINFO; + alias LPFNCCSTYLEA LPFNCCSTYLE; + alias LPFNCCSIZETOTEXTA LPFNCCSIZETOTEXT; + alias LPFNCCINFOA LPFNCCINFO; +} + +alias CCSTYLE* LPCCSTYLE; +alias CCSTYLEFLAG* LPCCSTYLEFLAG; +alias CCINFO* LPCCINFO; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/dbt.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/dbt.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,194 @@ +/***********************************************************************\ +* dbt.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Vladimir Vlasov * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.dbt; + +import win32.w32api, win32.windef; +import win32.basetyps; // for GUID + +// FIXME: clean up Windows version support + +enum : DWORD { + DBT_NO_DISK_SPACE = 0x47, + DBT_CONFIGMGPRIVATE = 0x7FFF, + DBT_DEVICEARRIVAL = 0x8000, + DBT_DEVICEQUERYREMOVE = 0x8001, + DBT_DEVICEQUERYREMOVEFAILED = 0x8002, + DBT_DEVICEREMOVEPENDING = 0x8003, + DBT_DEVICEREMOVECOMPLETE = 0x8004, + DBT_DEVICETYPESPECIFIC = 0x8005, + DBT_DEVTYP_OEM = 0, + DBT_DEVTYP_DEVNODE = 1, + DBT_DEVTYP_VOLUME = 2, + DBT_DEVTYP_PORT = 3, + DBT_DEVTYP_NET = 4 +} + +static if (_WIN32_WINDOWS >= 0x040A) { + enum : DWORD { + DBT_DEVTYP_DEVICEINTERFACE = 5, + DBT_DEVTYP_HANDLE = 6 + } +} + +enum : DWORD { + DBT_APPYBEGIN, + DBT_APPYEND, + DBT_DEVNODES_CHANGED = 7, + DBT_QUERYCHANGECONFIG = 0x17, + DBT_CONFIGCHANGED = 0x18, + DBT_CONFIGCHANGECANCELED = 0x19, + DBT_MONITORCHANGE = 0x1B, + DBT_SHELLLOGGEDON = 32, + DBT_CONFIGMGAPI32 = 34, + DBT_VXDINITCOMPLETE = 35, + DBT_VOLLOCKQUERYLOCK = 0x8041, + DBT_VOLLOCKLOCKTAKEN = 0x8042, + DBT_VOLLOCKLOCKFAILED = 0x8043, + DBT_VOLLOCKQUERYUNLOCK = 0x8044, + DBT_VOLLOCKLOCKRELEASED = 0x8045, + DBT_VOLLOCKUNLOCKFAILED = 0x8046, + DBT_USERDEFINED = 0xFFFF +} + +enum : WORD { + DBTF_MEDIA = 1, + DBTF_NET = 2 +} + +enum : DWORD { + BSM_ALLCOMPONENTS = 0, + BSM_APPLICATIONS = 8, + BSM_ALLDESKTOPS = 16, + BSM_INSTALLABLEDRIVERS = 4, + BSM_NETDRIVER = 2, + BSM_VXDS = 1, + BSF_FLUSHDISK = 0x00000004, + BSF_FORCEIFHUNG = 0x00000020, + BSF_IGNORECURRENTTASK = 0x00000002, + BSF_NOHANG = 0x00000008, + BSF_NOTIMEOUTIFNOTHUNG = 0x00000040, + BSF_POSTMESSAGE = 0x00000010, + BSF_QUERY = 0x00000001, + BSF_MSGSRV32ISOK_BIT = 31, + BSF_MSGSRV32ISOK = 0x80000000 +} + +static if (_WIN32_WINNT >= 0x0500) { + enum : DWORD { + BSF_ALLOWSFW = 0x00000080, + BSF_SENDNOTIFYMESSAGE = 0x00000100 + } +} + +static if (_WIN32_WINNT >= 0x0501) { + enum : DWORD { + BSF_LUID = 0x00000400, + BSF_RETURNHDESK = 0x00000200 + } +} + +struct DEV_BROADCAST_HDR { + DWORD dbch_size = DEV_BROADCAST_HDR.sizeof; + DWORD dbch_devicetype; + DWORD dbch_reserved; +} +alias DEV_BROADCAST_HDR* PDEV_BROADCAST_HDR; + +struct DEV_BROADCAST_OEM { + DWORD dbco_size = DEV_BROADCAST_OEM.sizeof; + DWORD dbco_devicetype; + DWORD dbco_reserved; + DWORD dbco_identifier; + DWORD dbco_suppfunc; +} +alias DEV_BROADCAST_OEM* PDEV_BROADCAST_OEM; + +struct DEV_BROADCAST_PORT_A { + DWORD dbcp_size = DEV_BROADCAST_PORT_A.sizeof; + DWORD dbcp_devicetype; + DWORD dbcp_reserved; + char _dbcp_name; + char* dbcp_name() { return &_dbcp_name; } +} +alias DEV_BROADCAST_PORT_A* PDEV_BROADCAST_PORT_A; + +struct DEV_BROADCAST_PORT_W { + DWORD dbcp_size = DEV_BROADCAST_PORT_W.sizeof; + DWORD dbcp_devicetype; + DWORD dbcp_reserved; + WCHAR _dbcp_name; + WCHAR* dbcp_name() { return &_dbcp_name; } +} +alias DEV_BROADCAST_PORT_W* PDEV_BROADCAST_PORT_W; + +struct DEV_BROADCAST_USERDEFINED { + DEV_BROADCAST_HDR dbud_dbh; + char _dbud_szName; + char* dbud_szName() { return &_dbud_szName; } +} + +struct DEV_BROADCAST_VOLUME { + DWORD dbcv_size = DEV_BROADCAST_VOLUME.sizeof; + DWORD dbcv_devicetype; + DWORD dbcv_reserved; + DWORD dbcv_unitmask; + WORD dbcv_flags; +} +alias DEV_BROADCAST_VOLUME* PDEV_BROADCAST_VOLUME; + +version (Unicode) { + alias DEV_BROADCAST_PORT_W DEV_BROADCAST_PORT; +} else { + alias DEV_BROADCAST_PORT_A DEV_BROADCAST_PORT; +} +alias DEV_BROADCAST_PORT* PDEV_BROADCAST_PORT; + +static if ((_WIN32_WINDOWS >= 0x0410) || (_WIN32_WINNT >= 0x0500)) { + struct DEV_BROADCAST_DEVICEINTERFACE_A { + DWORD dbcc_size = DEV_BROADCAST_DEVICEINTERFACE_A.sizeof; + DWORD dbcc_devicetype; + DWORD dbcc_reserved; + GUID dbcc_classguid; + char _dbcc_name; + char* dbcc_name() { return &_dbcc_name; } + } + alias DEV_BROADCAST_DEVICEINTERFACE_A* PDEV_BROADCAST_DEVICEINTERFACE_A; + + struct DEV_BROADCAST_DEVICEINTERFACE_W { + DWORD dbcc_size = DEV_BROADCAST_DEVICEINTERFACE_W.sizeof; + DWORD dbcc_devicetype; + DWORD dbcc_reserved; + GUID dbcc_classguid; + WCHAR _dbcc_name; + WCHAR* dbcc_name() { return &_dbcc_name; } + } + alias DEV_BROADCAST_DEVICEINTERFACE_W* PDEV_BROADCAST_DEVICEINTERFACE_W; + + version (Unicode) { + alias DEV_BROADCAST_DEVICEINTERFACE_W DEV_BROADCAST_DEVICEINTERFACE; + } else { + alias DEV_BROADCAST_DEVICEINTERFACE_A DEV_BROADCAST_DEVICEINTERFACE; + } + alias DEV_BROADCAST_DEVICEINTERFACE* PDEV_BROADCAST_DEVICEINTERFACE; + + struct DEV_BROADCAST_HANDLE { + DWORD dbch_size = DEV_BROADCAST_HANDLE.sizeof; + DWORD dbch_devicetype; + DWORD dbch_reserved; + HANDLE dbch_handle; + DWORD dbch_hdevnotify; + GUID dbch_eventguid; + LONG dbch_nameoffset; + BYTE _dbch_data; + BYTE* dbch_data() { return &_dbch_data; } + } + alias DEV_BROADCAST_HANDLE* PDEV_BROADCAST_HANDLE; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/dde.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/dde.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,215 @@ +/***********************************************************************\ +* dde.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.dde; +pragma(lib, "user32.lib"); + +private import win32.windef; + +enum : uint { + WM_DDE_FIRST = 0x03E0, + WM_DDE_INITIATE = WM_DDE_FIRST, + WM_DDE_TERMINATE, + WM_DDE_ADVISE, + WM_DDE_UNADVISE, + WM_DDE_ACK, + WM_DDE_DATA, + WM_DDE_REQUEST, + WM_DDE_POKE, + WM_DDE_EXECUTE, + WM_DDE_LAST = WM_DDE_EXECUTE +} + +struct DDEACK { + ubyte bAppReturnCode; + ubyte _bf; + + ubyte reserved() { return cast(ubyte) (_bf & 0x3F); } + bool fBusy() { return cast(bool) (_bf & 0x40); } + bool fAck() { return cast(bool) (_bf & 0x80); } + + ubyte reserved(ubyte r) { + _bf = cast(ubyte) ((_bf & ~0x3F) | (r & 0x3F)); + return cast(ubyte)(r & 0x3F); + } + + bool fBusy(bool f) { _bf = cast(ubyte) ((_bf & ~0x40) | (f << 6)); return f; } + bool fAck(bool f) { _bf = cast(ubyte) ((_bf & ~0x80) | (f << 7)); return f; } +} + +struct DDEADVISE { + ushort _bf; + short cfFormat; + + ushort reserved() { return cast(ushort) (_bf & 0x3FFF); } + bool fDeferUpd() { return cast(bool) (_bf & 0x4000); } + bool fAckReq() { return cast(bool) (_bf & 0x8000); } + + ushort reserved(ushort r) { + _bf = cast(ushort) ((_bf & ~0x3FFF) | (r & 0x3FFF)); + return cast(ushort)(r & 0x3FFF); + } + + bool fDeferUpd(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } + bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } +} + +struct DDEDATA { + ushort _bf; + short cfFormat; + byte _Value; + + ushort unused() { return cast(ushort) (_bf & 0x0FFF); } + bool fResponse() { return cast(bool) (_bf & 0x1000); } + bool fRelease() { return cast(bool) (_bf & 0x2000); } + bool reserved() { return cast(bool) (_bf & 0x4000); } + bool fAckReq() { return cast(bool) (_bf & 0x8000); } + + byte* Value() { return &_Value; } + + ushort unused(ushort r) { + _bf = cast(ushort) ((_bf & ~0x0FFF) | (r & 0x0FFF)); + return cast(ushort)(r & 0x0FFF); + } + + bool fResponse(bool f) { _bf = cast(ushort) ((_bf & ~0x1000) | (f << 12)); return f; } + bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } + bool reserved(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } + bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } +} + +struct DDEPOKE { + ushort _bf; + short cfFormat; + byte _Value; + + ushort unused() { return cast(ushort) (_bf & 0x1FFF); } + bool fRelease() { return cast(bool) (_bf & 0x2000); } + ubyte fReserved() { return cast(ubyte) ((_bf & 0xC000) >>> 14); } + + byte* Value() { return &_Value; } + + ushort unused(ushort u) { + _bf = cast(ushort) ((_bf & ~0x1FFF) | (u & 0x1FFF)); + return cast(ushort)(u & 0x1FFF); + } + + bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } + ubyte fReserved(ubyte r) { _bf = cast(ushort) ((_bf & ~0xC000) | (r << 14)); return r; } +} + +deprecated struct DDELN { + ushort _bf; + short cfFormat; + + ushort unused() { return cast(ushort) (_bf & 0x1FFF); } + bool fRelease() { return cast(bool) (_bf & 0x2000); } + bool fDeferUpd() { return cast(bool) (_bf & 0x4000); } + bool fAckReq() { return cast(bool) (_bf & 0x8000); } + + ushort unused(ushort u) { + _bf = cast(ushort)((_bf & ~0x1FFF) | (u & 0x1FFF)); + return cast(ushort)(u & 0x1FFF); + } + + bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } + bool fDeferUpd(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } + bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } +} + +deprecated struct DDEUP { + ushort _bf; + short cfFormat; + byte _rgb; + + ushort unused() { return cast(ushort) (_bf & 0x0FFF); } + bool fAck() { return cast(bool) (_bf & 0x1000); } + bool fRelease() { return cast(bool) (_bf & 0x2000); } + bool fReserved() { return cast(bool) (_bf & 0x4000); } + bool fAckReq() { return cast(bool) (_bf & 0x8000); } + + byte* rgb() { return &_rgb; } + + ushort unused(ushort r) { + _bf = cast(ushort) ((_bf & ~0x0FFF) | (r & 0x0FFF)); + return cast(ushort)(r & 0x0FFF); + } + + bool fAck(bool f) { _bf = cast(ushort) ((_bf & ~0x1000) | (f << 12)); return f; } + bool fRelease(bool f) { _bf = cast(ushort) ((_bf & ~0x2000) | (f << 13)); return f; } + bool fReserved(bool f) { _bf = cast(ushort) ((_bf & ~0x4000) | (f << 14)); return f; } + bool fAckReq(bool f) { _bf = cast(ushort) ((_bf & ~0x8000) | (f << 15)); return f; } +} + +extern (Windows) { + BOOL DdeSetQualityOfService(HWND, SECURITY_QUALITY_OF_SERVICE*, + PSECURITY_QUALITY_OF_SERVICE); + BOOL ImpersonateDdeClientWindow(HWND, HWND); + LPARAM PackDDElParam(UINT, UINT_PTR, UINT_PTR); + BOOL UnpackDDElParam(UINT, LPARAM, PUINT_PTR, PUINT_PTR); + BOOL FreeDDElParam(UINT, LPARAM); + LPARAM ReuseDDElParam(LPARAM, UINT, UINT, UINT_PTR, UINT_PTR); +} + +debug (WindowsUnitTest) { + unittest { + DDEACK ddeack; + + with (ddeack) { + reserved = 10; + assert (_bf == 0x0A); + fBusy = true; + assert (_bf == 0x4A); + fAck = true; + assert (_bf == 0xCA); + + assert (reserved == 10); + assert (fBusy == true); + assert (fAck == true); + + reserved = 43; + assert (_bf == 0xEB); + fBusy = false; + assert (_bf == 0xAB); + fAck = false; + assert (_bf == 0x2B); + + assert (reserved == 43); + assert (fBusy == false); + assert (fAck == false); + } + + DDEPOKE ddepoke; + + with (ddepoke) { + unused = 3456; + assert (_bf == 0x0D80); + fRelease = true; + assert (_bf == 0x2D80); + fReserved = 2; + assert (_bf == 0xAD80); + + assert (unused == 3456); + assert (fRelease == true); + assert (fReserved == 2); + + unused = 2109; + assert (_bf == 0xa83d); + fRelease = false; + assert (_bf == 0x883d); + fReserved = 1; + assert (_bf == 0x483d); + + assert (unused == 2109); + assert (fRelease == false); + assert (fReserved == 1); + } + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ddeml.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ddeml.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,374 @@ +/***********************************************************************\ +* ddeml.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ddeml; +pragma(lib, "user32.lib"); + +private import win32.basetsd, win32.windef, win32.winnt; + +enum : int { + CP_WINANSI = 1004, + CP_WINUNICODE = 1200 +} + +enum : UINT { + XTYPF_NOBLOCK = 2, + XTYPF_NODATA = 4, + XTYPF_ACKREQ = 8 +} + +enum : UINT { + XCLASS_MASK = 0xFC00, + XCLASS_BOOL = 0x1000, + XCLASS_DATA = 0x2000, + XCLASS_FLAGS = 0x4000, + XCLASS_NOTIFICATION = 0x8000 +} + +enum : UINT { + XST_NULL, + XST_INCOMPLETE, + XST_CONNECTED, + XST_INIT1, + XST_INIT2, + XST_REQSENT, + XST_DATARCVD, + XST_POKESENT, + XST_POKEACKRCVD, + XST_EXECSENT, + XST_EXECACKRCVD, + XST_ADVSENT, + XST_UNADVSENT, + XST_ADVACKRCVD, + XST_UNADVACKRCVD, + XST_ADVDATASENT, + XST_ADVDATAACKRCVD // = 16 +} + +enum : UINT { + XTYP_ERROR = XCLASS_NOTIFICATION | XTYPF_NOBLOCK, + XTYP_ADVDATA = 0x0010 | XCLASS_FLAGS, + XTYP_ADVREQ = 0x0020 | XCLASS_DATA | XTYPF_NOBLOCK, + XTYP_ADVSTART = 0x0030 | XCLASS_BOOL, + XTYP_ADVSTOP = 0x0040 | XCLASS_NOTIFICATION, + XTYP_EXECUTE = 0x0050 | XCLASS_FLAGS, + XTYP_CONNECT = 0x0060 | XCLASS_BOOL | XTYPF_NOBLOCK, + XTYP_CONNECT_CONFIRM = 0x0070 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK, + XTYP_XACT_COMPLETE = 0x0080 | XCLASS_NOTIFICATION, + XTYP_POKE = 0x0090 | XCLASS_FLAGS, + XTYP_REGISTER = 0x00A0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK, + XTYP_REQUEST = 0x00B0 | XCLASS_DATA, + XTYP_DISCONNECT = 0x00C0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK, + XTYP_UNREGISTER = 0x00D0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK, + XTYP_WILDCONNECT = 0x00E0 | XCLASS_DATA | XTYPF_NOBLOCK, + XTYP_MONITOR = 0X00F0 | XCLASS_NOTIFICATION | XTYPF_NOBLOCK, + XTYP_MASK = 0x00F0, + XTYP_SHIFT = 4 +} + +/+ +#define TIMEOUT_ASYNC 0xFFFFFFFF +#define QID_SYNC 0xFFFFFFFF ++/ + +enum : UINT { + ST_CONNECTED = 1, + ST_ADVISE = 2, + ST_ISLOCAL = 4, + ST_BLOCKED = 8, + ST_CLIENT = 16, + ST_TERMINATED = 32, + ST_INLIST = 64, + ST_BLOCKNEXT = 128, + ST_ISSELF = 256 +} + +/+ +#define CADV_LATEACK 0xFFFF ++/ + +enum : UINT { + DMLERR_NO_ERROR = 0, + DMLERR_FIRST = 0x4000, + DMLERR_ADVACKTIMEOUT = DMLERR_FIRST, + DMLERR_BUSY, + DMLERR_DATAACKTIMEOUT, + DMLERR_DLL_NOT_INITIALIZED, + DMLERR_DLL_USAGE, + DMLERR_EXECACKTIMEOUT, + DMLERR_INVALIDPARAMETER, + DMLERR_LOW_MEMORY, + DMLERR_MEMORY_ERROR, + DMLERR_NOTPROCESSED, + DMLERR_NO_CONV_ESTABLISHED, + DMLERR_POKEACKTIMEOUT, + DMLERR_POSTMSG_FAILED, + DMLERR_REENTRANCY, + DMLERR_SERVER_DIED, + DMLERR_SYS_ERROR, + DMLERR_UNADVACKTIMEOUT, + DMLERR_UNFOUND_QUEUE_ID, // = 0x4011 + DMLERR_LAST = DMLERR_UNFOUND_QUEUE_ID +} + +/+ +#define DDE_FACK 0x8000 +#define DDE_FBUSY 0x4000 +#define DDE_FDEFERUPD 0x4000 +#define DDE_FACKREQ 0x8000 +#define DDE_FRELEASE 0x2000 +#define DDE_FREQUESTED 0x1000 +#define DDE_FAPPSTATUS 0x00ff +#define DDE_FNOTPROCESSED 0 +#define DDE_FACKRESERVED (~(DDE_FACK|DDE_FBUSY|DDE_FAPPSTATUS)) +#define DDE_FADVRESERVED (~(DDE_FACKREQ|DDE_FDEFERUPD)) +#define DDE_FDATRESERVED (~(DDE_FACKREQ|DDE_FRELEASE|DDE_FREQUESTED)) +#define DDE_FPOKRESERVED (~DDE_FRELEASE) +#define MSGF_DDEMGR 0x8001 +#define CBR_BLOCK ((HDDEDATA)0xffffffff) ++/ + +const DWORD + APPCLASS_STANDARD = 0, + APPCLASS_MONITOR = 0x00000001, + APPCLASS_MASK = 0x0000000F, + APPCMD_CLIENTONLY = 0x00000010, + APPCMD_FILTERINITS = 0x00000020, + APPCMD_MASK = 0x00000FF0, + CBF_FAIL_SELFCONNECTIONS = 0x00001000, + CBF_FAIL_CONNECTIONS = 0x00002000, + CBF_FAIL_ADVISES = 0x00004000, + CBF_FAIL_EXECUTES = 0x00008000, + CBF_FAIL_POKES = 0x00010000, + CBF_FAIL_REQUESTS = 0x00020000, + CBF_FAIL_ALLSVRXACTIONS = 0x0003f000, + CBF_SKIP_CONNECT_CONFIRMS = 0x00040000, + CBF_SKIP_REGISTRATIONS = 0x00080000, + CBF_SKIP_UNREGISTRATIONS = 0x00100000, + CBF_SKIP_DISCONNECTS = 0x00200000, + CBF_SKIP_ALLNOTIFICATIONS = 0x003c0000, + MF_HSZ_INFO = 0x01000000, + MF_SENDMSGS = 0x02000000, + MF_POSTMSGS = 0x04000000, + MF_CALLBACKS = 0x08000000, + MF_ERRORS = 0x10000000, + MF_LINKS = 0x20000000, + MF_CONV = 0x40000000, + MF_MASK = 0xFF000000; + +enum : UINT { + EC_ENABLEALL = 0, + EC_ENABLEONE = ST_BLOCKNEXT, + EC_DISABLE = ST_BLOCKED, + EC_QUERYWAITING = 2 +} + +enum : UINT { + DNS_REGISTER = 1, + DNS_UNREGISTER = 2, + DNS_FILTERON = 4, + DNS_FILTEROFF = 8 +} + +/+ +#define HDATA_APPOWNED 1 +#define MAX_MONITORS 4 ++/ + +enum : int { + MH_CREATE = 1, + MH_KEEP = 2, + MH_DELETE = 3, + MH_CLEANUP = 4 +} + +alias HANDLE HCONVLIST, HCONV, HSZ, HDDEDATA; + +extern (Windows) alias HDDEDATA + function(UINT, UINT, HCONV, HSZ, HSZ, HDDEDATA, DWORD, DWORD) PFNCALLBACK; + +struct HSZPAIR { + HSZ hszSvc; + HSZ hszTopic; +} +alias HSZPAIR* PHSZPAIR; + +struct CONVCONTEXT { + UINT cb = CONVCONTEXT.sizeof; + UINT wFlags; + UINT wCountryID; + int iCodePage; + DWORD dwLangID; + DWORD dwSecurity; + SECURITY_QUALITY_OF_SERVICE qos; +} +alias CONVCONTEXT* PCONVCONTEXT; + +struct CONVINFO { + DWORD cb = CONVINFO.sizeof; + DWORD hUser; + HCONV hConvPartner; + HSZ hszSvcPartner; + HSZ hszServiceReq; + HSZ hszTopic; + HSZ hszItem; + UINT wFmt; + UINT wType; + UINT wStatus; + UINT wConvst; + UINT wLastError; + HCONVLIST hConvList; + CONVCONTEXT ConvCtxt; + HWND hwnd; + HWND hwndPartner; +} +alias CONVINFO* PCONVINFO; + +struct DDEML_MSG_HOOK_DATA { + UINT uiLo; + UINT uiHi; + DWORD cbData; + DWORD[8] Data; +} + +struct MONHSZSTRUCT { + UINT cb = MONHSZSTRUCT.sizeof; + int fsAction; + DWORD dwTime; + HSZ hsz; + HANDLE hTask; + TCHAR[1] _str; + + TCHAR* str() { return _str.ptr; } +} +alias MONHSZSTRUCT* PMONHSZSTRUCT; + +struct MONLINKSTRUCT { + UINT cb = MONLINKSTRUCT.sizeof; + DWORD dwTime; + HANDLE hTask; + BOOL fEstablished; + BOOL fNoData; + HSZ hszSvc; + HSZ hszTopic; + HSZ hszItem; + UINT wFmt; + BOOL fServer; + HCONV hConvServer; + HCONV hConvClient; +} +alias MONLINKSTRUCT* PMONLINKSTRUCT; + +struct MONCONVSTRUCT { + UINT cb = MONCONVSTRUCT.sizeof; + BOOL fConnect; + DWORD dwTime; + HANDLE hTask; + HSZ hszSvc; + HSZ hszTopic; + HCONV hConvClient; + HCONV hConvServer; +} +alias MONCONVSTRUCT* PMONCONVSTRUCT; + +struct MONCBSTRUCT { + UINT cb = MONCBSTRUCT.sizeof; + DWORD dwTime; + HANDLE hTask; + DWORD dwRet; + UINT wType; + UINT wFmt; + HCONV hConv; + HSZ hsz1; + HSZ hsz2; + HDDEDATA hData; + ULONG_PTR dwData1; + ULONG_PTR dwData2; + CONVCONTEXT cc; + DWORD cbData; + DWORD[8] Data; +} +alias MONCBSTRUCT* PMONCBSTRUCT; + +struct MONERRSTRUCT { + UINT cb = MONERRSTRUCT.sizeof; + UINT wLastError; + DWORD dwTime; + HANDLE hTask; +} +alias MONERRSTRUCT* PMONERRSTRUCT; + +struct MONMSGSTRUCT { + UINT cb = MONMSGSTRUCT.sizeof; + HWND hwndTo; + DWORD dwTime; + HANDLE hTask; + UINT wMsg; + WPARAM wParam; + LPARAM lParam; + DDEML_MSG_HOOK_DATA dmhd; +} +alias MONMSGSTRUCT* PMONMSGSTRUCT; + +extern (Windows) { + BOOL DdeAbandonTransaction(DWORD, HCONV, DWORD); + PBYTE DdeAccessData(HDDEDATA, PDWORD); + HDDEDATA DdeAddData(HDDEDATA, PBYTE, DWORD, DWORD); + HDDEDATA DdeClientTransaction(PBYTE, DWORD, HCONV, HSZ, UINT, UINT, + DWORD, PDWORD); + int DdeCmpStringHandles(HSZ, HSZ); + HCONV DdeConnect(DWORD, HSZ, HSZ, PCONVCONTEXT); + HCONVLIST DdeConnectList(DWORD, HSZ, HSZ, HCONVLIST, PCONVCONTEXT); + HDDEDATA DdeCreateDataHandle(DWORD, PBYTE, DWORD, DWORD, HSZ, UINT, + UINT); + HSZ DdeCreateStringHandleA(DWORD, LPSTR, int); + HSZ DdeCreateStringHandleW(DWORD, LPWSTR, int); + BOOL DdeDisconnect(HCONV); + BOOL DdeDisconnectList(HCONVLIST); + BOOL DdeEnableCallback(DWORD, HCONV, UINT); + BOOL DdeFreeDataHandle(HDDEDATA); + BOOL DdeFreeStringHandle(DWORD, HSZ); + DWORD DdeGetData(HDDEDATA, PBYTE, DWORD, DWORD); + UINT DdeGetLastError(DWORD); + BOOL DdeImpersonateClient(HCONV); + UINT DdeInitializeA(PDWORD, PFNCALLBACK, DWORD, DWORD); + UINT DdeInitializeW(PDWORD, PFNCALLBACK, DWORD, DWORD); + BOOL DdeKeepStringHandle(DWORD, HSZ); + HDDEDATA DdeNameService(DWORD, HSZ, HSZ, UINT); + BOOL DdePostAdvise(DWORD, HSZ, HSZ); + UINT DdeQueryConvInfo(HCONV, DWORD, PCONVINFO); + HCONV DdeQueryNextServer(HCONVLIST, HCONV); + DWORD DdeQueryStringA(DWORD, HSZ, LPSTR, DWORD, int); + DWORD DdeQueryStringW(DWORD, HSZ, LPWSTR, DWORD, int); + HCONV DdeReconnect(HCONV); + BOOL DdeSetUserHandle(HCONV, DWORD, DWORD); + BOOL DdeUnaccessData(HDDEDATA); + BOOL DdeUninitialize(DWORD); +} + +const TCHAR[] + SZDDESYS_TOPIC = "System", + SZDDESYS_ITEM_TOPICS = "Topics", + SZDDESYS_ITEM_SYSITEMS = "SysItems", + SZDDESYS_ITEM_RTNMSG = "ReturnMessage", + SZDDESYS_ITEM_STATUS = "Status", + SZDDESYS_ITEM_FORMATS = "Formats", + SZDDESYS_ITEM_HELP = "Help", + SZDDE_ITEM_ITEMLIST = "TopicItemList"; + +version (Unicode) { + alias DdeCreateStringHandleW DdeCreateStringHandle; + alias DdeInitializeW DdeInitialize; + alias DdeQueryStringW DdeQueryString; +} else { + alias DdeCreateStringHandleA DdeCreateStringHandle; + alias DdeInitializeA DdeInitialize; + alias DdeQueryStringA DdeQueryString; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/dhcpcsdk.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/dhcpcsdk.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,58 @@ +/***********************************************************************\ +* dhcpcsdk.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.dhcpcsdk; + +private import win32.w32api, win32.windef; + +static assert (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500, +"win32.dhcpcsdk is available only if version WindowsXP, Windows2003 +or WindowsVista is set, or both Windows2000 and WindowsNTonly are set"); + +//#if (_WIN32_WINNT >= 0x0500) + +// FIXME: check type +const DHCPCAPI_REGISTER_HANDLE_EVENT = 1; +const DHCPCAPI_REQUEST_PERSISTENT = 1; +const DHCPCAPI_REQUEST_SYNCHRONOUS = 2; + +struct DHCPCAPI_CLASSID { + ULONG Flags; + LPBYTE Data; + ULONG nBytesData; +} +alias DHCPCAPI_CLASSID* PDHCPCAPI_CLASSID, LPDHCPCAPI_CLASSID; + +struct DHCPAPI_PARAMS { + ULONG Flags; + ULONG OptionId; + BOOL IsVendor; + LPBYTE Data; + DWORD nBytesData; +} +alias DHCPAPI_PARAMS* PDHCPAPI_PARAMS, LPDHCPAPI_PARAMS; + +struct DHCPCAPI_PARAMS_ARRAY { + ULONG nParams; + LPDHCPAPI_PARAMS Params; +} +alias DHCPCAPI_PARAMS_ARRAY* PDHCPCAPI_PARAMS_ARRAY, LPDHCPCAPI_PARAMS_ARRAY; + +extern (Windows) { + void DhcpCApiCleanup(); + DWORD DhcpCApiInitialize(LPDWORD); + DWORD DhcpDeRegisterParamChange(DWORD, LPVOID, LPVOID); + DWORD DhcpRegisterParamChange(DWORD, LPVOID, PWSTR, LPDHCPCAPI_CLASSID, + DHCPCAPI_PARAMS_ARRAY, LPVOID); + DWORD DhcpRemoveDNSRegistrations(); + DWORD DhcpUndoRequestParams(DWORD, LPVOID, LPWSTR, LPWSTR); +} + +//#endif // (_WIN32_WINNT >= 0x0500) diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3d10.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3d10.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1229 @@ +/***********************************************************************\ +* d3d10.d * +* * +* Windows API header module * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.directx.d3d10; + +private import win32.windows; + +public import win32.directx.dxgitype; +public import win32.directx.dxgi; +public import win32.directx.d3d10misc; +public import win32.directx.d3d10shader; +public import win32.directx.d3d10effect; + +pragma(lib, "d3d10.lib"); + +const D3D10_16BIT_INDEX_STRIP_CUT_VALUE = 0xffff; +const D3D10_32BIT_INDEX_STRIP_CUT_VALUE = 0xffffffff; +const D3D10_8BIT_INDEX_STRIP_CUT_VALUE = 0xff; +const D3D10_ARRAY_AXIS_ADDRESS_RANGE_BIT_COUNT = 9; +const D3D10_CLIP_OR_CULL_DISTANCE_COUNT = 8; +const D3D10_CLIP_OR_CULL_DISTANCE_ELEMENT_COUNT = 2; +const D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT = 14; +const D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENTS = 4; +const D3D10_COMMONSHADER_CONSTANT_BUFFER_COMPONENT_BIT_COUNT = 32; +const D3D10_COMMONSHADER_CONSTANT_BUFFER_HW_SLOT_COUNT = 15; +const D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4; +const D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_COUNT = 15; +const D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1; +const D3D10_COMMONSHADER_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1; +const D3D10_COMMONSHADER_FLOWCONTROL_NESTING_LIMIT = 64; +const D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COMPONENTS = 4; +const D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_COUNT = 1; +const D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READS_PER_INST = 1; +const D3D10_COMMONSHADER_IMMEDIATE_CONSTANT_BUFFER_REGISTER_READ_PORTS = 1; +const D3D10_COMMONSHADER_IMMEDIATE_VALUE_COMPONENT_BIT_COUNT = 32; +const D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COMPONENTS = 1; +const D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_COUNT = 128; +const D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READS_PER_INST = 1; +const D3D10_COMMONSHADER_INPUT_RESOURCE_REGISTER_READ_PORTS = 1; +const D3D10_COMMONSHADER_INPUT_RESOURCE_SLOT_COUNT = 128; +const D3D10_COMMONSHADER_SAMPLER_REGISTER_COMPONENTS = 1; +const D3D10_COMMONSHADER_SAMPLER_REGISTER_COUNT = 16; +const D3D10_COMMONSHADER_SAMPLER_REGISTER_READS_PER_INST = 1; +const D3D10_COMMONSHADER_SAMPLER_REGISTER_READ_PORTS = 1; +const D3D10_COMMONSHADER_SAMPLER_SLOT_COUNT = 16; +const D3D10_COMMONSHADER_SUBROUTINE_NESTING_LIMIT = 32; +const D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENTS = 4; +const D3D10_COMMONSHADER_TEMP_REGISTER_COMPONENT_BIT_COUNT = 32; +const D3D10_COMMONSHADER_TEMP_REGISTER_COUNT = 4096; +const D3D10_COMMONSHADER_TEMP_REGISTER_READS_PER_INST = 3; +const D3D10_COMMONSHADER_TEMP_REGISTER_READ_PORTS = 3; +const D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MAX = 10; +const D3D10_COMMONSHADER_TEXCOORD_RANGE_REDUCTION_MIN = -10; +const D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE = -8; +const D3D10_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE = 7; +const D3D10_DEFAULT_BLEND_FACTOR_ALPHA = 1.0f; +const D3D10_DEFAULT_BLEND_FACTOR_BLUE = 1.0f; +const D3D10_DEFAULT_BLEND_FACTOR_GREEN = 1.0f; +const D3D10_DEFAULT_BLEND_FACTOR_RED = 1.0f; +const D3D10_DEFAULT_BORDER_COLOR_COMPONENT = 0.0f; +const D3D10_DEFAULT_DEPTH_BIAS = 0; +const D3D10_DEFAULT_DEPTH_BIAS_CLAMP = 0.0f; +const D3D10_DEFAULT_MAX_ANISOTROPY = 16.0f; +const D3D10_DEFAULT_MIP_LOD_BIAS = 0.0f; +const D3D10_DEFAULT_RENDER_TARGET_ARRAY_INDEX = 0; +const D3D10_DEFAULT_SAMPLE_MASK = 0xffffffff; +const D3D10_DEFAULT_SCISSOR_ENDX = 0; +const D3D10_DEFAULT_SCISSOR_ENDY = 0; +const D3D10_DEFAULT_SCISSOR_STARTX = 0; +const D3D10_DEFAULT_SCISSOR_STARTY = 0; +const D3D10_DEFAULT_SLOPE_SCALED_DEPTH_BIAS = 0.0f; +const D3D10_DEFAULT_STENCIL_READ_MASK = 0xff; +const D3D10_DEFAULT_STENCIL_REFERENCE = 0; +const D3D10_DEFAULT_STENCIL_WRITE_MASK = 0xff; +const D3D10_DEFAULT_VIEWPORT_AND_SCISSORRECT_INDEX = 0; +const D3D10_DEFAULT_VIEWPORT_HEIGHT = 0; +const D3D10_DEFAULT_VIEWPORT_MAX_DEPTH = 0.0f; +const D3D10_DEFAULT_VIEWPORT_MIN_DEPTH = 0.0f; +const D3D10_DEFAULT_VIEWPORT_TOPLEFTX = 0; +const D3D10_DEFAULT_VIEWPORT_TOPLEFTY = 0; +const D3D10_DEFAULT_VIEWPORT_WIDTH = 0; +const D3D10_FLOAT16_FUSED_TOLERANCE_IN_ULP = 0.6; +const D3D10_FLOAT32_MAX = 3.402823466e+38f; +const D3D10_FLOAT32_TO_INTEGER_TOLERANCE_IN_ULP = 0.6f; +const D3D10_FLOAT_TO_SRGB_EXPONENT_DENOMINATOR = 2.4f; +const D3D10_FLOAT_TO_SRGB_EXPONENT_NUMERATOR = 1.0f; +const D3D10_FLOAT_TO_SRGB_OFFSET = 0.055f; +const D3D10_FLOAT_TO_SRGB_SCALE_1 = 12.92f; +const D3D10_FLOAT_TO_SRGB_SCALE_2 = 1.055f; +const D3D10_FLOAT_TO_SRGB_THRESHOLD = 0.0031308f; +const D3D10_FTOI_INSTRUCTION_MAX_INPUT = 2147483647.999f; +const D3D10_FTOI_INSTRUCTION_MIN_INPUT = -2147483648.999f; +const D3D10_FTOU_INSTRUCTION_MAX_INPUT = 4294967295.999f; +const D3D10_FTOU_INSTRUCTION_MIN_INPUT = 0.0f; +const D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENTS = 1; +const D3D10_GS_INPUT_PRIM_CONST_REGISTER_COMPONENT_BIT_COUNT = 32; +const D3D10_GS_INPUT_PRIM_CONST_REGISTER_COUNT = 1; +const D3D10_GS_INPUT_PRIM_CONST_REGISTER_READS_PER_INST = 2; +const D3D10_GS_INPUT_PRIM_CONST_REGISTER_READ_PORTS = 1; +const D3D10_GS_INPUT_REGISTER_COMPONENTS = 4; +const D3D10_GS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32; +const D3D10_GS_INPUT_REGISTER_COUNT = 16; +const D3D10_GS_INPUT_REGISTER_READS_PER_INST = 2; +const D3D10_GS_INPUT_REGISTER_READ_PORTS = 1; +const D3D10_GS_INPUT_REGISTER_VERTICES = 6; +const D3D10_GS_OUTPUT_ELEMENTS = 32; +const D3D10_GS_OUTPUT_REGISTER_COMPONENTS = 4; +const D3D10_GS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32; +const D3D10_GS_OUTPUT_REGISTER_COUNT = 32; +const D3D10_IA_DEFAULT_INDEX_BUFFER_OFFSET_IN_BYTES = 0; +const D3D10_IA_DEFAULT_PRIMITIVE_TOPOLOGY = 0; +const D3D10_IA_DEFAULT_VERTEX_BUFFER_OFFSET_IN_BYTES = 0; +const D3D10_IA_INDEX_INPUT_RESOURCE_SLOT_COUNT = 1; +const D3D10_IA_INSTANCE_ID_BIT_COUNT = 32; +const D3D10_IA_INTEGER_ARITHMETIC_BIT_COUNT = 32; +const D3D10_IA_PRIMITIVE_ID_BIT_COUNT = 32; +const D3D10_IA_VERTEX_ID_BIT_COUNT = 32; +const D3D10_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT = 16; +const D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENTS_COMPONENTS = 64; +const D3D10_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT = 16; +const D3D10_INTEGER_DIVIDE_BY_ZERO_QUOTIENT = 0xffffffff; +const D3D10_INTEGER_DIVIDE_BY_ZERO_REMAINDER = 0xffffffff; +const D3D10_LINEAR_GAMMA = 1.0f; +const D3D10_MAX_BORDER_COLOR_COMPONENT = 1.0f; +const D3D10_MAX_DEPTH = 1.0f; +const D3D10_MAX_MAXANISOTROPY = 16; +const D3D10_MAX_MULTISAMPLE_SAMPLE_COUNT = 32; +const D3D10_MAX_POSITION_VALUE = 3.402823466e+34f; +const D3D10_MAX_TEXTURE_DIMENSION_2_TO_EXP = 17; +const D3D10_MIN_BORDER_COLOR_COMPONENT = 0.0f; +const D3D10_MIN_DEPTH = 0.0f; +const D3D10_MIN_MAXANISOTROPY = 0; +const D3D10_MIP_LOD_BIAS_MAX = 15.99f; +const D3D10_MIP_LOD_BIAS_MIN = -16.0f; +const D3D10_MIP_LOD_FRACTIONAL_BIT_COUNT = 6; +const D3D10_MIP_LOD_RANGE_BIT_COUNT = 8; +const D3D10_MULTISAMPLE_ANTIALIAS_LINE_WIDTH = 1.4f; +const D3D10_NONSAMPLE_FETCH_OUT_OF_RANGE_ACCESS_RESULT = 0; +const D3D10_PIXEL_ADDRESS_RANGE_BIT_COUNT = 13; +const D3D10_PRE_SCISSOR_PIXEL_ADDRESS_RANGE_BIT_COUNT = 15; +const D3D10_PS_FRONTFACING_DEFAULT_VALUE = 0xffffffff; +const D3D10_PS_FRONTFACING_FALSE_VALUE = 0; +const D3D10_PS_FRONTFACING_TRUE_VALUE = 0xffffffff; +const D3D10_PS_INPUT_REGISTER_COMPONENTS = 4; +const D3D10_PS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32; +const D3D10_PS_INPUT_REGISTER_COUNT = 32; +const D3D10_PS_INPUT_REGISTER_READS_PER_INST = 2; +const D3D10_PS_INPUT_REGISTER_READ_PORTS = 1; +const D3D10_PS_LEGACY_PIXEL_CENTER_FRACTIONAL_COMPONENT = 0.0f; +const D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENTS = 1; +const D3D10_PS_OUTPUT_DEPTH_REGISTER_COMPONENT_BIT_COUNT = 32; +const D3D10_PS_OUTPUT_DEPTH_REGISTER_COUNT = 1; +const D3D10_PS_OUTPUT_REGISTER_COMPONENTS = 4; +const D3D10_PS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32; +const D3D10_PS_OUTPUT_REGISTER_COUNT = 8; +const D3D10_PS_PIXEL_CENTER_FRACTIONAL_COMPONENT = 0.5f; +const D3D10_REQ_BLEND_OBJECT_COUNT_PER_CONTEXT = 4096; +const D3D10_REQ_BUFFER_RESOURCE_TEXEL_COUNT_2_TO_EXP = 27; +const D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT = 4096; +const D3D10_REQ_DEPTH_STENCIL_OBJECT_COUNT_PER_CONTEXT = 4096; +const D3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 32; +const D3D10_REQ_DRAW_VERTEX_COUNT_2_TO_EXP = 32; +const D3D10_REQ_FILTERING_HW_ADDRESSABLE_RESOURCE_DIMENSION = 8192; +const D3D10_REQ_GS_INVOCATION_32BIT_OUTPUT_COMPONENT_LIMIT = 1024; +const D3D10_REQ_IMMEDIATE_CONSTANT_BUFFER_ELEMENT_COUNT = 4096; +const D3D10_REQ_MAXANISOTROPY = 16; +const D3D10_REQ_MIP_LEVELS = 14; +const D3D10_REQ_MULTI_ELEMENT_STRUCTURE_SIZE_IN_BYTES = 2048; +const D3D10_REQ_RASTERIZER_OBJECT_COUNT_PER_CONTEXT = 4096; +const D3D10_REQ_RENDER_TO_BUFFER_WINDOW_WIDTH = 8192; +const D3D10_REQ_RESOURCE_SIZE_IN_MEGABYTES = 128; +const D3D10_REQ_RESOURCE_VIEW_COUNT_PER_CONTEXT_2_TO_EXP = 20; +const D3D10_REQ_SAMPLER_OBJECT_COUNT_PER_CONTEXT = 4096; +const D3D10_REQ_TEXTURE1D_ARRAY_AXIS_DIMENSION = 512; +const D3D10_REQ_TEXTURE1D_U_DIMENSION = 8192; +const D3D10_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION = 512; +const D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION = 8192; +const D3D10_REQ_TEXTURE3D_U_V_OR_W_DIMENSION = 2048; +const D3D10_REQ_TEXTURECUBE_DIMENSION = 8192; +const D3D10_RESINFO_INSTRUCTION_MISSING_COMPONENT_RETVAL = 0; +const D3D10_SHADER_MAJOR_VERSION = 4; +const D3D10_SHADER_MINOR_VERSION = 0; +const D3D10_SHIFT_INSTRUCTION_PAD_VALUE = 0; +const D3D10_SHIFT_INSTRUCTION_SHIFT_VALUE_BIT_COUNT = 5; +const D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT = 8; +const D3D10_SO_BUFFER_MAX_STRIDE_IN_BYTES = 2048; +const D3D10_SO_BUFFER_MAX_WRITE_WINDOW_IN_BYTES = 256; +const D3D10_SO_BUFFER_SLOT_COUNT = 4; +const D3D10_SO_DDI_REGISTER_INDEX_DENOTING_GAP = 0xffffffff; +const D3D10_SO_MULTIPLE_BUFFER_ELEMENTS_PER_BUFFER = 1; +const D3D10_SO_SINGLE_BUFFER_COMPONENT_LIMIT = 64; +const D3D10_SRGB_GAMMA = 2.2f; +const D3D10_SRGB_TO_FLOAT_DENOMINATOR_1 = 12.92f; +const D3D10_SRGB_TO_FLOAT_DENOMINATOR_2 = 1.055f; +const D3D10_SRGB_TO_FLOAT_EXPONENT = 2.4f; +const D3D10_SRGB_TO_FLOAT_OFFSET = 0.055f; +const D3D10_SRGB_TO_FLOAT_THRESHOLD = 0.04045f; +const D3D10_SRGB_TO_FLOAT_TOLERANCE_IN_ULP = 0.5f; +const D3D10_STANDARD_COMPONENT_BIT_COUNT = 32; +const D3D10_STANDARD_COMPONENT_BIT_COUNT_DOUBLED = 64; +const D3D10_STANDARD_MAXIMUM_ELEMENT_ALIGNMENT_BYTE_MULTIPLE = 4; +const D3D10_STANDARD_PIXEL_COMPONENT_COUNT = 128; +const D3D10_STANDARD_PIXEL_ELEMENT_COUNT = 32; +const D3D10_STANDARD_VECTOR_SIZE = 4; +const D3D10_STANDARD_VERTEX_ELEMENT_COUNT = 16; +const D3D10_STANDARD_VERTEX_TOTAL_COMPONENT_COUNT = 64; +const D3D10_SUBPIXEL_FRACTIONAL_BIT_COUNT = 8; +const D3D10_SUBTEXEL_FRACTIONAL_BIT_COUNT = 6; +const D3D10_TEXEL_ADDRESS_RANGE_BIT_COUNT = 18; +const D3D10_UNBOUND_MEMORY_ACCESS_RESULT = 0; +const D3D10_VIEWPORT_AND_SCISSORRECT_MAX_INDEX = 15; +const D3D10_VIEWPORT_AND_SCISSORRECT_OBJECT_COUNT_PER_PIPELINE = 16; +const D3D10_VIEWPORT_BOUNDS_MAX = 16383; +const D3D10_VIEWPORT_BOUNDS_MIN = -16384; +const D3D10_VS_INPUT_REGISTER_COMPONENTS = 4; +const D3D10_VS_INPUT_REGISTER_COMPONENT_BIT_COUNT = 32; +const D3D10_VS_INPUT_REGISTER_COUNT = 16; +const D3D10_VS_INPUT_REGISTER_READS_PER_INST = 2; +const D3D10_VS_INPUT_REGISTER_READ_PORTS = 1; +const D3D10_VS_OUTPUT_REGISTER_COMPONENTS = 4; +const D3D10_VS_OUTPUT_REGISTER_COMPONENT_BIT_COUNT = 32; +const D3D10_VS_OUTPUT_REGISTER_COUNT = 16; +const D3D10_WHQL_CONTEXT_COUNT_FOR_RESOURCE_LIMIT = 10; +const D3D10_WHQL_DRAWINDEXED_INDEX_COUNT_2_TO_EXP = 25; +const D3D10_WHQL_DRAW_VERTEX_COUNT_2_TO_EXP = 25; +const D3D_MAJOR_VERSION = 10; +const D3D_MINOR_VERSION = 0; +const D3D_SPEC_DATE_DAY = 8; +const D3D_SPEC_DATE_MONTH = 8; +const D3D_SPEC_DATE_YEAR = 2006; +const D3D_SPEC_VERSION = 1.050005; + +const _FACD3D10 = 0x879; +const _FACD3D10DEBUG = _FACD3D10 + 1; + +HRESULT MAKE_D3D10_HRESULT(T)(T code) { + return MAKE_HRESULT(1, _FACD3D10, code); +} + +HRESULT MAKE_D3D10_STATUS(T)(T code) { + return MAKE_HRESULT(0, _FACD3D10, code); +} + +const D3D10_ERROR_TOO_MANY_UNIQUE_STATE_OBJECTS = MAKE_D3D10_HRESULT(1); +const D3D10_ERROR_FILE_NOT_FOUND = MAKE_D3D10_HRESULT(2); + +enum D3D10_INPUT_CLASSIFICATION { + D3D10_INPUT_PER_VERTEX_DATA = 0, + D3D10_INPUT_PER_INSTANCE_DATA = 1 +} + +const D3D10_APPEND_ALIGNED_ELEMENT = 0xffffffff; + +struct D3D10_INPUT_ELEMENT_DESC { + LPCSTR SemanticName; + UINT SemanticIndex; + DXGI_FORMAT Format; + UINT InputSlot; + UINT AlignedByteOffset; + D3D10_INPUT_CLASSIFICATION InputSlotClass; + UINT InstanceDataStepRate; +} + +enum D3D10_FILL_MODE { + D3D10_FILL_WIREFRAME = 2, + D3D10_FILL_SOLID = 3 +} + +enum D3D10_PRIMITIVE_TOPOLOGY { + D3D10_PRIMITIVE_TOPOLOGY_UNDEFINED = 0, + D3D10_PRIMITIVE_TOPOLOGY_POINTLIST = 1, + D3D10_PRIMITIVE_TOPOLOGY_LINELIST = 2, + D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP = 3, + D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST = 4, + D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP = 5, + D3D10_PRIMITIVE_TOPOLOGY_LINELIST_ADJ = 10, + D3D10_PRIMITIVE_TOPOLOGY_LINESTRIP_ADJ = 11, + D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST_ADJ = 12, + D3D10_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP_ADJ = 13 +} + +enum D3D10_PRIMITIVE { + D3D10_PRIMITIVE_UNDEFINED = 0, + D3D10_PRIMITIVE_POINT = 1, + D3D10_PRIMITIVE_LINE = 2, + D3D10_PRIMITIVE_TRIANGLE = 3, + D3D10_PRIMITIVE_LINE_ADJ = 6, + D3D10_PRIMITIVE_TRIANGLE_ADJ = 7 +} + +enum D3D10_CULL_MODE { + D3D10_CULL_NONE = 1, + D3D10_CULL_FRONT, + D3D10_CULL_BACK +} + +struct D3D10_SO_DECLARATION_ENTRY { + LPCSTR SemanticName; + UINT SemanticIndex; + BYTE StartComponent; + BYTE ComponentCount; + BYTE OutputSlot; +} + +struct D3D10_VIEWPORT { + INT TopLeftX; + INT TopLeftY; + UINT Width; + UINT Height; + FLOAT MinDepth; + FLOAT MaxDepth; +} + +enum D3D10_RESOURCE_DIMENSION { + D3D10_RESOURCE_DIMENSION_UNKNOWN = 0, + D3D10_RESOURCE_DIMENSION_BUFFER, + D3D10_RESOURCE_DIMENSION_TEXTURE1D, + D3D10_RESOURCE_DIMENSION_TEXTURE2D, + D3D10_RESOURCE_DIMENSION_TEXTURE3D +} + +enum D3D10_SRV_DIMENSION { + D3D10_SRV_DIMENSION_UNKNOWN = 0, + D3D10_SRV_DIMENSION_BUFFER, + D3D10_SRV_DIMENSION_TEXTURE1D, + D3D10_SRV_DIMENSION_TEXTURE1DARRAY, + D3D10_SRV_DIMENSION_TEXTURE2D, + D3D10_SRV_DIMENSION_TEXTURE2DARRAY, + D3D10_SRV_DIMENSION_TEXTURE2DMS, + D3D10_SRV_DIMENSION_TEXTURE2DMSARRAY, + D3D10_SRV_DIMENSION_TEXTURE3D, + D3D10_SRV_DIMENSION_TEXTURECUBE +} + +enum D3D10_DSV_DIMENSION { + D3D10_DSV_DIMENSION_UNKNOWN = 0, + D3D10_DSV_DIMENSION_TEXTURE1D, + D3D10_DSV_DIMENSION_TEXTURE1DARRAY, + D3D10_DSV_DIMENSION_TEXTURE2D, + D3D10_DSV_DIMENSION_TEXTURE2DARRAY, + D3D10_DSV_DIMENSION_TEXTURE2DMS, + D3D10_DSV_DIMENSION_TEXTURE2DMSARRAY6 +} + +enum D3D10_RTV_DIMENSION { + D3D10_RTV_DIMENSION_UNKNOWN = 0, + D3D10_RTV_DIMENSION_BUFFER, + D3D10_RTV_DIMENSION_TEXTURE1D, + D3D10_RTV_DIMENSION_TEXTURE1DARRAY, + D3D10_RTV_DIMENSION_TEXTURE2D, + D3D10_RTV_DIMENSION_TEXTURE2DARRAY, + D3D10_RTV_DIMENSION_TEXTURE2DMS, + D3D10_RTV_DIMENSION_TEXTURE2DMSARRAY, + D3D10_RTV_DIMENSION_TEXTURE3D +} + +enum D3D10_USAGE { + D3D10_USAGE_DEFAULT = 0, + D3D10_USAGE_IMMUTABLE, + D3D10_USAGE_DYNAMIC, + D3D10_USAGE_STAGING +} + +enum D3D10_BIND_FLAG { + D3D10_BIND_VERTEX_BUFFER = 0x01, + D3D10_BIND_INDEX_BUFFER = 0x02, + D3D10_BIND_CONSTANT_BUFFER = 0x04, + D3D10_BIND_SHADER_RESOURCE = 0x08, + D3D10_BIND_STREAM_OUTPUT = 0x10, + D3D10_BIND_RENDER_TARGET = 0x20, + D3D10_BIND_DEPTH_STENCIL = 0x40 +} + +enum D3D10_CPU_ACCESS_FLAG { + D3D10_CPU_ACCESS_WRITE = 0x10000, + D3D10_CPU_ACCESS_READ = 0x20000 +} + +enum D3D10_RESOURCE_MISC_FLAG { + D3D10_RESOURCE_MISC_GENERATE_MIPS = 0x01, + D3D10_RESOURCE_MISC_SHARED = 0x02, + D3D10_RESOURCE_MISC_TEXTURECUBE = 0x04 +} + +enum D3D10_MAP { + D3D10_MAP_READ = 1, + D3D10_MAP_WRITE, + D3D10_MAP_READ_WRITE, + D3D10_MAP_WRITE_DISCARD, + D3D10_MAP_WRITE_NO_OVERWRITE +} + +enum D3D10_MAP_FLAG { + D3D10_MAP_FLAG_DO_NOT_WAIT = 0x100000 +} + +enum D3D10_RAISE_FLAG { + D3D10_RAISE_FLAG_DRIVER_INTERNAL_ERROR = 0x01 +} + +enum D3D10_CLEAR_FLAG { + D3D10_CLEAR_DEPTH = 0x01, + D3D10_CLEAR_STENCIL = 0x02 +} + +alias RECT D3D10_RECT; + +struct D3D10_BOX { + UINT left; + UINT top; + UINT front; + UINT right; + UINT bottom; + UINT back; +} + +extern (Windows) interface ID3D10DeviceChild : IUnknown { + //extern(Windows) : + void GetDevice(ID3D10Device* ppDevice); + HRESULT GetPrivateData(REFGUID guid, UINT *pDataSize, void *pData); + HRESULT SetPrivateData(REFGUID guid, UINT DataSize, void *pData); + HRESULT SetPrivateDataInterface(REFGUID guid, IUnknown pData); +} + +enum D3D10_COMPARISON_FUNC { + D3D10_COMPARISON_NEVER = 1, + D3D10_COMPARISON_LESS, + D3D10_COMPARISON_EQUAL, + D3D10_COMPARISON_LESS_EQUAL, + D3D10_COMPARISON_GREATER, + D3D10_COMPARISON_NOT_EQUAL, + D3D10_COMPARISON_GREATER_EQUAL, + D3D10_COMPARISON_ALWAYS +} + +enum D3D10_DEPTH_WRITE_MASK { + D3D10_DEPTH_WRITE_MASK_ZERO = 0, + D3D10_DEPTH_WRITE_MASK_ALL +} + +enum D3D10_STENCIL_OP { + D3D10_STENCIL_OP_KEEP = 1, + D3D10_STENCIL_OP_ZERO, + D3D10_STENCIL_OP_REPLACE, + D3D10_STENCIL_OP_INCR_SAT, + D3D10_STENCIL_OP_DECR_SAT, + D3D10_STENCIL_OP_INVERT, + D3D10_STENCIL_OP_INCR, + D3D10_STENCIL_OP_DECR +} + +struct D3D10_DEPTH_STENCILOP_DESC { + D3D10_STENCIL_OP StencilFailOp; + D3D10_STENCIL_OP StencilDepthFailOp; + D3D10_STENCIL_OP StencilPassOp; + D3D10_COMPARISON_FUNC StencilFunc; +} + +struct D3D10_DEPTH_STENCIL_DESC { + BOOL DepthEnable; + D3D10_DEPTH_WRITE_MASK DepthWriteMask; + D3D10_COMPARISON_FUNC DepthFunc; + BOOL StencilEnable; + UINT8 StencilReadMask; + UINT8 StencilWriteMask; + D3D10_DEPTH_STENCILOP_DESC FrontFace; + D3D10_DEPTH_STENCILOP_DESC BackFace; +} + +interface ID3D10DepthStencilState : ID3D10DeviceChild { + extern(Windows) : + void GetDesc(D3D10_DEPTH_STENCIL_DESC *pDesc); +} + +enum D3D10_BLEND { + D3D10_BLEND_ZERO = 1, + D3D10_BLEND_ONE = 2, + D3D10_BLEND_SRC_COLOR = 3, + D3D10_BLEND_INV_SRC_COLOR = 4, + D3D10_BLEND_SRC_ALPHA = 5, + D3D10_BLEND_INV_SRC_ALPHA = 6, + D3D10_BLEND_DEST_ALPHA = 7, + D3D10_BLEND_INV_DEST_ALPHA = 8, + D3D10_BLEND_DEST_COLOR = 9, + D3D10_BLEND_INV_DEST_COLOR = 10, + D3D10_BLEND_SRC_ALPHA_SAT = 11, + D3D10_BLEND_BLEND_FACTOR = 14, + D3D10_BLEND_INV_BLEND_FACTOR = 15, + D3D10_BLEND_SRC1_COLOR = 16, + D3D10_BLEND_INV_SRC1_COLOR = 17, + D3D10_BLEND_SRC1_ALPHA = 18, + D3D10_BLEND_INV_SRC1_ALPHA = 19 +} + +enum D3D10_BLEND_OP { + D3D10_BLEND_OP_ADD = 1, + D3D10_BLEND_OP_SUBTRACT, + D3D10_BLEND_OP_REV_SUBTRACT, + D3D10_BLEND_OP_MIN, + D3D10_BLEND_OP_MAX +} + +enum D3D10_COLOR_WRITE_ENABLE { + D3D10_COLOR_WRITE_ENABLE_RED = 1, + D3D10_COLOR_WRITE_ENABLE_GREEN = 2, + D3D10_COLOR_WRITE_ENABLE_BLUE = 4, + D3D10_COLOR_WRITE_ENABLE_ALPHA = 8, + D3D10_COLOR_WRITE_ENABLE_ALL = (((D3D10_COLOR_WRITE_ENABLE_RED | D3D10_COLOR_WRITE_ENABLE_GREEN) | D3D10_COLOR_WRITE_ENABLE_BLUE) | D3D10_COLOR_WRITE_ENABLE_ALPHA) +} + +struct D3D10_BLEND_DESC { + BOOL AlphaToCoverageEnable; + BOOL[8] BlendEnable; + D3D10_BLEND SrcBlend; + D3D10_BLEND DestBlend; + D3D10_BLEND_OP BlendOp; + D3D10_BLEND SrcBlendAlpha; + D3D10_BLEND DestBlendAlpha; + D3D10_BLEND_OP BlendOpAlpha; + UINT8[8] RenderTargetWriteMask; +} + +interface ID3D10BlendState : ID3D10DeviceChild { + extern(Windows) : + void GetDesc(D3D10_BLEND_DESC *pDesc); +} + +struct D3D10_RASTERIZER_DESC { + D3D10_FILL_MODE FillMode; + D3D10_CULL_MODE CullMode; + BOOL FrontCounterClockwise; + INT DepthBias; + FLOAT DepthBiasClamp; + FLOAT SlopeScaledDepthBias; + BOOL DepthClipEnable; + BOOL ScissorEnable; + BOOL MultisampleEnable; + BOOL AntialiasedLineEnable; +} + +interface ID3D10RasterizerState : ID3D10DeviceChild { + extern(Windows) : + void GetDesc(D3D10_RASTERIZER_DESC *pDesc); +} + +UINT D3D10CalcSubresource(UINT MipSlice, UINT ArraySlice, UINT MipLevels) { + return MipSlice + ArraySlice * MipLevels; +} + +struct D3D10_SUBRESOURCE_DATA { + void *pSysMem; + UINT SysMemPitch; + UINT SysMemSlicePitch; +} + +interface ID3D10Resource : ID3D10DeviceChild { + extern(Windows) : + void GetType(D3D10_RESOURCE_DIMENSION *rType); + void SetEvictionPriority(UINT EvictionPriority); + UINT GetEvictionPriority(); +} + +struct D3D10_BUFFER_DESC { + UINT ByteWidth; + D3D10_USAGE Usage; + UINT BindFlags; + UINT CPUAccessFlags; + UINT MiscFlags; +} + +interface ID3D10Buffer : ID3D10Resource { + extern(Windows) : + HRESULT Map(D3D10_MAP MapType, UINT MapFlags, void **ppData); + void Unmap(); + void GetDesc(D3D10_BUFFER_DESC *pDesc); +} + +struct D3D10_TEXTURE1D_DESC { + UINT Width; + UINT MipLevels; + UINT ArraySize; + DXGI_FORMAT Format; + D3D10_USAGE Usage; + UINT BindFlags; + UINT CPUAccessFlags; + UINT MiscFlags; +} + +interface ID3D10Texture1D : ID3D10Resource { + extern(Windows) : + HRESULT Map(UINT Subresource, D3D10_MAP MapType, UINT MapFlags, void **ppData); + void Unmap(UINT Subresource); + void GetDesc(D3D10_TEXTURE1D_DESC *pDesc); +} + +struct D3D10_TEXTURE2D_DESC { + UINT Width; + UINT Height; + UINT MipLevels; + UINT ArraySize; + DXGI_FORMAT Format; + DXGI_SAMPLE_DESC SampleDesc; + D3D10_USAGE Usage; + UINT BindFlags; + UINT CPUAccessFlags; + UINT MiscFlags; +} + +struct D3D10_MAPPED_TEXTURE2D { + void *pData; + UINT RowPitch; +} + +interface ID3D10Texture2D : ID3D10Resource { + extern(Windows) : + HRESULT Map(UINT Subresource, D3D10_MAP MapType, UINT MapFlags, D3D10_MAPPED_TEXTURE2D *pMappedTex2D); + void Unmap(UINT Subresource); + void GetDesc(D3D10_TEXTURE2D_DESC *pDesc); +} + +struct D3D10_TEXTURE3D_DESC { + UINT Width; + UINT Height; + UINT Depth; + UINT MipLevels; + DXGI_FORMAT Format; + D3D10_USAGE Usage; + UINT BindFlags; + UINT CPUAccessFlags; + UINT MiscFlags; +} + +struct D3D10_MAPPED_TEXTURE3D { + void *pData; + UINT RowPitch; + UINT DepthPitch; +} + +interface ID3D10Texture3D : ID3D10Resource { + extern(Windows) : + HRESULT Map(UINT Subresource, D3D10_MAP MapType, UINT MapFlags, D3D10_MAPPED_TEXTURE3D *pMappedTex3D); + void Unmap(UINT Subresource); + void GetDesc(D3D10_TEXTURE3D_DESC *pDesc); +} + +enum D3D10_TEXTURECUBE_FACE { + D3D10_TEXTURECUBE_FACE_POSITIVE_X = 0, + D3D10_TEXTURECUBE_FACE_NEGATIVE_X, + D3D10_TEXTURECUBE_FACE_POSITIVE_Y, + D3D10_TEXTURECUBE_FACE_NEGATIVE_Y, + D3D10_TEXTURECUBE_FACE_POSITIVE_Z, + D3D10_TEXTURECUBE_FACE_NEGATIVE_Z +} + +interface ID3D10View : ID3D10DeviceChild { + extern(Windows) : + void GetResource(ID3D10Resource *ppResource); +} + +struct D3D10_BUFFER_SRV { + UINT ElementOffset; + UINT ElementWidth; +} + +struct D3D10_TEX1D_SRV { + UINT MostDetailedMip; + UINT MipLevels; +} + +struct D3D10_TEX1D_ARRAY_SRV { + UINT MostDetailedMip; + UINT MipLevels; + UINT FirstArraySlice; + UINT ArraySize; +} + +struct D3D10_TEX2D_SRV { + UINT MostDetailedMip; + UINT MipLevels; +} + +struct D3D10_TEX2D_ARRAY_SRV { + UINT MostDetailedMip; + UINT MipLevels; + UINT FirstArraySlice; + UINT ArraySize; +} + +struct D3D10_TEX3D_SRV { + UINT MostDetailedMip; + UINT MipLevels; +} + +struct D3D10_TEXCUBE_SRV { + UINT MostDetailedMip; + UINT MipLevels; +} + +struct D3D10_TEX2DMS_SRV { + UINT UnusedField_NothingToDefine; +} + +struct D3D10_TEX2DMS_ARRAY_SRV { + UINT FirstArraySlice; + UINT ArraySize; +} + +struct D3D10_SHADER_RESOURCE_VIEW_DESC { + DXGI_FORMAT Format; + D3D10_SRV_DIMENSION ViewDimension; + union { + D3D10_BUFFER_SRV Buffer; + D3D10_TEX1D_SRV Texture1D; + D3D10_TEX1D_ARRAY_SRV Texture1DArray; + D3D10_TEX2D_SRV Texture2D; + D3D10_TEX2D_ARRAY_SRV Texture2DArray; + D3D10_TEX2DMS_SRV Texture2DMS; + D3D10_TEX2DMS_ARRAY_SRV Texture2DMSArray; + D3D10_TEX3D_SRV Texture3D; + D3D10_TEXCUBE_SRV TextureCube; + } +} + +interface ID3D10ShaderResourceView : ID3D10View { + extern(Windows) : + void GetDesc(D3D10_SHADER_RESOURCE_VIEW_DESC *pDesc); +} + +struct D3D10_BUFFER_RTV { + UINT ElementOffset; + UINT ElementWidth; +} + +struct D3D10_TEX1D_RTV { + UINT MipSlice; +} + +struct D3D10_TEX1D_ARRAY_RTV { + UINT MipSlice; + UINT FirstArraySlice; + UINT ArraySize; +} + +struct D3D10_TEX2D_RTV { + UINT MipSlice; +} + +struct D3D10_TEX2DMS_RTV { + UINT UnusedField_NothingToDefine; +} + +struct D3D10_TEX2D_ARRAY_RTV { + UINT MipSlice; + UINT FirstArraySlice; + UINT ArraySize; +} + +struct D3D10_TEX2DMS_ARRAY_RTV { + UINT FirstArraySlice; + UINT ArraySize; +} + +struct D3D10_TEX3D_RTV { + UINT MipSlice; + UINT FirstWSlice; + UINT WSize; +} + +struct D3D10_RENDER_TARGET_VIEW_DESC { + DXGI_FORMAT Format; + D3D10_RTV_DIMENSION ViewDimension; + union { + D3D10_BUFFER_RTV Buffer; + D3D10_TEX1D_RTV Texture1D; + D3D10_TEX1D_ARRAY_RTV Texture1DArray; + D3D10_TEX2D_RTV Texture2D; + D3D10_TEX2D_ARRAY_RTV Texture2DArray; + D3D10_TEX2DMS_RTV Texture2DMS; + D3D10_TEX2DMS_ARRAY_RTV Texture2DMSArray; + D3D10_TEX3D_RTV Texture3D; + } +} + +interface ID3D10RenderTargetView : ID3D10View { + extern(Windows) : + void GetDesc(D3D10_RENDER_TARGET_VIEW_DESC *pDesc); +} + +struct D3D10_TEX1D_DSV { + UINT MipSlice; +} + +struct D3D10_TEX1D_ARRAY_DSV { + UINT MipSlice; + UINT FirstArraySlice; + UINT ArraySize; +} + +struct D3D10_TEX2D_DSV { + UINT MipSlice; +} + +struct D3D10_TEX2D_ARRAY_DSV { + UINT MipSlice; + UINT FirstArraySlice; + UINT ArraySize; +} + +struct D3D10_TEX2DMS_DSV { + UINT UnusedField_NothingToDefine; +} + +struct D3D10_TEX2DMS_ARRAY_DSV { + UINT FirstArraySlice; + UINT ArraySize; +} + +struct D3D10_DEPTH_STENCIL_VIEW_DESC { + DXGI_FORMAT Format; + D3D10_DSV_DIMENSION ViewDimension; + union { + D3D10_TEX1D_DSV Texture1D; + D3D10_TEX1D_ARRAY_DSV Texture1DArray; + D3D10_TEX2D_DSV Texture2D; + D3D10_TEX2D_ARRAY_DSV Texture2DArray; + D3D10_TEX2DMS_DSV Texture2DMS; + D3D10_TEX2DMS_ARRAY_DSV Texture2DMSArray; + } +} + +interface ID3D10DepthStencilView : ID3D10View { + extern(Windows) : + void GetDesc(D3D10_DEPTH_STENCIL_VIEW_DESC *pDesc); +} + +interface ID3D10VertexShader : ID3D10DeviceChild { } + +interface ID3D10GeometryShader : ID3D10DeviceChild { } + +interface ID3D10PixelShader : ID3D10DeviceChild { } + +interface ID3D10InputLayout : ID3D10DeviceChild { } + +enum D3D10_FILTER { + D3D10_FILTER_MIN_MAG_MIP_POINT = 0x00, + D3D10_FILTER_MIN_MAG_POINT_MIP_LINEAR = 0x01, + D3D10_FILTER_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x04, + D3D10_FILTER_MIN_POINT_MAG_MIP_LINEAR = 0x05, + D3D10_FILTER_MIN_LINEAR_MAG_MIP_POINT = 0x10, + D3D10_FILTER_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x11, + D3D10_FILTER_MIN_MAG_LINEAR_MIP_POINT = 0x14, + D3D10_FILTER_MIN_MAG_MIP_LINEAR = 0x15, + D3D10_FILTER_ANISOTROPIC = 0x55, + D3D10_FILTER_COMPARISON_MIN_MAG_MIP_POINT = 0x80, + D3D10_FILTER_COMPARISON_MIN_MAG_POINT_MIP_LINEAR = 0x81, + D3D10_FILTER_COMPARISON_MIN_POINT_MAG_LINEAR_MIP_POINT = 0x84, + D3D10_FILTER_COMPARISON_MIN_POINT_MAG_MIP_LINEAR = 0x85, + D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_MIP_POINT = 0x90, + D3D10_FILTER_COMPARISON_MIN_LINEAR_MAG_POINT_MIP_LINEAR = 0x91, + D3D10_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT = 0x94, + D3D10_FILTER_COMPARISON_MIN_MAG_MIP_LINEAR = 0x95, + D3D10_FILTER_COMPARISON_ANISOTROPIC = 0xd5, + D3D10_FILTER_TEXT_1BIT = 0x80000000 +} + + +enum D3D10_FILTER_TYPE { + D3D10_FILTER_TYPE_POINT = 0, + D3D10_FILTER_TYPE_LINEAR +} + +const D3D10_FILTER_TYPE_MASK = 0x03; + +const D3D10_MIN_FILTER_SHIFT = 4; + +const D3D10_MAG_FILTER_SHIFT = 2; + +const D3D10_MIP_FILTER_SHIFT = 0; + +const D3D10_COMPARISON_FILTERING_BIT = 0x80; + +const D3D10_ANISOTROPIC_FILTERING_BIT = 0x40; + +const D3D10_TEXT_1BIT_BIT = 0x80000000; + +D3D10_FILTER D3D10_ENCODE_BASIC_FILTER(int min, int mag, int mip, bool bComparison) { + return cast(D3D10_FILTER)(((bComparison) ? D3D10_COMPARISON_FILTERING_BIT : 0) | + ((min & D3D10_FILTER_TYPE_MASK) << D3D10_MIN_FILTER_SHIFT) | + ((mag & D3D10_FILTER_TYPE_MASK) << D3D10_MAG_FILTER_SHIFT) | + ((mip & D3D10_FILTER_TYPE_MASK) << D3D10_MIP_FILTER_SHIFT)); +} + +D3D10_FILTER D3D10_ENCODE_ANISOTROPIC_FILTER(bool bComparison) { + return cast(D3D10_FILTER)(D3D10_ANISOTROPIC_FILTERING_BIT | + D3D10_ENCODE_BASIC_FILTER(D3D10_FILTER_TYPE.D3D10_FILTER_TYPE_LINEAR, + D3D10_FILTER_TYPE.D3D10_FILTER_TYPE_LINEAR, D3D10_FILTER_TYPE.D3D10_FILTER_TYPE_LINEAR, + bComparison)); +} + +D3D10_FILTER_TYPE D3D10_DECODE_MIN_FILTER(D3D10_FILTER d3d10Filter) { + return cast(D3D10_FILTER_TYPE)((d3d10Filter >> D3D10_MIN_FILTER_SHIFT) & D3D10_FILTER_TYPE_MASK); +} + +D3D10_FILTER_TYPE D3D10_DECODE_MAG_FILTER(D3D10_FILTER d3d10Filter) { + return cast(D3D10_FILTER_TYPE)((d3d10Filter >> D3D10_MAG_FILTER_SHIFT) & D3D10_FILTER_TYPE_MASK); +} + +D3D10_FILTER_TYPE D3D10_DECODE_MIP_FILTER(D3D10_FILTER d3d10Filter) { + return cast(D3D10_FILTER_TYPE)((d3d10Filter >> D3D10_MIP_FILTER_SHIFT) & D3D10_FILTER_TYPE_MASK); +} + +bool D3D10_DECODE_IS_COMPARISON_FILTER(D3D10_FILTER d3d10Filter) { + return (d3d10Filter & D3D10_COMPARISON_FILTERING_BIT) == D3D10_COMPARISON_FILTERING_BIT; +} + +bool D3D10_DECODE_IS_ANISOTROPIC_FILTER(D3D10_FILTER d3d10Filter) { + return ((d3d10Filter & D3D10_ANISOTROPIC_FILTERING_BIT) && + (D3D10_FILTER_TYPE.D3D10_FILTER_TYPE_LINEAR == D3D10_DECODE_MIN_FILTER(d3d10Filter)) && + (D3D10_FILTER_TYPE.D3D10_FILTER_TYPE_LINEAR == D3D10_DECODE_MAG_FILTER(d3d10Filter)) && + (D3D10_FILTER_TYPE.D3D10_FILTER_TYPE_LINEAR == D3D10_DECODE_MIP_FILTER(d3d10Filter))); +} + +bool D3D10_DECODE_IS_TEXT_1BIT_FILTER(D3D10_FILTER d3d10Filter) { + return d3d10Filter == D3D10_TEXT_1BIT_BIT; +} + +enum D3D10_TEXTURE_ADDRESS_MODE { + D3D10_TEXTURE_ADDRESS_WRAP = 1, + D3D10_TEXTURE_ADDRESS_MIRROR, + D3D10_TEXTURE_ADDRESS_CLAMP, + D3D10_TEXTURE_ADDRESS_BORDER, + D3D10_TEXTURE_ADDRESS_MIRROR_ONCE +} + +struct D3D10_SAMPLER_DESC { + D3D10_FILTER Filter; + D3D10_TEXTURE_ADDRESS_MODE AddressU; + D3D10_TEXTURE_ADDRESS_MODE AddressV; + D3D10_TEXTURE_ADDRESS_MODE AddressW; + FLOAT MipLODBias; + UINT MaxAnisotropy; + D3D10_COMPARISON_FUNC ComparisonFunc; + FLOAT[4] BorderColor; + FLOAT MinLOD; + FLOAT MaxLOD; +} + +interface ID3D10SamplerState : ID3D10DeviceChild { + extern(Windows) : + void GetDesc(D3D10_SAMPLER_DESC *pDesc); +} + +enum D3D10_FORMAT_SUPPORT { + D3D10_FORMAT_SUPPORT_BUFFER = 0x000001, + D3D10_FORMAT_SUPPORT_IA_VERTEX_BUFFER = 0x000002, + D3D10_FORMAT_SUPPORT_IA_INDEX_BUFFER = 0x000004, + D3D10_FORMAT_SUPPORT_SO_BUFFER = 0x000008, + D3D10_FORMAT_SUPPORT_TEXTURE1D = 0x000010, + D3D10_FORMAT_SUPPORT_TEXTURE2D = 0x000020, + D3D10_FORMAT_SUPPORT_TEXTURE3D = 0x000040, + D3D10_FORMAT_SUPPORT_TEXTURECUBE = 0x000080, + D3D10_FORMAT_SUPPORT_SHADER_LOAD = 0x000100, + D3D10_FORMAT_SUPPORT_SHADER_SAMPLE = 0x000200, + D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_COMPARISON = 0x000400, + D3D10_FORMAT_SUPPORT_SHADER_SAMPLE_MONO_TEXT = 0x000800, + D3D10_FORMAT_SUPPORT_MIP = 0x001000, + D3D10_FORMAT_SUPPORT_MIP_AUTOGEN = 0x002000, + D3D10_FORMAT_SUPPORT_RENDER_TARGET = 0x004000, + D3D10_FORMAT_SUPPORT_BLENDABLE = 0x008000, + D3D10_FORMAT_SUPPORT_DEPTH_STENCIL = 0x010000, + D3D10_FORMAT_SUPPORT_CPU_LOCKABLE = 0x020000, + D3D10_FORMAT_SUPPORT_MULTISAMPLE_RESOLVE = 0x040000, + D3D10_FORMAT_SUPPORT_DISPLAY = 0x080000, + D3D10_FORMAT_SUPPORT_CAST_WITHIN_BIT_LAYOUT = 0x100000, + D3D10_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET = 0x200000, + D3D10_FORMAT_SUPPORT_MULTISAMPLE_LOAD = 0x400000, + D3D10_FORMAT_SUPPORT_SHADER_GATHER = 0x800000 +} + +interface ID3D10Asynchronous : ID3D10DeviceChild { + extern(Windows) : + void Begin(); + void End(); + HRESULT GetData(void *pData, UINT DataSize, UINT GetDataFlags); + UINT GetDataSize(); +} + +enum D3D10_ASYNC_GETDATA_FLAG { + D3D10_ASYNC_GETDATA_DONOTFLUSH = 0x1 +} + +enum D3D10_QUERY { + D3D10_QUERY_EVENT = 0, + D3D10_QUERY_OCCLUSION = (D3D10_QUERY_EVENT + 1), + D3D10_QUERY_TIMESTAMP = (D3D10_QUERY_OCCLUSION + 1), + D3D10_QUERY_TIMESTAMP_DISJOINT = (D3D10_QUERY_TIMESTAMP + 1), + D3D10_QUERY_PIPELINE_STATISTICS = (D3D10_QUERY_TIMESTAMP_DISJOINT + 1), + D3D10_QUERY_OCCLUSION_PREDICATE = (D3D10_QUERY_PIPELINE_STATISTICS + 1), + D3D10_QUERY_SO_STATISTICS = (D3D10_QUERY_OCCLUSION_PREDICATE + 1), + D3D10_QUERY_SO_OVERFLOW_PREDICATE = (D3D10_QUERY_SO_STATISTICS + 1) +} + +enum D3D10_QUERY_MISC_FLAG { + D3D10_QUERY_MISC_PREDICATEHINT = 0x01 +} + +struct D3D10_QUERY_DESC { + D3D10_QUERY Query; + UINT MiscFlags; +} + +interface ID3D10Query : ID3D10Asynchronous { + extern(Windows) : + void GetDesc(D3D10_QUERY_DESC *pDesc); +} + +interface ID3D10Predicate : ID3D10Query { } + +struct D3D10_QUERY_DATA_TIMESTAMP_DISJOINT { + UINT64 Frequency; + BOOL Disjoint; +} + +struct D3D10_QUERY_DATA_PIPELINE_STATISTICS { + UINT64 IAVertices; + UINT64 IAPrimitives; + UINT64 VSInvocations; + UINT64 GSInvocations; + UINT64 GSPrimitives; + UINT64 CInvocations; + UINT64 CPrimitives; + UINT64 PSInvocations; +} + +struct D3D10_QUERY_DATA_SO_STATISTICS { + UINT64 NumPrimitivesWritten; + UINT64 PrimitivesStorageNeeded; +} + +enum D3D10_COUNTER { + D3D10_COUNTER_GPU_IDLE = 0, + D3D10_COUNTER_VERTEX_PROCESSING = (D3D10_COUNTER_GPU_IDLE + 1), + D3D10_COUNTER_GEOMETRY_PROCESSING = (D3D10_COUNTER_VERTEX_PROCESSING + 1), + D3D10_COUNTER_PIXEL_PROCESSING = (D3D10_COUNTER_GEOMETRY_PROCESSING + 1), + D3D10_COUNTER_OTHER_GPU_PROCESSING = (D3D10_COUNTER_PIXEL_PROCESSING + 1), + D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION = (D3D10_COUNTER_OTHER_GPU_PROCESSING + 1), + D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION = (D3D10_COUNTER_HOST_ADAPTER_BANDWIDTH_UTILIZATION + 1), + D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION = (D3D10_COUNTER_LOCAL_VIDMEM_BANDWIDTH_UTILIZATION + 1), + D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION = (D3D10_COUNTER_VERTEX_THROUGHPUT_UTILIZATION + 1), + D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION = (D3D10_COUNTER_TRIANGLE_SETUP_THROUGHPUT_UTILIZATION + 1), + D3D10_COUNTER_VS_MEMORY_LIMITED = (D3D10_COUNTER_FILLRATE_THROUGHPUT_UTILIZATION + 1), + D3D10_COUNTER_VS_COMPUTATION_LIMITED = (D3D10_COUNTER_VS_MEMORY_LIMITED + 1), + D3D10_COUNTER_GS_MEMORY_LIMITED = (D3D10_COUNTER_VS_COMPUTATION_LIMITED + 1), + D3D10_COUNTER_GS_COMPUTATION_LIMITED = (D3D10_COUNTER_GS_MEMORY_LIMITED + 1), + D3D10_COUNTER_PS_MEMORY_LIMITED = (D3D10_COUNTER_GS_COMPUTATION_LIMITED + 1), + D3D10_COUNTER_PS_COMPUTATION_LIMITED = (D3D10_COUNTER_PS_MEMORY_LIMITED + 1), + D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE = (D3D10_COUNTER_PS_COMPUTATION_LIMITED + 1), + D3D10_COUNTER_TEXTURE_CACHE_HIT_RATE = (D3D10_COUNTER_POST_TRANSFORM_CACHE_HIT_RATE + 1), + D3D10_COUNTER_DEVICE_DEPENDENT_0 = 0x40000000 +} + +enum D3D10_COUNTER_TYPE { + D3D10_COUNTER_TYPE_FLOAT32 = 0, + D3D10_COUNTER_TYPE_UINT16 = (D3D10_COUNTER_TYPE_FLOAT32 + 1), + D3D10_COUNTER_TYPE_UINT32 = (D3D10_COUNTER_TYPE_UINT16 + 1), + D3D10_COUNTER_TYPE_UINT64 = (D3D10_COUNTER_TYPE_UINT32 + 1) +} + +struct D3D10_COUNTER_DESC { + D3D10_COUNTER Counter; + UINT MiscFlags; +} + +struct D3D10_COUNTER_INFO { + D3D10_COUNTER LastDeviceDependentCounter; + UINT NumSimultaneousCounters; + UINT8 NumDetectableParallelUnits; +} + +interface ID3D10Counter : ID3D10Asynchronous { + extern(Windows) : + void GetDesc(D3D10_COUNTER_DESC *pDesc); +} + +interface ID3D10Device : IUnknown { + extern(Windows) : + void VSSetConstantBuffers(UINT StartSlot, UINT NumBuffers, ID3D10Buffer* ppConstantBuffers); + void PSSetShaderResources(UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView* ppShaderResourceViews); + void PSSetShader(ID3D10PixelShader pPixelShader); + void PSSetSamplers(UINT StartSlot, UINT NumSamplers, ID3D10SamplerState* ppSamplers); + void VSSetShader(ID3D10VertexShader pVertexShader); + void DrawIndexed(UINT IndexCount, UINT StartIndexLocation, INT BaseVertexLocation); + void Draw(UINT VertexCount, UINT StartVertexLocation); + void PSSetConstantBuffers(UINT StartSlot, UINT NumBuffers, ID3D10Buffer* ppConstantBuffers); + void IASetInputLayout(ID3D10InputLayout pInputLayout); + void IASetVertexBuffers(UINT StartSlot, UINT NumBuffers, ID3D10Buffer* ppVertexBuffers, UINT* pStrides, UINT* pOffsets); + void IASetIndexBuffer(ID3D10Buffer pIndexBuffer, DXGI_FORMAT Format, UINT Offset); + void DrawIndexedInstanced(UINT IndexCountPerInstance, UINT InstanceCount, UINT StartIndexLocation, INT BaseVertexLocation, UINT StartInstanceLocation); + void DrawInstanced(UINT VertexCountPerInstance, UINT InstanceCount, UINT StartVertexLocation, UINT StartInstanceLocation); + void GSSetConstantBuffers(UINT StartSlot, UINT NumBuffers, ID3D10Buffer* ppConstantBuffers); + void GSSetShader(ID3D10GeometryShader pShader); + void IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY Topology); + void VSSetShaderResources(UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView* ppShaderResourceViews); + void VSSetSamplers(UINT StartSlot, UINT NumSamplers, ID3D10SamplerState* ppSamplers); + void SetPredication(ID3D10Predicate pPredicate, BOOL PredicateValue); + void GSSetShaderResources(UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView* ppShaderResourceViews); + void GSSetSamplers(UINT StartSlot, UINT NumSamplers, ID3D10SamplerState* ppSamplers); + void OMSetRenderTargets(UINT NumViews, ID3D10RenderTargetView* ppRenderTargetViews, ID3D10DepthStencilView pDepthStencilView); + void OMSetBlendState(ID3D10BlendState pBlendState, FLOAT[4] BlendFactor, UINT SampleMask); + void OMSetDepthStencilState(ID3D10DepthStencilState pDepthStencilState, UINT StencilRef); + void SOSetTargets(UINT NumBuffers, ID3D10Buffer* ppSOTargets, UINT* pOffsets); + void DrawAuto(); + void RSSetState(ID3D10RasterizerState pRasterizerState); + void RSSetViewports(UINT NumViewports, D3D10_VIEWPORT* pViewports); + void RSSetScissorRects(UINT NumRects, D3D10_RECT* pRects); + void CopySubresourceRegion(ID3D10Resource pDstResource, UINT DstSubresource, UINT DstX, UINT DstY, UINT DstZ, ID3D10Resource pSrcResource, UINT SrcSubresource, D3D10_BOX* pSrcBox); + void CopyResource(ID3D10Resource pDstResource, ID3D10Resource pSrcResource); + void UpdateSubresource(ID3D10Resource pDstResource, UINT DstSubresource, D3D10_BOX* pDstBox, void* pSrcData, UINT SrcRowPitch, UINT SrcDepthPitch); + void ClearRenderTargetView(ID3D10RenderTargetView pRenderTargetView, FLOAT[4] ColorRGBA); + void ClearDepthStencilView(ID3D10DepthStencilView pDepthStencilView, UINT ClearFlags, FLOAT Depth, UINT8 Stencil); + void GenerateMips(ID3D10ShaderResourceView pShaderResourceView); + void ResolveSubresource(ID3D10Resource pDstResource, UINT DstSubresource, ID3D10Resource pSrcResource, UINT SrcSubresource, DXGI_FORMAT Format); + void VSGetConstantBuffers(UINT StartSlot, UINT NumBuffers, ID3D10Buffer* ppConstantBuffers); + void PSGetShaderResources(UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView* ppShaderResourceViews); + void PSGetShader(ID3D10PixelShader* ppPixelShader); + void PSGetSamplers(UINT StartSlot, UINT NumSamplers, ID3D10SamplerState* ppSamplers); + void VSGetShader(ID3D10VertexShader* ppVertexShader); + void PSGetConstantBuffers(UINT StartSlot, UINT NumBuffers, ID3D10Buffer* ppConstantBuffers); + void IAGetInputLayout(ID3D10InputLayout* ppInputLayout); + void IAGetVertexBuffers(UINT StartSlot, UINT NumBuffers, ID3D10Buffer* ppVertexBuffers, UINT* pStrides, UINT* pOffsets); + void IAGetIndexBuffer(ID3D10Buffer* pIndexBuffer, DXGI_FORMAT* Format, UINT* Offset); + void GSGetConstantBuffers(UINT StartSlot, UINT NumBuffers, ID3D10Buffer* ppConstantBuffers); + void GSGetShader(ID3D10GeometryShader* ppGeometryShader); + void IAGetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY* pTopology); + void VSGetShaderResources(UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView* ppShaderResourceViews); + void VSGetSamplers(UINT StartSlot, UINT NumSamplers, ID3D10SamplerState* ppSamplers); + void GetPredication(ID3D10Predicate* ppPredicate, BOOL* pPredicateValue); + void GSGetShaderResources(UINT StartSlot, UINT NumViews, ID3D10ShaderResourceView* ppShaderResourceViews); + void GSGetSamplers(UINT StartSlot, UINT NumSamplers, ID3D10SamplerState* ppSamplers); + void OMGetRenderTargets(UINT NumViews, ID3D10RenderTargetView* ppRenderTargetViews, ID3D10DepthStencilView* ppDepthStencilView); + void OMGetBlendState(ID3D10BlendState* ppBlendState, FLOAT BlendFactor[ 4 ], UINT* pSampleMask); + void OMGetDepthStencilState(ID3D10DepthStencilState* ppDepthStencilState, UINT* pStencilRef); + void SOGetTargets(UINT NumBuffers, ID3D10Buffer* ppSOTargets, UINT* pOffsets); + void RSGetState(ID3D10RasterizerState* ppRasterizerState); + void RSGetViewports(UINT* NumViewports, D3D10_VIEWPORT* pViewports); + void RSGetScissorRects(UINT* NumRects, D3D10_RECT* pRects); + HRESULT GetDeviceRemovedReason(); + HRESULT SetExceptionMode(UINT RaiseFlags); + UINT GetExceptionMode(); + HRESULT GetPrivateData(REFGUID guid, UINT* pDataSize, void* pData); + HRESULT SetPrivateData(REFGUID guid, UINT DataSize, void* pData); + HRESULT SetPrivateDataInterface(REFGUID guid, IUnknown pData); + void ClearState(); + void Flush(); + HRESULT CreateBuffer(D3D10_BUFFER_DESC* pDesc, D3D10_SUBRESOURCE_DATA* pInitialData, ID3D10Buffer* ppBuffer); + HRESULT CreateTexture1D(D3D10_TEXTURE1D_DESC* pDesc, D3D10_SUBRESOURCE_DATA* pInitialData, ID3D10Texture1D* ppTexture1D); + HRESULT CreateTexture2D(D3D10_TEXTURE2D_DESC* pDesc, D3D10_SUBRESOURCE_DATA* pInitialData, ID3D10Texture2D* ppTexture2D); + HRESULT CreateTexture3D(D3D10_TEXTURE3D_DESC* pDesc, D3D10_SUBRESOURCE_DATA* pInitialData, ID3D10Texture3D* ppTexture3D); + HRESULT CreateShaderResourceView(ID3D10Resource pResource, D3D10_SHADER_RESOURCE_VIEW_DESC* pDesc, ID3D10ShaderResourceView* ppSRView); + HRESULT CreateRenderTargetView(ID3D10Resource pResource, D3D10_RENDER_TARGET_VIEW_DESC* pDesc, ID3D10RenderTargetView* ppRTView); + HRESULT CreateDepthStencilView(ID3D10Resource pResource, D3D10_DEPTH_STENCIL_VIEW_DESC* pDesc, ID3D10DepthStencilView* ppDepthStencilView); + HRESULT CreateInputLayout(D3D10_INPUT_ELEMENT_DESC* pInputElementDescs, UINT NumElements, void* pShaderBytecodeWithInputSignature, SIZE_T BytecodeLength, ID3D10InputLayout* ppInputLayout); + HRESULT CreateVertexShader(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10VertexShader* ppVertexShader); + HRESULT CreateGeometryShader(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10GeometryShader* ppGeometryShader); + HRESULT CreateGeometryShaderWithStreamOutput(void* pShaderBytecode, SIZE_T BytecodeLength, D3D10_SO_DECLARATION_ENTRY* pSODeclaration, UINT NumEntries, UINT OutputStreamStride, ID3D10GeometryShader* ppGeometryShader); + HRESULT CreatePixelShader(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10PixelShader* ppPixelShader); + HRESULT CreateBlendState(D3D10_BLEND_DESC* pBlendStateDesc, ID3D10BlendState* ppBlendState); + HRESULT CreateDepthStencilState(D3D10_DEPTH_STENCIL_DESC* pDepthStencilDesc, ID3D10DepthStencilState* ppDepthStencilState); + HRESULT CreateRasterizerState(D3D10_RASTERIZER_DESC* pRasterizerDesc, ID3D10RasterizerState* ppRasterizerState); + HRESULT CreateSamplerState(D3D10_SAMPLER_DESC* pSamplerDesc, ID3D10SamplerState* ppSamplerState); + HRESULT CreateQuery(D3D10_QUERY_DESC* pQueryDesc, ID3D10Query* ppQuery); + HRESULT CreatePredicate(D3D10_QUERY_DESC* pPredicateDesc, ID3D10Predicate* ppPredicate); + HRESULT CreateCounter(D3D10_COUNTER_DESC* pCounterDesc, ID3D10Counter* ppCounter); + HRESULT CheckFormatSupport(DXGI_FORMAT Format, UINT* pFormatSupport); + HRESULT CheckMultisampleQualityLevels(DXGI_FORMAT Format, UINT SampleCount, UINT* pNumQualityLevels); + void CheckCounterInfo(D3D10_COUNTER_INFO* pCounterInfo); + HRESULT CheckCounter(D3D10_COUNTER_DESC* pDesc, D3D10_COUNTER_TYPE* pType, UINT* pActiveCounters, LPSTR szName, UINT* pNameLength, LPSTR szUnits, UINT* pUnitsLength, LPSTR szDescription, UINT* pDescriptionLength); + UINT GetCreationFlags(); + HRESULT OpenSharedResource(HANDLE hResource, REFIID ReturnedInterface, void** ppResource); + void SetTextFilterSize(UINT Width, UINT Height); + void GetTextFilterSize(UINT* pWidth, UINT* pHeight); +} + +interface ID3D10Multithread : IUnknown { + extern(Windows) : + void Enter(); + void Leave(); + BOOL SetMultithreadProtected(BOOL bMTProtect); + BOOL GetMultithreadProtected(); +} + +enum D3D10_CREATE_DEVICE_FLAG { + D3D10_CREATE_DEVICE_SINGLETHREADED = 0x01, + D3D10_CREATE_DEVICE_DEBUG = 0x02, + D3D10_CREATE_DEVICE_SWITCH_TO_REF = 0x04, + D3D10_CREATE_DEVICE_PREVENT_INTERNAL_THREADING_OPTIMIZATIONS = 0x08 +} + +const D3D10_SDK_VERSION = 29; + +extern(C) const GUID IID_ID3D10DeviceChild = {0x9B7E4C00, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10DepthStencilState = {0x2B4B1CC8, 0xA4AD, 0x41f8, [0x83, 0x22, 0xCA, 0x86, 0xFC, 0x3E, 0xC6, 0x75]}; +extern(C) const GUID IID_ID3D10BlendState = {0xEDAD8D19, 0x8A35, 0x4d6d, [0x85, 0x66, 0x2E, 0xA2, 0x76, 0xCD, 0xE1, 0x61]}; +extern(C) const GUID IID_ID3D10RasterizerState = {0xA2A07292, 0x89AF, 0x4345, [0xBE, 0x2E, 0xC5, 0x3D, 0x9F, 0xBB, 0x6E, 0x9F]}; +extern(C) const GUID IID_ID3D10Resource = {0x9B7E4C01, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10Buffer = {0x9B7E4C02, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10Texture1D = {0x9B7E4C03, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10Texture2D = {0x9B7E4C04, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10Texture3D = {0x9B7E4C05, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10View = {0xC902B03F, 0x60A7, 0x49BA, [0x99, 0x36, 0x2A, 0x3A, 0xB3, 0x7A, 0x7E, 0x33]}; +extern(C) const GUID IID_ID3D10ShaderResourceView = {0x9B7E4C07, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10RenderTargetView = {0x9B7E4C08, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10DepthStencilView = {0x9B7E4C09, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10VertexShader = {0x9B7E4C0A, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10GeometryShader = {0x6316BE88, 0x54CD, 0x4040, [0xAB, 0x44, 0x20, 0x46, 0x1B, 0xC8, 0x1F, 0x68]}; +extern(C) const GUID IID_ID3D10PixelShader = {0x4968B601, 0x9D00, 0x4cde, [0x83, 0x46, 0x8E, 0x7F, 0x67, 0x58, 0x19, 0xB6]}; +extern(C) const GUID IID_ID3D10InputLayout = {0x9B7E4C0B, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10SamplerState = {0x9B7E4C0C, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10Asynchronous = {0x9B7E4C0D, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10Query = {0x9B7E4C0E, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10Predicate = {0x9B7E4C10, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10Counter = {0x9B7E4C11, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10Device = {0x9B7E4C0F, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; +extern(C) const GUID IID_ID3D10Multithread = {0x9B7E4E00, 0x342C, 0x4106, [0xA1, 0x9F, 0x4F, 0x27, 0x04, 0xF6, 0x89, 0xF0]}; + diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3d10effect.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3d10effect.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,798 @@ +/***********************************************************************\ +* d3d10effect.d * +* * +* Windows API header module * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.directx.d3d10effect; + +private import win32.windows; +private import win32.directx.d3d10; + +// some forward references... +enum D3D10_SHADER_VARIABLE_CLASS; +enum D3D10_SHADER_VARIABLE_TYPE; + +enum D3D10_DEVICE_STATE_TYPES { + D3D10_DST_SO_BUFFERS = 1, + D3D10_DST_OM_RENDER_TARGETS, + D3D10_DST_OM_DEPTH_STENCIL_STATE, + D3D10_DST_OM_BLEND_STATE, + D3D10_DST_VS, + D3D10_DST_VS_SAMPLERS, + D3D10_DST_VS_SHADER_RESOURCES, + D3D10_DST_VS_CONSTANT_BUFFERS, + D3D10_DST_GS, + D3D10_DST_GS_SAMPLERS, + D3D10_DST_GS_SHADER_RESOURCES, + D3D10_DST_GS_CONSTANT_BUFFERS, + D3D10_DST_PS, + D3D10_DST_PS_SAMPLERS, + D3D10_DST_PS_SHADER_RESOURCES, + D3D10_DST_PS_CONSTANT_BUFFERS, + D3D10_DST_IA_VERTEX_BUFFERS, + D3D10_DST_IA_INDEX_BUFFER, + D3D10_DST_IA_INPUT_LAYOUT, + D3D10_DST_IA_PRIMITIVE_TOPOLOGY, + D3D10_DST_RS_VIEWPORTS, + D3D10_DST_RS_SCISSOR_RECTS, + D3D10_DST_RS_RASTERIZER_STATE, + D3D10_DST_PREDICATION +} + +struct D3D10_STATE_BLOCK_MASK { + BYTE VS; + BYTE[2] VSSamplers; + BYTE[16] VSShaderResources; + BYTE[2] VSConstantBuffers; + BYTE GS; + BYTE[2] GSSamplers; + BYTE[16] GSShaderResources; + BYTE[2] GSConstantBuffers; + BYTE PS; + BYTE[2] PSSamplers; + BYTE[16] PSShaderResources; + BYTE[2] PSConstantBuffers; + BYTE[2] IAVertexBuffers; + BYTE IAIndexBuffer; + BYTE IAInputLayout; + BYTE IAPrimitiveTopology; + BYTE OMRenderTargets; + BYTE OMDepthStencilState; + BYTE OMBlendState; + BYTE RSViewports; + BYTE RSScissorRects; + BYTE RSRasterizerState; + BYTE SOBuffers; + BYTE Predication; +} + +extern (C) const GUID IID_ID3D10StateBlock = {0x803425a, 0x57f5, 0x4dd6, [0x94, 0x65, 0xa8, 0x75, 0x70, 0x83, 0x4a, 0x08]}; + +interface ID3D10StateBlock : IUnknown { + extern(Windows) : + HRESULT Capture(); + HRESULT Apply(); + HRESULT ReleaseAllDeviceObjects(); + HRESULT GetDevice(ID3D10Device ppDevice); +} + +HRESULT D3D10StateBlockMaskUnion(D3D10_STATE_BLOCK_MASK* pA, D3D10_STATE_BLOCK_MASK* pB, D3D10_STATE_BLOCK_MASK* pResult); +HRESULT D3D10StateBlockMaskIntersect(D3D10_STATE_BLOCK_MASK* pA, D3D10_STATE_BLOCK_MASK* pB, D3D10_STATE_BLOCK_MASK* pResult); +HRESULT D3D10StateBlockMaskDifference(D3D10_STATE_BLOCK_MASK* pA, D3D10_STATE_BLOCK_MASK* pB, D3D10_STATE_BLOCK_MASK* pResult); +HRESULT D3D10StateBlockMaskEnableCapture(D3D10_STATE_BLOCK_MASK* pMask, D3D10_DEVICE_STATE_TYPES StateType, UINT RangeStart, UINT RangeLength); +HRESULT D3D10StateBlockMaskDisableCapture(D3D10_STATE_BLOCK_MASK* pMask, D3D10_DEVICE_STATE_TYPES StateType, UINT RangeStart, UINT RangeLength); +HRESULT D3D10StateBlockMaskEnableAll(D3D10_STATE_BLOCK_MASK* pMask); +HRESULT D3D10StateBlockMaskDisableAll(D3D10_STATE_BLOCK_MASK* pMask); +BOOL D3D10StateBlockMaskGetSetting(D3D10_STATE_BLOCK_MASK* pMask, D3D10_DEVICE_STATE_TYPES StateType, UINT Entry); +HRESULT D3D10CreateStateBlock(ID3D10Device pDevice, D3D10_STATE_BLOCK_MASK* pStateBlockMask, ID3D10StateBlock ppStateBlock); + +const D3D10_EFFECT_COMPILE_CHILD_EFFECT = 1 << 0; +const D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS = 1 << 1; +const D3D10_EFFECT_SINGLE_THREADED = 1 << 3; +const D3D10_EFFECT_VARIABLE_POOLED = 1 << 0; +const D3D10_EFFECT_VARIABLE_ANNOTATION = 1 << 1; +const D3D10_EFFECT_VARIABLE_EXPLICIT_BIND_POINT = 1 << 2; + +struct D3D10_EFFECT_TYPE_DESC { + LPCSTR TypeName; + D3D10_SHADER_VARIABLE_CLASS Class; + D3D10_SHADER_VARIABLE_TYPE Type; + UINT Elements; + UINT Members; + UINT Rows; + UINT Columns; + UINT PackedSize; + UINT UnpackedSize; + UINT Stride; +} + +extern (C) const GUID IID_ID3D10EffectType = {0x4e9e1ddc, 0xcd9d, 0x4772, [0xa8, 0x37, 0x0, 0x18, 0x0b, 0x9b, 0x88, 0xfd]}; + +interface ID3D10EffectType { +/* TODO: fix vtbl[0] bug + extern(Windows) : + BOOL IsValid(); + HRESULT GetDesc(D3D10_EFFECT_TYPE_DESC* pDesc); + ID3D10EffectType GetMemberTypeByIndex(UINT Index); + ID3D10EffectType GetMemberTypeByName(LPCSTR Name); + ID3D10EffectType GetMemberTypeBySemantic(LPCSTR Semantic); + LPCSTR GetMemberName(UINT Index); + LPCSTR GetMemberSemantic(UINT Index); + */ +} + +struct D3D10_EFFECT_VARIABLE_DESC { + LPCSTR Name; + LPCSTR Semantic; + UINT Flags; + UINT Annotations; + UINT BufferOffset; + UINT ExplicitBindPoint; +} + +extern (C) const GUID IID_ID3D10EffectVariable = {0xae897105, 0x00e6, 0x45bf, [0xbb, 0x8e, 0x28, 0x1d, 0xd6, 0xdb, 0x8e, 0x1b]}; + +interface ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + BOOL IsValid(); + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRawValue(void* pData, UINT Offset, UINT Count); + */ +} + +extern (C) const GUID IID_ID3D10EffectScalarVariable = {0xe48f7b, 0xd2c8, 0x49e8, [0xa8, 0x6c, 0x2, 0x2d, 0xee, 0x53, 0x43, 0x1f]}; + +interface ID3D10EffectScalarVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + BOOL IsValid(); + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT ByteOffset, UINT ByteCount); + HRESULT GetRawValue(void* pData, UINT ByteOffset, UINT ByteCount); + HRESULT SetFloat(float Value); + HRESULT GetFloat(float* pValue); + HRESULT SetFloatArray(float* pData, UINT Offset, UINT Count); + HRESULT GetFloatArray(float* pData, UINT Offset, UINT Count); + HRESULT SetInt(int Value); + HRESULT GetInt(int* pValue); + HRESULT SetIntArray(int* pData, UINT Offset, UINT Count); + HRESULT GetIntArray(int* pData, UINT Offset, UINT Count); + HRESULT SetBool(BOOL Value); + HRESULT GetBool(BOOL* pValue); + HRESULT SetBoolArray(BOOL* pData, UINT Offset, UINT Count); + HRESULT GetBoolArray(BOOL* pData, UINT Offset, UINT Count); + */ +} + +extern (C) const GUID IID_ID3D10EffectVectorVariable = {0x62b98c44, 0x1f82, 0x4c67, [0xbc, 0xd0, 0x72, 0xcf, 0x8f, 0x21, 0x7e, 0x81]}; + +interface ID3D10EffectVectorVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + BOOL IsValid(); + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT ByteOffset, UINT ByteCount); + HRESULT GetRawValue(void* pData, UINT ByteOffset, UINT ByteCount); + HRESULT SetBoolVector (BOOL* pData); + HRESULT SetIntVector (int* pData); + HRESULT SetFloatVector(float* pData); + HRESULT GetBoolVector (BOOL* pData); + HRESULT GetIntVector (int* pData); + HRESULT GetFloatVector(float* pData); + HRESULT SetBoolVectorArray (BOOL* pData, UINT Offset, UINT Count); + HRESULT SetIntVectorArray (int* pData, UINT Offset, UINT Count); + HRESULT SetFloatVectorArray(float* pData, UINT Offset, UINT Count); + HRESULT GetBoolVectorArray (BOOL* pData, UINT Offset, UINT Count); + HRESULT GetIntVectorArray (int* pData, UINT Offset, UINT Count); + HRESULT GetFloatVectorArray(float* pData, UINT Offset, UINT Count); + */ +} + +extern (C) const GUID IID_ID3D10EffectMatrixVariable = {0x50666c24, 0xb82f, 0x4eed, [0xa1, 0x72, 0x5b, 0x6e, 0x7e, 0x85, 0x22, 0xe0]}; + +interface ID3D10EffectMatrixVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + BOOL IsValid(); + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT ByteOffset, UINT ByteCount); + HRESULT GetRawValue(void* pData, UINT ByteOffset, UINT ByteCount); + HRESULT SetMatrix(float* pData); + HRESULT GetMatrix(float* pData); + HRESULT SetMatrixArray(float* pData, UINT Offset, UINT Count); + HRESULT GetMatrixArray(float* pData, UINT Offset, UINT Count); + HRESULT SetMatrixTranspose(float* pData); + HRESULT GetMatrixTranspose(float* pData); + HRESULT SetMatrixTransposeArray(float* pData, UINT Offset, UINT Count); + HRESULT GetMatrixTransposeArray(float* pData, UINT Offset, UINT Count); + */ +} + +extern (C) const GUID IID_ID3D10EffectStringVariable = {0x71417501, 0x8df9, 0x4e0a, [0xa7, 0x8a, 0x25, 0x5f, 0x97, 0x56, 0xba, 0xff]}; + +interface ID3D10EffectStringVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + BOOL IsValid(); + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetString(LPCSTR* ppString); + HRESULT GetStringArray(LPCSTR* ppStrings, UINT Offset, UINT Count); + */ +} + +extern (C) const GUID IID_ID3D10EffectShaderResourceVariable = {0xc0a7157b, 0xd872, 0x4b1d, [0x80, 0x73, 0xef, 0xc2, 0xac, 0xd4, 0xb1, 0xfc]}; + +interface ID3D10EffectShaderResourceVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + BOOL IsValid(); + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT SetResource(ID3D10ShaderResourceView pResource); + HRESULT GetResource(ID3D10ShaderResourceView* ppResource); + HRESULT SetResourceArray(ID3D10ShaderResourceView* ppResources, UINT Offset, UINT Count); + HRESULT GetResourceArray(ID3D10ShaderResourceView* ppResources, UINT Offset, UINT Count); + */ +} + +extern (C) const GUID IID_ID3D10EffectRenderTargetViewVariable = {0x28ca0cc3, 0xc2c9, 0x40bb, [0xb5, 0x7f, 0x67, 0xb7, 0x37, 0x12, 0x2b, 0x17]}; + +interface ID3D10EffectRenderTargetViewVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + BOOL IsValid(); + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT SetRenderTarget(ID3D10RenderTargetView pResource); + HRESULT GetRenderTarget(ID3D10RenderTargetView* ppResource); + HRESULT SetRenderTargetArray(ID3D10RenderTargetView* ppResources, UINT Offset, UINT Count); + HRESULT GetRenderTargetArray(ID3D10RenderTargetView* ppResources, UINT Offset, UINT Count); + */ +} + +extern (C) const GUID IID_ID3D10EffectDepthStencilViewVariable = {0x3e02c918, 0xcc79, 0x4985, [0xb6, 0x22, 0x2d, 0x92, 0xad, 0x70, 0x16, 0x23]}; + +interface ID3D10EffectDepthStencilViewVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + BOOL IsValid(); + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT SetDepthStencil(ID3D10DepthStencilView pResource); + HRESULT GetDepthStencil(ID3D10DepthStencilView* ppResource); + HRESULT SetDepthStencilArray(ID3D10DepthStencilView* ppResources, UINT Offset, UINT Count); + HRESULT GetDepthStencilArray(ID3D10DepthStencilView* ppResources, UINT Offset, UINT Count); + */ +} + +extern (C) const GUID IID_ID3D10EffectConstantBuffer = {0x56648f4d, 0xcc8b, 0x4444, [0xa5, 0xad, 0xb5, 0xa3, 0xd7, 0x6e, 0x91, 0xb3]}; + +interface ID3D10EffectConstantBuffer : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT SetConstantBuffer(ID3D10Buffer pConstantBuffer); + HRESULT GetConstantBuffer(ID3D10Buffer* ppConstantBuffer); + HRESULT SetTextureBuffer(ID3D10ShaderResourceView pTextureBuffer); + HRESULT GetTextureBuffer(ID3D10ShaderResourceView* ppTextureBuffer); + */ +} + +struct D3D10_EFFECT_SHADER_DESC { + BYTE* pInputSignature; + BOOL IsInline; + BYTE* pBytecode; + UINT BytecodeLength; + LPCSTR SODecl; + UINT NumInputSignatureEntries; + UINT NumOutputSignatureEntries; +} + +extern (C) const GUID IID_ID3D10EffectShaderVariable = {0x80849279, 0xc799, 0x4797, [0x8c, 0x33, 0x4, 0x7, 0xa0, 0x7d, 0x9e, 0x6]}; + +interface ID3D10EffectShaderVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetShaderDesc(UINT ShaderIndex, D3D10_EFFECT_SHADER_DESC* pDesc); + HRESULT GetVertexShader(UINT ShaderIndex, ID3D10VertexShader* ppVS); + HRESULT GetGeometryShader(UINT ShaderIndex, ID3D10GeometryShader* ppGS); + HRESULT GetPixelShader(UINT ShaderIndex, ID3D10PixelShader* ppPS); + HRESULT GetInputSignatureElementDesc(UINT ShaderIndex, UINT Element, D3D10_SIGNATURE_PARAMETER_DESC* pDesc); + HRESULT GetOutputSignatureElementDesc(UINT ShaderIndex, UINT Element, D3D10_SIGNATURE_PARAMETER_DESC* pDesc); + */ +} + +extern (C) const GUID IID_ID3D10EffectBlendVariable = {0x1fcd2294, 0xdf6d, 0x4eae, [0x86, 0xb3, 0xe, 0x91, 0x60, 0xcf, 0xb0, 0x7b]}; + +interface ID3D10EffectBlendVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetBlendState(UINT Index, ID3D10BlendState* ppBlendState); + HRESULT GetBackingStore(UINT Index, D3D10_BLEND_DESC* pBlendDesc); + */ +} + +extern (C) const GUID IID_ID3D10EffectDepthStencilVariable = {0xaf482368, 0x330a, 0x46a5, [0x9a, 0x5c, 0x1, 0xc7, 0x1a, 0xf2, 0x4c, 0x8d]}; + +interface ID3D10EffectDepthStencilVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetDepthStencilState(UINT Index, ID3D10DepthStencilState* ppDepthStencilState); + HRESULT GetBackingStore(UINT Index, D3D10_DEPTH_STENCIL_DESC* pDepthStencilDesc); + */ +} + +extern (C) const GUID IID_ID3D10EffectRasterizerVariable = {0x21af9f0e, 0x4d94, 0x4ea9, [0x97, 0x85, 0x2c, 0xb7, 0x6b, 0x8c, 0xb, 0x34]}; + +interface ID3D10EffectRasterizerVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRasterizerState(UINT Index, ID3D10RasterizerState* ppRasterizerState); + HRESULT GetBackingStore(UINT Index, D3D10_RASTERIZER_DESC* pRasterizerDesc); + */ +} + +extern (C) const GUID IID_ID3D10EffectSamplerVariable = {0x6530d5c7, 0x07e9, 0x4271, [0xa4, 0x18, 0xe7, 0xce, 0x4b, 0xd1, 0xe4, 0x80]}; + +interface ID3D10EffectSamplerVariable : ID3D10EffectVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + ID3D10EffectType GetType(); + HRESULT GetDesc(D3D10_EFFECT_VARIABLE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectVariable GetMemberByIndex(UINT Index); + ID3D10EffectVariable GetMemberByName(LPCSTR Name); + ID3D10EffectVariable GetMemberBySemantic(LPCSTR Semantic); + ID3D10EffectVariable GetElement(UINT Index); + ID3D10EffectConstantBuffer GetParentConstantBuffer(); + ID3D10EffectScalarVariable AsScalar(); + ID3D10EffectVectorVariable AsVector(); + ID3D10EffectMatrixVariable AsMatrix(); + ID3D10EffectStringVariable AsString(); + ID3D10EffectShaderResourceVariable AsShaderResource(); + ID3D10EffectRenderTargetViewVariable AsRenderTargetView(); + ID3D10EffectDepthStencilViewVariable AsDepthStencilView(); + ID3D10EffectConstantBuffer AsConstantBuffer(); + ID3D10EffectShaderVariable AsShader(); + ID3D10EffectBlendVariable AsBlend(); + ID3D10EffectDepthStencilVariable AsDepthStencil(); + ID3D10EffectRasterizerVariable AsRasterizer(); + ID3D10EffectSamplerVariable AsSampler(); + HRESULT SetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetRawValue(void* pData, UINT Offset, UINT Count); + HRESULT GetSampler(UINT Index, ID3D10SamplerState* ppSampler); + HRESULT GetBackingStore(UINT Index, D3D10_SAMPLER_DESC* pSamplerDesc); + */ +} + +struct D3D10_PASS_DESC { + LPCSTR Name; + UINT Annotations; + BYTE* pIAInputSignature; + SIZE_T IAInputSignatureSize; + UINT StencilRef; + UINT SampleMask; + FLOAT[4] BlendFactor; +} + +struct D3D10_PASS_SHADER_DESC { + ID3D10EffectShaderVariable pShaderVariable; + UINT ShaderIndex; +} + +extern (C) const GUID IID_ID3D10EffectPass = {0x5cfbeb89, 0x1a06, 0x46e0, [0xb2, 0x82, 0xe3, 0xf9, 0xbf, 0xa3, 0x6a, 0x54]}; + +/+interface ID3D10EffectPass { +/* TODO: fix vtbl[0] bug + extern(Windows) : + BOOL IsValid(); + HRESULT GetDesc(D3D10_PASS_DESC* pDesc); + HRESULT GetVertexShaderDesc(D3D10_PASS_SHADER_DESC* pDesc); + HRESULT GetGeometryShaderDesc(D3D10_PASS_SHADER_DESC* pDesc); + HRESULT GetPixelShaderDesc(D3D10_PASS_SHADER_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + HRESULT Apply(UINT Flags); + HRESULT ComputeStateBlockMask(D3D10_STATE_BLOCK_MASK* pStateBlockMask); + */ +}+/ +/** + * HACK to FIX vtbl[0] bug: + * This is an example HACK how to fix all interfaces which are NOT derived from + * IUnknown. They need the first entry in their vtbl[] point to the first + * virtual function. + * See: + * http://www.digitalmars.com/d/cpp_interface.html + * http://d.puremagic.com/issues/show_bug.cgi?id=1687 + */ +struct ID3D10EffectPassVtbl { + extern(Windows) : + BOOL function(ID3D10EffectPass) IsValid; + HRESULT function(ID3D10EffectPass, D3D10_PASS_DESC* pDesc) GetDesc; + HRESULT function(ID3D10EffectPass, D3D10_PASS_SHADER_DESC* pDesc) GetVertexShaderDesc; + HRESULT function(ID3D10EffectPass, D3D10_PASS_SHADER_DESC* pDesc) GetGeometryShaderDesc; + HRESULT function(ID3D10EffectPass, D3D10_PASS_SHADER_DESC* pDesc) GetPixelShaderDesc; + ID3D10EffectVariable function(ID3D10EffectPass, UINT Index) GetAnnotationByIndex; + ID3D10EffectVariable function(ID3D10EffectPass, LPCSTR Name) GetAnnotationByName; + HRESULT function(ID3D10EffectPass, UINT Flags) Apply; + HRESULT function(ID3D10EffectPass, D3D10_STATE_BLOCK_MASK* pStateBlockMask) ComputeStateBlockMask; +} +alias ID3D10EffectPassVtbl** ID3D10EffectPass; + +struct D3D10_TECHNIQUE_DESC { + LPCSTR Name; + UINT Passes; + UINT Annotations; +} + +extern (C) const GUID IID_ID3D10EffectTechnique = {0xdb122ce8, 0xd1c9, 0x4292, [0xb2, 0x37, 0x24, 0xed, 0x3d, 0xe8, 0xb1, 0x75]}; + +/+interface ID3D10EffectTechnique { +/* TODO: fix vtbl[0] bug + extern(Windows) : + BOOL IsValid(); + HRESULT GetDesc(D3D10_TECHNIQUE_DESC* pDesc); + ID3D10EffectVariable GetAnnotationByIndex(UINT Index); + ID3D10EffectVariable GetAnnotationByName(LPCSTR Name); + ID3D10EffectPass GetPassByIndex(UINT Index); + ID3D10EffectPass GetPassByName(LPCSTR Name); + HRESULT ComputeStateBlockMask(D3D10_STATE_BLOCK_MASK* pStateBlockMask); + */ +}+/ +/** + * HACK to FIX vtbl[0] bug: + * This is an example HACK how to fix all interfaces which are NOT derived from + * IUnknown. They need the first entry in their vtbl[] point to the first + * virtual function. + * See: + * http://www.digitalmars.com/d/cpp_interface.html + * http://d.puremagic.com/issues/show_bug.cgi?id=1687 + */ +struct ID3D10EffectTechniqueVtbl { + extern(Windows) : + BOOL function(ID3D10EffectTechnique) IsValid; + HRESULT function(ID3D10EffectTechnique, D3D10_TECHNIQUE_DESC* pDesc) GetDesc; + ID3D10EffectVariable function(ID3D10EffectTechnique, UINT Index) GetAnnotationByIndex; + ID3D10EffectVariable function(ID3D10EffectTechnique, LPCSTR Name) GetAnnotationByName; + ID3D10EffectPass function(ID3D10EffectTechnique, UINT Index) GetPassByIndex; + ID3D10EffectPass function(ID3D10EffectTechnique, LPCSTR Name) GetPassByName; + HRESULT function(ID3D10EffectTechnique, D3D10_STATE_BLOCK_MASK* pStateBlockMask) ComputeStateBlockMask; +} +alias ID3D10EffectTechniqueVtbl** ID3D10EffectTechnique; + +struct D3D10_EFFECT_DESC { + BOOL IsChildEffect; + UINT ConstantBuffers; + UINT SharedConstantBuffers; + UINT GlobalVariables; + UINT SharedGlobalVariables; + UINT Techniques; +} + +extern (C) const GUID IID_ID3D10Effect = {0x51b0ca8b, 0xec0b, 0x4519, [0x87, 0xd, 0x8e, 0xe1, 0xcb, 0x50, 0x17, 0xc7]}; + +interface ID3D10Effect : IUnknown { + extern(Windows) : + BOOL IsValid(); + BOOL IsPool(); + HRESULT GetDevice(ID3D10Device* ppDevice); + HRESULT GetDesc(D3D10_EFFECT_DESC* pDesc); + ID3D10EffectConstantBuffer GetConstantBufferByIndex(UINT Index); + ID3D10EffectConstantBuffer GetConstantBufferByName(LPCSTR Name); + ID3D10EffectVariable GetVariableByIndex(UINT Index); + ID3D10EffectVariable GetVariableByName(LPCSTR Name); + ID3D10EffectVariable GetVariableBySemantic(LPCSTR Semantic); + ID3D10EffectTechnique GetTechniqueByIndex(UINT Index); + ID3D10EffectTechnique GetTechniqueByName(LPCSTR Name); + HRESULT Optimize(); + BOOL IsOptimized(); +} + +extern (C) const GUID IID_ID3D10EffectPool = {0x9537ab04, 0x3250, 0x412e, [0x82, 0x13, 0xfc, 0xd2, 0xf8, 0x67, 0x79, 0x33]}; + +interface ID3D10EffectPool : IUnknown { + extern(Windows) : + ID3D10Effect AsEffect(); +} + +HRESULT D3D10CompileEffectFromMemory(void* pData, SIZE_T DataLength, LPCSTR pSrcFileName, D3D10_SHADER_MACRO* pDefines, ID3D10Include pInclude, UINT HLSLFlags, UINT FXFlags, ID3D10Blob* ppCompiledEffect, ID3D10Blob* ppErrors); +HRESULT D3D10CreateEffectFromMemory(void* pData, SIZE_T DataLength, UINT FXFlags, ID3D10Device pDevice, ID3D10EffectPool pEffectPool, ID3D10Effect* ppEffect); +HRESULT D3D10CreateEffectPoolFromMemory(void* pData, SIZE_T DataLength, UINT FXFlags, ID3D10Device pDevice, ID3D10EffectPool* ppEffectPool); +HRESULT D3D10DisassembleEffect(ID3D10Effect pEffect, BOOL EnableColorCode, ID3D10Blob* ppDisassembly); diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3d10misc.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3d10misc.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,45 @@ +/***********************************************************************\ +* d3d10misc.d * +* * +* Windows API header module * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.directx.d3d10misc; + +private import win32.windows; + +private import win32.directx.dxgi; +private import win32.directx.d3d10; + +extern (C) const GUID IID_ID3D10Blob = { + 0x8BA5FB08, 0x5195, 0x40E2, [0xAC, 0x58, 0x0D, 0x98, 0x9C, 0x3A, 0x01, 0x02] +}; + +interface ID3D10Blob : IUnknown { + extern(Windows) : + LPVOID GetBufferPointer(); + SIZE_T GetBufferSize(); +} + +enum D3D10_DRIVER_TYPE { + D3D10_DRIVER_TYPE_HARDWARE = 0, + D3D10_DRIVER_TYPE_REFERENCE = 1, + D3D10_DRIVER_TYPE_NULL = 2, + D3D10_DRIVER_TYPE_SOFTWARE = 3 +} + +extern (C) const GUID GUID_DeviceType = { + 0xD722FB4D, 0x7A68, 0x437A, [0xB2, 0x0C, 0x58, 0x04, 0xEE, 0x24, 0x94, 0xA6] +}; + +extern(Windows) { + HRESULT D3D10CreateDevice(IDXGIAdapter pAdapter, + D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, + UINT SDKVersion, ID3D10Device* ppDevice); + HRESULT D3D10CreateDeviceAndSwapChain(IDXGIAdapter pAdapter, + D3D10_DRIVER_TYPE DriverType, HMODULE Software, UINT Flags, + UINT SDKVersion, DXGI_SWAP_CHAIN_DESC* pSwapChainDesc, + IDXGISwapChain* ppSwapChain, ID3D10Device* ppDevice); + HRESULT D3D10CreateBlob(SIZE_T NumBytes, ID3D10Blob* ppBuffer); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3d10shader.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3d10shader.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,304 @@ +/***********************************************************************\ +* d3d10shader.d * +* * +* Windows API header module * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.directx.d3d10shader; + +private import win32.windows; +private import win32.directx.d3d10; + +// some forward references... +enum D3D10_PRIMITIVE_TOPOLOGY; +enum D3D10_SRV_DIMENSION; + +uint D3D10_TX_VERSION(uint _Major, uint _Minor) { + return ('T' << 24) | ('X' << 16) | (_Major << 8) | _Minor; +} + +const D3D10_SHADER_DEBUG = 1 << 0; +const D3D10_SHADER_SKIP_VALIDATION = 1 << 1; +const D3D10_SHADER_SKIP_OPTIMIZATION = 1 << 2; +const D3D10_SHADER_PACK_MATRIX_ROW_MAJOR = 1 << 3; +const D3D10_SHADER_PACK_MATRIX_COLUMN_MAJOR = 1 << 4; +const D3D10_SHADER_PARTIAL_PRECISION = 1 << 5; +const D3D10_SHADER_FORCE_VS_SOFTWARE_NO_OPT = 1 << 6; +const D3D10_SHADER_FORCE_PS_SOFTWARE_NO_OPT = 1 << 7; +const D3D10_SHADER_NO_PRESHADER = 1 << 8; +const D3D10_SHADER_AVOID_FLOW_CONTROL = 1 << 9; +const D3D10_SHADER_PREFER_FLOW_CONTROL = 1 << 10; +const D3D10_SHADER_ENABLE_STRICTNESS = 1 << 11; +const D3D10_SHADER_ENABLE_BACKWARDS_COMPATIBILITY = 1 << 12; +const D3D10_SHADER_IEEE_STRICTNESS = 1 << 13; +const D3D10_SHADER_OPTIMIZATION_LEVEL0 = 1 << 14; +const D3D10_SHADER_OPTIMIZATION_LEVEL1 = 0; +const D3D10_SHADER_OPTIMIZATION_LEVEL2 = (1 << 14) | (1 << 15); +const D3D10_SHADER_OPTIMIZATION_LEVEL3 = 1 << 15; + +struct D3D10_SHADER_MACRO { + LPCSTR Name; + LPCSTR Definition; +} + +enum D3D10_SHADER_VARIABLE_CLASS { + D3D10_SVC_SCALAR, + D3D10_SVC_VECTOR, + D3D10_SVC_MATRIX_ROWS, + D3D10_SVC_MATRIX_COLUMNS, + D3D10_SVC_OBJECT, + D3D10_SVC_STRUCT, + D3D10_SVC_FORCE_DWORD = 0x7fffffff +} + +enum D3D10_SHADER_VARIABLE_FLAGS { + D3D10_SVF_USERPACKED = 1, + D3D10_SVF_USED = 2, + D3D10_SVF_FORCE_DWORD = 0x7fffffff +} + +enum D3D10_SHADER_VARIABLE_TYPE { + D3D10_SVT_VOID = 0, + D3D10_SVT_BOOL = 1, + D3D10_SVT_INT = 2, + D3D10_SVT_FLOAT = 3, + D3D10_SVT_STRING = 4, + D3D10_SVT_TEXTURE = 5, + D3D10_SVT_TEXTURE1D = 6, + D3D10_SVT_TEXTURE2D = 7, + D3D10_SVT_TEXTURE3D = 8, + D3D10_SVT_TEXTURECUBE = 9, + D3D10_SVT_SAMPLER = 10, + D3D10_SVT_PIXELSHADER = 15, + D3D10_SVT_VERTEXSHADER = 16, + D3D10_SVT_UINT = 19, + D3D10_SVT_UINT8 = 20, + D3D10_SVT_GEOMETRYSHADER = 21, + D3D10_SVT_RASTERIZER = 22, + D3D10_SVT_DEPTHSTENCIL = 23, + D3D10_SVT_BLEND = 24, + D3D10_SVT_BUFFER = 25, + D3D10_SVT_CBUFFER = 26, + D3D10_SVT_TBUFFER = 27, + D3D10_SVT_TEXTURE1DARRAY = 28, + D3D10_SVT_TEXTURE2DARRAY = 29, + D3D10_SVT_RENDERTARGETVIEW = 30, + D3D10_SVT_DEPTHSTENCILVIEW = 31, + D3D10_SVT_TEXTURE2DMS = 32, + D3D10_SVT_TEXTURE2DMSARRAY = 33, + D3D10_SVT_TEXTURECUBEARRAY = 34, + D3D10_SVT_FORCE_DWORD = 0x7fffffff +} + +enum D3D10_SHADER_INPUT_FLAGS { + D3D10_SIF_USERPACKED = 1, + D3D10_SIF_COMPARISON_SAMPLER = 2, + D3D10_SIF_TEXTURE_COMPONENT_0 = 4, + D3D10_SIF_TEXTURE_COMPONENT_1 = 8, + D3D10_SIF_TEXTURE_COMPONENTS = 12, + D3D10_SIF_FORCE_DWORD = 0x7fffffff +} + +enum D3D10_SHADER_INPUT_TYPE { + D3D10_SIT_CBUFFER, + D3D10_SIT_TBUFFER, + D3D10_SIT_TEXTURE, + D3D10_SIT_SAMPLER +} + +enum D3D10_SHADER_CBUFFER_FLAGS { + D3D10_CBF_USERPACKED = 1, + D3D10_CBF_FORCE_DWORD = 0x7fffffff +} + +enum D3D10_CBUFFER_TYPE { + D3D10_CT_CBUFFER, + D3D10_CT_TBUFFER +} + +enum D3D10_NAME { + D3D10_NAME_UNDEFINED = 0, + D3D10_NAME_POSITION = 1, + D3D10_NAME_CLIP_DISTANCE = 2, + D3D10_NAME_CULL_DISTANCE = 3, + D3D10_NAME_RENDER_TARGET_ARRAY_INDEX = 4, + D3D10_NAME_VIEWPORT_ARRAY_INDEX = 5, + D3D10_NAME_VERTEX_ID = 6, + D3D10_NAME_PRIMITIVE_ID = 7, + D3D10_NAME_INSTANCE_ID = 8, + D3D10_NAME_IS_FRONT_FACE = 9, + D3D10_NAME_SAMPLE_INDEX = 10, + D3D10_NAME_TARGET = 64, + D3D10_NAME_DEPTH = 65, + D3D10_NAME_COVERAGE = 66 +} + +enum D3D10_RESOURCE_RETURN_TYPE { + D3D10_RETURN_TYPE_UNORM = 1, + D3D10_RETURN_TYPE_SNORM, + D3D10_RETURN_TYPE_SINT, + D3D10_RETURN_TYPE_UINT, + D3D10_RETURN_TYPE_FLOAT, + D3D10_RETURN_TYPE_MIXED +} + +enum D3D10_REGISTER_COMPONENT_TYPE { + D3D10_REGISTER_COMPONENT_UNKNOWN = 0, + D3D10_REGISTER_COMPONENT_UINT32, + D3D10_REGISTER_COMPONENT_SINT32, + D3D10_REGISTER_COMPONENT_FLOAT32 +} + +enum D3D10_INCLUDE_TYPE { + D3D10_INCLUDE_LOCAL, + D3D10_INCLUDE_SYSTEM, + D3D10_INCLUDE_FORCE_DWORD = 0x7fffffff +} + +interface ID3D10Include { +/* TODO: fix vtbl[0] bug + extern(Windows) : + HRESULT Open(D3D10_INCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID* ppData, UINT* pBytes); + HRESULT Close(LPCVOID pData); + */ +} + +struct D3D10_SHADER_DESC { + UINT Version; + LPCSTR Creator; + UINT Flags; + UINT ConstantBuffers; + UINT BoundResources; + UINT InputParameters; + UINT OutputParameters; + UINT InstructionCount; + UINT TempRegisterCount; + UINT TempArrayCount; + UINT DefCount; + UINT DclCount; + UINT TextureNormalInstructions; + UINT TextureLoadInstructions; + UINT TextureCompInstructions; + UINT TextureBiasInstructions; + UINT TextureGradientInstructions; + UINT FloatInstructionCount; + UINT IntInstructionCount; + UINT UintInstructionCount; + UINT StaticFlowControlCount; + UINT DynamicFlowControlCount; + UINT MacroInstructionCount; + UINT ArrayInstructionCount; + UINT CutInstructionCount; + UINT EmitInstructionCount; + D3D10_PRIMITIVE_TOPOLOGY GSOutputTopology; + UINT GSMaxOutputVertexCount; +} + +struct D3D10_SHADER_BUFFER_DESC { + LPCSTR Name; + D3D10_CBUFFER_TYPE Type; + UINT Variables; + UINT Size; + UINT uFlags; +} + +struct D3D10_SHADER_VARIABLE_DESC { + LPCSTR Name; + UINT StartOffset; + UINT Size; + UINT uFlags; + LPVOID DefaultValue; +} + +struct D3D10_SHADER_TYPE_DESC { + D3D10_SHADER_VARIABLE_CLASS Class; + D3D10_SHADER_VARIABLE_TYPE Type; + UINT Rows; + UINT Columns; + UINT Elements; + UINT Members; + UINT Offset; +} + +struct D3D10_SHADER_INPUT_BIND_DESC { + LPCSTR Name; + D3D10_SHADER_INPUT_TYPE Type; + UINT BindPoint; + UINT BindCount; + UINT uFlags; + D3D10_RESOURCE_RETURN_TYPE ReturnType; + D3D10_SRV_DIMENSION Dimension; + UINT NumSamples; +} + +struct D3D10_SIGNATURE_PARAMETER_DESC { + LPCSTR SemanticName; + UINT SemanticIndex; + UINT Register; + D3D10_NAME SystemValueType; + D3D10_REGISTER_COMPONENT_TYPE ComponentType; + BYTE Mask; + BYTE ReadWriteMask; +} + +extern(C) const GUID IID_ID3D10ShaderReflectionType = {0xc530ad7d, 0x9b16, 0x4395, [0xa9, 0x79, 0xba, 0x2e, 0xcf, 0xf8, 0x3a, 0xdd]}; + +interface ID3D10ShaderReflectionType { +/* TODO: fix vtbl[0] bug + extern(Windows) : + HRESULT GetDesc(D3D10_SHADER_TYPE_DESC* pDesc); + ID3D10ShaderReflectionType* GetMemberTypeByIndex(UINT Index); + ID3D10ShaderReflectionType* GetMemberTypeByName(LPCSTR Name); + LPCSTR GetMemberTypeName(UINT Index); + */ +} + +extern(C) const GUID IID_ID3D10ShaderReflectionVariable = {0x1bf63c95, 0x2650, 0x405d, [0x99, 0xc1, 0x36, 0x36, 0xbd, 0x1d, 0xa0, 0xa1]}; + +interface ID3D10ShaderReflectionVariable { +/* TODO: fix vtbl[0] bug + extern(Windows) : + HRESULT GetDesc(D3D10_SHADER_VARIABLE_DESC* pDesc); + ID3D10ShaderReflectionType* GetType(); + */ +} + +extern(C) const GUID IID_ID3D10ShaderReflectionConstantBuffer = {0x66c66a94, 0xdddd, 0x4b62, [0xa6, 0x6a, 0xf0, 0xda, 0x33, 0xc2, 0xb4, 0xd0]}; + +interface ID3D10ShaderReflectionConstantBuffer { +/* TODO: fix vtbl[0] bug + extern(Windows) : + HRESULT GetDesc(D3D10_SHADER_BUFFER_DESC* pDesc); + ID3D10ShaderReflectionVariable* GetVariableByIndex(UINT Index); + ID3D10ShaderReflectionVariable* GetVariableByName(LPCSTR Name); + */ +} + +extern(C) const GUID IID_ID3D10ShaderReflection = {0xd40e20b6, 0xf8f7, 0x42ad, [0xab, 0x20, 0x4b, 0xaf, 0x8f, 0x15, 0xdf, 0xaa]}; + +interface ID3D10ShaderReflection : IUnknown { + extern(Windows) : + HRESULT QueryInterface(REFIID iid, LPVOID* ppv); + ULONG AddRef(); + ULONG Release(); + HRESULT GetDesc(D3D10_SHADER_DESC* pDesc); + ID3D10ShaderReflectionConstantBuffer* GetConstantBufferByIndex(UINT Index); + ID3D10ShaderReflectionConstantBuffer* GetConstantBufferByName(LPCSTR Name); + HRESULT GetResourceBindingDesc(UINT ResourceIndex, D3D10_SHADER_INPUT_BIND_DESC* pDesc); + HRESULT GetInputParameterDesc(UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC* pDesc); + HRESULT GetOutputParameterDesc(UINT ParameterIndex, D3D10_SIGNATURE_PARAMETER_DESC* pDesc); +} + +HRESULT D3D10CompileShader(LPCSTR pSrcData, SIZE_T SrcDataLen, LPCSTR pFileName, D3D10_SHADER_MACRO* pDefines, ID3D10Include pInclude, LPCSTR pFunctionName, LPCSTR pProfile, UINT Flags, ID3D10Blob* ppShader, ID3D10Blob* ppErrorMsgs); +HRESULT D3D10DisassembleShader(void* pShader, SIZE_T BytecodeLength, BOOL EnableColorCode, LPCSTR pComments, ID3D10Blob* ppDisassembly); +LPCSTR D3D10GetPixelShaderProfile(ID3D10Device pDevice); +LPCSTR D3D10GetVertexShaderProfile(ID3D10Device pDevice); +LPCSTR D3D10GetGeometryShaderProfile(ID3D10Device pDevice); +HRESULT D3D10ReflectShader(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10ShaderReflection* ppReflector); +HRESULT D3D10PreprocessShader(LPCSTR pSrcData, SIZE_T SrcDataSize, LPCSTR pFileName, D3D10_SHADER_MACRO* pDefines, ID3D10Include pInclude, ID3D10Blob* ppShaderText, ID3D10Blob* ppErrorMsgs); +HRESULT D3D10GetInputSignatureBlob(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppSignatureBlob); +HRESULT D3D10GetOutputSignatureBlob(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppSignatureBlob); +HRESULT D3D10GetInputAndOutputSignatureBlob(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppSignatureBlob); +HRESULT D3D10GetShaderDebugInfo(void* pShaderBytecode, SIZE_T BytecodeLength, ID3D10Blob* ppDebugInfo); + diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3d9.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3d9.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,837 @@ +/*==========================================================================; + * + * Copyright (C) Microsoft Corporation. All Rights Reserved. + * + * File: d3d9.h + * Content: Direct3D include file + * + ****************************************************************************/ +module win32.directx.d3d9; + +import win32.windows; +public import win32.directx.d3d9types; +public import win32.directx.d3d9caps; + +const DIRECT3D_VERSION = 0x0900; + +/**This identifier is passed to Direct3DCreate9 in order to ensure that an + * application was built against the correct header files. This number is + * incremented whenever a header (or other) change would require applications + * to be rebuilt. If the version doesn't match, Direct3DCreate9 will fail. + * (The number itself has no meaning.)*/ + +debug { + const D3D_SDK_VERSION = (32 | 0x80000000); + const D3D9b_SDK_VERSION = (31 | 0x80000000); +} +else { + const D3D_SDK_VERSION = 32; + const D3D9b_SDK_VERSION = 31; +} + +/* IID_IDirect3D9 */ +/* {81BDCBCA-64D4-426d-AE8D-AD0147F4275C} */ +extern (C) const GUID IID_IDirect3D9 = { 0x81bdcbca, 0x64d4, 0x426d, [0xae, 0x8d, 0xad, 0x1, 0x47, 0xf4, 0x27, 0x5c] }; + +/* IID_IDirect3DDevice9 */ +// {D0223B96-BF7A-43fd-92BD-A43B0D82B9EB} */ +extern (C) const GUID IID_IDirect3DDevice9 = { 0xd0223b96, 0xbf7a, 0x43fd, [0x92, 0xbd, 0xa4, 0x3b, 0xd, 0x82, 0xb9, 0xeb] }; + +/* IID_IDirect3DResource9 */ +// {05EEC05D-8F7D-4362-B999-D1BAF357C704} +extern (C) const GUID IID_IDirect3DResource9 = { 0x05eec05d, 0x8f7d, 0x4362, [0xb9, 0x99, 0xd1, 0xba, 0xf3, 0x57, 0xc7, 0x04] }; + +/* IID_IDirect3DBaseTexture9 */ +/* {580CA87E-1D3C-4d54-991D-B7D3E3C298CE} */ +extern (C) const GUID IID_IDirect3DBaseTexture9 = { 0x580ca87e, 0x1d3c, 0x4d54, [0x99, 0x1d, 0xb7, 0xd3, 0xe3, 0xc2, 0x98, 0xce] }; + +/* IID_IDirect3DTexture9 */ +/* {85C31227-3DE5-4f00-9B3A-F11AC38C18B5} */ +extern (C) const GUID IID_IDirect3DTexture9 = { 0x85c31227, 0x3de5, 0x4f00, [0x9b, 0x3a, 0xf1, 0x1a, 0xc3, 0x8c, 0x18, 0xb5] }; + +/* IID_IDirect3DCubeTexture9 */ +/* {FFF32F81-D953-473a-9223-93D652ABA93F} */ +extern (C) const GUID IID_IDirect3DCubeTexture9 = { 0xfff32f81, 0xd953, 0x473a, [0x92, 0x23, 0x93, 0xd6, 0x52, 0xab, 0xa9, 0x3f] }; + +/* IID_IDirect3DVolumeTexture9 */ +/* {2518526C-E789-4111-A7B9-47EF328D13E6} */ +extern (C) const GUID IID_IDirect3DVolumeTexture9 = { 0x2518526c, 0xe789, 0x4111, [0xa7, 0xb9, 0x47, 0xef, 0x32, 0x8d, 0x13, 0xe6] }; + +/* IID_IDirect3DVertexBuffer9 */ +/* {B64BB1B5-FD70-4df6-BF91-19D0A12455E3} */ +extern (C) const GUID IID_IDirect3DVertexBuffer9 = { 0xb64bb1b5, 0xfd70, 0x4df6, [0xbf, 0x91, 0x19, 0xd0, 0xa1, 0x24, 0x55, 0xe3] }; + +/* IID_IDirect3DIndexBuffer9 */ +/* {7C9DD65E-D3F7-4529-ACEE-785830ACDE35} */ +extern (C) const GUID IID_IDirect3DIndexBuffer9 = { 0x7c9dd65e, 0xd3f7, 0x4529, [0xac, 0xee, 0x78, 0x58, 0x30, 0xac, 0xde, 0x35] }; + +/* IID_IDirect3DSurface9 */ +/* {0CFBAF3A-9FF6-429a-99B3-A2796AF8B89B} */ +extern (C) const GUID IID_IDirect3DSurface9 = { 0xcfbaf3a,, 0x9ff6, 0x429a, [0x99, 0xb3, 0xa2, 0x79, 0x6a, 0xf8, 0xb8, 0x9b] }; + +/* IID_IDirect3DVolume9 */ +/* {24F416E6-1F67-4aa7-B88E-D33F6F3128A1} */ +extern (C) const GUID IID_IDirect3DVolume9 = { 0x24f416e6, 0x1f67, 0x4aa7, [0xb8, 0x8e, 0xd3, 0x3f, 0x6f, 0x31, 0x28, 0xa1] }; + +/* IID_IDirect3DSwapChain9 */ +/* {794950F2-ADFC-458a-905E-10A10B0B503B} */ +extern (C) const GUID IID_IDirect3DSwapChain9 = { 0x794950f2, 0xadfc, 0x458a, [0x90, 0x5e, 0x10, 0xa1, 0xb, 0xb, 0x50, 0x3b] }; + +/* IID_IDirect3DVertexDeclaration9 */ +/* {DD13C59C-36FA-4098-A8FB-C7ED39DC8546} */ +extern (C) const GUID IID_IDirect3DVertexDeclaration9 = { 0xdd13c59c, 0x36fa, 0x4098, [0xa8, 0xfb, 0xc7, 0xed, 0x39, 0xdc, 0x85, 0x46] }; + +/* IID_IDirect3DVertexShader9 */ +/* {EFC5557E-6265-4613-8A94-43857889EB36} */ +extern (C) const GUID IID_IDirect3DVertexShader9 = { 0xefc5557e, 0x6265, 0x4613, [0x8a, 0x94, 0x43, 0x85, 0x78, 0x89, 0xeb, 0x36] }; + +/* IID_IDirect3DPixelShader9 */ +/* {6D3BDBDC-5B02-4415-B852-CE5E8BCCB289} */ +extern (C) const GUID IID_IDirect3DPixelShader9 = { 0x6d3bdbdc, 0x5b02, 0x4415, [0xb8, 0x52, 0xce, 0x5e, 0x8b, 0xcc, 0xb2, 0x89] }; + +/* IID_IDirect3DStateBlock9 */ +/* {B07C4FE5-310D-4ba8-A23C-4F0F206F218B} */ +extern (C) const GUID IID_IDirect3DStateBlock9 = { 0xb07c4fe5, 0x310d, 0x4ba8, [0xa2, 0x3c, 0x4f, 0xf, 0x20, 0x6f, 0x21, 0x8b] }; + +/* IID_IDirect3DQuery9 */ +/* {d9771460-a695-4f26-bbd3-27b840b541cc} */ +extern (C) const GUID IID_IDirect3DQuery9 = { 0xd9771460, 0xa695, 0x4f26, [0xbb, 0xd3, 0x27, 0xb8, 0x40, 0xb5, 0x41, 0xcc] }; + + +/* IID_HelperName */ +/* {E4A36723-FDFE-4b22-B146-3C04C07F4CC8} */ +extern (C) const GUID IID_HelperName = { 0xe4a36723, 0xfdfe, 0x4b22, [0xb1, 0x46, 0x3c, 0x4, 0xc0, 0x7f, 0x4c, 0xc8] }; + +/* IID_IDirect3D9Ex */ +/* {02177241-69FC-400C-8FF1-93A44DF6861D} */ +extern (C) const GUID IID_IDirect3D9Ex = { 0x02177241, 0x69FC, 0x400C, [0x8F, 0xF1, 0x93, 0xA4, 0x4D, 0xF6, 0x86, 0x1D] }; + +/* IID_IDirect3DDevice9Ex */ +// {B18B10CE-2649-405a-870F-95F777D4313A} +extern (C) const GUID IID_IDirect3DDevice9Ex = { 0xb18b10ce, 0x2649, 0x405a, [0x87, 0xf, 0x95, 0xf7, 0x77, 0xd4, 0x31, 0x3a] }; + +/* IID_IDirect3DSwapChain9Ex */ +/* {91886CAF-1C3D-4d2e-A0AB-3E4C7D8D3303} */ +extern (C) const GUID IID_IDirect3DSwapChain9Ex = { 0x91886caf, 0x1c3d, 0x4d2e, [0xa0, 0xab, 0x3e, 0x4c, 0x7d, 0x8d, 0x33, 0x03] }; + + + +extern (C): +/** + * DLL Function for creating a Direct3D9 object. This object supports + * enumeration and allows the creation of Direct3DDevice9 objects. + * Pass the value of the constant D3D_SDK_VERSION to this function, so + * that the run-time can validate that your application was compiled + * against the right headers. + */ + +extern (Windows) LPDIRECT3D9 Direct3DCreate9(UINT SDKVersion); + +/** + * Stubs for graphics profiling. + */ +extern (Windows) int D3DPERF_BeginEvent( D3DCOLOR col, LPCWSTR wszName ); +extern (Windows) int D3DPERF_EndEvent(); +extern (Windows) void D3DPERF_SetMarker( D3DCOLOR col, LPCWSTR wszName ); +extern (Windows) void D3DPERF_SetRegion( D3DCOLOR col, LPCWSTR wszName ); +extern (Windows) BOOL D3DPERF_QueryRepeatFrame(); + +extern (Windows) void D3DPERF_SetOptions( DWORD dwOptions ); +extern (Windows) DWORD D3DPERF_GetStatus(); + + +interface LPDIRECT3D9 : public IUnknown +{ + HRESULT RegisterSoftwareDevice(void* pInitializeFunction); + UINT GetAdapterCount(); + HRESULT GetAdapterIdentifier( UINT Adapter,DWORD Flags,D3DADAPTER_IDENTIFIER9* pIdentifier); + UINT GetAdapterModeCount(UINT Adapter,D3DFORMAT Format); + HRESULT EnumAdapterModes( UINT Adapter,D3DFORMAT Format,UINT Mode,D3DDISPLAYMODE* pMode); + HRESULT GetAdapterDisplayMode( UINT Adapter,D3DDISPLAYMODE* pMode); + HRESULT CheckDeviceType( UINT Adapter,D3DDEVTYPE DevType,D3DFORMAT AdapterFormat,D3DFORMAT BackBufferFormat,BOOL bWindowed); + HRESULT CheckDeviceFormat( UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,DWORD Usage,D3DRESOURCETYPE RType,D3DFORMAT CheckFormat); + HRESULT CheckDeviceMultiSampleType( UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SurfaceFormat,BOOL Windowed,D3DMULTISAMPLE_TYPE MultiSampleType,DWORD* pQualityLevels); + HRESULT CheckDepthStencilMatch( UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT AdapterFormat,D3DFORMAT RenderTargetFormat,D3DFORMAT DepthStencilFormat); + HRESULT CheckDeviceFormatConversion( UINT Adapter,D3DDEVTYPE DeviceType,D3DFORMAT SourceFormat,D3DFORMAT TargetFormat); + HRESULT GetDeviceCaps( UINT Adapter,D3DDEVTYPE DeviceType,D3DCAPS9* pCaps); + HMONITOR GetAdapterMonitor(UINT Adapter); + HRESULT CreateDevice( UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,LPDIRECT3DDEVICE9* ppReturnedDeviceInterface); +/* + debug { + LPCWSTR Version; + } +*/ +} +alias LPDIRECT3D9 IDirect3D9; + +interface LPDIRECT3DDEVICE9 : public IUnknown +{ + HRESULT TestCooperativeLevel(); + UINT GetAvailableTextureMem(); + HRESULT EvictManagedResources(); + HRESULT GetDirect3D( LPDIRECT3D9* ppD3D9); + HRESULT GetDeviceCaps( D3DCAPS9* pCaps); + HRESULT GetDisplayMode( UINT iSwapChain,D3DDISPLAYMODE* pMode); + HRESULT GetCreationParameters( D3DDEVICE_CREATION_PARAMETERS *pParameters); + HRESULT SetCursorProperties( UINT XHotSpot,UINT YHotSpot,LPDIRECT3DSURFACE9 pCursorBitmap); + void SetCursorPosition(int X,int Y,DWORD Flags); + BOOL ShowCursor(BOOL bShow); + HRESULT CreateAdditionalSwapChain( D3DPRESENT_PARAMETERS* pPresentationParameters,LPDIRECT3DSWAPCHAIN9* pSwapChain); + HRESULT GetSwapChain( UINT iSwapChain,LPDIRECT3DSWAPCHAIN9* pSwapChain); + UINT GetNumberOfSwapChains(); + HRESULT Reset( D3DPRESENT_PARAMETERS* pPresentationParameters); + HRESULT Present(RECT* pSourceRect,RECT* pDestRect,HWND hDestWindowOverride, RGNDATA* pDirtyRegion); + HRESULT GetBackBuffer( UINT iSwapChain,UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,LPDIRECT3DSURFACE9* ppBackBuffer); + HRESULT GetRasterStatus( UINT iSwapChain,D3DRASTER_STATUS* pRasterStatus); + HRESULT SetDialogBoxMode( BOOL bEnableDialogs); + void SetGammaRamp(UINT iSwapChain,DWORD Flags, D3DGAMMARAMP* pRamp); + void GetGammaRamp(UINT iSwapChain,D3DGAMMARAMP* pRamp); + HRESULT CreateTexture( UINT Width,UINT Height,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,LPDIRECT3DTEXTURE9* ppTexture,HANDLE* pSharedHandle); + HRESULT CreateVolumeTexture( UINT Width,UINT Height,UINT Depth,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,LPDIRECT3DVOLUMETEXTURE9* ppVolumeTexture,HANDLE* pSharedHandle); + HRESULT CreateCubeTexture( UINT EdgeLength,UINT Levels,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,LPDIRECT3DCUBETEXTURE9* ppCubeTexture,HANDLE* pSharedHandle); + HRESULT CreateVertexBuffer( UINT Length,DWORD Usage,DWORD FVF,D3DPOOL Pool,LPDIRECT3DVERTEXBUFFER9* ppVertexBuffer,HANDLE* pSharedHandle); + HRESULT CreateIndexBuffer( UINT Length,DWORD Usage,D3DFORMAT Format,D3DPOOL Pool,LPDIRECT3DINDEXBUFFER9* ppIndexBuffer,HANDLE* pSharedHandle); + HRESULT CreateRenderTarget( UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,LPDIRECT3DSURFACE9* ppSurface,HANDLE* pSharedHandle); + HRESULT CreateDepthStencilSurface( UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,LPDIRECT3DSURFACE9* ppSurface,HANDLE* pSharedHandle); + HRESULT UpdateSurface( LPDIRECT3DSURFACE9 pSourceSurface, RECT* pSourceRect,LPDIRECT3DSURFACE9 pDestinationSurface, POINT* pDestPoint); + HRESULT UpdateTexture( LPDIRECT3DBASETEXTURE9 pSourceTexture,LPDIRECT3DBASETEXTURE9 pDestinationTexture); + HRESULT GetRenderTargetData( LPDIRECT3DSURFACE9 pRenderTarget,LPDIRECT3DSURFACE9 pDestSurface); + HRESULT GetFrontBufferData( UINT iSwapChain,LPDIRECT3DSURFACE9 pDestSurface); + HRESULT StretchRect( LPDIRECT3DSURFACE9 pSourceSurface, RECT* pSourceRect,LPDIRECT3DSURFACE9 pDestSurface, RECT* pDestRect,D3DTEXTUREFILTERTYPE Filter); + HRESULT ColorFill( LPDIRECT3DSURFACE9 pSurface, RECT* pRect,D3DCOLOR color); + HRESULT CreateOffscreenPlainSurface( UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,LPDIRECT3DSURFACE9* ppSurface,HANDLE* pSharedHandle); + HRESULT SetRenderTarget( DWORD RenderTargetIndex,LPDIRECT3DSURFACE9 pRenderTarget); + HRESULT GetRenderTarget( DWORD RenderTargetIndex,LPDIRECT3DSURFACE9* ppRenderTarget); + HRESULT SetDepthStencilSurface( LPDIRECT3DSURFACE9 pNewZStencil); + HRESULT GetDepthStencilSurface( LPDIRECT3DSURFACE9* ppZStencilSurface); + HRESULT BeginScene(); + HRESULT EndScene(); + HRESULT Clear( DWORD Count, D3DRECT* pRects,DWORD Flags,D3DCOLOR Color,float Z,DWORD Stencil); + HRESULT SetTransform( D3DTRANSFORMSTATETYPE State, D3DMATRIX* pMatrix); + HRESULT GetTransform( D3DTRANSFORMSTATETYPE State,D3DMATRIX* pMatrix); + HRESULT MultiplyTransform( D3DTRANSFORMSTATETYPE, D3DMATRIX*); + HRESULT SetViewport( D3DVIEWPORT9* pViewport); + HRESULT GetViewport( D3DVIEWPORT9* pViewport); + HRESULT SetMaterial( D3DMATERIAL9* pMaterial); + HRESULT GetMaterial( D3DMATERIAL9* pMaterial); + HRESULT SetLight( DWORD Index, D3DLIGHT9*); + HRESULT GetLight( DWORD Index,D3DLIGHT9*); + HRESULT LightEnable( DWORD Index,BOOL Enable); + HRESULT GetLightEnable( DWORD Index,BOOL* pEnable); + HRESULT SetClipPlane( DWORD Index, float* pPlane); + HRESULT GetClipPlane( DWORD Index,float* pPlane); + HRESULT SetRenderState( D3DRENDERSTATETYPE State,DWORD Value); + HRESULT GetRenderState( D3DRENDERSTATETYPE State,DWORD* pValue); + HRESULT CreateStateBlock( D3DSTATEBLOCKTYPE Type,LPDIRECT3DSTATEBLOCK9* ppSB); + HRESULT BeginStateBlock(); + HRESULT EndStateBlock( LPDIRECT3DSTATEBLOCK9* ppSB); + HRESULT SetClipStatus( D3DCLIPSTATUS9* pClipStatus); + HRESULT GetClipStatus( D3DCLIPSTATUS9* pClipStatus); + HRESULT GetTexture( DWORD Stage,LPDIRECT3DBASETEXTURE9* ppTexture); + HRESULT SetTexture( DWORD Stage,LPDIRECT3DBASETEXTURE9 pTexture); + HRESULT GetTextureStageState( DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD* pValue); + HRESULT SetTextureStageState( DWORD Stage,D3DTEXTURESTAGESTATETYPE Type,DWORD Value); + HRESULT GetSamplerState( DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD* pValue); + HRESULT SetSamplerState( DWORD Sampler,D3DSAMPLERSTATETYPE Type,DWORD Value); + HRESULT ValidateDevice( DWORD* pNumPasses); + HRESULT SetPaletteEntries( UINT PaletteNumber, PALETTEENTRY* pEntries); + HRESULT GetPaletteEntries( UINT PaletteNumber,PALETTEENTRY* pEntries); + HRESULT SetCurrentTexturePalette( UINT PaletteNumber); + HRESULT GetCurrentTexturePalette( UINT *PaletteNumber); + HRESULT SetScissorRect( RECT* pRect); + HRESULT GetScissorRect( RECT* pRect); + HRESULT SetSoftwareVertexProcessing( BOOL bSoftware); + BOOL GetSoftwareVertexProcessing(); + HRESULT SetNPatchMode( float nSegments); + float GetNPatchMode(); + HRESULT DrawPrimitive( D3DPRIMITIVETYPE PrimitiveType,UINT StartVertex,UINT PrimitiveCount); + HRESULT DrawIndexedPrimitive( D3DPRIMITIVETYPE,INT BaseVertexIndex,UINT MinVertexIndex,UINT NumVertices,UINT startIndex,UINT primCount); + HRESULT DrawPrimitiveUP( D3DPRIMITIVETYPE PrimitiveType,UINT PrimitiveCount, void* pVertexStreamZeroData,UINT VertexStreamZeroStride); + HRESULT DrawIndexedPrimitiveUP( D3DPRIMITIVETYPE PrimitiveType,UINT MinVertexIndex,UINT NumVertices,UINT PrimitiveCount, void* pIndexData,D3DFORMAT IndexDataFormat, void* pVertexStreamZeroData,UINT VertexStreamZeroStride); + HRESULT ProcessVertices( UINT SrcStartIndex,UINT DestIndex,UINT VertexCount,LPDIRECT3DVERTEXBUFFER9 pDestBuffer,LPDIRECT3DVERTEXDECLARATION9 pVertexDecl,DWORD Flags); + HRESULT CreateVertexDeclaration( D3DVERTEXELEMENT9* pVertexElements,LPDIRECT3DVERTEXDECLARATION9* ppDecl); + HRESULT SetVertexDeclaration(LPDIRECT3DVERTEXDECLARATION9 pDecl); + HRESULT GetVertexDeclaration(LPDIRECT3DVERTEXDECLARATION9* ppDecl); + HRESULT SetFVF( DWORD FVF); + HRESULT GetFVF( DWORD* pFVF); + HRESULT CreateVertexShader( DWORD* pFunction,LPDIRECT3DVERTEXSHADER9* ppShader); + HRESULT SetVertexShader( LPDIRECT3DVERTEXSHADER9 pShader); + HRESULT GetVertexShader( LPDIRECT3DVERTEXSHADER9* ppShader); + HRESULT SetVertexShaderConstantF( UINT StartRegister, float* pConstantData,UINT Vector4fCount); + HRESULT GetVertexShaderConstantF( UINT StartRegister,float* pConstantData,UINT Vector4fCount); + HRESULT SetVertexShaderConstantI( UINT StartRegister, int* pConstantData,UINT Vector4iCount); + HRESULT GetVertexShaderConstantI( UINT StartRegister,int* pConstantData,UINT Vector4iCount); + HRESULT SetVertexShaderConstantB( UINT StartRegister, BOOL* pConstantData,UINT BoolCount); + HRESULT GetVertexShaderConstantB( UINT StartRegister,BOOL* pConstantData,UINT BoolCount); + HRESULT SetStreamSource( UINT StreamNumber,LPDIRECT3DVERTEXBUFFER9 pStreamData,UINT OffsetInBytes,UINT Stride); + HRESULT GetStreamSource( UINT StreamNumber,LPDIRECT3DVERTEXBUFFER9* ppStreamData,UINT* pOffsetInBytes,UINT* pStride); + HRESULT SetStreamSourceFreq( UINT StreamNumber,UINT Setting); + HRESULT GetStreamSourceFreq( UINT StreamNumber,UINT* pSetting); + HRESULT SetIndices( LPDIRECT3DINDEXBUFFER9 pIndexData); + HRESULT GetIndices( LPDIRECT3DINDEXBUFFER9* ppIndexData); + HRESULT CreatePixelShader( DWORD* pFunction,LPDIRECT3DPIXELSHADER9* ppShader); + HRESULT SetPixelShader(LPDIRECT3DPIXELSHADER9 pShader); + HRESULT GetPixelShader(LPDIRECT3DPIXELSHADER9* ppShader); + HRESULT SetPixelShaderConstantF( UINT StartRegister, float* pConstantData,UINT Vector4fCount); + HRESULT GetPixelShaderConstantF( UINT StartRegister,float* pConstantData,UINT Vector4fCount); + HRESULT SetPixelShaderConstantI( UINT StartRegister, int* pConstantData,UINT Vector4iCount); + HRESULT GetPixelShaderConstantI( UINT StartRegister,int* pConstantData,UINT Vector4iCount); + HRESULT SetPixelShaderConstantB( UINT StartRegister, BOOL* pConstantData,UINT BoolCount); + HRESULT GetPixelShaderConstantB( UINT StartRegister,BOOL* pConstantData,UINT BoolCount); + HRESULT DrawRectPatch( UINT Handle, float* pNumSegs, D3DRECTPATCH_INFO* pRectPatchInfo); + HRESULT DrawTriPatch( UINT Handle, float* pNumSegs, D3DTRIPATCH_INFO* pTriPatchInfo); + HRESULT DeletePatch( UINT Handle); + HRESULT CreateQuery( D3DQUERYTYPE Type,LPDIRECT3DQUERY9* ppQuery); +/* + debug { + D3DDEVICE_CREATION_PARAMETERS CreationParameters; + D3DPRESENT_PARAMETERS PresentParameters; + D3DDISPLAYMODE DisplayMode; + D3DCAPS9 Caps; + + UINT AvailableTextureMem; + UINT SwapChains; + UINT Textures; + UINT VertexBuffers; + UINT IndexBuffers; + UINT VertexShaders; + UINT PixelShaders; + + D3DVIEWPORT9 Viewport; + D3DMATRIX ProjectionMatrix; + D3DMATRIX ViewMatrix; + D3DMATRIX WorldMatrix; + D3DMATRIX TextureMatrices[8]; + + DWORD FVF; + UINT VertexSize; + DWORD VertexShaderVersion; + DWORD PixelShaderVersion; + BOOL SoftwareVertexProcessing; + + D3DMATERIAL9 Material; + D3DLIGHT9 Lights[16]; + BOOL LightsEnabled[16]; + + D3DGAMMARAMP GammaRamp; + RECT ScissorRect; + BOOL DialogBoxMode; + } +*/ +} + +alias LPDIRECT3DDEVICE9 IDirect3DDevice9; + + +interface LPDIRECT3DSTATEBLOCK9 : public IUnknown +{ + HRESULT GetDevice(LPDIRECT3DDEVICE9* ppDevice); + HRESULT Capture(); + HRESULT Apply(); +/* + debug { + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DSTATEBLOCK9 IDirect3DStateBlock9; + +interface LPDIRECT3DSWAPCHAIN9 : public IUnknown +{ + HRESULT Present( RECT* pSourceRect, RECT* pDestRect,HWND hDestWindowOverride, RGNDATA* pDirtyRegion,DWORD dwFlags); + HRESULT GetFrontBufferData( LPDIRECT3DSURFACE9 pDestSurface); + HRESULT GetBackBuffer( UINT iBackBuffer,D3DBACKBUFFER_TYPE Type,LPDIRECT3DSURFACE9* ppBackBuffer); + HRESULT GetRasterStatus( D3DRASTER_STATUS* pRasterStatus); + HRESULT GetDisplayMode( D3DDISPLAYMODE* pMode); + HRESULT GetDevice( LPDIRECT3DDEVICE9 * ppDevice); + HRESULT GetPresentParameters( D3DPRESENT_PARAMETERS* pPresentationParameters); +/* + debug { + D3DPRESENT_PARAMETERS PresentParameters; + D3DDISPLAYMODE DisplayMode; + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DSWAPCHAIN9 IDirect3DSwapChain9; + +interface LPDIRECT3DRESOURCE9 : public IUnknown +{ + HRESULT GetDevice( LPDIRECT3DDEVICE9* ppDevice); + HRESULT SetPrivateData( REFGUID refguid, void* pData,DWORD SizeOfData,DWORD Flags); + HRESULT GetPrivateData( REFGUID refguid,void* pData,DWORD* pSizeOfData); + HRESULT FreePrivateData( REFGUID refguid); + DWORD SetPriority(DWORD PriorityNew); + DWORD GetPriority(); + void PreLoad(); + D3DRESOURCETYPE GetType(); +} + +alias LPDIRECT3DRESOURCE9 IDirect3DResource9; + +interface LPDIRECT3DVERTEXDECLARATION9 : public IUnknown +{ + HRESULT GetDevice( LPDIRECT3DDEVICE9* ppDevice); + HRESULT GetDeclaration( D3DVERTEXELEMENT9* pElement,UINT* pNumElements); +/* + debug { + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DVERTEXDECLARATION9 IDirect3DVertexDeclaration9; + +interface LPDIRECT3DVERTEXSHADER9 : public IUnknown +{ + HRESULT GetDevice( LPDIRECT3DDEVICE9 * ppDevice); + HRESULT GetFunction( void*,UINT* pSizeOfData); +/* + debug { + DWORD Version; + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DVERTEXSHADER9 IDirect3DVertexShader9; + +interface LPDIRECT3DPIXELSHADER9 : public IUnknown +{ + HRESULT GetDevice( LPDIRECT3DDEVICE9 * ppDevice); + HRESULT GetFunction( void*,UINT* pSizeOfData); +/* + debug { + DWORD Version; + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DPIXELSHADER9 IDirect3DPixelShader9; + +interface LPDIRECT3DBASETEXTURE9 : public LPDIRECT3DRESOURCE9 +{ + DWORD SetLOD(DWORD LODNew); + DWORD GetLOD(); + DWORD GetLevelCount(); + HRESULT SetAutoGenFilterType( D3DTEXTUREFILTERTYPE FilterType); + D3DTEXTUREFILTERTYPE GetAutoGenFilterType(); + void GenerateMipSubLevels(); +} + +alias LPDIRECT3DBASETEXTURE9 IDirect3DBaseTexture9; + +interface LPDIRECT3DTEXTURE9 : public LPDIRECT3DBASETEXTURE9 +{ + HRESULT GetLevelDesc( UINT Level,D3DSURFACE_DESC *pDesc); + HRESULT GetSurfaceLevel( UINT Level,LPDIRECT3DSURFACE9* ppSurfaceLevel); + HRESULT LockRect( UINT Level,D3DLOCKED_RECT* pLockedRect,RECT* pRect,DWORD Flags); + HRESULT UnlockRect( UINT Level); + HRESULT AddDirtyRect(RECT* pDirtyRect); +/* + debug { + LPCWSTR Name; + UINT Width; + UINT Height; + UINT Levels; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + DWORD Priority; + DWORD LOD; + D3DTEXTUREFILTERTYPE FilterType; + UINT LockCount; + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DTEXTURE9 IDirect3DTexture9; + +interface LPDIRECT3DVOLUMETEXTURE9 : public LPDIRECT3DBASETEXTURE9 +{ + HRESULT GetLevelDesc( UINT Level,D3DVOLUME_DESC *pDesc); + HRESULT GetVolumeLevel( UINT Level,LPDIRECT3DVOLUME9* ppVolumeLevel); + HRESULT LockBox( UINT Level,D3DLOCKED_BOX* pLockedVolume, D3DBOX* pBox,DWORD Flags); + HRESULT UnlockBox( UINT Level); + HRESULT AddDirtyBox( D3DBOX* pDirtyBox); +/* + debug { + LPCWSTR Name; + UINT Width; + UINT Height; + UINT Depth; + UINT Levels; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + DWORD Priority; + DWORD LOD; + D3DTEXTUREFILTERTYPE FilterType; + UINT LockCount; + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DVOLUMETEXTURE9 IDirect3DVolumeTexture9; + +interface LPDIRECT3DCUBETEXTURE9 : public LPDIRECT3DBASETEXTURE9 +{ + HRESULT GetLevelDesc( UINT Level,D3DSURFACE_DESC *pDesc); + HRESULT GetCubeMapSurface( D3DCUBEMAP_FACES FaceType,UINT Level,LPDIRECT3DSURFACE9* ppCubeMapSurface); + HRESULT LockRect( D3DCUBEMAP_FACES FaceType,UINT Level,D3DLOCKED_RECT* pLockedRect, RECT* pRect,DWORD Flags); + HRESULT UnlockRect( D3DCUBEMAP_FACES FaceType,UINT Level); + HRESULT AddDirtyRect( D3DCUBEMAP_FACES FaceType, RECT* pDirtyRect); +/* + debug { + LPCWSTR Name; + UINT Width; + UINT Height; + UINT Levels; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + DWORD Priority; + DWORD LOD; + D3DTEXTUREFILTERTYPE FilterType; + UINT LockCount; + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DCUBETEXTURE9 IDirect3DCubeTexture9; + +interface LPDIRECT3DVERTEXBUFFER9 : public LPDIRECT3DRESOURCE9 +{ + HRESULT Lock( UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD Flags); + HRESULT Unlock(); + HRESULT GetDesc( D3DVERTEXBUFFER_DESC *pDesc); +/* + debug { + LPCWSTR Name; + UINT Length; + DWORD Usage; + DWORD FVF; + D3DPOOL Pool; + DWORD Priority; + UINT LockCount; + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DVERTEXBUFFER9 IDirect3DVertexBuffer9; + +interface LPDIRECT3DINDEXBUFFER9 : public LPDIRECT3DRESOURCE9 +{ + HRESULT Lock( UINT OffsetToLock,UINT SizeToLock,void** ppbData,DWORD Flags); + HRESULT Unlock(); + HRESULT GetDesc( D3DINDEXBUFFER_DESC *pDesc); +/* + debug { + LPCWSTR Name; + UINT Length; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + DWORD Priority; + UINT LockCount; + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DINDEXBUFFER9 IDirect3DIndexBuffer9; + +interface LPDIRECT3DSURFACE9 : public LPDIRECT3DRESOURCE9 +{ + HRESULT GetContainer( REFIID riid,void** ppContainer); + HRESULT GetDesc( D3DSURFACE_DESC *pDesc); + HRESULT LockRect( D3DLOCKED_RECT* pLockedRect, RECT* pRect,DWORD Flags); + HRESULT UnlockRect(); + HRESULT GetDC( HDC *phdc); + HRESULT ReleaseDC( HDC hdc); +/* + debug { + LPCWSTR Name; + UINT Width; + UINT Height; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + D3DMULTISAMPLE_TYPE MultiSampleType; + DWORD MultiSampleQuality; + DWORD Priority; + UINT LockCount; + UINT DCCount; + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DSURFACE9 IDirect3DSurface9; + +interface LPDIRECT3DVOLUME9 : public IUnknown +{ + HRESULT GetDevice( LPDIRECT3DDEVICE9 * ppDevice); + HRESULT SetPrivateData( REFGUID refguid, void* pData,DWORD SizeOfData,DWORD Flags); + HRESULT GetPrivateData( REFGUID refguid,void* pData,DWORD* pSizeOfData); + HRESULT FreePrivateData( REFGUID refguid); + HRESULT GetContainer( REFIID riid,void** ppContainer); + HRESULT GetDesc( D3DVOLUME_DESC *pDesc); + HRESULT LockBox( D3DLOCKED_BOX * pLockedVolume, D3DBOX* pBox,DWORD Flags); + HRESULT UnlockBox(); +/* + debug { + LPCWSTR Name; + UINT Width; + UINT Height; + UINT Depth; + DWORD Usage; + D3DFORMAT Format; + D3DPOOL Pool; + UINT LockCount; + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DVOLUME9 IDirect3DVolume9; + +interface LPDIRECT3DQUERY9 : public IUnknown +{ + HRESULT GetDevice( LPDIRECT3DDEVICE9* ppDevice); + D3DQUERYTYPE GetType(); + DWORD GetDataSize(); + HRESULT Issue( DWORD dwIssueFlags); + HRESULT GetData( void* pData,DWORD dwSize,DWORD dwGetDataFlags); +/* + debug { + D3DQUERYTYPE Type; + DWORD DataSize; + LPCWSTR CreationCallStack; + } +*/ +} + +alias LPDIRECT3DQUERY9 IDirect3DQuery9; + +/**************************************************************************** + * Flags for SetPrivateData method on all D3D9 interfaces + * + * The passed pointer is an IUnknown ptr. The SizeOfData argument to SetPrivateData + * must be set to sizeof(IUnknown*). Direct3D will call AddRef through this + * pointer and Release when the private data is destroyed. The data will be + * destroyed when another SetPrivateData with the same GUID is set, when + * FreePrivateData is called, or when the D3D9 object is freed. + ****************************************************************************/ +const D3DSPD_IUNKNOWN = 0x00000001L; + +/**************************************************************************** + * + * Flags for IDirect3D9::CreateDevice's BehaviorFlags + * + ****************************************************************************/ + +const D3DCREATE_FPU_PRESERVE = 0x00000002L; +const D3DCREATE_MULTITHREADED = 0x00000004L; + +const D3DCREATE_PUREDEVICE = 0x00000010L; +const D3DCREATE_SOFTWARE_VERTEXPROCESSING = 0x00000020L; +const D3DCREATE_HARDWARE_VERTEXPROCESSING = 0x00000040L; +const D3DCREATE_MIXED_VERTEXPROCESSING = 0x00000080L; + +const D3DCREATE_DISABLE_DRIVER_MANAGEMENT = 0x00000100L; +const D3DCREATE_ADAPTERGROUP_DEVICE = 0x00000200L; +const D3DCREATE_DISABLE_DRIVER_MANAGEMENT_EX = 0x00000400L; + +// This flag causes the D3D runtime not to alter the focus +// window in any way. Use with caution- the burden of supporting +// focus management events (alt-tab, etc.) falls on the +// application, and appropriate responses (switching display +// mode, etc.) should be coded. +const D3DCREATE_NOWINDOWCHANGES = 0x00000800L; + +// Disable multithreading for software vertex processing +const D3DCREATE_DISABLE_PSGP_THREADING = 0x00002000L; +// This flag enables present statistics on device. +const D3DCREATE_ENABLE_PRESENTSTATS = 0x00004000L; +// This flag disables printscreen support in the runtime for this device +const D3DCREATE_DISABLE_PRINTSCREEN = 0x00008000L; + +const D3DCREATE_SCREENSAVER = 0x10000000L; + + +/**************************************************************************** + * + * Parameter for IDirect3D9::CreateDevice's Adapter argument + * + ****************************************************************************/ + +const D3DADAPTER_DEFAULT = 0; + +/**************************************************************************** + * + * Flags for IDirect3D9::EnumAdapters + * + ****************************************************************************/ + +/* + * The D3DENUM_WHQL_LEVEL value has been retired for 9Ex and future versions, + * but it needs to be defined here for compatibility with DX9 and earlier versions. + * See the DirectX SDK for sample code on discovering driver signatures. + */ +const D3DENUM_WHQL_LEVEL = 0x00000002L; + +/* NO_DRIVERVERSION will not fill out the DriverVersion field, nor will the + DriverVersion be incorporated into the DeviceIdentifier GUID. WINNT only */ +const D3DENUM_NO_DRIVERVERSION = 0x00000004L; + + +/**************************************************************************** + * + * Maximum number of back-buffers supported in DX9 + * + ****************************************************************************/ + +const D3DPRESENT_BACK_BUFFERS_MAX = 3L; + +/**************************************************************************** + * + * Maximum number of back-buffers supported when apps use CreateDeviceEx + * + ****************************************************************************/ +const D3DPRESENT_BACK_BUFFERS_MAX_EX = 30L; + +/**************************************************************************** + * + * Flags for IDirect3DDevice9::SetGammaRamp + * + ****************************************************************************/ + +const D3DSGR_NO_CALIBRATION = 0x00000000L; +const D3DSGR_CALIBRATE = 0x00000001L; + +/**************************************************************************** + * + * Flags for IDirect3DDevice9::SetCursorPosition + * + ****************************************************************************/ + +const D3DCURSOR_IMMEDIATE_UPDATE = 0x00000001L; + +/**************************************************************************** + * + * Flags for IDirect3DSwapChain9::Present + * + ****************************************************************************/ + +const D3DPRESENT_DONOTWAIT = 0x00000001L; +const D3DPRESENT_LINEAR_CONTENT = 0x00000002L; +const D3DPRESENT_DONOTFLIP = 0x00000004L; +const D3DPRESENT_FLIPRESTART = 0x00000008L; +const D3DPRESENT_VIDEO_RESTRICT_TO_MONITOR = 0x00000010L; + +/**************************************************************************** + * + * Flags for DrawPrimitive/DrawIndexedPrimitive + * Also valid for Begin/BeginIndexed + * Also valid for VertexBuffer::CreateVertexBuffer + ****************************************************************************/ + + +/* + * DirectDraw error codes + */ +const _FACD3D = 0x876; +HRESULT MAKE_D3DHRESULT(T)(T code) { return MAKE_HRESULT( 1, _FACD3D, code ); } +HRESULT MAKE_D3DSTATUS(T)(T code) { return MAKE_HRESULT( 0, _FACD3D, code ); } + +/* + * Direct3D Errors + */ +const HRESULT D3D_OK = S_OK; + +const HRESULT D3DERR_WRONGTEXTUREFORMAT = MAKE_D3DHRESULT(2072); +const HRESULT D3DERR_UNSUPPORTEDCOLOROPERATION = MAKE_D3DHRESULT(2073); +const HRESULT D3DERR_UNSUPPORTEDCOLORARG = MAKE_D3DHRESULT(2074); +const HRESULT D3DERR_UNSUPPORTEDALPHAOPERATION = MAKE_D3DHRESULT(2075); +const HRESULT D3DERR_UNSUPPORTEDALPHAARG = MAKE_D3DHRESULT(2076); +const HRESULT D3DERR_TOOMANYOPERATIONS = MAKE_D3DHRESULT(2077); +const HRESULT D3DERR_CONFLICTINGTEXTUREFILTER = MAKE_D3DHRESULT(2078); +const HRESULT D3DERR_UNSUPPORTEDFACTORVALUE = MAKE_D3DHRESULT(2079); +const HRESULT D3DERR_CONFLICTINGRENDERSTATE = MAKE_D3DHRESULT(2081); +const HRESULT D3DERR_UNSUPPORTEDTEXTUREFILTER = MAKE_D3DHRESULT(2082); +const HRESULT D3DERR_CONFLICTINGTEXTUREPALETTE = MAKE_D3DHRESULT(2086); +const HRESULT D3DERR_DRIVERINTERNALERROR = MAKE_D3DHRESULT(2087); + +const HRESULT D3DERR_NOTFOUND = MAKE_D3DHRESULT(2150); +const HRESULT D3DERR_MOREDATA = MAKE_D3DHRESULT(2151); +const HRESULT D3DERR_DEVICELOST = MAKE_D3DHRESULT(2152); +const HRESULT D3DERR_DEVICENOTRESET = MAKE_D3DHRESULT(2153); +const HRESULT D3DERR_NOTAVAILABLE = MAKE_D3DHRESULT(2154); +const HRESULT D3DERR_OUTOFVIDEOMEMORY = MAKE_D3DHRESULT(380); +const HRESULT D3DERR_INVALIDDEVICE = MAKE_D3DHRESULT(2155); +const HRESULT D3DERR_INVALIDCALL = MAKE_D3DHRESULT(2156); +const HRESULT D3DERR_DRIVERINVALIDCALL = MAKE_D3DHRESULT(2157); +const HRESULT D3DERR_WASSTILLDRAWING = MAKE_D3DHRESULT(540); +const HRESULT D3DOK_NOAUTOGEN = MAKE_D3DSTATUS(2159); +const HRESULT D3DERR_DEVICEREMOVED = MAKE_D3DHRESULT(2160); +const HRESULT S_NOT_RESIDENT = MAKE_D3DSTATUS(2165); +const HRESULT S_RESIDENT_IN_SHARED_MEMORY = MAKE_D3DSTATUS(2166); +const HRESULT S_PRESENT_MODE_CHANGED = MAKE_D3DSTATUS(2167); +const HRESULT S_PRESENT_OCCLUDED = MAKE_D3DSTATUS(2168); +const HRESULT D3DERR_DEVICEHUNG = MAKE_D3DHRESULT(2164); + + +/********************* +/* D3D9Ex interfaces +/*********************/ + +extern (Windows) HRESULT Direct3DCreate9Ex(UINT SDKVersion, LPDIRECT3D9EX*); + +interface LPDIRECT3D9EX : public LPDIRECT3D9 +{ + UINT GetAdapterModeCountEx(UINT Adapter, D3DDISPLAYMODEFILTER* pFilter ); + HRESULT EnumAdapterModesEx( UINT Adapter, D3DDISPLAYMODEFILTER* pFilter,UINT Mode,D3DDISPLAYMODEEX* pMode); + HRESULT GetAdapterDisplayModeEx( UINT Adapter,D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation); + HRESULT CreateDeviceEx( UINT Adapter,D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3DPRESENT_PARAMETERS* pPresentationParameters,D3DDISPLAYMODEEX* pFullscreenDisplayMode,LPDIRECT3DDEVICE9EX* ppReturnedDeviceInterface); + HRESULT GetAdapterLUID( UINT Adapter,LUID * pLUID); +} + +alias LPDIRECT3D9EX IDirect3D9Ex; + +interface LPDIRECT3DDEVICE9EX : public LPDIRECT3DDEVICE9 +{ + HRESULT SetConvolutionMonoKernel( UINT width,UINT height,float* rows,float* columns); + HRESULT ComposeRects( LPDIRECT3DSURFACE9 pSrc,LPDIRECT3DSURFACE9 pDst,LPDIRECT3DVERTEXBUFFER9 pSrcRectDescs,UINT NumRects,LPDIRECT3DVERTEXBUFFER9 pDstRectDescs,D3DCOMPOSERECTSOP Operation,int Xoffset,int Yoffset); + HRESULT PresentEx( RECT* pSourceRect, RECT* pDestRect,HWND hDestWindowOverride, RGNDATA* pDirtyRegion,DWORD dwFlags); + HRESULT GetGPUThreadPriority( INT* pPriority); + HRESULT SetGPUThreadPriority( INT Priority); + HRESULT WaitForVBlank( UINT iSwapChain); + HRESULT CheckResourceResidency( LPDIRECT3DRESOURCE9* pResourceArray,UINT32 NumResources); + HRESULT SetMaximumFrameLatency( UINT MaxLatency); + HRESULT GetMaximumFrameLatency( UINT* pMaxLatency); + HRESULT CheckDeviceState( HWND hDestinationWindow); + HRESULT CreateRenderTargetEx( UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Lockable,LPDIRECT3DSURFACE9* ppSurface,HANDLE* pSharedHandle,DWORD Usage); + HRESULT CreateOffscreenPlainSurfaceEx( UINT Width,UINT Height,D3DFORMAT Format,D3DPOOL Pool,LPDIRECT3DSURFACE9* ppSurface,HANDLE* pSharedHandle,DWORD Usage); + HRESULT CreateDepthStencilSurfaceEx( UINT Width,UINT Height,D3DFORMAT Format,D3DMULTISAMPLE_TYPE MultiSample,DWORD MultisampleQuality,BOOL Discard,LPDIRECT3DSURFACE9* ppSurface,HANDLE* pSharedHandle,DWORD Usage); + HRESULT ResetEx( D3DPRESENT_PARAMETERS* pPresentationParameters,D3DDISPLAYMODEEX *pFullscreenDisplayMode); + HRESULT GetDisplayModeEx( UINT iSwapChain,D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation); +} + +alias LPDIRECT3DDEVICE9EX IDirect3DDevice9Ex; + +interface LPDIRECT3DSWAPCHAIN9EX : public LPDIRECT3DSWAPCHAIN9 +{ + HRESULT GetLastPresentCount( UINT* pLastPresentCount); + HRESULT GetPresentStats( D3DPRESENTSTATS* pPresentationStatistics); + HRESULT GetDisplayModeEx( D3DDISPLAYMODEEX* pMode,D3DDISPLAYROTATION* pRotation); +} + +alias LPDIRECT3DSWAPCHAIN9EX IDirect3DSwapChain9Ex; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3d9.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3d9.def Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,2 @@ +IMPORTS +_Direct3DCreate9@4 = d3d9.Direct3DCreate9 \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3d9caps.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3d9caps.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,472 @@ +/*==========================================================================; + * + * Copyright (C) Microsoft Corporation. All Rights Reserved. + * + * File: d3d9caps.h + * Content: Direct3D capabilities include file + * + ***************************************************************************/ + +module win32.directx.d3d9caps; + +private import win32.windows, + win32.directx.d3d9types; + +align(4): + +struct D3DVSHADERCAPS2_0 +{ + DWORD Caps; + INT DynamicFlowControlDepth; + INT NumTemps; + INT StaticFlowControlDepth; +} + +const D3DVS20CAPS_PREDICATION = (1<<0); + +const D3DVS20_MAX_DYNAMICFLOWCONTROLDEPTH = 24; +const D3DVS20_MIN_DYNAMICFLOWCONTROLDEPTH = 0; +const D3DVS20_MAX_NUMTEMPS = 32; +const D3DVS20_MIN_NUMTEMPS = 12; +const D3DVS20_MAX_STATICFLOWCONTROLDEPTH = 4; +const D3DVS20_MIN_STATICFLOWCONTROLDEPTH = 1; + +struct D3DPSHADERCAPS2_0 +{ + DWORD Caps; + INT DynamicFlowControlDepth; + INT NumTemps; + INT StaticFlowControlDepth; + INT NumInstructionSlots; +} + +const D3DPS20CAPS_ARBITRARYSWIZZLE = (1<<0); +const D3DPS20CAPS_GRADIENTINSTRUCTIONS = (1<<1); +const D3DPS20CAPS_PREDICATION = (1<<2); +const D3DPS20CAPS_NODEPENDENTREADLIMIT = (1<<3); +const D3DPS20CAPS_NOTEXINSTRUCTIONLIMIT = (1<<4); + +const D3DPS20_MAX_DYNAMICFLOWCONTROLDEPTH = 24; +const D3DPS20_MIN_DYNAMICFLOWCONTROLDEPTH = 0; +const D3DPS20_MAX_NUMTEMPS = 32; +const D3DPS20_MIN_NUMTEMPS = 12; +const D3DPS20_MAX_STATICFLOWCONTROLDEPTH = 4; +const D3DPS20_MIN_STATICFLOWCONTROLDEPTH = 0; +const D3DPS20_MAX_NUMINSTRUCTIONSLOTS = 512; +const D3DPS20_MIN_NUMINSTRUCTIONSLOTS = 96; + +const D3DMIN30SHADERINSTRUCTIONS = 512; +const D3DMAX30SHADERINSTRUCTIONS = 32768; + +struct D3DCAPS9 +{ + /* Device Info */ + D3DDEVTYPE DeviceType; + UINT AdapterOrdinal; + + /* Caps from DX7 Draw */ + DWORD Caps; + DWORD Caps2; + DWORD Caps3; + DWORD PresentationIntervals; + + /* Cursor Caps */ + DWORD CursorCaps; + + /* 3D Device Caps */ + DWORD DevCaps; + + DWORD PrimitiveMiscCaps; + DWORD RasterCaps; + DWORD ZCmpCaps; + DWORD SrcBlendCaps; + DWORD DestBlendCaps; + DWORD AlphaCmpCaps; + DWORD ShadeCaps; + DWORD TextureCaps; + DWORD TextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture9's + DWORD CubeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DCubeTexture9's + DWORD VolumeTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DVolumeTexture9's + DWORD TextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DTexture9's + DWORD VolumeTextureAddressCaps; // D3DPTADDRESSCAPS for IDirect3DVolumeTexture9's + + DWORD LineCaps; // D3DLINECAPS + + DWORD MaxTextureWidth, MaxTextureHeight; + DWORD MaxVolumeExtent; + + DWORD MaxTextureRepeat; + DWORD MaxTextureAspectRatio; + DWORD MaxAnisotropy; + float MaxVertexW; + + float GuardBandLeft; + float GuardBandTop; + float GuardBandRight; + float GuardBandBottom; + + float ExtentsAdjust; + DWORD StencilCaps; + + DWORD FVFCaps; + DWORD TextureOpCaps; + DWORD MaxTextureBlendStages; + DWORD MaxSimultaneousTextures; + + DWORD VertexProcessingCaps; + DWORD MaxActiveLights; + DWORD MaxUserClipPlanes; + DWORD MaxVertexBlendMatrices; + DWORD MaxVertexBlendMatrixIndex; + + float MaxPointSize; + + DWORD MaxPrimitiveCount; // max number of primitives per DrawPrimitive call + DWORD MaxVertexIndex; + DWORD MaxStreams; + DWORD MaxStreamStride; // max stride for SetStreamSource + + DWORD VertexShaderVersion; + DWORD MaxVertexShaderConst; // number of vertex shader constant registers + + DWORD PixelShaderVersion; + float PixelShader1xMaxValue; // max value storable in registers of ps.1.x shaders + + // Here are the DX9 specific ones + DWORD DevCaps2; + + float MaxNpatchTessellationLevel; + DWORD Reserved5; + + UINT MasterAdapterOrdinal; // ordinal of master adaptor for adapter group + UINT AdapterOrdinalInGroup; // ordinal inside the adapter group + UINT NumberOfAdaptersInGroup; // number of adapters in this adapter group (only if master) + DWORD DeclTypes; // Data types, supported in vertex declarations + DWORD NumSimultaneousRTs; // Will be at least 1 + DWORD StretchRectFilterCaps; // Filter caps supported by StretchRect + D3DVSHADERCAPS2_0 VS20Caps; + D3DPSHADERCAPS2_0 PS20Caps; + DWORD VertexTextureFilterCaps; // D3DPTFILTERCAPS for IDirect3DTexture9's for texture, used in vertex shaders + DWORD MaxVShaderInstructionsExecuted; // maximum number of vertex shader instructions that can be executed + DWORD MaxPShaderInstructionsExecuted; // maximum number of pixel shader instructions that can be executed + DWORD MaxVertexShader30InstructionSlots; + DWORD MaxPixelShader30InstructionSlots; +} + +// +// BIT DEFINES FOR D3DCAPS9 DWORD MEMBERS +// + +// +// Caps +// +const D3DCAPS_READ_SCANLINE = 0x00020000L; + +// +// Caps2 +// +const D3DCAPS2_FULLSCREENGAMMA = 0x00020000L; +const D3DCAPS2_CANCALIBRATEGAMMA = 0x00100000L; +const D3DCAPS2_RESERVED = 0x02000000L; +const D3DCAPS2_CANMANAGERESOURCE = 0x10000000L; +const D3DCAPS2_DYNAMICTEXTURES = 0x20000000L; +const D3DCAPS2_CANAUTOGENMIPMAP = 0x40000000L; + +const D3DCAPS2_CANSHARERESOURCE = 0x80000000L; + +// +// Caps3 +// +const D3DCAPS3_RESERVED = 0x8000001fL; + +// Indicates that the device can respect the ALPHABLENDENABLE render state +// when fullscreen while using the FLIP or DISCARD swap effect. +// COPY and COPYVSYNC swap effects work whether or not this flag is set. +const D3DCAPS3_ALPHA_FULLSCREEN_FLIP_OR_DISCARD = 0x00000020L; + +// Indicates that the device can perform a gamma correction from +// a windowed back buffer containing linear content to the sRGB desktop. +const D3DCAPS3_LINEAR_TO_SRGB_PRESENTATION = 0x00000080L; + +const D3DCAPS3_COPY_TO_VIDMEM = 0x00000100L; /* Device can acclerate copies from sysmem to local vidmem */ +const D3DCAPS3_COPY_TO_SYSTEMMEM = 0x00000200L; /* Device can acclerate copies from local vidmem to sysmem */ + + +// +// PresentationIntervals +// +const D3DPRESENT_INTERVAL_DEFAULT = 0x00000000L; +const D3DPRESENT_INTERVAL_ONE = 0x00000001L; +const D3DPRESENT_INTERVAL_TWO = 0x00000002L; +const D3DPRESENT_INTERVAL_THREE = 0x00000004L; +const D3DPRESENT_INTERVAL_FOUR = 0x00000008L; +const D3DPRESENT_INTERVAL_IMMEDIATE = 0x80000000L; + +// +// CursorCaps +// +// Driver supports HW color cursor in at least hi-res modes(height >=400) +const D3DCURSORCAPS_COLOR = 0x00000001L; +// Driver supports HW cursor also in low-res modes(height < 400) +const D3DCURSORCAPS_LOWRES = 0x00000002L; + +// +// DevCaps +// +const D3DDEVCAPS_EXECUTESYSTEMMEMORY = 0x00000010L; /* Device can use execute buffers from system memory */ +const D3DDEVCAPS_EXECUTEVIDEOMEMORY = 0x00000020L; /* Device can use execute buffers from video memory */ +const D3DDEVCAPS_TLVERTEXSYSTEMMEMORY = 0x00000040L; /* Device can use TL buffers from system memory */ +const D3DDEVCAPS_TLVERTEXVIDEOMEMORY = 0x00000080L; /* Device can use TL buffers from video memory */ +const D3DDEVCAPS_TEXTURESYSTEMMEMORY = 0x00000100L; /* Device can texture from system memory */ +const D3DDEVCAPS_TEXTUREVIDEOMEMORY = 0x00000200L; /* Device can texture from device memory */ +const D3DDEVCAPS_DRAWPRIMTLVERTEX = 0x00000400L; /* Device can draw TLVERTEX primitives */ +const D3DDEVCAPS_CANRENDERAFTERFLIP = 0x00000800L; /* Device can render without waiting for flip to complete */ +const D3DDEVCAPS_TEXTURENONLOCALVIDMEM = 0x00001000L; /* Device can texture from nonlocal video memory */ +const D3DDEVCAPS_DRAWPRIMITIVES2 = 0x00002000L; /* Device can support DrawPrimitives2 */ +const D3DDEVCAPS_SEPARATETEXTUREMEMORIES = 0x00004000L; /* Device is texturing from separate memory pools */ +const D3DDEVCAPS_DRAWPRIMITIVES2EX = 0x00008000L; /* Device can support Extended DrawPrimitives2 i.e. DX7 compliant driver*/ +const D3DDEVCAPS_HWTRANSFORMANDLIGHT = 0x00010000L; /* Device can support transformation and lighting in hardware and DRAWPRIMITIVES2EX must be also */ +const D3DDEVCAPS_CANBLTSYSTONONLOCAL = 0x00020000L; /* Device supports a Tex Blt from system memory to non-local vidmem */ +const D3DDEVCAPS_HWRASTERIZATION = 0x00080000L; /* Device has HW acceleration for rasterization */ +const D3DDEVCAPS_PUREDEVICE = 0x00100000L; /* Device supports D3DCREATE_PUREDEVICE */ +const D3DDEVCAPS_QUINTICRTPATCHES = 0x00200000L; /* Device supports quintic Beziers and BSplines */ +const D3DDEVCAPS_RTPATCHES = 0x00400000L; /* Device supports Rect and Tri patches */ +const D3DDEVCAPS_RTPATCHHANDLEZERO = 0x00800000L; /* Indicates that RT Patches may be drawn efficiently using handle 0 */ +const D3DDEVCAPS_NPATCHES = 0x01000000L; /* Device supports N-Patches */ + +// +// PrimitiveMiscCaps +// +const D3DPMISCCAPS_MASKZ = 0x00000002L; +const D3DPMISCCAPS_CULLNONE = 0x00000010L; +const D3DPMISCCAPS_CULLCW = 0x00000020L; +const D3DPMISCCAPS_CULLCCW = 0x00000040L; +const D3DPMISCCAPS_COLORWRITEENABLE = 0x00000080L; +const D3DPMISCCAPS_CLIPPLANESCALEDPOINTS = 0x00000100L; /* Device correctly clips scaled points to clip planes */ +const D3DPMISCCAPS_CLIPTLVERTS = 0x00000200L; /* device will clip post-transformed vertex primitives */ +const D3DPMISCCAPS_TSSARGTEMP = 0x00000400L; /* device supports D3DTA_TEMP for temporary register */ +const D3DPMISCCAPS_BLENDOP = 0x00000800L; /* device supports D3DRS_BLENDOP */ +const D3DPMISCCAPS_NULLREFERENCE = 0x00001000L; /* Reference Device that doesnt render */ +const D3DPMISCCAPS_INDEPENDENTWRITEMASKS = 0x00004000L; /* Device supports independent write masks for MET or MRT */ +const D3DPMISCCAPS_PERSTAGECONSTANT = 0x00008000L; /* Device supports per-stage constants */ +const D3DPMISCCAPS_FOGANDSPECULARALPHA = 0x00010000L; /* Device supports separate fog and specular alpha (many devices + use the specular alpha channel to store fog factor) */ +const D3DPMISCCAPS_SEPARATEALPHABLEND = 0x00020000L; /* Device supports separate blend settings for the alpha channel */ +const D3DPMISCCAPS_MRTINDEPENDENTBITDEPTHS = 0x00040000L; /* Device supports different bit depths for MRT */ +const D3DPMISCCAPS_MRTPOSTPIXELSHADERBLENDING = 0x00080000L; /* Device supports post-pixel shader operations for MRT */ +const D3DPMISCCAPS_FOGVERTEXCLAMPED = 0x00100000L; /* Device clamps fog blend factor per vertex */ + +const D3DPMISCCAPS_POSTBLENDSRGBCONVERT = 0x00200000L; /* Indicates device can perform conversion to sRGB after blending. */ + +// +// LineCaps +// +const D3DLINECAPS_TEXTURE = 0x00000001L; +const D3DLINECAPS_ZTEST = 0x00000002L; +const D3DLINECAPS_BLEND = 0x00000004L; +const D3DLINECAPS_ALPHACMP = 0x00000008L; +const D3DLINECAPS_FOG = 0x00000010L; +const D3DLINECAPS_ANTIALIAS = 0x00000020L; + +// +// RasterCaps +// +const D3DPRASTERCAPS_DITHER = 0x00000001L; +const D3DPRASTERCAPS_ZTEST = 0x00000010L; +const D3DPRASTERCAPS_FOGVERTEX = 0x00000080L; +const D3DPRASTERCAPS_FOGTABLE = 0x00000100L; +const D3DPRASTERCAPS_MIPMAPLODBIAS = 0x00002000L; +const D3DPRASTERCAPS_ZBUFFERLESSHSR = 0x00008000L; +const D3DPRASTERCAPS_FOGRANGE = 0x00010000L; +const D3DPRASTERCAPS_ANISOTROPY = 0x00020000L; +const D3DPRASTERCAPS_WBUFFER = 0x00040000L; +const D3DPRASTERCAPS_WFOG = 0x00100000L; +const D3DPRASTERCAPS_ZFOG = 0x00200000L; +const D3DPRASTERCAPS_COLORPERSPECTIVE = 0x00400000L; /* Device iterates colors perspective correct */ +const D3DPRASTERCAPS_SCISSORTEST = 0x01000000L; +const D3DPRASTERCAPS_SLOPESCALEDEPTHBIAS = 0x02000000L; +const D3DPRASTERCAPS_DEPTHBIAS = 0x04000000L; +const D3DPRASTERCAPS_MULTISAMPLE_TOGGLE = 0x08000000L; + +// +// ZCmpCaps, AlphaCmpCaps +// +const D3DPCMPCAPS_NEVER = 0x00000001L; +const D3DPCMPCAPS_LESS = 0x00000002L; +const D3DPCMPCAPS_EQUAL = 0x00000004L; +const D3DPCMPCAPS_LESSEQUAL = 0x00000008L; +const D3DPCMPCAPS_GREATER = 0x00000010L; +const D3DPCMPCAPS_NOTEQUAL = 0x00000020L; +const D3DPCMPCAPS_GREATEREQUAL = 0x00000040L; +const D3DPCMPCAPS_ALWAYS = 0x00000080L; + +// +// SourceBlendCaps, DestBlendCaps +// +const D3DPBLENDCAPS_ZERO = 0x00000001L; +const D3DPBLENDCAPS_ONE = 0x00000002L; +const D3DPBLENDCAPS_SRCCOLOR = 0x00000004L; +const D3DPBLENDCAPS_INVSRCCOLOR = 0x00000008L; +const D3DPBLENDCAPS_SRCALPHA = 0x00000010L; +const D3DPBLENDCAPS_INVSRCALPHA = 0x00000020L; +const D3DPBLENDCAPS_DESTALPHA = 0x00000040L; +const D3DPBLENDCAPS_INVDESTALPHA = 0x00000080L; +const D3DPBLENDCAPS_DESTCOLOR = 0x00000100L; +const D3DPBLENDCAPS_INVDESTCOLOR = 0x00000200L; +const D3DPBLENDCAPS_SRCALPHASAT = 0x00000400L; +const D3DPBLENDCAPS_BOTHSRCALPHA = 0x00000800L; +const D3DPBLENDCAPS_BOTHINVSRCALPHA = 0x00001000L; +const D3DPBLENDCAPS_BLENDFACTOR = 0x00002000L; /* Supports both D3DBLEND_BLENDFACTOR and D3DBLEND_INVBLENDFACTOR */ + +const D3DPBLENDCAPS_SRCCOLOR2 = 0x00004000L; +const D3DPBLENDCAPS_INVSRCCOLOR2 = 0x00008000L; + +// +// ShadeCaps +// +const D3DPSHADECAPS_COLORGOURAUDRGB = 0x00000008L; +const D3DPSHADECAPS_SPECULARGOURAUDRGB = 0x00000200L; +const D3DPSHADECAPS_ALPHAGOURAUDBLEND = 0x00004000L; +const D3DPSHADECAPS_FOGGOURAUD = 0x00080000L; + +// +// TextureCaps +// +const D3DPTEXTURECAPS_PERSPECTIVE = 0x00000001L; /* Perspective-correct texturing is supported */ +const D3DPTEXTURECAPS_POW2 = 0x00000002L; /* Power-of-2 texture dimensions are required - applies to non-Cube/Volume textures only. */ +const D3DPTEXTURECAPS_ALPHA = 0x00000004L; /* Alpha in texture pixels is supported */ +const D3DPTEXTURECAPS_SQUAREONLY = 0x00000020L; /* Only square textures are supported */ +const D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE = 0x00000040L; /* Texture indices are not scaled by the texture size prior to interpolation */ +const D3DPTEXTURECAPS_ALPHAPALETTE = 0x00000080L; /* Device can draw alpha from texture palettes */ +// Device can use non-POW2 textures if: +// 1) D3DTEXTURE_ADDRESS is set to CLAMP for this texture's stage +// 2) D3DRS_WRAP(N) is zero for this texture's coordinates +// 3) mip mapping is not enabled (use magnification filter only) +const D3DPTEXTURECAPS_NONPOW2CONDITIONAL = 0x00000100L; +const D3DPTEXTURECAPS_PROJECTED = 0x00000400L; /* Device can do D3DTTFF_PROJECTED */ +const D3DPTEXTURECAPS_CUBEMAP = 0x00000800L; /* Device can do cubemap textures */ +const D3DPTEXTURECAPS_VOLUMEMAP = 0x00002000L; /* Device can do volume textures */ +const D3DPTEXTURECAPS_MIPMAP = 0x00004000L; /* Device can do mipmapped textures */ +const D3DPTEXTURECAPS_MIPVOLUMEMAP = 0x00008000L; /* Device can do mipmapped volume textures */ +const D3DPTEXTURECAPS_MIPCUBEMAP = 0x00010000L; /* Device can do mipmapped cube maps */ +const D3DPTEXTURECAPS_CUBEMAP_POW2 = 0x00020000L; /* Device requires that cubemaps be power-of-2 dimension */ +const D3DPTEXTURECAPS_VOLUMEMAP_POW2 = 0x00040000L; /* Device requires that volume maps be power-of-2 dimension */ +const D3DPTEXTURECAPS_NOPROJECTEDBUMPENV = 0x00200000L; /* Device does not support projected bump env lookup operation + in programmable and fixed function pixel shaders */ + +// +// TextureFilterCaps, StretchRectFilterCaps +// +const D3DPTFILTERCAPS_MINFPOINT = 0x00000100L; /* Min Filter */ +const D3DPTFILTERCAPS_MINFLINEAR = 0x00000200L; +const D3DPTFILTERCAPS_MINFANISOTROPIC = 0x00000400L; +const D3DPTFILTERCAPS_MINFPYRAMIDALQUAD = 0x00000800L; +const D3DPTFILTERCAPS_MINFGAUSSIANQUAD = 0x00001000L; +const D3DPTFILTERCAPS_MIPFPOINT = 0x00010000L; /* Mip Filter */ +const D3DPTFILTERCAPS_MIPFLINEAR = 0x00020000L; + +const D3DPTFILTERCAPS_CONVOLUTIONMONO = 0x00040000L; /* Min and Mag for the convolution mono filter */ + +const D3DPTFILTERCAPS_MAGFPOINT = 0x01000000L; /* Mag Filter */ +const D3DPTFILTERCAPS_MAGFLINEAR = 0x02000000L; +const D3DPTFILTERCAPS_MAGFANISOTROPIC = 0x04000000L; +const D3DPTFILTERCAPS_MAGFPYRAMIDALQUAD = 0x08000000L; +const D3DPTFILTERCAPS_MAGFGAUSSIANQUAD = 0x10000000L; + +// +// TextureAddressCaps +// +const D3DPTADDRESSCAPS_WRAP = 0x00000001L; +const D3DPTADDRESSCAPS_MIRROR = 0x00000002L; +const D3DPTADDRESSCAPS_CLAMP = 0x00000004L; +const D3DPTADDRESSCAPS_BORDER = 0x00000008L; +const D3DPTADDRESSCAPS_INDEPENDENTUV = 0x00000010L; +const D3DPTADDRESSCAPS_MIRRORONCE = 0x00000020L; + +// +// StencilCaps +// +const D3DSTENCILCAPS_KEEP = 0x00000001L; +const D3DSTENCILCAPS_ZERO = 0x00000002L; +const D3DSTENCILCAPS_REPLACE = 0x00000004L; +const D3DSTENCILCAPS_INCRSAT = 0x00000008L; +const D3DSTENCILCAPS_DECRSAT = 0x00000010L; +const D3DSTENCILCAPS_INVERT = 0x00000020L; +const D3DSTENCILCAPS_INCR = 0x00000040L; +const D3DSTENCILCAPS_DECR = 0x00000080L; +const D3DSTENCILCAPS_TWOSIDED = 0x00000100L; + +// +// TextureOpCaps +// +const D3DTEXOPCAPS_DISABLE = 0x00000001L; +const D3DTEXOPCAPS_SELECTARG1 = 0x00000002L; +const D3DTEXOPCAPS_SELECTARG2 = 0x00000004L; +const D3DTEXOPCAPS_MODULATE = 0x00000008L; +const D3DTEXOPCAPS_MODULATE2X = 0x00000010L; +const D3DTEXOPCAPS_MODULATE4X = 0x00000020L; +const D3DTEXOPCAPS_ADD = 0x00000040L; +const D3DTEXOPCAPS_ADDSIGNED = 0x00000080L; +const D3DTEXOPCAPS_ADDSIGNED2X = 0x00000100L; +const D3DTEXOPCAPS_SUBTRACT = 0x00000200L; +const D3DTEXOPCAPS_ADDSMOOTH = 0x00000400L; +const D3DTEXOPCAPS_BLENDDIFFUSEALPHA = 0x00000800L; +const D3DTEXOPCAPS_BLENDTEXTUREALPHA = 0x00001000L; +const D3DTEXOPCAPS_BLENDFACTORALPHA = 0x00002000L; +const D3DTEXOPCAPS_BLENDTEXTUREALPHAPM = 0x00004000L; +const D3DTEXOPCAPS_BLENDCURRENTALPHA = 0x00008000L; +const D3DTEXOPCAPS_PREMODULATE = 0x00010000L; +const D3DTEXOPCAPS_MODULATEALPHA_ADDCOLOR = 0x00020000L; +const D3DTEXOPCAPS_MODULATECOLOR_ADDALPHA = 0x00040000L; +const D3DTEXOPCAPS_MODULATEINVALPHA_ADDCOLOR = 0x00080000L; +const D3DTEXOPCAPS_MODULATEINVCOLOR_ADDALPHA = 0x00100000L; +const D3DTEXOPCAPS_BUMPENVMAP = 0x00200000L; +const D3DTEXOPCAPS_BUMPENVMAPLUMINANCE = 0x00400000L; +const D3DTEXOPCAPS_DOTPRODUCT3 = 0x00800000L; +const D3DTEXOPCAPS_MULTIPLYADD = 0x01000000L; +const D3DTEXOPCAPS_LERP = 0x02000000L; + +// +// FVFCaps +// +const D3DFVFCAPS_TEXCOORDCOUNTMASK = 0x0000ffffL; /* mask for texture coordinate count field */ +const D3DFVFCAPS_DONOTSTRIPELEMENTS = 0x00080000L; /* Device prefers that vertex elements not be stripped */ +const D3DFVFCAPS_PSIZE = 0x00100000L; /* Device can receive point size */ + +// +// VertexProcessingCaps +// +const D3DVTXPCAPS_TEXGEN = 0x00000001L; /* device can do texgen */ +const D3DVTXPCAPS_MATERIALSOURCE7 = 0x00000002L; /* device can do DX7-level colormaterialsource ops */ +const D3DVTXPCAPS_DIRECTIONALLIGHTS = 0x00000008L; /* device can do directional lights */ +const D3DVTXPCAPS_POSITIONALLIGHTS = 0x00000010L; /* device can do positional lights (includes point and spot) */ +const D3DVTXPCAPS_LOCALVIEWER = 0x00000020L; /* device can do local viewer */ +const D3DVTXPCAPS_TWEENING = 0x00000040L; /* device can do vertex tweening */ +const D3DVTXPCAPS_TEXGEN_SPHEREMAP = 0x00000100L; /* device supports D3DTSS_TCI_SPHEREMAP */ +const D3DVTXPCAPS_NO_TEXGEN_NONLOCALVIEWER = 0x00000200L; /* device does not support TexGen in non-local + viewer mode */ + +// +// DevCaps2 +// +const D3DDEVCAPS2_STREAMOFFSET = 0x00000001L; /* Device supports offsets in streams. Must be set by DX9 drivers */ +const D3DDEVCAPS2_DMAPNPATCH = 0x00000002L; /* Device supports displacement maps for N-Patches*/ +const D3DDEVCAPS2_ADAPTIVETESSRTPATCH = 0x00000004L; /* Device supports adaptive tesselation of RT-patches*/ +const D3DDEVCAPS2_ADAPTIVETESSNPATCH = 0x00000008L; /* Device supports adaptive tesselation of N-patches*/ +const D3DDEVCAPS2_CAN_STRETCHRECT_FROM_TEXTURES = 0x00000010L; /* Device supports StretchRect calls with a texture as the source*/ +const D3DDEVCAPS2_PRESAMPLEDDMAPNPATCH = 0x00000020L; /* Device supports presampled displacement maps for N-Patches */ +const D3DDEVCAPS2_VERTEXELEMENTSCANSHARESTREAMOFFSET = 0x00000040L; /* Vertex elements in a vertex declaration can share the same stream offset */ + +// +// DeclTypes +// +const D3DDTCAPS_UBYTE4 = 0x00000001L; +const D3DDTCAPS_UBYTE4N = 0x00000002L; +const D3DDTCAPS_SHORT2N = 0x00000004L; +const D3DDTCAPS_SHORT4N = 0x00000008L; +const D3DDTCAPS_USHORT2N = 0x00000010L; +const D3DDTCAPS_USHORT4N = 0x00000020L; +const D3DDTCAPS_UDEC3 = 0x00000040L; +const D3DDTCAPS_DEC3N = 0x00000080L; +const D3DDTCAPS_FLOAT16_2 = 0x00000100L; +const D3DDTCAPS_FLOAT16_4 = 0x00000200L; \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3d9types.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3d9types.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1846 @@ +/*==========================================================================; + * + * Copyright (C) Microsoft Corporation. All Rights Reserved. + * + * File: d3d9types.h + * Content: Direct3D capabilities include file + * + ***************************************************************************/ + +module win32.directx.d3d9types; + +private import win32.windows; + +// Alignment compatibility +align(4): + +// D3DCOLOR is equivalent to D3DFMT_A8R8G8B8 +typedef uint D3DCOLOR; + +// maps unsigned 8 bits/channel to D3DCOLOR +D3DCOLOR D3DCOLOR_ARGB(ubyte a,ubyte r,ubyte g,ubyte b) { return cast(D3DCOLOR)((a<<24)|(r<<16)|(g<<8)|b); } +D3DCOLOR D3DCOLOR_RGBA(ubyte r,ubyte g,ubyte b,ubyte a) { return D3DCOLOR_ARGB(a,r,g,b); } +D3DCOLOR D3DCOLOR_XRGB(ubyte r,ubyte g,ubyte b) { return D3DCOLOR_ARGB(0xff,r,g,b); } + +D3DCOLOR D3DCOLOR_XYUV(ubyte y, ubyte u, ubyte v) { return D3DCOLOR_ARGB(0xff,y,u,v); } +D3DCOLOR D3DCOLOR_AYUV( ubyte a, ubyte y, ubyte u, ubyte v) { return D3DCOLOR_ARGB(a,y,u,v); } + +// maps floating point channels (0.f to 1.f range) to D3DCOLOR +D3DCOLOR D3DCOLOR_COLORVALUE(float r, float g, float b, float a) { return D3DCOLOR_RGBA(cast(ubyte)(r*255.0f),cast(ubyte)(g*255.0f),cast(ubyte)(b*255.0f),cast(ubyte)(a*255.0f)); } + +struct D3DVECTOR { + float x; + float y; + float z; +} + +struct D3DCOLORVALUE { + float r; + float g; + float b; + float a; +} + +struct D3DRECT { + LONG x1; + LONG y1; + LONG x2; + LONG y2; +} + +struct D3DMATRIX { + union { + struct { + float _11, _12, _13, _14; + float _21, _22, _23, _24; + float _31, _32, _33, _34; + float _41, _42, _43, _44; + } + float[4][4] m; + } +} + +struct D3DVIEWPORT9 { + uint X; + uint Y; /* Viewport Top left */ + uint Width; + uint Height; /* Viewport Dimensions */ + float MinZ; /* Min/max of clip Volume */ + float MaxZ; +} + +/* + * Values for clip fields. + */ + +// Max number of user clipping planes, supported in D3D. +const D3DMAXUSERCLIPPLANES = 32; + +// These bits could be ORed together to use with D3DRS_CLIPPLANEENABLE +// +const D3DCLIPPLANE0 = (1<<0); +const D3DCLIPPLANE1 = (1<<1); +const D3DCLIPPLANE2 = (1<<2); +const D3DCLIPPLANE3 = (1<<3); +const D3DCLIPPLANE4 = (1<<4); +const D3DCLIPPLANE5 = (1<<5); + +// The following bits are used in the ClipUnion and ClipIntersection +// members of the D3DCLIPSTATUS9 +// + +const D3DCS_LEFT = 0x00000001L; +const D3DCS_RIGHT = 0x00000002L; +const D3DCS_TOP = 0x00000004L; +const D3DCS_BOTTOM = 0x00000008L; +const D3DCS_FRONT = 0x00000010L; +const D3DCS_BACK = 0x00000020L; +const D3DCS_PLANE0 = 0x00000040L; +const D3DCS_PLANE1 = 0x00000080L; +const D3DCS_PLANE2 = 0x00000100L; +const D3DCS_PLANE3 = 0x00000200L; +const D3DCS_PLANE4 = 0x00000400L; +const D3DCS_PLANE5 = 0x00000800L; + +const D3DCS_ALL = D3DCS_LEFT | + D3DCS_RIGHT | + D3DCS_TOP | + D3DCS_BOTTOM | + D3DCS_FRONT | + D3DCS_BACK | + D3DCS_PLANE0 | + D3DCS_PLANE1 | + D3DCS_PLANE2 | + D3DCS_PLANE3 | + D3DCS_PLANE4 | + D3DCS_PLANE5; + +struct D3DCLIPSTATUS9 { + uint ClipUnion; + uint ClipIntersection; +} + +struct D3DMATERIAL9 { + D3DCOLORVALUE Diffuse; /* Diffuse color RGBA */ + D3DCOLORVALUE Ambient; /* Ambient color RGB */ + D3DCOLORVALUE Specular; /* Specular 'shininess' */ + D3DCOLORVALUE Emissive; /* Emissive color RGB */ + float Power; /* Sharpness if specular highlight */ +} + +enum : uint { + D3DLIGHT_POINT = 1, + D3DLIGHT_SPOT = 2, + D3DLIGHT_DIRECTIONAL = 3 +} +typedef uint D3DLIGHTTYPE; + +struct D3DLIGHT9 { + D3DLIGHTTYPE Type; /* Type of light source */ + D3DCOLORVALUE Diffuse; /* Diffuse color of light */ + D3DCOLORVALUE Specular; /* Specular color of light */ + D3DCOLORVALUE Ambient; /* Ambient color of light */ + D3DVECTOR Position; /* Position in world space */ + D3DVECTOR Direction; /* Direction in world space */ + float Range; /* Cutoff range */ + float Falloff; /* Falloff */ + float Attenuation0; /* Constant attenuation */ + float Attenuation1; /* Linear attenuation */ + float Attenuation2; /* Quadratic attenuation */ + float Theta; /* Inner angle of spotlight cone */ + float Phi; /* Outer angle of spotlight cone */ +} + +/* + * Options for clearing + */ +const D3DCLEAR_TARGET = 0x00000001L; /* Clear target surface */ +const D3DCLEAR_ZBUFFER = 0x00000002L; /* Clear target z buffer */ +const D3DCLEAR_STENCIL = 0x00000004L; /* Clear stencil planes */ + +/* + * The following defines the rendering states + */ + +enum : D3DSHADEMODE { + D3DSHADE_FLAT = 1, + D3DSHADE_GOURAUD = 2, + D3DSHADE_PHONG = 3 +} +typedef uint D3DSHADEMODE; + +enum : D3DFILLMODE { + D3DFILL_POINT = 1, + D3DFILL_WIREFRAME = 2, + D3DFILL_SOLID = 3 +} +typedef uint D3DFILLMODE; + +enum : D3DBLEND { + D3DBLEND_ZERO = 1, + D3DBLEND_ONE = 2, + D3DBLEND_SRCCOLOR = 3, + D3DBLEND_INVSRCCOLOR = 4, + D3DBLEND_SRCALPHA = 5, + D3DBLEND_INVSRCALPHA = 6, + D3DBLEND_DESTALPHA = 7, + D3DBLEND_INVDESTALPHA = 8, + D3DBLEND_DESTCOLOR = 9, + D3DBLEND_INVDESTCOLOR = 10, + D3DBLEND_SRCALPHASAT = 11, + D3DBLEND_BOTHSRCALPHA = 12, + D3DBLEND_BOTHINVSRCALPHA = 13, + D3DBLEND_BLENDFACTOR = 14, /* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on */ + D3DBLEND_INVBLENDFACTOR = 15, /* Only supported if D3DPBLENDCAPS_BLENDFACTOR is on */ + D3DBLEND_SRCCOLOR2 = 16, + D3DBLEND_INVSRCCOLOR2 = 17 +} +typedef uint D3DBLEND; + +enum : D3DBLENDOP { + D3DBLENDOP_ADD = 1, + D3DBLENDOP_SUBTRACT = 2, + D3DBLENDOP_REVSUBTRACT = 3, + D3DBLENDOP_MIN = 4, + D3DBLENDOP_MAX = 5 +} +typedef uint D3DBLENDOP; + +enum : D3DTEXTUREADDRESS { + D3DTADDRESS_WRAP = 1, + D3DTADDRESS_MIRROR = 2, + D3DTADDRESS_CLAMP = 3, + D3DTADDRESS_BORDER = 4, + D3DTADDRESS_MIRRORONCE = 5 +} +typedef uint D3DTEXTUREADDRESS; + +enum : D3DCULL { + D3DCULL_NONE = 1, + D3DCULL_CW = 2, + D3DCULL_CCW = 3 +} +typedef uint D3DCULL; + +enum : D3DCMPFUNC { + D3DCMP_NEVER = 1, + D3DCMP_LESS = 2, + D3DCMP_EQUAL = 3, + D3DCMP_LESSEQUAL = 4, + D3DCMP_GREATER = 5, + D3DCMP_NOTEQUAL = 6, + D3DCMP_GREATEREQUAL = 7, + D3DCMP_ALWAYS = 8 +} +typedef uint D3DCMPFUNC; + +enum : D3DSTENCILOP { + D3DSTENCILOP_KEEP = 1, + D3DSTENCILOP_ZERO = 2, + D3DSTENCILOP_REPLACE = 3, + D3DSTENCILOP_INCRSAT = 4, + D3DSTENCILOP_DECRSAT = 5, + D3DSTENCILOP_INVERT = 6, + D3DSTENCILOP_INCR = 7, + D3DSTENCILOP_DECR = 8 +} +typedef uint D3DSTENCILOP; + +enum : D3DFOGMODE { + D3DFOG_NONE = 0, + D3DFOG_EXP = 1, + D3DFOG_EXP2 = 2, + D3DFOG_LINEAR = 3 +} +typedef uint D3DFOGMODE; + +enum : D3DZBUFFERTYPE { + D3DZB_FALSE = 0, + D3DZB_TRUE = 1, // Z buffering + D3DZB_USEW = 2 // W buffering +} +typedef uint D3DZBUFFERTYPE; + +// Primitives supported by draw-primitive API +enum : D3DPRIMITIVETYPE { + D3DPT_POINTLIST = 1, + D3DPT_LINELIST = 2, + D3DPT_LINESTRIP = 3, + D3DPT_TRIANGLELIST = 4, + D3DPT_TRIANGLESTRIP = 5, + D3DPT_TRIANGLEFAN = 6 +} +typedef uint D3DPRIMITIVETYPE; + +D3DTRANSFORMSTATETYPE D3DTS_WORLDMATRIX(uint index) { return cast(D3DTRANSFORMSTATETYPE)(index + 256); } +template T_D3DTS_WORLDMATRIX(uint index) { + const D3DTRANSFORMSTATETYPE T_D3DTS_WORLDMATRIX = index + 256; +} + +enum : D3DTRANSFORMSTATETYPE { + D3DTS_VIEW = 2, + D3DTS_PROJECTION = 3, + D3DTS_TEXTURE0 = 16, + D3DTS_TEXTURE1 = 17, + D3DTS_TEXTURE2 = 18, + D3DTS_TEXTURE3 = 19, + D3DTS_TEXTURE4 = 20, + D3DTS_TEXTURE5 = 21, + D3DTS_TEXTURE6 = 22, + D3DTS_TEXTURE7 = 23, + D3DTS_WORLD = T_D3DTS_WORLDMATRIX!(0), + D3DTS_WORLD1 = T_D3DTS_WORLDMATRIX!(1), + D3DTS_WORLD2 = T_D3DTS_WORLDMATRIX!(2), + D3DTS_WORLD3 = T_D3DTS_WORLDMATRIX!(3) +} +typedef uint D3DTRANSFORMSTATETYPE; + +enum : D3DRENDERSTATETYPE { + D3DRS_ZENABLE = 7, /* D3DZBUFFERTYPE (or TRUE/FALSE for legacy) */ + D3DRS_FILLMODE = 8, /* D3DFILLMODE */ + D3DRS_SHADEMODE = 9, /* D3DSHADEMODE */ + D3DRS_ZWRITEENABLE = 14, /* TRUE to enable z writes */ + D3DRS_ALPHATESTENABLE = 15, /* TRUE to enable alpha tests */ + D3DRS_LASTPIXEL = 16, /* TRUE for last-pixel on lines */ + D3DRS_SRCBLEND = 19, /* D3DBLEND */ + D3DRS_DESTBLEND = 20, /* D3DBLEND */ + D3DRS_CULLMODE = 22, /* D3DCULL */ + D3DRS_ZFUNC = 23, /* D3DCMPFUNC */ + D3DRS_ALPHAREF = 24, /* D3DFIXED */ + D3DRS_ALPHAFUNC = 25, /* D3DCMPFUNC */ + D3DRS_DITHERENABLE = 26, /* TRUE to enable dithering */ + D3DRS_ALPHABLENDENABLE = 27, /* TRUE to enable alpha blending */ + D3DRS_FOGENABLE = 28, /* TRUE to enable fog blending */ + D3DRS_SPECULARENABLE = 29, /* TRUE to enable specular */ + D3DRS_FOGCOLOR = 34, /* D3DCOLOR */ + D3DRS_FOGTABLEMODE = 35, /* D3DFOGMODE */ + D3DRS_FOGSTART = 36, /* Fog start (for both vertex and pixel fog) */ + D3DRS_FOGEND = 37, /* Fog end */ + D3DRS_FOGDENSITY = 38, /* Fog density */ + D3DRS_RANGEFOGENABLE = 48, /* Enables range-based fog */ + D3DRS_STENCILENABLE = 52, /* BOOL enable/disable stenciling */ + D3DRS_STENCILFAIL = 53, /* D3DSTENCILOP to do if stencil test fails */ + D3DRS_STENCILZFAIL = 54, /* D3DSTENCILOP to do if stencil test passes and Z test fails */ + D3DRS_STENCILPASS = 55, /* D3DSTENCILOP to do if both stencil and Z tests pass */ + D3DRS_STENCILFUNC = 56, /* D3DCMPFUNC fn. Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */ + D3DRS_STENCILREF = 57, /* Reference value used in stencil test */ + D3DRS_STENCILMASK = 58, /* Mask value used in stencil test */ + D3DRS_STENCILWRITEMASK = 59, /* Write mask applied to values written to stencil buffer */ + D3DRS_TEXTUREFACTOR = 60, /* D3DCOLOR used for multi-texture blend */ + D3DRS_WRAP0 = 128, /* wrap for 1st texture coord. set */ + D3DRS_WRAP1 = 129, /* wrap for 2nd texture coord. set */ + D3DRS_WRAP2 = 130, /* wrap for 3rd texture coord. set */ + D3DRS_WRAP3 = 131, /* wrap for 4th texture coord. set */ + D3DRS_WRAP4 = 132, /* wrap for 5th texture coord. set */ + D3DRS_WRAP5 = 133, /* wrap for 6th texture coord. set */ + D3DRS_WRAP6 = 134, /* wrap for 7th texture coord. set */ + D3DRS_WRAP7 = 135, /* wrap for 8th texture coord. set */ + D3DRS_CLIPPING = 136, + D3DRS_LIGHTING = 137, + D3DRS_AMBIENT = 139, + D3DRS_FOGVERTEXMODE = 140, + D3DRS_COLORVERTEX = 141, + D3DRS_LOCALVIEWER = 142, + D3DRS_NORMALIZENORMALS = 143, + D3DRS_DIFFUSEMATERIALSOURCE = 145, + D3DRS_SPECULARMATERIALSOURCE = 146, + D3DRS_AMBIENTMATERIALSOURCE = 147, + D3DRS_EMISSIVEMATERIALSOURCE = 148, + D3DRS_VERTEXBLEND = 151, + D3DRS_CLIPPLANEENABLE = 152, + D3DRS_POINTSIZE = 154, /* float point size */ + D3DRS_POINTSIZE_MIN = 155, /* float point size min threshold */ + D3DRS_POINTSPRITEENABLE = 156, /* BOOL point texture coord control */ + D3DRS_POINTSCALEENABLE = 157, /* BOOL point size scale enable */ + D3DRS_POINTSCALE_A = 158, /* float point attenuation A value */ + D3DRS_POINTSCALE_B = 159, /* float point attenuation B value */ + D3DRS_POINTSCALE_C = 160, /* float point attenuation C value */ + D3DRS_MULTISAMPLEANTIALIAS = 161, // BOOL - set to do FSAA with multisample buffer + D3DRS_MULTISAMPLEMASK = 162, // DWORD - per-sample enable/disable + D3DRS_PATCHEDGESTYLE = 163, // Sets whether patch edges will use float style tessellation + D3DRS_DEBUGMONITORTOKEN = 165, // DEBUG ONLY - token to debug monitor + D3DRS_POINTSIZE_MAX = 166, /* float point size max threshold */ + D3DRS_INDEXEDVERTEXBLENDENABLE = 167, + D3DRS_COLORWRITEENABLE = 168, // per-channel write enable + D3DRS_TWEENFACTOR = 170, // float tween factor + D3DRS_BLENDOP = 171, // D3DBLENDOP setting + D3DRS_POSITIONDEGREE = 172, // NPatch position interpolation degree. D3DDEGREE_LINEAR or D3DDEGREE_CUBIC (default) + D3DRS_NORMALDEGREE = 173, // NPatch normal interpolation degree. D3DDEGREE_LINEAR (default) or D3DDEGREE_QUADRATIC + D3DRS_SCISSORTESTENABLE = 174, + D3DRS_SLOPESCALEDEPTHBIAS = 175, + D3DRS_ANTIALIASEDLINEENABLE = 176, + D3DRS_MINTESSELLATIONLEVEL = 178, + D3DRS_MAXTESSELLATIONLEVEL = 179, + D3DRS_ADAPTIVETESS_X = 180, + D3DRS_ADAPTIVETESS_Y = 181, + D3DRS_ADAPTIVETESS_Z = 182, + D3DRS_ADAPTIVETESS_W = 183, + D3DRS_ENABLEADAPTIVETESSELLATION = 184, + D3DRS_TWOSIDEDSTENCILMODE = 185, /* BOOL enable/disable 2 sided stenciling */ + D3DRS_CCW_STENCILFAIL = 186, /* D3DSTENCILOP to do if ccw stencil test fails */ + D3DRS_CCW_STENCILZFAIL = 187, /* D3DSTENCILOP to do if ccw stencil test passes and Z test fails */ + D3DRS_CCW_STENCILPASS = 188, /* D3DSTENCILOP to do if both ccw stencil and Z tests pass */ + D3DRS_CCW_STENCILFUNC = 189, /* D3DCMPFUNC fn. ccw Stencil Test passes if ((ref & mask) stencilfn (stencil & mask)) is true */ + D3DRS_COLORWRITEENABLE1 = 190, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */ + D3DRS_COLORWRITEENABLE2 = 191, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */ + D3DRS_COLORWRITEENABLE3 = 192, /* Additional ColorWriteEnables for the devices that support D3DPMISCCAPS_INDEPENDENTWRITEMASKS */ + D3DRS_BLENDFACTOR = 193, /* D3DCOLOR used for a constant blend factor during alpha blending for devices that support D3DPBLENDCAPS_BLENDFACTOR */ + D3DRS_SRGBWRITEENABLE = 194, /* Enable rendertarget writes to be DE-linearized to SRGB (for formats that expose D3DUSAGE_QUERY_SRGBWRITE) */ + D3DRS_DEPTHBIAS = 195, + D3DRS_WRAP8 = 198, /* Additional wrap states for vs_3_0+ attributes with D3DDECLUSAGE_TEXCOORD */ + D3DRS_WRAP9 = 199, + D3DRS_WRAP10 = 200, + D3DRS_WRAP11 = 201, + D3DRS_WRAP12 = 202, + D3DRS_WRAP13 = 203, + D3DRS_WRAP14 = 204, + D3DRS_WRAP15 = 205, + D3DRS_SEPARATEALPHABLENDENABLE = 206, /* TRUE to enable a separate blending function for the alpha channel */ + D3DRS_SRCBLENDALPHA = 207, /* SRC blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */ + D3DRS_DESTBLENDALPHA = 208, /* DST blend factor for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */ + D3DRS_BLENDOPALPHA = 209 /* Blending operation for the alpha channel when D3DRS_SEPARATEDESTALPHAENABLE is TRUE */ +} +typedef uint D3DRENDERSTATETYPE; + +// Maximum number of simultaneous render targets D3D supports +const D3D_MAX_SIMULTANEOUS_RENDERTARGETS = 4; + +// Values for material source +enum : D3DMATERIALCOLORSOURCE { + D3DMCS_MATERIAL = 0, // Color from material is used + D3DMCS_COLOR1 = 1, // Diffuse vertex color is used + D3DMCS_COLOR2 = 2 // Specular vertex color is used +} +typedef uint D3DMATERIALCOLORSOURCE; + +// Bias to apply to the texture coordinate set to apply a wrap to. +const D3DRENDERSTATE_WRAPBIAS = 128UL; + +/* Flags to construct the WRAP render states */ +const D3DWRAP_U = 0x00000001L; +const D3DWRAP_V = 0x00000002L; +const D3DWRAP_W = 0x00000004L; + +/* Flags to construct the WRAP render states for 1D thru 4D texture coordinates */ +const D3DWRAPCOORD_0 = 0x00000001L; // same as D3DWRAP_U +const D3DWRAPCOORD_1 = 0x00000002L; // same as D3DWRAP_V +const D3DWRAPCOORD_2 = 0x00000004L; // same as D3DWRAP_W +const D3DWRAPCOORD_3 = 0x00000008L; + +/* Flags to construct D3DRS_COLORWRITEENABLE */ +const D3DCOLORWRITEENABLE_RED = (1L<<0); +const D3DCOLORWRITEENABLE_GREEN = (1L<<1); +const D3DCOLORWRITEENABLE_BLUE = (1L<<2); +const D3DCOLORWRITEENABLE_ALPHA = (1L<<3); + +/* + * State enumerants for per-stage processing of fixed function pixel processing + * Two of these affect fixed function vertex processing as well: TEXTURETRANSFORMFLAGS and TEXCOORDINDEX. + */ +enum : D3DTEXTURESTAGESTATETYPE { + D3DTSS_COLOROP = 1, /* D3DTEXTUREOP - per-stage blending controls for color channels */ + D3DTSS_COLORARG1 = 2, /* D3DTA_* (texture arg) */ + D3DTSS_COLORARG2 = 3, /* D3DTA_* (texture arg) */ + D3DTSS_ALPHAOP = 4, /* D3DTEXTUREOP - per-stage blending controls for alpha channel */ + D3DTSS_ALPHAARG1 = 5, /* D3DTA_* (texture arg) */ + D3DTSS_ALPHAARG2 = 6, /* D3DTA_* (texture arg) */ + D3DTSS_BUMPENVMAT00 = 7, /* float (bump mapping matrix) */ + D3DTSS_BUMPENVMAT01 = 8, /* float (bump mapping matrix) */ + D3DTSS_BUMPENVMAT10 = 9, /* float (bump mapping matrix) */ + D3DTSS_BUMPENVMAT11 = 10, /* float (bump mapping matrix) */ + D3DTSS_TEXCOORDINDEX = 11, /* identifies which set of texture coordinates index this texture */ + D3DTSS_BUMPENVLSCALE = 22, /* float scale for bump map luminance */ + D3DTSS_BUMPENVLOFFSET = 23, /* float offset for bump map luminance */ + D3DTSS_TEXTURETRANSFORMFLAGS = 24, /* D3DTEXTURETRANSFORMFLAGS controls texture transform */ + D3DTSS_COLORARG0 = 26, /* D3DTA_* third arg for triadic ops */ + D3DTSS_ALPHAARG0 = 27, /* D3DTA_* third arg for triadic ops */ + D3DTSS_RESULTARG = 28, /* D3DTA_* arg for result (CURRENT or TEMP) */ + D3DTSS_CONSTANT = 32 /* Per-stage constant D3DTA_CONSTANT */ +} +typedef uint D3DTEXTURESTAGESTATETYPE; + +/* + * State enumerants for per-sampler texture processing. + */ +enum : D3DSAMPLERSTATETYPE { + D3DSAMP_ADDRESSU = 1, /* D3DTEXTUREADDRESS for U coordinate */ + D3DSAMP_ADDRESSV = 2, /* D3DTEXTUREADDRESS for V coordinate */ + D3DSAMP_ADDRESSW = 3, /* D3DTEXTUREADDRESS for W coordinate */ + D3DSAMP_BORDERCOLOR = 4, /* D3DCOLOR */ + D3DSAMP_MAGFILTER = 5, /* D3DTEXTUREFILTER filter to use for magnification */ + D3DSAMP_MINFILTER = 6, /* D3DTEXTUREFILTER filter to use for minification */ + D3DSAMP_MIPFILTER = 7, /* D3DTEXTUREFILTER filter to use between mipmaps during minification */ + D3DSAMP_MIPMAPLODBIAS = 8, /* float Mipmap LOD bias */ + D3DSAMP_MAXMIPLEVEL = 9, /* DWORD 0..(n-1) LOD index of largest map to use (0 == largest) */ + D3DSAMP_MAXANISOTROPY = 10, /* DWORD maximum anisotropy */ + D3DSAMP_SRGBTEXTURE = 11, /* Default = 0 (which means Gamma 1.0, + no correction required.) else correct for + Gamma = 2.2 */ + D3DSAMP_ELEMENTINDEX = 12, /* When multi-element texture is assigned to sampler, this + indicates which element index to use. Default = 0. */ + D3DSAMP_DMAPOFFSET = 13 /* Offset in vertices in the pre-sampled displacement map. + Only valid for D3DDMAPSAMPLER sampler */ +} +typedef uint D3DSAMPLERSTATETYPE; + +/* Special sampler which is used in the tesselator */ +const D3DDMAPSAMPLER = 256; + +// Samplers used in vertex shaders +const D3DVERTEXTEXTURESAMPLER0 = (D3DDMAPSAMPLER+1); +const D3DVERTEXTEXTURESAMPLER1 = (D3DDMAPSAMPLER+2); +const D3DVERTEXTEXTURESAMPLER2 = (D3DDMAPSAMPLER+3); +const D3DVERTEXTEXTURESAMPLER3 = (D3DDMAPSAMPLER+4); + +// Values, used with D3DTSS_TEXCOORDINDEX, to specify that the vertex data(position +// and normal in the camera space) should be taken as texture coordinates +// Low 16 bits are used to specify texture coordinate index, to take the WRAP mode from +// +const D3DTSS_TCI_PASSTHRU = 0x00000000; +const D3DTSS_TCI_CAMERASPACENORMAL = 0x00010000; +const D3DTSS_TCI_CAMERASPACEPOSITION = 0x00020000; +const D3DTSS_TCI_CAMERASPACEREFLECTIONVECTOR = 0x00030000; +const D3DTSS_TCI_SPHEREMAP = 0x00040000; + +/* + * Enumerations for COLOROP and ALPHAOP texture blending operations set in + * texture processing stage controls in D3DTSS. + */ +enum : D3DTEXTUREOP { + // Control + D3DTOP_DISABLE = 1, // disables stage + D3DTOP_SELECTARG1 = 2, // the default + D3DTOP_SELECTARG2 = 3, + + // Modulate + D3DTOP_MODULATE = 4, // multiply args together + D3DTOP_MODULATE2X = 5, // multiply and 1 bit + D3DTOP_MODULATE4X = 6, // multiply and 2 bits + + // Add + D3DTOP_ADD = 7, // add arguments together + D3DTOP_ADDSIGNED = 8, // add with -0.5 bias + D3DTOP_ADDSIGNED2X = 9, // as above but left 1 bit + D3DTOP_SUBTRACT = 10, // Arg1 - Arg2, with no saturation + D3DTOP_ADDSMOOTH = 11, // add 2 args, subtract product + // Arg1 + Arg2 - Arg1*Arg2 + // = Arg1 + (1-Arg1)*Arg2 + + // Linear alpha blend: Arg1*(Alpha) + Arg2*(1-Alpha) + D3DTOP_BLENDDIFFUSEALPHA = 12, // iterated alpha + D3DTOP_BLENDTEXTUREALPHA = 13, // texture alpha + D3DTOP_BLENDFACTORALPHA = 14, // alpha from D3DRS_TEXTUREFACTOR + + // Linear alpha blend with pre-multiplied arg1 input: Arg1 + Arg2*(1-Alpha) + D3DTOP_BLENDTEXTUREALPHAPM = 15, // texture alpha + D3DTOP_BLENDCURRENTALPHA = 16, // by alpha of current color + + // Specular mapping + D3DTOP_PREMODULATE = 17, // modulate with next texture before use + D3DTOP_MODULATEALPHA_ADDCOLOR = 18, // Arg1.RGB + Arg1.A*Arg2.RGB + // COLOROP only + D3DTOP_MODULATECOLOR_ADDALPHA = 19, // Arg1.RGB*Arg2.RGB + Arg1.A + // COLOROP only + D3DTOP_MODULATEINVALPHA_ADDCOLOR = 20, // (1-Arg1.A)*Arg2.RGB + Arg1.RGB + // COLOROP only + D3DTOP_MODULATEINVCOLOR_ADDALPHA = 21, // (1-Arg1.RGB)*Arg2.RGB + Arg1.A + // COLOROP only + + // Bump mapping + D3DTOP_BUMPENVMAP = 22, // per pixel env map perturbation + D3DTOP_BUMPENVMAPLUMINANCE = 23, // with luminance channel + + // This can do either diffuse or specular bump mapping with correct input. + // Performs the function (Arg1.R*Arg2.R + Arg1.G*Arg2.G + Arg1.B*Arg2.B) + // where each component has been scaled and offset to make it signed. + // The result is replicated into all four (including alpha) channels. + // This is a valid COLOROP only. + D3DTOP_DOTPRODUCT3 = 24, + + // Triadic ops + D3DTOP_MULTIPLYADD = 25, // Arg0 + Arg1*Arg2 + D3DTOP_LERP = 26 // (Arg0)*Arg1 + (1-Arg0)*Arg2 +} +typedef uint D3DTEXTUREOP; + +/* + * Values for COLORARG0,1,2, ALPHAARG0,1,2, and RESULTARG texture blending + * operations set in texture processing stage controls in D3DRENDERSTATE. + */ +const D3DTA_SELECTMASK = 0x0000000f; // mask for arg selector +const D3DTA_DIFFUSE = 0x00000000; // select diffuse color (read only) +const D3DTA_CURRENT = 0x00000001; // select stage destination register (read/write) +const D3DTA_TEXTURE = 0x00000002; // select texture color (read only) +const D3DTA_TFACTOR = 0x00000003; // select D3DRS_TEXTUREFACTOR (read only) +const D3DTA_SPECULAR = 0x00000004; // select specular color (read only) +const D3DTA_TEMP = 0x00000005; // select temporary register color (read/write) +const D3DTA_CONSTANT = 0x00000006; // select texture stage constant +const D3DTA_COMPLEMENT = 0x00000010; // take 1.0 - x (read modifier) +const D3DTA_ALPHAREPLICATE = 0x00000020; // replicate alpha to color components (read modifier) + +// +// Values for D3DSAMP_***FILTER texture stage states +// +enum : D3DTEXTUREFILTERTYPE { + D3DTEXF_NONE = 0, // filtering disabled (valid for mip filter only) + D3DTEXF_POINT = 1, // nearest + D3DTEXF_LINEAR = 2, // linear interpolation + D3DTEXF_ANISOTROPIC = 3, // anisotropic + D3DTEXF_PYRAMIDALQUAD = 6, // 4-sample tent + D3DTEXF_GAUSSIANQUAD = 7, // 4-sample gaussian + D3DTEXF_CONVOLUTIONMONO = 8 // Convolution filter for monochrome textures +} +typedef uint D3DTEXTUREFILTERTYPE; + +/* Bits for Flags in ProcessVertices call */ + +const D3DPV_DONOTCOPYDATA = (1 << 0); + +//------------------------------------------------------------------- + +// Flexible vertex format bits +// +const D3DFVF_RESERVED0 = 0x001; +const D3DFVF_POSITION_MASK = 0x400E; +const D3DFVF_XYZ = 0x002; +const D3DFVF_XYZRHW = 0x004; +const D3DFVF_XYZB1 = 0x006; +const D3DFVF_XYZB2 = 0x008; +const D3DFVF_XYZB3 = 0x00a; +const D3DFVF_XYZB4 = 0x00c; +const D3DFVF_XYZB5 = 0x00e; +const D3DFVF_XYZW = 0x4002; + +const D3DFVF_NORMAL = 0x010; +const D3DFVF_PSIZE = 0x020; +const D3DFVF_DIFFUSE = 0x040; +const D3DFVF_SPECULAR = 0x080; + +const D3DFVF_TEXCOUNT_MASK = 0xf00; +const D3DFVF_TEXCOUNT_SHIFT = 8; +const D3DFVF_TEX0 = 0x000; +const D3DFVF_TEX1 = 0x100; +const D3DFVF_TEX2 = 0x200; +const D3DFVF_TEX3 = 0x300; +const D3DFVF_TEX4 = 0x400; +const D3DFVF_TEX5 = 0x500; +const D3DFVF_TEX6 = 0x600; +const D3DFVF_TEX7 = 0x700; +const D3DFVF_TEX8 = 0x800; + +const D3DFVF_LASTBETA_UBYTE4 = 0x1000; +const D3DFVF_LASTBETA_D3DCOLOR = 0x8000; + +const D3DFVF_RESERVED2 = 0x6000; // 2 reserved bits + +//--------------------------------------------------------------------- +// Vertex Shaders +// + +// Vertex shader declaration + +// Vertex element semantics +// +enum : D3DDECLUSAGE { + D3DDECLUSAGE_POSITION = 0, + D3DDECLUSAGE_BLENDWEIGHT, // 1 + D3DDECLUSAGE_BLENDINDICES, // 2 + D3DDECLUSAGE_NORMAL, // 3 + D3DDECLUSAGE_PSIZE, // 4 + D3DDECLUSAGE_TEXCOORD, // 5 + D3DDECLUSAGE_TANGENT, // 6 + D3DDECLUSAGE_BINORMAL, // 7 + D3DDECLUSAGE_TESSFACTOR, // 8 + D3DDECLUSAGE_POSITIONT, // 9 + D3DDECLUSAGE_COLOR, // 10 + D3DDECLUSAGE_FOG, // 11 + D3DDECLUSAGE_DEPTH, // 12 + D3DDECLUSAGE_SAMPLE // 13 +} +typedef uint D3DDECLUSAGE; + +const MAXD3DDECLUSAGE = D3DDECLUSAGE_SAMPLE; +const MAXD3DDECLUSAGEINDEX = 15; +const MAXD3DDECLLENGTH = 64; // does not include "end" marker vertex element + +enum : D3DDECLMETHOD { + D3DDECLMETHOD_DEFAULT = 0, + D3DDECLMETHOD_PARTIALU, + D3DDECLMETHOD_PARTIALV, + D3DDECLMETHOD_CROSSUV, // Normal + D3DDECLMETHOD_UV, + D3DDECLMETHOD_LOOKUP, // Lookup a displacement map + D3DDECLMETHOD_LOOKUPPRESAMPLED // Lookup a pre-sampled displacement map +} +typedef uint D3DDECLMETHOD; + +const MAXD3DDECLMETHOD = D3DDECLMETHOD_LOOKUPPRESAMPLED; + +// Declarations for _Type fields +// +enum : D3DDECLTYPE { + D3DDECLTYPE_FLOAT1 = 0, // 1D float expanded to (value, 0., 0., 1.) + D3DDECLTYPE_FLOAT2 = 1, // 2D float expanded to (value, value, 0., 1.) + D3DDECLTYPE_FLOAT3 = 2, // 3D float expanded to (value, value, value, 1.) + D3DDECLTYPE_FLOAT4 = 3, // 4D float + D3DDECLTYPE_D3DCOLOR = 4, // 4D packed unsigned bytes mapped to 0. to 1. range + // Input is in D3DCOLOR format (ARGB) expanded to (R, G, B, A) + D3DDECLTYPE_UBYTE4 = 5, // 4D unsigned byte + D3DDECLTYPE_SHORT2 = 6, // 2D signed short expanded to (value, value, 0., 1.) + D3DDECLTYPE_SHORT4 = 7, // 4D signed short + +// The following types are valid only with vertex shaders >= 2.0 + + + D3DDECLTYPE_UBYTE4N = 8, // Each of 4 bytes is normalized by dividing to 255.0 + D3DDECLTYPE_SHORT2N = 9, // 2D signed short normalized (v[0]/32767.0,v[1]/32767.0,0,1) + D3DDECLTYPE_SHORT4N = 10, // 4D signed short normalized (v[0]/32767.0,v[1]/32767.0,v[2]/32767.0,v[3]/32767.0) + D3DDECLTYPE_USHORT2N = 11, // 2D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,0,1) + D3DDECLTYPE_USHORT4N = 12, // 4D unsigned short normalized (v[0]/65535.0,v[1]/65535.0,v[2]/65535.0,v[3]/65535.0) + D3DDECLTYPE_UDEC3 = 13, // 3D unsigned 10 10 10 format expanded to (value, value, value, 1) + D3DDECLTYPE_DEC3N = 14, // 3D signed 10 10 10 format normalized and expanded to (v[0]/511.0, v[1]/511.0, v[2]/511.0, 1) + D3DDECLTYPE_FLOAT16_2 = 15, // Two 16-bit floating point values, expanded to (value, value, 0, 1) + D3DDECLTYPE_FLOAT16_4 = 16, // Four 16-bit floating point values + D3DDECLTYPE_UNUSED = 17 // When the type field in a decl is unused. +} +typedef uint D3DDECLTYPE; + +const MAXD3DDECLTYPE = D3DDECLTYPE_UNUSED; + +struct D3DVERTEXELEMENT9 +{ + ushort Stream; // Stream index + ushort Offset; // Offset in the stream in bytes + ubyte Type; // Data type + ubyte Method; // Processing method + ubyte Usage; // Semantics + ubyte UsageIndex; // Semantic index +} +alias D3DVERTEXELEMENT9 *LPD3DVERTEXELEMENT9; + +// This is used to initialize the last vertex element in a vertex declaration +// array +// +template D3DDECL_END() { + static const D3DVERTEXELEMENT9 D3DDECL_END = { 0xFF,0,D3DDECLTYPE_UNUSED,0,0,0 }; +} + +// Maximum supported number of texture coordinate sets +const D3DDP_MAXTEXCOORD = 8; + +//--------------------------------------------------------------------- +// Values for IDirect3DDevice9::SetStreamSourceFreq's Setting parameter +//--------------------------------------------------------------------- +const D3DSTREAMSOURCE_INDEXEDDATA = (1<<30); +const D3DSTREAMSOURCE_INSTANCEDATA = (2<<30); + + + +//--------------------------------------------------------------------- +// +// The internal format of Pixel Shader (PS) & Vertex Shader (VS) +// Instruction Tokens is defined in the Direct3D Device Driver Kit +// +//--------------------------------------------------------------------- + +// +// Instruction Token Bit Definitions +// +const D3DSI_OPCODE_MASK = 0x0000FFFF; + +const D3DSI_INSTLENGTH_MASK = 0x0F000000; +const D3DSI_INSTLENGTH_SHIFT = 24; + +enum : D3DSHADER_INSTRUCTION_OPCODE_TYPE { + D3DSIO_NOP = 0, + D3DSIO_MOV , + D3DSIO_ADD , + D3DSIO_SUB , + D3DSIO_MAD , + D3DSIO_MUL , + D3DSIO_RCP , + D3DSIO_RSQ , + D3DSIO_DP3 , + D3DSIO_DP4 , + D3DSIO_MIN , + D3DSIO_MAX , + D3DSIO_SLT , + D3DSIO_SGE , + D3DSIO_EXP , + D3DSIO_LOG , + D3DSIO_LIT , + D3DSIO_DST , + D3DSIO_LRP , + D3DSIO_FRC , + D3DSIO_M4x4 , + D3DSIO_M4x3 , + D3DSIO_M3x4 , + D3DSIO_M3x3 , + D3DSIO_M3x2 , + D3DSIO_CALL , + D3DSIO_CALLNZ , + D3DSIO_LOOP , + D3DSIO_RET , + D3DSIO_ENDLOOP , + D3DSIO_LABEL , + D3DSIO_DCL , + D3DSIO_POW , + D3DSIO_CRS , + D3DSIO_SGN , + D3DSIO_ABS , + D3DSIO_NRM , + D3DSIO_SINCOS , + D3DSIO_REP , + D3DSIO_ENDREP , + D3DSIO_IF , + D3DSIO_IFC , + D3DSIO_ELSE , + D3DSIO_ENDIF , + D3DSIO_BREAK , + D3DSIO_BREAKC , + D3DSIO_MOVA , + D3DSIO_DEFB , + D3DSIO_DEFI , + + D3DSIO_TEXCOORD = 64, + D3DSIO_TEXKILL , + D3DSIO_TEX , + D3DSIO_TEXBEM , + D3DSIO_TEXBEML , + D3DSIO_TEXREG2AR , + D3DSIO_TEXREG2GB , + D3DSIO_TEXM3x2PAD , + D3DSIO_TEXM3x2TEX , + D3DSIO_TEXM3x3PAD , + D3DSIO_TEXM3x3TEX , + D3DSIO_RESERVED0 , + D3DSIO_TEXM3x3SPEC , + D3DSIO_TEXM3x3VSPEC , + D3DSIO_EXPP , + D3DSIO_LOGP , + D3DSIO_CND , + D3DSIO_DEF , + D3DSIO_TEXREG2RGB , + D3DSIO_TEXDP3TEX , + D3DSIO_TEXM3x2DEPTH , + D3DSIO_TEXDP3 , + D3DSIO_TEXM3x3 , + D3DSIO_TEXDEPTH , + D3DSIO_CMP , + D3DSIO_BEM , + D3DSIO_DP2ADD , + D3DSIO_DSX , + D3DSIO_DSY , + D3DSIO_TEXLDD , + D3DSIO_SETP , + D3DSIO_TEXLDL , + D3DSIO_BREAKP , + + D3DSIO_PHASE = 0xFFFD, + D3DSIO_COMMENT = 0xFFFE, + D3DSIO_END = 0xFFFF +} +typedef uint D3DSHADER_INSTRUCTION_OPCODE_TYPE; + +//--------------------------------------------------------------------- +// Use these constants with D3DSIO_SINCOS macro as SRC2, SRC3 +// +const float[4] D3DSINCOSCONST1 = [-1.5500992e-006f, -2.1701389e-005f, 0.0026041667f, 0.00026041668f]; +const float[4] D3DSINCOSCONST2 = [-0.020833334f, -0.12500000f, 1.0f, 0.50000000f]; + +//--------------------------------------------------------------------- +// Co-Issue Instruction Modifier - if set then this instruction is to be +// issued in parallel with the previous instruction(s) for which this bit +// is not set. +// +const D3DSI_COISSUE = 0x40000000; + +//--------------------------------------------------------------------- +// Opcode specific controls + +const D3DSP_OPCODESPECIFICCONTROL_MASK = 0x00ff0000; +const D3DSP_OPCODESPECIFICCONTROL_SHIFT = 16; + +// ps_2_0 texld controls +const D3DSI_TEXLD_PROJECT = (0x01 << D3DSP_OPCODESPECIFICCONTROL_SHIFT); +const D3DSI_TEXLD_BIAS = (0x02 << D3DSP_OPCODESPECIFICCONTROL_SHIFT); + +// Comparison for dynamic conditional instruction opcodes (i.e. if, breakc) +enum : D3DSHADER_COMPARISON { + // < = > + D3DSPC_RESERVED0= 0, // 0 0 0 + D3DSPC_GT = 1, // 0 0 1 + D3DSPC_EQ = 2, // 0 1 0 + D3DSPC_GE = 3, // 0 1 1 + D3DSPC_LT = 4, // 1 0 0 + D3DSPC_NE = 5, // 1 0 1 + D3DSPC_LE = 6, // 1 1 0 + D3DSPC_RESERVED1= 7 // 1 1 1 +} +typedef uint D3DSHADER_COMPARISON; + +// Comparison is part of instruction opcode token: +const D3DSHADER_COMPARISON_SHIFT = D3DSP_OPCODESPECIFICCONTROL_SHIFT; +const D3DSHADER_COMPARISON_MASK = (0x7<>8)&0xFF); } +ubyte D3DSHADER_VERSION_MINOR(uint _Version) { return cast(ubyte)((_Version>>0)&0xFF); } + +// destination/source parameter register type +const D3DSI_COMMENTSIZE_SHIFT = 16; +const D3DSI_COMMENTSIZE_MASK = 0x7FFF0000; +uint D3DSHADER_COMMENT(ushort _DWordSize) { return (((_DWordSize< pV2.x ? pV1.x : pV2.x; + pOut.y = pV1.y > pV2.y ? pV1.y : pV2.y; + return pOut; +} + +D3DXVECTOR2* D3DXVec2Scale(D3DXVECTOR2* pOut, D3DXVECTOR2* pV, float s) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV is null)) return null; + } + pOut.x = pV.x * s; + pOut.y = pV.y * s; + return pOut; +} + +D3DXVECTOR2* D3DXVec2Lerp(D3DXVECTOR2* pOut, D3DXVECTOR2* pV1, D3DXVECTOR2* pV2, float s) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return null; + } + pOut.x = pV1.x + s * (pV2.x - pV1.x); + pOut.y = pV1.y + s * (pV2.y - pV1.y); + return pOut; +} + +extern(Windows) { + D3DXVECTOR2* D3DXVec2Normalize(D3DXVECTOR2* pOut, D3DXVECTOR2* pV); + D3DXVECTOR2* D3DXVec2Hermite(D3DXVECTOR2* pOut, D3DXVECTOR2* pV1, D3DXVECTOR2* pT1, D3DXVECTOR2* pV2, D3DXVECTOR2* pT2, float s); + D3DXVECTOR2* D3DXVec2CatmullRom(D3DXVECTOR2* pOut, D3DXVECTOR2* pV0, D3DXVECTOR2* pV1, D3DXVECTOR2* pV2, D3DXVECTOR2* pV3, float s); + D3DXVECTOR2* D3DXVec2BaryCentric(D3DXVECTOR2* pOut, D3DXVECTOR2* pV1, D3DXVECTOR2* pV2, D3DXVECTOR2* pV3, float f, float g); + D3DXVECTOR4* D3DXVec2Transform(D3DXVECTOR4* pOut, D3DXVECTOR2* pV, D3DXMATRIX* pM); + D3DXVECTOR2* D3DXVec2TransformCoord(D3DXVECTOR2* pOut, D3DXVECTOR2* pV, D3DXMATRIX* pM); + D3DXVECTOR2* D3DXVec2TransformNormal(D3DXVECTOR2* pOut, D3DXVECTOR2* pV, D3DXMATRIX* pM); + D3DXVECTOR4* D3DXVec2TransformArray(D3DXVECTOR4* pOut, UINT OutStride, D3DXVECTOR2* pV, UINT VStride, D3DXMATRIX* pM, UINT n); + D3DXVECTOR2* D3DXVec2TransformCoordArray(D3DXVECTOR2* pOut, UINT OutStride, D3DXVECTOR2* pV, UINT VStride, D3DXMATRIX* pM, UINT n); + D3DXVECTOR2* D3DXVec2TransformNormalArray(D3DXVECTOR2* pOut, UINT OutStride, D3DXVECTOR2* pV, UINT VStride, D3DXMATRIX* pM, UINT n); +} + +float D3DXVec3Length(D3DXVECTOR3* pV) { + debug(D3DX10_DEBUG) { + if (pV is null) return 0.0; + } + return sqrtf((pV.x * pV.x) + (pV.y * pV.y) + (pV.z * pV.z)); +} + +float D3DXVec3LengthSq(D3DXVECTOR3* pV) { + debug(D3DX10_DEBUG) { + if (pV is null) return 0.0; + } + return (pV.x * pV.x) + (pV.y * pV.y) + (pV.z * pV.z); +} + +float D3DXVec3Dot(D3DXVECTOR3* pV1, D3DXVECTOR3* pV2) { + debug(D3DX10_DEBUG) { + if ((pV1 is null) || (pV2 is null)) return 0.0; + } + return (pV1.x * pV2.x) + (pV1.y * pV2.y) + (pV1.z * pV2.z); +} + +D3DXVECTOR3* D3DXVec3Cross(D3DXVECTOR3* pOut, D3DXVECTOR3* pV1, D3DXVECTOR3* pV2) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return 0.0; + } + D3DXVECTOR3 v; + v.x = (pV1.y * pV2.z) - (pV1.z * pV2.y); + v.y = (pV1.z * pV2.x) - (pV1.x * pV2.z); + v.z = (pV1.x * pV2.y) - (pV1.y * pV2.x); + *pOut = v; + return pOut; +} + +D3DXVECTOR3* D3DXVec3Add(D3DXVECTOR3* pOut, D3DXVECTOR3* pV1, D3DXVECTOR3* pV2) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return null; + } + pOut.x = pV1.x + pV2.x; + pOut.y = pV1.y + pV2.y; + pOut.z = pV1.z + pV2.z; + return pOut; +} + +D3DXVECTOR3* D3DXVec3Subtract(D3DXVECTOR3* pOut, D3DXVECTOR3* pV1, D3DXVECTOR3* pV2) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return null; + } + pOut.x = pV1.x - pV2.x; + pOut.y = pV1.y - pV2.y; + pOut.z = pV1.z - pV2.z; + return pOut; +} + +D3DXVECTOR3* D3DXVec3Minimize(D3DXVECTOR3* pOut, D3DXVECTOR3* pV1, D3DXVECTOR3* pV2) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return null; + } + pOut.x = pV1.x < pV2.x ? pV1.x : pV2.x; + pOut.y = pV1.y < pV2.y ? pV1.y : pV2.y; + pOut.z = pV1.z < pV2.z ? pV1.z : pV2.z; + return pOut; +} + +D3DXVECTOR3* D3DXVec3Maximize(D3DXVECTOR3* pOut, D3DXVECTOR3* pV1, D3DXVECTOR3* pV2) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return null; + } + pOut.x = pV1.x > pV2.x ? pV1.x : pV2.x; + pOut.y = pV1.y > pV2.y ? pV1.y : pV2.y; + pOut.z = pV1.z > pV2.z ? pV1.z : pV2.z; + return pOut; +} + +D3DXVECTOR3* D3DXVec3Scale(D3DXVECTOR3* pOut, D3DXVECTOR3* pV, float s) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV is null)) return null; + } + pOut.x = pV.x * s; + pOut.y = pV.y * s; + pOut.z = pV.z * s; + return pOut; +} + +D3DXVECTOR3* D3DXVec3Lerp(D3DXVECTOR3* pOut, D3DXVECTOR3* pV1, D3DXVECTOR3* pV2, float s) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return null; + } + pOut.x = pV1.x + s * (pV2.x - pV1.x); + pOut.y = pV1.y + s * (pV2.y - pV1.y); + pOut.z = pV1.z + s * (pV2.z - pV1.z); + return pOut; +} + +extern(Windows) { + D3DXVECTOR3* D3DXVec3Normalize(D3DXVECTOR3* pOut, D3DXVECTOR3* pV); + D3DXVECTOR3* D3DXVec3Hermite(D3DXVECTOR3* pOut, D3DXVECTOR3* pV1, D3DXVECTOR3* pT1, D3DXVECTOR3* pV2, D3DXVECTOR3* pT2, FLOAT s); + D3DXVECTOR3* D3DXVec3CatmullRom(D3DXVECTOR3* pOut, D3DXVECTOR3* pV0, D3DXVECTOR3* pV1, D3DXVECTOR3* pV2, D3DXVECTOR3* pV3, FLOAT s); + D3DXVECTOR3* D3DXVec3BaryCentric(D3DXVECTOR3* pOut, D3DXVECTOR3* pV1, D3DXVECTOR3* pV2, D3DXVECTOR3* pV3, FLOAT f, FLOAT g); + D3DXVECTOR4* D3DXVec3Transform(D3DXVECTOR4* pOut, D3DXVECTOR3* pV, D3DXMATRIX* pM); + D3DXVECTOR3* D3DXVec3TransformCoord(D3DXVECTOR3* pOut, D3DXVECTOR3* pV, D3DXMATRIX* pM); + D3DXVECTOR3* D3DXVec3TransformNormal(D3DXVECTOR3* pOut, D3DXVECTOR3* pV, D3DXMATRIX* pM); + D3DXVECTOR4* D3DXVec3TransformArray(D3DXVECTOR4* pOut, UINT OutStride, D3DXVECTOR3* pV, UINT VStride, D3DXMATRIX* pM, UINT n); + D3DXVECTOR3* D3DXVec3TransformCoordArray(D3DXVECTOR3* pOut, UINT OutStride, D3DXVECTOR3* pV, UINT VStride, D3DXMATRIX* pM, UINT n); + D3DXVECTOR3* D3DXVec3TransformNormalArray(D3DXVECTOR3* pOut, UINT OutStride, D3DXVECTOR3* pV, UINT VStride, D3DXMATRIX* pM, UINT n); + D3DXVECTOR3* D3DXVec3Project(D3DXVECTOR3* pOut, D3DXVECTOR3* pV, D3D10_VIEWPORT* pViewport, D3DXMATRIX* pProjection, D3DXMATRIX* pView, D3DXMATRIX* pWorld); + D3DXVECTOR3* D3DXVec3Unproject(D3DXVECTOR3* pOut, D3DXVECTOR3* pV, D3D10_VIEWPORT* pViewport, D3DXMATRIX* pProjection, D3DXMATRIX* pView, D3DXMATRIX* pWorld); + D3DXVECTOR3* D3DXVec3ProjectArray(D3DXVECTOR3* pOut, UINT OutStride,D3DXVECTOR3* pV, UINT VStride,D3D10_VIEWPORT* pViewport, D3DXMATRIX* pProjection, D3DXMATRIX* pView, D3DXMATRIX* pWorld, UINT n); + D3DXVECTOR3* D3DXVec3UnprojectArray(D3DXVECTOR3* pOut, UINT OutStride, D3DXVECTOR3* pV, UINT VStride, D3D10_VIEWPORT* pViewport, D3DXMATRIX* pProjection, D3DXMATRIX* pView, D3DXMATRIX* pWorld, UINT n); +} + +float D3DXVec4Length(D3DXVECTOR4* pV) { + debug(D3DX10_DEBUG) { + if (pV is null) return 0.0; + } + return sqrtf((pV.x * pV.x) + (pV.y * pV.y) + (pV.z * pV.z) + (pV.w * pV.w)); +} + +float D3DXVec4LengthSq(D3DXVECTOR4* pV) { + debug(D3DX10_DEBUG) { + if (pV is null) return 0.0; + } + return (pV.x * pV.x) + (pV.y * pV.y) + (pV.z * pV.z) + (pV.w * pV.w); +} + +float D3DXVec4Dot(D3DXVECTOR4* pV1, D3DXVECTOR4* pV2) { + debug(D3DX10_DEBUG) { + if ((pV1 is null) || (pV2 is null)) return 0.0; + } + return (pV1.x * pV2.x) + (pV1.y * pV2.y) + (pV1.z * pV2.z) + (pV1.w * pV2.w); +} + +D3DXVECTOR4* D3DXVec4Add(D3DXVECTOR4* pOut, D3DXVECTOR4* pV1, D3DXVECTOR4* pV2) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return null; + } + pOut.x = pV1.x + pV2.x; + pOut.y = pV1.y + pV2.y; + pOut.z = pV1.z + pV2.z; + pOut.w = pV1.w + pV2.w; + return pOut; +} + +D3DXVECTOR4* D3DXVec4Subtract(D3DXVECTOR4* pOut, D3DXVECTOR4* pV1, D3DXVECTOR4* pV2) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return null; + } + pOut.x = pV1.x - pV2.x; + pOut.y = pV1.y - pV2.y; + pOut.z = pV1.z - pV2.z; + pOut.w = pV1.w - pV2.w; + return pOut; +} + +D3DXVECTOR4* D3DXVec4Minimize(D3DXVECTOR4* pOut, D3DXVECTOR4* pV1, D3DXVECTOR4* pV2) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return null; + } + pOut.x = pV1.x < pV2.x ? pV1.x : pV2.x; + pOut.y = pV1.y < pV2.y ? pV1.y : pV2.y; + pOut.z = pV1.z < pV2.z ? pV1.z : pV2.z; + pOut.w = pV1.w < pV2.w ? pV1.w : pV2.w; + return pOut; +} + +D3DXVECTOR4* D3DXVec4Maximize(D3DXVECTOR4* pOut, D3DXVECTOR4* pV1, D3DXVECTOR4* pV2) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return null; + } + pOut.x = pV1.x > pV2.x ? pV1.x : pV2.x; + pOut.y = pV1.y > pV2.y ? pV1.y : pV2.y; + pOut.z = pV1.z > pV2.z ? pV1.z : pV2.z; + pOut.w = pV1.w > pV2.w ? pV1.w : pV2.w; + return pOut; +} + +D3DXVECTOR4* D3DXVec4Scale(D3DXVECTOR4* pOut, D3DXVECTOR4* pV, float s) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV is null)) return null; + } + pOut.x = pV.x * s; + pOut.y = pV.y * s; + pOut.z = pV.z * s; + pOut.w = pV.w * s; + return pOut; +} + +D3DXVECTOR4* D3DXVec4Lerp(D3DXVECTOR4* pOut, D3DXVECTOR4* pV1, D3DXVECTOR4* pV2, float s) { + debug(D3DX10_DEBUG) { + if ((pOut is null) || (pV1 is null) || (pV2 is null)) return null; + } + pOut.x = pV1.x + s * (pV2.x - pV1.x); + pOut.y = pV1.y + s * (pV2.y - pV1.y); + pOut.z = pV1.z + s * (pV2.z - pV1.z); + pOut.w = pV1.w + s * (pV2.w - pV1.w); + return pOut; +} + +extern(Windows) { + D3DXVECTOR4* D3DXVec4Cross(D3DXVECTOR4* pOut, D3DXVECTOR4* pV1, D3DXVECTOR4* pV2, D3DXVECTOR4* pV3); + D3DXVECTOR4* D3DXVec4Normalize(D3DXVECTOR4* pOut, D3DXVECTOR4* pV); + D3DXVECTOR4* D3DXVec4Hermite(D3DXVECTOR4* pOut, D3DXVECTOR4* pV1, D3DXVECTOR4* pT1, D3DXVECTOR4* pV2, D3DXVECTOR4* pT2, FLOAT s); + D3DXVECTOR4* D3DXVec4CatmullRom(D3DXVECTOR4* pOut, D3DXVECTOR4* pV0, D3DXVECTOR4* pV1, D3DXVECTOR4* pV2, D3DXVECTOR4* pV3, FLOAT s); + D3DXVECTOR4* D3DXVec4BaryCentric(D3DXVECTOR4* pOut, D3DXVECTOR4* pV1, D3DXVECTOR4* pV2, D3DXVECTOR4* pV3, FLOAT f, FLOAT g); + D3DXVECTOR4* D3DXVec4Transform(D3DXVECTOR4* pOut, D3DXVECTOR4* pV, D3DXMATRIX* pM); + D3DXVECTOR4* D3DXVec4TransformArray(D3DXVECTOR4* pOut, UINT OutStride, D3DXVECTOR4* pV, UINT VStride, D3DXMATRIX* pM, UINT n); +} + +D3DXMATRIX* D3DXMatrixIdentity(D3DXMATRIX *pOut) { + debug(D3DX10_DEBUG) { + if (pOut is null) return NULL; + } + pOut.m[0][1] = pOut.m[0][2] = pOut.m[0][3] = + pOut.m[1][0] = pOut.m[1][2] = pOut.m[1][3] = + pOut.m[2][0] = pOut.m[2][1] = pOut.m[2][3] = + pOut.m[3][0] = pOut.m[3][1] = pOut.m[3][2] = 0.0; + pOut.m[0][0] = pOut.m[1][1] = pOut.m[2][2] = pOut.m[3][3] = 1.0; + return pOut; +} + + +BOOL D3DXMatrixIsIdentity(D3DXMATRIX *pM) { + debug(D3DX10_DEBUG) { + if(pM is null) return FALSE; + } + return (pM.m[0][0] == 1.0f) && (pM.m[0][1] == 0.0f) && (pM.m[0][2] == 0.0f) && (pM.m[0][3] == 0.0f) && + (pM.m[1][0] == 0.0f) && (pM.m[1][1] == 1.0f) && (pM.m[1][2] == 0.0f) && (pM.m[1][3] == 0.0f) && + (pM.m[2][0] == 0.0f) && (pM.m[2][1] == 0.0f) && (pM.m[2][2] == 1.0f) && (pM.m[2][3] == 0.0f) && + (pM.m[3][0] == 0.0f) && (pM.m[3][1] == 0.0f) && (pM.m[3][2] == 0.0f) && (pM.m[3][3] == 1.0f); +} + +extern(Windows) { + FLOAT D3DXMatrixDeterminant(D3DXMATRIX* pM); + HRESULT D3DXMatrixDecompose(D3DXVECTOR3* pOutScale, D3DXQUATERNION* pOutRotation, D3DXVECTOR3* pOutTranslation, D3DXMATRIX* pM); + D3DXMATRIX* D3DXMatrixTranspose(D3DXMATRIX* pOut, D3DXMATRIX* pM); + D3DXMATRIX* D3DXMatrixMultiply(D3DXMATRIX* pOut, D3DXMATRIX* pM1, D3DXMATRIX* pM2); + D3DXMATRIX* D3DXMatrixMultiplyTranspose(D3DXMATRIX* pOut, D3DXMATRIX* pM1, D3DXMATRIX* pM2); + D3DXMATRIX* D3DXMatrixInverse(D3DXMATRIX* pOut, FLOAT* pDeterminant, D3DXMATRIX* pM); + D3DXMATRIX* D3DXMatrixScaling(D3DXMATRIX* pOut, FLOAT sx, FLOAT sy, FLOAT sz); + D3DXMATRIX* D3DXMatrixTranslation(D3DXMATRIX* pOut, FLOAT x, FLOAT y, FLOAT z); + D3DXMATRIX* D3DXMatrixRotationX(D3DXMATRIX* pOut, FLOAT Angle); + D3DXMATRIX* D3DXMatrixRotationY(D3DXMATRIX* pOut, FLOAT Angle); + D3DXMATRIX* D3DXMatrixRotationZ(D3DXMATRIX* pOut, FLOAT Angle); + D3DXMATRIX* D3DXMatrixRotationAxis(D3DXMATRIX* pOut, D3DXVECTOR3* pV, FLOAT Angle); + D3DXMATRIX* D3DXMatrixRotationQuaternion(D3DXMATRIX* pOut, D3DXQUATERNION* pQ); + D3DXMATRIX* D3DXMatrixRotationYawPitchRoll(D3DXMATRIX* pOut, FLOAT Yaw, FLOAT Pitch, FLOAT Roll); + D3DXMATRIX* D3DXMatrixTransformation(D3DXMATRIX* pOut, D3DXVECTOR3* pScalingCenter, D3DXQUATERNION* pScalingRotation, D3DXVECTOR3* pScaling, D3DXVECTOR3* pRotationCenter, D3DXQUATERNION* pRotation, D3DXVECTOR3* pTranslation); + D3DXMATRIX* D3DXMatrixTransformation2D(D3DXMATRIX* pOut, D3DXVECTOR2* pScalingCenter, FLOAT ScalingRotation, D3DXVECTOR2* pScaling, D3DXVECTOR2* pRotationCenter, FLOAT Rotation, D3DXVECTOR2* pTranslation); + D3DXMATRIX* D3DXMatrixAffineTransformation(D3DXMATRIX* pOut, FLOAT Scaling, D3DXVECTOR3* pRotationCenter, D3DXQUATERNION* pRotation, D3DXVECTOR3* pTranslation); + D3DXMATRIX* D3DXMatrixAffineTransformation2D(D3DXMATRIX* pOut, FLOAT Scaling, D3DXVECTOR2* pRotationCenter, FLOAT Rotation, D3DXVECTOR2* pTranslation); + D3DXMATRIX* D3DXMatrixLookAtRH(D3DXMATRIX* pOut, D3DXVECTOR3* pEye, D3DXVECTOR3* pAt, D3DXVECTOR3* pUp); + D3DXMATRIX* D3DXMatrixLookAtLH(D3DXMATRIX* pOut, D3DXVECTOR3* pEye, D3DXVECTOR3* pAt, D3DXVECTOR3* pUp); + D3DXMATRIX* D3DXMatrixPerspectiveRH(D3DXMATRIX* pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf); + D3DXMATRIX* D3DXMatrixPerspectiveLH(D3DXMATRIX* pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf); + D3DXMATRIX* D3DXMatrixPerspectiveFovRH(D3DXMATRIX* pOut, FLOAT fovy, FLOAT Aspect, FLOAT zn, FLOAT zf); + D3DXMATRIX* D3DXMatrixPerspectiveFovLH(D3DXMATRIX* pOut, FLOAT fovy, FLOAT Aspect, FLOAT zn, FLOAT zf); + D3DXMATRIX* D3DXMatrixPerspectiveOffCenterRH(D3DXMATRIX* pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf); + D3DXMATRIX* D3DXMatrixPerspectiveOffCenterLH(D3DXMATRIX* pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf); + D3DXMATRIX* D3DXMatrixOrthoRH(D3DXMATRIX* pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf); + D3DXMATRIX* D3DXMatrixOrthoLH(D3DXMATRIX* pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf); + D3DXMATRIX* D3DXMatrixOrthoOffCenterRH(D3DXMATRIX* pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf); + D3DXMATRIX* D3DXMatrixOrthoOffCenterLH(D3DXMATRIX* pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, FLOAT zf); + D3DXMATRIX* D3DXMatrixShadow(D3DXMATRIX* pOut, D3DXVECTOR4* pLight, D3DXPLANE* pPlane); + D3DXMATRIX* D3DXMatrixReflect(D3DXMATRIX* pOut, D3DXPLANE* pPlane); +} + +float D3DXQuaternionLength(D3DXQUATERNION *pQ) { + debug(D3DX10_DEBUG) { + if (pQ is null) return 0.0f; + } + return sqrtf((pQ.x * pQ.x) + (pQ.y * pQ.y) + (pQ.z * pQ.z) + (pQ.w * pQ.w)); +} + +float D3DXQuaternionLengthSq(D3DXQUATERNION *pQ) { + debug(D3DX10_DEBUG) { + if(pQ is null) return 0.0f; + } + return (pQ.x * pQ.x) + (pQ.y * pQ.y) + (pQ.z * pQ.z) + (pQ.w * pQ.w); +} + +float D3DXQuaternionDot(D3DXQUATERNION *pQ1, D3DXQUATERNION *pQ2) { + debug(D3DX10_DEBUG) { + if((pQ1 is null) || (pQ2 is null)) return 0.0f; + } + return (pQ1.x * pQ2.x) + (pQ1.y * pQ2.y) + (pQ1.z * pQ2.z) + (pQ1.w * pQ2.w); +} + +D3DXQUATERNION* D3DXQuaternionIdentity(D3DXQUATERNION *pOut) { + debug(D3DX10_DEBUG) { + if(pOut is null) return null; + } + pOut.x = pOut.y = pOut.z = 0.0f; + pOut.w = 1.0f; + return pOut; +} + +bool D3DXQuaternionIsIdentity(D3DXQUATERNION *pQ) { + debug(D3DX10_DEBUG) { + if(pQ is null) return false; + } + return (pQ.x == 0.0f) && (pQ.y == 0.0f) && (pQ.z == 0.0f) && (pQ.w == 1.0f); +} + +D3DXQUATERNION* D3DXQuaternionConjugate(D3DXQUATERNION *pOut, D3DXQUATERNION *pQ) { + debug(D3DX10_DEBUG) { + if((pOut is null) || (pQis is null)) return null; + } + pOut.x = -pQ.x; + pOut.y = -pQ.y; + pOut.z = -pQ.z; + pOut.w = pQ.w; + return pOut; +} + +extern(Windows) { + void D3DXQuaternionToAxisAngle(D3DXQUATERNION* pQ, D3DXVECTOR3* pAxis, FLOAT* pAngle); + D3DXQUATERNION* D3DXQuaternionRotationMatrix(D3DXQUATERNION* pOut, D3DXMATRIX* pM); + D3DXQUATERNION* D3DXQuaternionRotationAxis(D3DXQUATERNION* pOut, D3DXVECTOR3* pV, FLOAT Angle); + D3DXQUATERNION* D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION* pOut, FLOAT Yaw, FLOAT Pitch, FLOAT Roll); + D3DXQUATERNION* D3DXQuaternionMultiply(D3DXQUATERNION* pOut, D3DXQUATERNION* pQ1, D3DXQUATERNION* pQ2); + D3DXQUATERNION* D3DXQuaternionNormalize(D3DXQUATERNION* pOut, D3DXQUATERNION* pQ); + D3DXQUATERNION* D3DXQuaternionInverse(D3DXQUATERNION* pOut, D3DXQUATERNION* pQ); + D3DXQUATERNION* D3DXQuaternionLn(D3DXQUATERNION* pOut, D3DXQUATERNION* pQ); + D3DXQUATERNION* D3DXQuaternionExp(D3DXQUATERNION* pOut, D3DXQUATERNION* pQ); + D3DXQUATERNION* D3DXQuaternionSlerp(D3DXQUATERNION* pOut, D3DXQUATERNION* pQ1, D3DXQUATERNION* pQ2, FLOAT t); + D3DXQUATERNION* D3DXQuaternionSquad(D3DXQUATERNION* pOut, D3DXQUATERNION* pQ1, D3DXQUATERNION* pA, D3DXQUATERNION* pB, D3DXQUATERNION* pC, FLOAT t); + void D3DXQuaternionSquadSetup(D3DXQUATERNION* pAOut, D3DXQUATERNION* pBOut, D3DXQUATERNION* pCOut, D3DXQUATERNION* pQ0, D3DXQUATERNION* pQ1, D3DXQUATERNION* pQ2, D3DXQUATERNION* pQ3); + D3DXQUATERNION* D3DXQuaternionBaryCentric(D3DXQUATERNION* pOut, D3DXQUATERNION* pQ1, D3DXQUATERNION* pQ2, D3DXQUATERNION* pQ3, FLOAT f, FLOAT g); +} + +float D3DXPlaneDot(D3DXPLANE *pP, D3DXVECTOR4 *pV) { + debug(D3DX10_DEBUG) { + if((pP is null) || (pV is null)) return 0.0f; + } + return (pP.a * pV.x) + (pP.b * pV.y) + (pP.c * pV.z) + (pP.d * pV.w); +} + +float D3DXPlaneDotCoord(D3DXPLANE *pP, D3DXVECTOR3 *pV) { + debug(D3DX10_DEBUG) { + if((pP is null) || (pV is null)) return 0.0f; + } + return (pP.a * pV.x) + (pP.b * pV.y) + (pP.c * pV.z) + pP.d; +} + +float D3DXPlaneDotNormal(D3DXPLANE *pP, D3DXVECTOR3 *pV) { + debug(D3DX10_DEBUG) { + if((pP is null) || (pV is null)) return 0.0f; + } + return (pP.a * pV.x) + (pP.b * pV.y) + (pP.c * pV.z); +} + +D3DXPLANE* D3DXPlaneScale(D3DXPLANE *pOut, D3DXPLANE *pP, float s) { + debug(D3DX10_DEBUG) { + if((pOut is null) || (pP is null)) return null; + } + pOut.a = pP.a * s; + pOut.b = pP.b * s; + pOut.c = pP.c * s; + pOut.d = pP.d * s; + return pOut; +} + +extern(Windows) { + D3DXPLANE* D3DXPlaneNormalize(D3DXPLANE* pOut, D3DXPLANE* pP); + D3DXVECTOR3* D3DXPlaneIntersectLine(D3DXVECTOR3* pOut, D3DXPLANE* pP, D3DXVECTOR3* pV1, D3DXVECTOR3* pV2); + D3DXPLANE* D3DXPlaneFromPointNormal(D3DXPLANE* pOut, D3DXVECTOR3* pPoint, D3DXVECTOR3* pNormal); + D3DXPLANE* D3DXPlaneFromPoints(D3DXPLANE* pOut, D3DXVECTOR3* pV1, D3DXVECTOR3* pV2, D3DXVECTOR3* pV3); + D3DXPLANE* D3DXPlaneTransform(D3DXPLANE* pOut, D3DXPLANE* pP, D3DXMATRIX* pM); + D3DXPLANE* D3DXPlaneTransformArray(D3DXPLANE* pOut, UINT OutStride, D3DXPLANE* pP, UINT PStride, D3DXMATRIX* pM, UINT n); +} + +D3DXCOLOR* D3DXColorNegative(D3DXCOLOR* pOut, D3DXCOLOR* pC) { + debug(D3DX10_DEBUG) { + if((pOut is null) || (pC is null)) return null; + } + pOut.r = 1.0f - pC.r; + pOut.g = 1.0f - pC.g; + pOut.b = 1.0f - pC.b; + pOut.a = pC.a; + return pOut; +} + +D3DXCOLOR* D3DXColorAdd(D3DXCOLOR* pOut, D3DXCOLOR* pC1, D3DXCOLOR* pC2) { + debug(D3DX10_DEBUG) { + if((pOut is null) || (pC1 is null) || (pC2 is null)) return null; + } + pOut.r = pC1.r + pC2.r; + pOut.g = pC1.g + pC2.g; + pOut.b = pC1.b + pC2.b; + pOut.a = pC1.a + pC2.a; + return pOut; +} + +D3DXCOLOR* D3DXColorSubtract(D3DXCOLOR* pOut, D3DXCOLOR* pC1, D3DXCOLOR* pC2) { + debug(D3DX10_DEBUG) { + if((pOut is null) || (pC1 is null) || (pC2 is null)) return null; + } + pOut.r = pC1.r - pC2.r; + pOut.g = pC1.g - pC2.g; + pOut.b = pC1.b - pC2.b; + pOut.a = pC1.a - pC2.a; + return pOut; +} + +D3DXCOLOR* D3DXColorScale(D3DXCOLOR* pOut, D3DXCOLOR* pC, float s) { + debug(D3DX10_DEBUG) { + if((pOut is null) || (pC is null)) return null; + } + pOut.r = pC.r * s; + pOut.g = pC.g * s; + pOut.b = pC.b * s; + pOut.a = pC.a * s; + return pOut; +} + +D3DXCOLOR* D3DXColorModulate(D3DXCOLOR* pOut, D3DXCOLOR* pC1, D3DXCOLOR* pC2) { + debug(D3DX10_DEBUG) { + if((pOut is null) || (pC1 is null) || (pC2 is null)) return null; + } + pOut.r = pC1.r * pC2.r; + pOut.g = pC1.g * pC2.g; + pOut.b = pC1.b * pC2.b; + pOut.a = pC1.a * pC2.a; + return pOut; +} + +D3DXCOLOR* D3DXColorLerp(D3DXCOLOR* pOut, D3DXCOLOR* pC1, D3DXCOLOR* pC2, float s) { + debug(D3DX10_DEBUG) { + if((pOut is null) || (pC1 is null) || (pC2 is null)) return null; + } + pOut.r = pC1.r + s * (pC2.r - pC1.r); + pOut.g = pC1.g + s * (pC2.g - pC1.g); + pOut.b = pC1.b + s * (pC2.b - pC1.b); + pOut.a = pC1.a + s * (pC2.a - pC1.a); + return pOut; +} + +extern(Windows) { + D3DXCOLOR* D3DXColorAdjustSaturation(D3DXCOLOR* pOut, D3DXCOLOR* pC, float s); + D3DXCOLOR* D3DXColorAdjustContrast(D3DXCOLOR* pOut, D3DXCOLOR* pC, float c); + FLOAT D3DXFresnelTerm(float CosTheta, float RefractionIndex); +} + +extern (C) const GUID IID_ID3DXMatrixStack = {0xc7885ba7, 0xf990, 0x4fe7, [0x92, 0x2d, 0x85, 0x15, 0xe4, 0x77, 0xdd, 0x85]}; + +interface ID3DXMatrixStack : IUnknown { + extern(Windows) : + HRESULT Pop(); + HRESULT Push(); + HRESULT LoadIdentity(); + HRESULT LoadMatrix(D3DXMATRIX* pM ); + HRESULT MultMatrix(D3DXMATRIX* pM ); + HRESULT MultMatrixLocal(D3DXMATRIX* pM ); + HRESULT RotateAxis(D3DXVECTOR3* pV, float Angle); + HRESULT RotateAxisLocal(D3DXVECTOR3* pV, float Angle); + HRESULT RotateYawPitchRoll(float Yaw, float Pitch, float Roll); + HRESULT RotateYawPitchRollLocal(float Yaw, float Pitch, float Roll); + HRESULT Scale(float x, float y, float z); + HRESULT ScaleLocal(float x, float y, float z); + HRESULT Translate(float x, float y, float z ); + HRESULT TranslateLocal(float x, float y, float z); + D3DXMATRIX* GetTop(); +} + +//TODO extern(Windows) HRESULT D3DXCreateMatrixStack(UINT Flags, D3DXMATRIXSTACK* ppStack); + +const D3DXSH_MINORDER = 2; +const D3DXSH_MAXORDER = 6; + +extern(Windows) { + float* D3DXSHEvalDirection(float* pOut, UINT Order, D3DXVECTOR3* pDir); + float* D3DXSHRotate(float* pOut, UINT Order, D3DXMATRIX* pMatrix, float* pIn); + float* D3DXSHRotateZ(float* pOut, UINT Order, float Angle, float* pIn); + float* D3DXSHAdd(float* pOut, UINT Order, float* pA, float* pB); + float* D3DXSHScale(float* pOut, UINT Order, float* pIn, float Scale); + float D3DXSHDot(UINT Order, float* pA, float* pB); + float* D3DXSHMultiply2(float* pOut, float* pF, float* pG); + float* D3DXSHMultiply3(float* pOut, float* pF, float* pG); + float* D3DXSHMultiply4(float* pOut, float* pF, float* pG); + float* D3DXSHMultiply5(float* pOut, float* pF, float* pG); + float* D3DXSHMultiply6(float* pOut, float* pF, float* pG); + HRESULT D3DXSHEvalDirectionalLight(UINT Order, D3DXVECTOR3* pDir, float RIntensity, float GIntensity, float BIntensity, float* pROut, float* pGOut, float* pBOut); + HRESULT D3DXSHEvalSphericalLight(UINT Order, D3DXVECTOR3* pPos, float Radius, float RIntensity, float GIntensity, float BIntensity, float* pROut, float* pGOut, float* pBOut); + HRESULT D3DXSHEvalConeLight(UINT Order, D3DXVECTOR3* pDir, float Radius, float RIntensity, float GIntensity, float BIntensity, float* pROut, float* pGOut, float* pBOut); + HRESULT D3DXSHEvalHemisphereLight(UINT Order, D3DXVECTOR3* pDir, D3DXCOLOR Top, D3DXCOLOR Bottom, float* pROut, float* pGOut, float* pBOut); + BOOL D3DXIntersectTri(D3DXVECTOR3* p0, D3DXVECTOR3* p1, D3DXVECTOR3* p2, D3DXVECTOR3* pRayPos, D3DXVECTOR3* pRayDir, float* pU, float* pV, float* pDist); + BOOL D3DXSphereBoundProbe(D3DXVECTOR3* pCenter, float Radius, D3DXVECTOR3* pRayPosition, D3DXVECTOR3* pRayDirection); + BOOL D3DXBoxBoundProbe(D3DXVECTOR3* pMin, D3DXVECTOR3* pMax, D3DXVECTOR3* pRayPosition, D3DXVECTOR3* pRayDirection); + HRESULT D3DXComputeBoundingSphere(D3DXVECTOR3* pFirstPosition, DWORD NumVertices, DWORD dwStride, D3DXVECTOR3* pCenter, float* pRadius); + HRESULT D3DXComputeBoundingBox(D3DXVECTOR3* pFirstPosition, DWORD NumVertices, DWORD dwStride, D3DXVECTOR3* pMin, D3DXVECTOR3* pMax); +} + +enum D3DX_CPU_OPTIMIZATION { + D3DX_NOT_OPTIMIZED = 0, + D3DX_3DNOW_OPTIMIZED, + D3DX_SSE2_OPTIMIZED, + D3DX_SSE_OPTIMIZED +} + +extern(Windows) D3DX_CPU_OPTIMIZATION D3DXCpuOptimizations(bool Enable); diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3dx10mesh.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3dx10mesh.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,163 @@ +/***********************************************************************\ +* d3dx10mesh.d * +* * +* Windows API header module * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.directx.d3dx10mesh; + +private import win32.windows; +private import win32.directx.d3d10; +private import win32.directx.d3dx10; + +extern(C) const GUID IID_ID3DX10BaseMesh = {0x7ed943dd, 0x52e8, 0x40b5, [0xa8, 0xd8, 0x76, 0x68, 0x5c, 0x40, 0x63, 0x30]}; +extern(C) const GUID IID_ID3DX10MeshBuffer = {0x4b0d117, 0x1041, 0x46b1, [0xaa, 0x8a, 0x39, 0x52, 0x84, 0x8b, 0xa2, 0x2e]}; +extern(C) const GUID IID_ID3DX10Mesh = {0x4020e5c2, 0x1403, 0x4929, [0x88, 0x3f, 0xe2, 0xe8, 0x49, 0xfa, 0xc1, 0x95]}; +extern(C) const GUID IID_ID3DX10PMesh = {0x8875769a, 0xd579, 0x4088, [0xaa, 0xeb, 0x53, 0x4d, 0x1a, 0xd8, 0x4e, 0x96]}; +extern(C) const GUID IID_ID3DX10SPMesh = {0x667ea4c7, 0xf1cd, 0x4386, [0xb5, 0x23, 0x7c, 0x2, 0x90, 0xb8, 0x3c, 0xc5]}; +extern(C) const GUID IID_ID3DX10PatchMesh = {0x3ce6cc22, 0xdbf2, 0x44f4, [0x89, 0x4d, 0xf9, 0xc3, 0x4a, 0x33, 0x71, 0x39]}; + +enum D3DX10_MESH { + D3DX10_MESH_32_BIT = 0x001, + D3DX10_MESH_GS_ADJACENCY = 0x004 +} + +struct D3DX10_ATTRIBUTE_RANGE { + UINT AttribId; + UINT FaceStart; + UINT FaceCount; + UINT VertexStart; + UINT VertexCount; +} + +enum D3DX10_MESH_DISCARD_FLAGS { + D3DX10_MESH_DISCARD_ATTRIBUTE_BUFFER = 0x01, + D3DX10_MESH_DISCARD_ATTRIBUTE_TABLE = 0x02, + D3DX10_MESH_DISCARD_POINTREPS = 0x04, + D3DX10_MESH_DISCARD_ADJACENCY = 0x08, + D3DX10_MESH_DISCARD_DEVICE_BUFFERS = 0x10 +} + +struct D3DX10_WELD_EPSILONS { + FLOAT Position; + FLOAT BlendWeights; + FLOAT Normal; + FLOAT PSize; + FLOAT Specular; + FLOAT Diffuse; + FLOAT[8] Texcoord; + FLOAT Tangent; + FLOAT Binormal; + FLOAT TessFactor; +} + +struct D3DX10_INTERSECT_INFO { + UINT FaceIndex; + FLOAT U; + FLOAT V; + FLOAT Dist; +} + +interface ID3DX10MeshBuffer : IUnknown { + extern(Windows) : + HRESULT Map(void** ppData, SIZE_T* pSize); + HRESULT Unmap(); + SIZE_T GetSize(); +} + +interface ID3DX10Mesh : IUnknown { + extern(Windows) : + UINT GetFaceCount(); + UINT GetVertexCount(); + UINT GetVertexBufferCount(); + UINT GetFlags(); + HRESULT GetVertexDescription(D3D10_INPUT_ELEMENT_DESC** ppDesc, UINT* pDeclCount); + HRESULT SetVertexData(UINT iBuffer, void* pData); + HRESULT GetVertexBuffer(UINT iBuffer, ID3DX10MeshBuffer** ppVertexBuffer); + HRESULT SetIndexData(void* pData, UINT cIndices); + HRESULT GetIndexBuffer(ID3DX10MeshBuffer** ppIndexBuffer); + HRESULT SetAttributeData(UINT* pData); + HRESULT GetAttributeBuffer(ID3DX10MeshBuffer** ppAttributeBuffer); + HRESULT SetAttributeTable(D3DX10_ATTRIBUTE_RANGE* pAttribTable, UINT cAttribTableSize); + HRESULT GetAttributeTable(D3DX10_ATTRIBUTE_RANGE* pAttribTable, UINT* pAttribTableSize); + HRESULT GenerateAdjacencyAndPointReps(FLOAT Epsilon); + HRESULT GenerateGSAdjacency(); + HRESULT SetAdjacencyData(UINT* pAdjacency); + HRESULT GetAdjacencyBuffer(ID3DX10MeshBuffer** ppAdjacency); + HRESULT SetPointRepData(UINT* pPointReps); + HRESULT GetPointRepBuffer(ID3DX10MeshBuffer** ppPointReps); + HRESULT Discard(D3DX10_MESH_DISCARD_FLAGS dwDiscard); + HRESULT CloneMesh(UINT Flags, LPCSTR pPosSemantic, D3D10_INPUT_ELEMENT_DESC* pDesc, UINT DeclCount, ID3DX10Mesh** ppCloneMesh); + HRESULT Optimize(UINT Flags, UINT * pFaceRemap, ID3D10Blob* ppVertexRemap); + HRESULT GenerateAttributeBufferFromTable(); + HRESULT Intersect(D3DXVECTOR3* pRayPos, D3DXVECTOR3* pRayDir, UINT* pHitCount, UINT* pFaceIndex, float* pU, float* pV, float* pDist, ID3D10Blob* ppAllHits); + HRESULT IntersectSubset(UINT AttribId, D3DXVECTOR3* pRayPos, D3DXVECTOR3* pRayDir, UINT* pHitCount, UINT* pFaceIndex, float* pU, float* pV, float* pDist, ID3D10Blob* ppAllHits); + HRESULT CommitToDevice(); + HRESULT DrawSubset(UINT AttribId); + HRESULT DrawSubsetInstanced(UINT AttribId, UINT InstanceCount, UINT StartInstanceLocation); + HRESULT GetDeviceVertexBuffer(UINT iBuffer, ID3D10Buffer** ppVertexBuffer); + HRESULT GetDeviceIndexBuffer(ID3D10Buffer** ppIndexBuffer); +} + +HRESULT D3DX10CreateMesh(ID3D10Device* pDevice, D3D10_INPUT_ELEMENT_DESC* pDeclaration, UINT DeclCount, LPCSTR pPositionSemantic, UINT VertexCount, UINT FaceCount, UINT Options, ID3DX10Mesh** ppMesh); + +enum D3DX10_MESHOPT { + D3DX10_MESHOPT_COMPACT = 0x01000000, + D3DX10_MESHOPT_ATTR_SORT = 0x02000000, + D3DX10_MESHOPT_VERTEX_CACHE = 0x04000000, + D3DX10_MESHOPT_STRIP_REORDER = 0x08000000, + D3DX10_MESHOPT_IGNORE_VERTS = 0x10000000, + D3DX10_MESHOPT_DO_NOT_SPLIT = 0x20000000, + D3DX10_MESHOPT_DEVICE_INDEPENDENT = 0x00400000 +} + +extern(C) const GUID IID_ID3DX10SkinInfo = {0x420bd604, 0x1c76, 0x4a34, [0xa4, 0x66, 0xe4, 0x5d, 0x6, 0x58, 0xa3, 0x2c]}; + +const D3DX10_SKININFO_NO_SCALING = 0; +const D3DX10_SKININFO_SCALE_TO_1 = 1; +const D3DX10_SKININFO_SCALE_TO_TOTAL = 2; + +struct D3DX10_SKINNING_CHANNEL { + UINT SrcOffset; + UINT DestOffset; + BOOL IsNormal; +} + +interface ID3DX10SkinInfo : IUnknown { + extern(Windows) : + HRESULT QueryInterface(REFIID iid, LPVOID* ppv); + ULONG AddRef(); + ULONG Release(); + UINT GetNumVertices(); + UINT GetNumBones(); + UINT GetMaxBoneInfluences(); + HRESULT AddVertices(UINT Count); + HRESULT RemapVertices(UINT NewVertexCount, UINT* pVertexRemap); + HRESULT AddBones(UINT Count); + HRESULT RemoveBone(UINT Index); + HRESULT RemapBones(UINT NewBoneCount, UINT* pBoneRemap); + HRESULT AddBoneInfluences(UINT BoneIndex, UINT InfluenceCount, UINT* pIndices, float* pWeights); + HRESULT ClearBoneInfluences(UINT BoneIndex); + UINT GetBoneInfluenceCount(UINT BoneIndex); + HRESULT GetBoneInfluences(UINT BoneIndex, UINT Offset, UINT Count, UINT* pDestIndices, float* pDestWeights); + HRESULT FindBoneInfluenceIndex(UINT BoneIndex, UINT VertexIndex, UINT* pInfluenceIndex); + HRESULT SetBoneInfluence(UINT BoneIndex, UINT InfluenceIndex, float Weight); + HRESULT GetBoneInfluence(UINT BoneIndex, UINT InfluenceIndex, float* pWeight); + HRESULT Compact(UINT MaxPerVertexInfluences, UINT ScaleMode, float MinWeight); + HRESULT DoSoftwareSkinning(UINT StartVertex, UINT VertexCount, void* pSrcVertices, UINT SrcStride, void* pDestVertices, UINT DestStride, D3DXMATRIX* pBoneMatrices, D3DXMATRIX* pInverseTransposeBoneMatrices, D3DX10_SKINNING_CHANNEL* pChannelDescs, UINT NumChannels); +} + +HRESULT D3DX10CreateSkinInfo(ID3DX10SkinInfo* ppSkinInfo); + +struct D3DX10_ATTRIBUTE_WEIGHTS { + FLOAT Position; + FLOAT Boundary; + FLOAT Normal; + FLOAT Diffuse; + FLOAT Specular; + FLOAT[8] Texcoord; + FLOAT Tangent; + FLOAT Binormal; +} + diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3dx10tex.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3dx10tex.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,192 @@ +/***********************************************************************\ +* d3dx10tex.d * +* * +* Windows API header module * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.directx.d3dx10tex; + +private import win32.windows; +private import win32.directx.d3d10; +private import win32.directx.d3dx10core; + +enum D3DX10_FILTER_FLAG { + D3DX10_FILTER_NONE = 0x000001, + D3DX10_FILTER_POINT = 0x000002, + D3DX10_FILTER_LINEAR = 0x000003, + D3DX10_FILTER_TRIANGLE = 0x000004, + D3DX10_FILTER_BOX = 0x000005, + D3DX10_FILTER_MIRROR_U = 0x010000, + D3DX10_FILTER_MIRROR_V = 0x020000, + D3DX10_FILTER_MIRROR_W = 0x040000, + D3DX10_FILTER_MIRROR = 0x070000, + D3DX10_FILTER_DITHER = 0x080000, + D3DX10_FILTER_DITHER_DIFFUSION = 0x100000, + D3DX10_FILTER_SRGB_IN = 0x200000, + D3DX10_FILTER_SRGB_OUT = 0x400000, + D3DX10_FILTER_SRGB = 0x600000 +} + +enum D3DX10_NORMALMAP_FLAG { + D3DX10_NORMALMAP_MIRROR_U = 0x010000, + D3DX10_NORMALMAP_MIRROR_V = 0x020000, + D3DX10_NORMALMAP_MIRROR = 0x030000, + D3DX10_NORMALMAP_INVERTSIGN = 0x080000, + D3DX10_NORMALMAP_COMPUTE_OCCLUSION = 0x100000 +} + +enum D3DX10_CHANNEL_FLAG { + D3DX10_CHANNEL_RED = 1, + D3DX10_CHANNEL_BLUE = 2, + D3DX10_CHANNEL_GREEN = 4, + D3DX10_CHANNEL_ALPHA = 8, + D3DX10_CHANNEL_LUMINANCE = 16 +} + +enum D3DX10_IMAGE_FILE_FORMAT { + D3DX10_IFF_BMP = 0, + D3DX10_IFF_JPG = 1, + D3DX10_IFF_PNG = 3, + D3DX10_IFF_DDS = 4, + D3DX10_IFF_TIFF = 10, + D3DX10_IFF_GIF = 11, + D3DX10_IFF_WMP = 12, + D3DX10_IFF_FORCE_DWORD = 0x7fffffff +} + +enum D3DX10_SAVE_TEXTURE_FLAG { + D3DX10_STF_USEINPUTBLOB = 1 +} + +struct D3DX10_IMAGE_INFO { + UINT Width; + UINT Height; + UINT Depth; + UINT ArraySize; + UINT MipLevels; + UINT MiscFlags; + DXGI_FORMAT Format; + D3D10_RESOURCE_DIMENSION ResourceDimension; + D3DX10_IMAGE_FILE_FORMAT ImageFileFormat; +} + +struct D3DX10_IMAGE_LOAD_INFO { + UINT Width; + UINT Height; + UINT Depth; + UINT FirstMipLevel; + UINT MipLevels; + D3D10_USAGE Usage; + UINT BindFlags; + UINT CpuAccessFlags; + UINT MiscFlags; + DXGI_FORMAT Format; + UINT Filter; + UINT MipFilter; + D3DX10_IMAGE_INFO* pSrcInfo; +} + +HRESULT D3DX10GetImageInfoFromFileA(LPCSTR pSrcFile, ID3DX10ThreadPump pPump, + D3DX10_IMAGE_INFO* pSrcInfo, HRESULT* pHResult); +HRESULT D3DX10GetImageInfoFromFileW(LPCWSTR pSrcFile, ID3DX10ThreadPump pPump, + D3DX10_IMAGE_INFO* pSrcInfo, HRESULT* pHResult); + +HRESULT D3DX10GetImageInfoFromResourceA(HMODULE hSrcModule, + LPCSTR pSrcResource, ID3DX10ThreadPump pPump, D3DX10_IMAGE_INFO* pSrcInfo, + HRESULT* pHResult); +HRESULT D3DX10GetImageInfoFromResourceW(HMODULE hSrcModule, + LPCWSTR pSrcResource, ID3DX10ThreadPump pPump, D3DX10_IMAGE_INFO* pSrcInfo, + HRESULT* pHResult); + +HRESULT D3DX10GetImageInfoFromMemory(LPCVOID pSrcData, SIZE_T SrcDataSize, + ID3DX10ThreadPump pPump, D3DX10_IMAGE_INFO* pSrcInfo, HRESULT* pHResult); + +HRESULT D3DX10CreateShaderResourceViewFromFileA(ID3D10Device pDevice, + LPCSTR pSrcFile, D3DX10_IMAGE_LOAD_INFO* pLoadInfo, ID3DX10ThreadPump pPump, + ID3D10ShaderResourceView* ppShaderResourceView, HRESULT* pHResult); +HRESULT D3DX10CreateShaderResourceViewFromFileW(ID3D10Device pDevice, + LPCWSTR pSrcFile, D3DX10_IMAGE_LOAD_INFO* pLoadInfo, ID3DX10ThreadPump pPump, + ID3D10ShaderResourceView* ppShaderResourceView, HRESULT* pHResult); + +HRESULT D3DX10CreateTextureFromFileA(ID3D10Device pDevice, LPCSTR pSrcFile, + D3DX10_IMAGE_LOAD_INFO* pLoadInfo, ID3DX10ThreadPump pPump, + ID3D10Resource* ppTexture, HRESULT* pHResult); +HRESULT D3DX10CreateTextureFromFileW(ID3D10Device pDevice, LPCWSTR pSrcFile, + D3DX10_IMAGE_LOAD_INFO* pLoadInfo, ID3DX10ThreadPump pPump, + ID3D10Resource* ppTexture, HRESULT* pHResult); + +HRESULT D3DX10CreateShaderResourceViewFromResourceA(ID3D10Device pDevice, + HMODULE hSrcModule, LPCSTR pSrcResource, D3DX10_IMAGE_LOAD_INFO* pLoadInfo, + ID3DX10ThreadPump pPump, ID3D10ShaderResourceView* ppShaderResourceView, + HRESULT* pHResult); +HRESULT D3DX10CreateShaderResourceViewFromResourceW(ID3D10Device pDevice, + HMODULE hSrcModule, LPCWSTR pSrcResource, D3DX10_IMAGE_LOAD_INFO* pLoadInfo, + ID3DX10ThreadPump pPump, ID3D10ShaderResourceView* ppShaderResourceView, + HRESULT* pHResult); + +HRESULT D3DX10CreateTextureFromResourceA(ID3D10Device pDevice, + HMODULE hSrcModule, LPCSTR pSrcResource, D3DX10_IMAGE_LOAD_INFO* pLoadInfo, + ID3DX10ThreadPump pPump, ID3D10Resource* ppTexture, HRESULT* pHResult); +HRESULT D3DX10CreateTextureFromResourceW(ID3D10Device pDevice, + HMODULE hSrcModule, LPCWSTR pSrcResource, D3DX10_IMAGE_LOAD_INFO* pLoadInfo, + ID3DX10ThreadPump pPump, ID3D10Resource* ppTexture, HRESULT* pHResult); + +HRESULT D3DX10CreateShaderResourceViewFromMemory(ID3D10Device pDevice, + LPCVOID pSrcData, SIZE_T SrcDataSize, D3DX10_IMAGE_LOAD_INFO* pLoadInfo, + ID3DX10ThreadPump pPump, ID3D10ShaderResourceView* ppShaderResourceView, + HRESULT* pHResult); + +HRESULT D3DX10CreateTextureFromMemory(ID3D10Device pDevice, LPCVOID pSrcData, + SIZE_T SrcDataSize, D3DX10_IMAGE_LOAD_INFO* pLoadInfo, + ID3DX10ThreadPump pPump, ID3D10Resource* ppTexture, HRESULT* pHResult); + +struct D3DX10_TEXTURE_LOAD_INFO { + D3D10_BOX* pSrcBox; + D3D10_BOX* pDstBox; + UINT SrcFirstMip; + UINT DstFirstMip; + UINT NumMips; + UINT SrcFirstElement; + UINT DstFirstElement; + UINT NumElements; + UINT Filter; + UINT MipFilter; +} + +HRESULT D3DX10LoadTextureFromTexture(ID3D10Resource pSrcTexture, + D3DX10_TEXTURE_LOAD_INFO* pLoadInfo, ID3D10Resource pDstTexture); + +HRESULT D3DX10FilterTexture(ID3D10Resource pTexture, UINT SrcLevel, UINT MipFilter); + +HRESULT D3DX10SaveTextureToFileA(ID3D10Resource pSrcTexture, + D3DX10_IMAGE_FILE_FORMAT DestFormat, LPCSTR pDestFile); +HRESULT D3DX10SaveTextureToFileW(ID3D10Resource pSrcTexture, + D3DX10_IMAGE_FILE_FORMAT DestFormat, LPCWSTR pDestFile); + +HRESULT D3DX10SaveTextureToMemory(ID3D10Resource pSrcTexture, + D3DX10_IMAGE_FILE_FORMAT DestFormat, ID3D10Blob* ppDestBuf, UINT Flags); + +HRESULT D3DX10ComputeNormalMap(ID3D10Texture2D pSrcTexture, UINT Flags, + UINT Channel, FLOAT Amplitude, ID3D10Texture2D pDestTexture); + +HRESULT D3DX10SHProjectCubeMap(UINT Order, ID3D10Texture2D pCubeMap, + FLOAT* pROut, FLOAT* pGOut, FLOAT* pBOut); + +version(Unicode) { + alias D3DX10GetImageInfoFromFileW D3DX10GetImageInfoFromFile; + alias D3DX10GetImageInfoFromResourceW D3DX10GetImageInfoFromResource; + alias D3DX10CreateShaderResourceViewFromFileW D3DX10CreateShaderResourceViewFromFile; + alias D3DX10CreateTextureFromFileW D3DX10CreateTextureFromFile; + alias D3DX10CreateShaderResourceViewFromResourceW D3DX10CreateShaderResourceViewFromResource; + alias D3DX10CreateTextureFromResourceW D3DX10CreateTextureFromResource; + alias D3DX10SaveTextureToFileW D3DX10SaveTextureToFile; +} else { + alias D3DX10GetImageInfoFromFileA D3DX10GetImageInfoFromFile; + alias D3DX10GetImageInfoFromResourceA D3DX10GetImageInfoFromResource; + alias D3DX10CreateShaderResourceViewFromFileA D3DX10CreateShaderResourceViewFromFile; + alias D3DX10CreateTextureFromFileA D3DX10CreateTextureFromFile; + alias D3DX10CreateShaderResourceViewFromResourceA D3DX10CreateShaderResourceViewFromResource; + alias D3DX10CreateTextureFromResourceA D3DX10CreateTextureFromResource; + alias D3DX10SaveTextureToFileA D3DX10SaveTextureToFile; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3dx9.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3dx9.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1990 @@ +// D3DX Types and Constants --------------------------------------------------------------------------------------- + +module win32.directx.d3dx9; + +public import win32.directx.d3d9; +public import win32.windows; + +alias D3DMATRIX D3DXMATRIX; + +const uint MAXD3DDECLLENGTH = 64; +const uint MAX_FVF_DECL_SIZE = MAXD3DDECLLENGTH + 1; + +align(4) struct D3DXATTRIBUTERANGE +{ + DWORD AttribId; + DWORD FaceStart; + DWORD FaceCount; + DWORD VertexStart; + DWORD VertexCount; +} + +align(4) struct D3DXVECTOR2 +{ + float x = 0, y = 0; + + static D3DXVECTOR2 opCall(float x, float y) + { + D3DXVECTOR2 v; + v.x = x; + v.y = y; + return v; + } +} + +alias D3DVECTOR D3DXVECTOR3; + +align(4) struct D3DXVECTOR4 +{ + float x = 0, y = 0, z = 0, w = 0; + + static D3DXVECTOR4 opCall(float x, float y, float z, float w) + { + D3DXVECTOR4 v; + v.x = x; + v.y = y; + v.z = z; + v.w = w; + return v; + } +} + +align(4) struct D3DXQUATERNION +{ + float x = 0, y = 0, z = 0, w = 0; +} + +align(4) struct D3DXFRAME +{ + LPSTR Name; + D3DXMATRIX TransformationMatrix; + + D3DXMESHCONTAINER* pMeshContainer; + + D3DXFRAME *pFrameSibling; + D3DXFRAME *pFrameFirstChild; +} + +align(4) struct D3DXMESHCONTAINER +{ + LPSTR Name; + + D3DXMESHDATA MeshData; + + D3DXMATERIAL* pMaterials; + D3DXEFFECTINSTANCE* pEffects; + DWORD NumMaterials; + DWORD *pAdjacency; + + ID3DXSkinInfo pSkinInfo; + + D3DXMESHCONTAINER* pNextMeshContainer; +} + +align(4) struct D3DXMESHDATA +{ + D3DXMESHDATATYPE Type; + + // current mesh data interface + union + { + ID3DXMesh pMesh; + ID3DXPMesh pPMesh; + ID3DXPatchMesh pPatchMesh; + } +} + +alias uint D3DXMESHDATATYPE; +enum : uint +{ + D3DXMESHTYPE_MESH = 0x001, // Normal ID3DXMesh data + D3DXMESHTYPE_PMESH = 0x002, // Progressive Mesh - ID3DXPMesh + D3DXMESHTYPE_PATCHMESH = 0x003 // Patch Mesh - ID3DXPatchMesh +} + +align(4) struct D3DXMATERIAL +{ + D3DMATERIAL9 MatD3D; + LPSTR pTextureFilename; +} + +alias uint D3DXEFFECTDEFAULTTYPE; +enum : uint +{ + D3DXEDT_STRING = 0x1, // pValue points to a null terminated ASCII string + D3DXEDT_FLOATS = 0x2, // pValue points to an array of floats - number of floats is NumBytes / sizeof(float) + D3DXEDT_DWORD = 0x3 // pValue points to a DWORD +} + +align(4) struct D3DXEFFECTDEFAULT +{ + LPSTR pParamName; + D3DXEFFECTDEFAULTTYPE Type; // type of the data pointed to by pValue + DWORD NumBytes; // size in bytes of the data pointed to by pValue + LPVOID pValue; // data for the default of the effect +} + +align(4) struct D3DXEFFECTINSTANCE +{ + LPSTR pEffectFilename; + DWORD NumDefaults; + D3DXEFFECTDEFAULT* pDefaults; +} + +alias uint D3DXPATCHMESHTYPE; +enum : uint +{ + D3DXPATCHMESH_RECT = 0x001, + D3DXPATCHMESH_TRI = 0x002, + D3DXPATCHMESH_NPATCH = 0x003 +} + +align(4) struct D3DXPATCHINFO +{ + D3DXPATCHMESHTYPE PatchType; + D3DDEGREETYPE Degree; + D3DBASISTYPE Basis; +} + +const uint LF_FACESIZE = 32; + +align(4) struct D3DXFONT_DESCA +{ + INT Height; + UINT Width; + UINT Weight; + UINT MipLevels; + BOOL Italic; + BYTE CharSet; + BYTE OutputPrecision; + BYTE Quality; + BYTE PitchAndFamily; + CHAR FaceName[LF_FACESIZE]; +} + +align(4) struct D3DXFONT_DESCW +{ + INT Height; + UINT Width; + UINT Weight; + UINT MipLevels; + BOOL Italic; + BYTE CharSet; + BYTE OutputPrecision; + BYTE Quality; + BYTE PitchAndFamily; + WCHAR FaceName[LF_FACESIZE]; +} + +align(4) struct TEXTMETRICA +{ + LONG tmHeight; + LONG tmAscent; + LONG tmDescent; + LONG tmInternalLeading; + LONG tmExternalLeading; + LONG tmAveCharWidth; + LONG tmMaxCharWidth; + LONG tmWeight; + LONG tmOverhang; + LONG tmDigitizedAspectX; + LONG tmDigitizedAspectY; + BYTE tmFirstChar; + BYTE tmLastChar; + BYTE tmDefaultChar; + BYTE tmBreakChar; + BYTE tmItalic; + BYTE tmUnderlined; + BYTE tmStruckOut; + BYTE tmPitchAndFamily; + BYTE tmCharSet; +} + +align(4) struct TEXTMETRICW +{ + LONG tmHeight; + LONG tmAscent; + LONG tmDescent; + LONG tmInternalLeading; + LONG tmExternalLeading; + LONG tmAveCharWidth; + LONG tmMaxCharWidth; + LONG tmWeight; + LONG tmOverhang; + LONG tmDigitizedAspectX; + LONG tmDigitizedAspectY; + WCHAR tmFirstChar; + WCHAR tmLastChar; + WCHAR tmDefaultChar; + WCHAR tmBreakChar; + BYTE tmItalic; + BYTE tmUnderlined; + BYTE tmStruckOut; + BYTE tmPitchAndFamily; + BYTE tmCharSet; +} + +align(4) struct D3DXEFFECT_DESC +{ + LPCSTR Creator; // Creator string + UINT Parameters; // Number of parameters + UINT Techniques; // Number of techniques + UINT Functions; // Number of function entrypoints +} + +alias char* D3DXHANDLE; + +align(4) struct D3DXPARAMETER_DESC +{ + LPCSTR Name; // Parameter name + LPCSTR Semantic; // Parameter semantic + D3DXPARAMETER_CLASS Class; // Class + D3DXPARAMETER_TYPE Type; // Component type + UINT Rows; // Number of rows + UINT Columns; // Number of columns + UINT Elements; // Number of array elements + UINT Annotations; // Number of annotations + UINT StructMembers; // Number of structure member sub-parameters + DWORD Flags; // D3DX_PARAMETER_* flags + UINT Bytes; // Parameter size, in bytes +} + +alias uint D3DXPARAMETER_CLASS; +enum : uint +{ + D3DXPC_SCALAR, + D3DXPC_VECTOR, + D3DXPC_MATRIX_ROWS, + D3DXPC_MATRIX_COLUMNS, + D3DXPC_OBJECT, + D3DXPC_STRUCT +} + +alias uint D3DXPARAMETER_TYPE; +enum : uint +{ + D3DXPT_VOID, + D3DXPT_BOOL, + D3DXPT_INT, + D3DXPT_FLOAT, + D3DXPT_STRING, + D3DXPT_TEXTURE, + D3DXPT_TEXTURE1D, + D3DXPT_TEXTURE2D, + D3DXPT_TEXTURE3D, + D3DXPT_TEXTURECUBE, + D3DXPT_SAMPLER, + D3DXPT_SAMPLER1D, + D3DXPT_SAMPLER2D, + D3DXPT_SAMPLER3D, + D3DXPT_SAMPLERCUBE, + D3DXPT_PIXELSHADER, + D3DXPT_VERTEXSHADER, + D3DXPT_PIXELFRAGMENT, + D3DXPT_VERTEXFRAGMENT +} + +align(4) struct D3DXTECHNIQUE_DESC +{ + LPCSTR Name; // Technique name + UINT Passes; // Number of passes + UINT Annotations; // Number of annotations +} + +align(4) struct D3DXPASS_DESC +{ + LPCSTR Name; // Pass name + UINT Annotations; // Number of annotations + + DWORD *pVertexShaderFunction; // Vertex shader function + DWORD *pPixelShaderFunction; // Pixel shader function +} + +align(4) struct D3DXFUNCTION_DESC +{ + LPCSTR Name; // Function name + UINT Annotations; // Number of annotations +} + +struct D3DXTRACK_DESC +{ + DWORD Priority; + FLOAT Weight = 0; + FLOAT Speed = 0; + double Position = 0; + BOOL Enable; +} + +align(4) struct D3DXEVENT_DESC +{ + DWORD Type; + UINT Track; + double StartTime = 0; + double Duration = 0; + DWORD Transition; + union + { + FLOAT Weight = 0; + FLOAT Speed; + double Position; + BOOL Enable; + }; +} + +align(4) struct D3DXKEY_VECTOR3 +{ + FLOAT Time = 0; + D3DXVECTOR3 Value; +} + +align(4) struct D3DXKEY_QUATERNION +{ + FLOAT Time = 0; + D3DXQUATERNION Value; +} + +align(4) struct D3DXKEY_CALLBACK +{ + FLOAT Time = 0; + LPVOID pCallbackData; +} + +align(4) struct D3DXIMAGE_INFO +{ + UINT Width; + UINT Height; + UINT Depth; + UINT MipLevels; + D3DFORMAT Format; + D3DRESOURCETYPE ResourceType; + D3DXIMAGE_FILEFORMAT ImageFileFormat; +} + +alias uint D3DXIMAGE_FILEFORMAT; +enum : uint +{ + D3DXIFF_BMP = 0, + D3DXIFF_JPG = 1, + D3DXIFF_TGA = 2, + D3DXIFF_PNG = 3, + D3DXIFF_DDS = 4, + D3DXIFF_PPM = 5, + D3DXIFF_DIB = 6, +} + +align(4) struct D3DXATTRIBUTEWEIGHTS +{ + FLOAT Position = 0; + FLOAT Boundary = 0; + FLOAT Normal = 0; + FLOAT Diffuse = 0; + FLOAT Specular = 0; + FLOAT Texcoord[8] = 0; + FLOAT Tangent = 0; + FLOAT Binormal = 0; +} + +align(4) struct D3DXPLANE +{ + FLOAT a = 0, b = 0, c = 0, d = 0; +} + +alias uint D3DXMESH; +enum : uint +{ + D3DXMESH_32BIT = 0x001, + D3DXMESH_DONOTCLIP = 0x002, + D3DXMESH_POINTS = 0x004, + D3DXMESH_RTPATCHES = 0x008, + D3DXMESH_NPATCHES = 0x4000, + D3DXMESH_VB_SYSTEMMEM = 0x010, + D3DXMESH_VB_MANAGED = 0x020, + D3DXMESH_VB_WRITEONLY = 0x040, + D3DXMESH_VB_DYNAMIC = 0x080, + D3DXMESH_VB_SOFTWAREPROCESSING = 0x8000, + D3DXMESH_IB_SYSTEMMEM = 0x100, + D3DXMESH_IB_MANAGED = 0x200, + D3DXMESH_IB_WRITEONLY = 0x400, + D3DXMESH_IB_DYNAMIC = 0x800, + D3DXMESH_IB_SOFTWAREPROCESSING= 0x10000, + D3DXMESH_VB_SHARE = 0x1000, + D3DXMESH_USEHWONLY = 0x2000, + D3DXMESH_SYSTEMMEM = 0x110, + D3DXMESH_MANAGED = 0x220, + D3DXMESH_WRITEONLY = 0x440, + D3DXMESH_DYNAMIC = 0x880, + D3DXMESH_SOFTWAREPROCESSING = 0x18000, +} + +align(4) struct D3DXMACRO +{ + LPCSTR Name; + LPCSTR Definition; +} + +align(4) struct D3DXSEMANTIC +{ + UINT Usage; + UINT UsageIndex; +} + +alias uint D3DXINCLUDE_TYPE; +enum : uint +{ + D3DXINC_LOCAL, + D3DXINC_SYSTEM, +} + +enum : uint +{ + D3DXFX_DONOTSAVESTATE = (1 << 0), + D3DXFX_DONOTSAVESHADERSTATE = (1 << 1), + D3DXFX_DONOTSAVESAMPLERSTATE = (1 << 2), + D3DXFX_NOT_CLONEABLE = (1 << 11) +} + +alias uint D3DXMESHSIMP; +enum : uint +{ + D3DXMESHSIMP_VERTEX = 0x1, + D3DXMESHSIMP_FACE = 0x2 +} + +enum : uint +{ + DT_TOP = 0x00000000, + DT_LEFT = 0x00000000, + DT_CENTER = 0x00000001, + DT_RIGHT = 0x00000002, + DT_VCENTER = 0x00000004, + DT_BOTTOM = 0x00000008, + DT_WORDBREAK = 0x00000010, + DT_SINGLELINE = 0x00000020, + DT_EXPANDTABS = 0x00000040, + DT_TABSTOP = 0x00000080, + DT_NOCLIP = 0x00000100, + DT_EXTERNALLEADING = 0x00000200, + DT_CALCRECT = 0x00000400, + DT_NOPREFIX = 0x00000800, + DT_INTERNAL = 0x00001000 +} + +enum : uint +{ + D3DXSPRITE_DONOTSAVESTATE = (1 << 0), + D3DXSPRITE_DONOTMODIFY_RENDERSTATE = (1 << 1), + D3DXSPRITE_OBJECTSPACE = (1 << 2), + D3DXSPRITE_BILLBOARD = (1 << 3), + D3DXSPRITE_ALPHABLEND = (1 << 4), + D3DXSPRITE_SORT_TEXTURE = (1 << 5), + D3DXSPRITE_SORT_DEPTH_FRONTTOBACK = (1 << 6), + D3DXSPRITE_SORT_DEPTH_BACKTOFRONT = (1 << 7) +} + +enum : uint +{ + D3DX_FILTER_NONE = (1 << 0), + D3DX_FILTER_POINT = (2 << 0), + D3DX_FILTER_LINEAR = (3 << 0), + D3DX_FILTER_TRIANGLE = (4 << 0), + D3DX_FILTER_BOX = (5 << 0), + D3DX_FILTER_MIRROR_U = (1 << 16), + D3DX_FILTER_MIRROR_V = (2 << 16), + D3DX_FILTER_MIRROR_W = (4 << 16), + D3DX_FILTER_MIRROR = (7 << 16), + D3DX_FILTER_DITHER = (1 << 19), + D3DX_FILTER_DITHER_DIFFUSION = (2 << 19), + D3DX_FILTER_SRGB_IN = (1 << 21), + D3DX_FILTER_SRGB_OUT = (2 << 21), + D3DX_FILTER_SRGB = (3 << 21) +} + +const uint D3DX_DEFAULT = cast(UINT) -1; + +alias uint D3DXMESHOPT; +enum : uint +{ + D3DXMESHOPT_COMPACT = 0x01000000, + D3DXMESHOPT_ATTRSORT = 0x02000000, + D3DXMESHOPT_VERTEXCACHE = 0x04000000, + D3DXMESHOPT_STRIPREORDER = 0x08000000, + D3DXMESHOPT_IGNOREVERTS = 0x10000000, // optimize faces only, don't touch vertices + D3DXMESHOPT_DONOTSPLIT = 0x20000000, // do not split vertices shared between attribute groups when attribute sorting + D3DXMESHOPT_DEVICEINDEPENDENT = 0x00400000 // Only affects VCache. uses a static known good cache size for all cards +} + +enum : uint +{ + D3DXPLAY_LOOP = 0, + D3DXPLAY_ONCE = 1, + D3DXPLAY_PINGPONG = 2 +} +alias uint D3DXPLAYBACK_TYPE; + + +// D3DX Interfaces --------------------------------------------------------------------------------------- + +interface ID3DXSkinInfo : IUnknown +{ + extern(Windows): + + // Specify the which vertices do each bones influence and by how much + HRESULT SetBoneInfluence(DWORD bone, DWORD numInfluences, DWORD* vertices, FLOAT* weights); + HRESULT SetBoneVertexInfluence(DWORD boneNum, DWORD influenceNum, float weight); + DWORD GetNumBoneInfluences(DWORD bone); + HRESULT GetBoneInfluence(DWORD bone, DWORD* vertices, FLOAT* weights); + HRESULT GetBoneVertexInfluence(DWORD boneNum, DWORD influenceNum, float *pWeight, DWORD *pVertexNum); + HRESULT GetMaxVertexInfluences(DWORD* maxVertexInfluences); + DWORD GetNumBones(); + HRESULT FindBoneVertexInfluenceIndex(DWORD boneNum, DWORD vertexNum, DWORD *pInfluenceIndex); + + // This gets the max face influences based on a triangle mesh with the specified index buffer + HRESULT GetMaxFaceInfluences(IDirect3DIndexBuffer9 pIB, DWORD NumFaces, DWORD* maxFaceInfluences); + + // Set min bone influence. Bone influences that are smaller than this are ignored + HRESULT SetMinBoneInfluence(FLOAT MinInfl); + // Get min bone influence. + FLOAT GetMinBoneInfluence(); + + // Bone names are returned by D3DXLoadSkinMeshFromXof. They are not used by any other method of this object + HRESULT SetBoneName(DWORD Bone, LPCSTR pName); // pName is copied to an internal string buffer + LPCSTR GetBoneName(DWORD Bone); // A pointer to an internal string buffer is returned. Do not free this. + + // Bone offset matrices are returned by D3DXLoadSkinMeshFromXof. They are not used by any other method of this object + HRESULT SetBoneOffsetMatrix(DWORD Bone, D3DXMATRIX *pBoneTransform); // pBoneTransform is copied to an internal buffer + D3DXMATRIX* GetBoneOffsetMatrix(DWORD Bone); // A pointer to an internal matrix is returned. Do not free this. + + // Clone a skin info object + HRESULT Clone(ID3DXSkinInfo* ppSkinInfo); + + // Update bone influence information to match vertices after they are reordered. This should be called + // if the target vertex buffer has been reordered externally. + HRESULT Remap(DWORD NumVertices, DWORD* pVertexRemap); + + // These methods enable the modification of the vertex layout of the vertices that will be skinned + HRESULT SetFVF(DWORD FVF); + HRESULT SetDeclaration(D3DVERTEXELEMENT9 *pDeclaration); + DWORD GetFVF(); + HRESULT GetDeclaration(D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]); + + // Apply SW skinning based on current pose matrices to the target vertices. + HRESULT UpdateSkinnedMesh( + D3DXMATRIX* pBoneTransforms, + D3DXMATRIX* pBoneInvTransposeTransforms, + LPCVOID pVerticesSrc, + PVOID pVerticesDst); + + // Takes a mesh and returns a new mesh with per vertex blend weights and a bone combination + // table that describes which bones affect which subsets of the mesh + HRESULT ConvertToBlendedMesh( + ID3DXMesh pMesh, + DWORD Options, + DWORD *pAdjacencyIn, + LPDWORD pAdjacencyOut, + DWORD* pFaceRemap, + ID3DXBuffer* ppVertexRemap, + DWORD* pMaxFaceInfl, + DWORD* pNumBoneCombinations, + ID3DXBuffer* ppBoneCombinationTable, + ID3DXMesh* ppMesh); + + // Takes a mesh and returns a new mesh with per vertex blend weights and indices + // and a bone combination table that describes which bones palettes affect which subsets of the mesh + HRESULT ConvertToIndexedBlendedMesh( + ID3DXMesh pMesh, + DWORD Options, + DWORD paletteSize, + DWORD *pAdjacencyIn, + LPDWORD pAdjacencyOut, + DWORD* pFaceRemap, + ID3DXBuffer* ppVertexRemap, + DWORD* pMaxVertexInfl, + DWORD *pNumBoneCombinations, + ID3DXBuffer* ppBoneCombinationTable, + ID3DXMesh* ppMesh); +} + +interface ID3DXBaseMesh : IUnknown +{ + extern(Windows): + + // ID3DXBaseMesh + HRESULT DrawSubset( DWORD AttribId) ; + DWORD GetNumFaces() ; + DWORD GetNumVertices() ; + DWORD GetFVF() ; + HRESULT GetDeclaration( D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) ; + DWORD GetNumBytesPerVertex() ; + DWORD GetOptions() ; + HRESULT GetDevice( IDirect3DDevice9* ppDevice) ; + HRESULT CloneMeshFVF( DWORD Options, + DWORD FVF, IDirect3DDevice9 pD3DDevice, ID3DXMesh* ppCloneMesh) ; + HRESULT CloneMesh( DWORD Options, + D3DVERTEXELEMENT9 *pDeclaration, IDirect3DDevice9 pD3DDevice, ID3DXMesh* ppCloneMesh) ; + HRESULT GetVertexBuffer( IDirect3DVertexBuffer9* ppVB) ; + HRESULT GetIndexBuffer( IDirect3DIndexBuffer9* ppIB) ; + HRESULT LockVertexBuffer( DWORD Flags, LPVOID *ppData) ; + HRESULT UnlockVertexBuffer() ; + HRESULT LockIndexBuffer( DWORD Flags, LPVOID *ppData) ; + HRESULT UnlockIndexBuffer() ; + HRESULT GetAttributeTable( + D3DXATTRIBUTERANGE *pAttribTable, DWORD* pAttribTableSize) ; + + HRESULT ConvertPointRepsToAdjacency( DWORD* pPRep, DWORD* pAdjacency) ; + HRESULT ConvertAdjacencyToPointReps( DWORD* pAdjacency, DWORD* pPRep) ; + HRESULT GenerateAdjacency( FLOAT Epsilon, DWORD* pAdjacency) ; + + HRESULT UpdateSemantics( D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) ; +} + +interface ID3DXMesh : ID3DXBaseMesh +{ + extern(Windows): + + // ID3DXMesh + HRESULT LockAttributeBuffer( DWORD Flags, DWORD** ppData) ; + HRESULT UnlockAttributeBuffer() ; + HRESULT Optimize( DWORD Flags, DWORD* pAdjacencyIn, DWORD* pAdjacencyOut, + DWORD* pFaceRemap, ID3DXBuffer *ppVertexRemap, + ID3DXMesh* ppOptMesh) ; + HRESULT OptimizeInplace( DWORD Flags, DWORD* pAdjacencyIn, DWORD* pAdjacencyOut, + DWORD* pFaceRemap, ID3DXBuffer *ppVertexRemap) ; + HRESULT SetAttributeTable( D3DXATTRIBUTERANGE *pAttribTable, DWORD cAttribTableSize) ; +} + +interface ID3DXBuffer : IUnknown +{ + extern(Windows): + + // ID3DXBuffer + LPVOID GetBufferPointer(); + DWORD GetBufferSize(); +} + +interface ID3DXPMesh : ID3DXBaseMesh +{ + extern(Windows): + + // ID3DXPMesh + HRESULT ClonePMeshFVF( DWORD Options, + DWORD FVF, IDirect3DDevice9 pD3DDevice, ID3DXPMesh* ppCloneMesh) ; + HRESULT ClonePMesh( DWORD Options, + D3DVERTEXELEMENT9 *pDeclaration, IDirect3DDevice9 pD3DDevice, ID3DXPMesh* ppCloneMesh) ; + HRESULT SetNumFaces( DWORD Faces) ; + HRESULT SetNumVertices( DWORD Vertices) ; + DWORD GetMaxFaces() ; + DWORD GetMinFaces() ; + DWORD GetMaxVertices() ; + DWORD GetMinVertices() ; + HRESULT Save( void *pStream, D3DXMATERIAL* pMaterials, D3DXEFFECTINSTANCE* pEffectInstances, DWORD NumMaterials) ; + + HRESULT Optimize( DWORD Flags, DWORD* pAdjacencyOut, + DWORD* pFaceRemap, ID3DXBuffer *ppVertexRemap, + ID3DXMesh* ppOptMesh) ; + + HRESULT OptimizeBaseLOD( DWORD Flags, DWORD* pFaceRemap) ; + HRESULT TrimByFaces( DWORD NewFacesMin, DWORD NewFacesMax, DWORD *rgiFaceRemap, DWORD *rgiVertRemap) ; + HRESULT TrimByVertices( DWORD NewVerticesMin, DWORD NewVerticesMax, DWORD *rgiFaceRemap, DWORD *rgiVertRemap) ; + + HRESULT GetAdjacency( DWORD* pAdjacency) ; + + // Used to generate the immediate "ancestor" for each vertex when it is removed by a vsplit. Allows generation of geomorphs + // Vertex buffer must be equal to or greater than the maximum number of vertices in the pmesh + HRESULT GenerateVertexHistory( DWORD* pVertexHistory) ; +} + +interface ID3DXPatchMesh : IUnknown +{ + extern(Windows): + + // ID3DXPatchMesh + + // Return creation parameters + DWORD GetNumPatches() ; + DWORD GetNumVertices() ; + HRESULT GetDeclaration( D3DVERTEXELEMENT9 Declaration[MAX_FVF_DECL_SIZE]) ; + DWORD GetControlVerticesPerPatch() ; + DWORD GetOptions() ; + HRESULT GetDevice( IDirect3DDevice9 *ppDevice) ; + HRESULT GetPatchInfo( D3DXPATCHINFO* PatchInfo) ; + + // Control mesh access + HRESULT GetVertexBuffer( IDirect3DVertexBuffer9* ppVB) ; + HRESULT GetIndexBuffer( IDirect3DIndexBuffer9* ppIB) ; + HRESULT LockVertexBuffer( DWORD flags, LPVOID *ppData) ; + HRESULT UnlockVertexBuffer() ; + HRESULT LockIndexBuffer( DWORD flags, LPVOID *ppData) ; + HRESULT UnlockIndexBuffer() ; + HRESULT LockAttributeBuffer( DWORD flags, DWORD** ppData) ; + HRESULT UnlockAttributeBuffer() ; + + // function returns the size of the tessellated mesh given a tessellation level. + // assumes uniform tessellation. For adaptive tessellation the Adaptive parameter must + // be set to TRUE and TessellationLevel should be the max tessellation. + // will result in the max mesh size necessary for adaptive tessellation. + HRESULT GetTessSize( FLOAT fTessLevel,DWORD Adaptive, DWORD *NumTriangles,DWORD *NumVertices) ; + + //GenerateAdjacency determines which patches are adjacent with provided tolerance + // information is used internally to optimize tessellation + HRESULT GenerateAdjacency( FLOAT Tolerance) ; + + //CloneMesh Creates a new patchmesh with the specified decl, and converts the vertex buffer + //to the new decl. Entries in the new decl which are new are set to 0. If the current mesh + //has adjacency, the new mesh will also have adjacency + HRESULT CloneMesh( DWORD Options, D3DVERTEXELEMENT9 *pDecl, ID3DXPatchMesh *pMesh) ; + + // Optimizes the patchmesh for efficient tessellation. function is designed + // to perform one time optimization for patch meshes that need to be tessellated + // repeatedly by calling the Tessellate() method. The optimization performed is + // independent of the actual tessellation level used. + // Currently Flags is unused. + // If vertices are changed, Optimize must be called again + HRESULT Optimize( DWORD flags) ; + + //gets and sets displacement parameters + //displacement maps can only be 2D textures MIP-MAPPING is ignored for non adapative tessellation + HRESULT SetDisplaceParam( IDirect3DBaseTexture9 Texture, + D3DTEXTUREFILTERTYPE MinFilter, + D3DTEXTUREFILTERTYPE MagFilter, + D3DTEXTUREFILTERTYPE MipFilter, + D3DTEXTUREADDRESS Wrap, + DWORD dwLODBias) ; + + HRESULT GetDisplaceParam( IDirect3DBaseTexture9 *Texture, + D3DTEXTUREFILTERTYPE *MinFilter, + D3DTEXTUREFILTERTYPE *MagFilter, + D3DTEXTUREFILTERTYPE *MipFilter, + D3DTEXTUREADDRESS *Wrap, + DWORD *dwLODBias) ; + + // Performs the uniform tessellation based on the tessellation level. + // function will perform more efficiently if the patch mesh has been optimized using the Optimize() call. + HRESULT Tessellate( FLOAT fTessLevel,ID3DXMesh pMesh) ; + + // Performs adaptive tessellation based on the Z based adaptive tessellation criterion. + // pTrans specifies a 4D vector that is dotted with the vertices to get the per vertex + // adaptive tessellation amount. Each edge is tessellated to the average of the criterion + // at the 2 vertices it connects. + // MaxTessLevel specifies the upper limit for adaptive tesselation. + // function will perform more efficiently if the patch mesh has been optimized using the Optimize() call. + HRESULT TessellateAdaptive( + D3DXVECTOR4 *pTrans, + DWORD dwMaxTessLevel, + DWORD dwMinTessLevel, + ID3DXMesh pMesh) ; + +} + +interface ID3DXFont : IUnknown +{ + extern(Windows): + + // ID3DXFont + HRESULT GetDevice( IDirect3DDevice9 *ppDevice) ; + HRESULT GetDescA( D3DXFONT_DESCA *pDesc) ; + HRESULT GetDescW( D3DXFONT_DESCW *pDesc) ; + BOOL GetTextMetricsA( TEXTMETRICA *pTextMetrics) ; + BOOL GetTextMetricsW( TEXTMETRICW *pTextMetrics) ; + + HDC GetDC() ; + HRESULT GetGlyphData( UINT Glyph, IDirect3DTexture9 *ppTexture, RECT *pBlackBox, POINT *pCellInc) ; + + HRESULT PreloadCharacters( UINT First, UINT Last) ; + HRESULT PreloadGlyphs( UINT First, UINT Last) ; + HRESULT PreloadTextA( LPCSTR pString, INT Count) ; + HRESULT PreloadTextW( LPCWSTR pString, INT Count) ; + + INT DrawTextA( ID3DXSprite pSprite, LPCSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) ; + INT DrawTextW( ID3DXSprite pSprite, LPCWSTR pString, INT Count, LPRECT pRect, DWORD Format, D3DCOLOR Color) ; + + HRESULT OnLostDevice() ; + HRESULT OnResetDevice() ; +} + +interface ID3DXSprite : IUnknown +{ + extern(Windows): + + // ID3DXSprite + HRESULT GetDevice( IDirect3DDevice9* ppDevice) ; + + HRESULT GetTransform( D3DXMATRIX *pTransform) ; + HRESULT SetTransform( D3DXMATRIX *pTransform) ; + + HRESULT SetWorldViewRH( D3DXMATRIX *pWorld, D3DXMATRIX *pView) ; + HRESULT SetWorldViewLH( D3DXMATRIX *pWorld, D3DXMATRIX *pView) ; + + HRESULT Begin( DWORD Flags) ; + HRESULT Draw( IDirect3DTexture9 pTexture, RECT *pSrcRect, D3DXVECTOR3 *pCenter, D3DXVECTOR3 *pPosition, D3DCOLOR Color) ; + HRESULT Flush() ; + HRESULT End() ; + + HRESULT OnLostDevice() ; + HRESULT OnResetDevice() ; +} + +interface ID3DXBaseEffect : IUnknown +{ + extern(Windows): + + // Descs + HRESULT GetDesc( D3DXEFFECT_DESC* pDesc) ; + HRESULT GetParameterDesc( D3DXHANDLE hParameter, D3DXPARAMETER_DESC* pDesc) ; + HRESULT GetTechniqueDesc( D3DXHANDLE hTechnique, D3DXTECHNIQUE_DESC* pDesc) ; + HRESULT GetPassDesc( D3DXHANDLE hPass, D3DXPASS_DESC* pDesc) ; + HRESULT GetFunctionDesc( D3DXHANDLE hShader, D3DXFUNCTION_DESC* pDesc) ; + + // Handle operations + D3DXHANDLE GetParameter( D3DXHANDLE hParameter, UINT Index) ; + D3DXHANDLE GetParameterByName( D3DXHANDLE hParameter, LPCSTR pName) ; + D3DXHANDLE GetParameterBySemantic( D3DXHANDLE hParameter, LPCSTR pSemantic) ; + D3DXHANDLE GetParameterElement( D3DXHANDLE hParameter, UINT Index) ; + D3DXHANDLE GetTechnique( UINT Index) ; + D3DXHANDLE GetTechniqueByName( LPCSTR pName) ; + D3DXHANDLE GetPass( D3DXHANDLE hTechnique, UINT Index) ; + D3DXHANDLE GetPassByName( D3DXHANDLE hTechnique, LPCSTR pName) ; + D3DXHANDLE GetFunction( UINT Index) ; + D3DXHANDLE GetFunctionByName( LPCSTR pName) ; + D3DXHANDLE GetAnnotation( D3DXHANDLE hObject, UINT Index) ; + D3DXHANDLE GetAnnotationByName( D3DXHANDLE hObject, LPCSTR pName) ; + + // Get/Set Parameters + HRESULT SetValue( D3DXHANDLE hParameter, LPCVOID pData, UINT Bytes) ; + HRESULT GetValue( D3DXHANDLE hParameter, LPVOID pData, UINT Bytes) ; + HRESULT SetBool( D3DXHANDLE hParameter, BOOL b) ; + HRESULT GetBool( D3DXHANDLE hParameter, BOOL* pb) ; + HRESULT SetBoolArray( D3DXHANDLE hParameter, BOOL* pb, UINT Count) ; + HRESULT GetBoolArray( D3DXHANDLE hParameter, BOOL* pb, UINT Count) ; + HRESULT SetInt( D3DXHANDLE hParameter, INT n) ; + HRESULT GetInt( D3DXHANDLE hParameter, INT* pn) ; + HRESULT SetIntArray( D3DXHANDLE hParameter, INT* pn, UINT Count) ; + HRESULT GetIntArray( D3DXHANDLE hParameter, INT* pn, UINT Count) ; + HRESULT SetFloat( D3DXHANDLE hParameter, FLOAT f) ; + HRESULT GetFloat( D3DXHANDLE hParameter, FLOAT* pf) ; + HRESULT SetFloatArray( D3DXHANDLE hParameter, FLOAT* pf, UINT Count) ; + HRESULT GetFloatArray( D3DXHANDLE hParameter, FLOAT* pf, UINT Count) ; + HRESULT SetVector( D3DXHANDLE hParameter, D3DXVECTOR4* pVector) ; + HRESULT GetVector( D3DXHANDLE hParameter, D3DXVECTOR4* pVector) ; + HRESULT SetVectorArray( D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) ; + HRESULT GetVectorArray( D3DXHANDLE hParameter, D3DXVECTOR4* pVector, UINT Count) ; + HRESULT SetMatrix( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) ; + HRESULT GetMatrix( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) ; + HRESULT SetMatrixArray( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) ; + HRESULT GetMatrixArray( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) ; + HRESULT SetMatrixPointerArray( D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) ; + HRESULT GetMatrixPointerArray( D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) ; + HRESULT SetMatrixTranspose( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) ; + HRESULT GetMatrixTranspose( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix) ; + HRESULT SetMatrixTransposeArray( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) ; + HRESULT GetMatrixTransposeArray( D3DXHANDLE hParameter, D3DXMATRIX* pMatrix, UINT Count) ; + HRESULT SetMatrixTransposePointerArray( D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) ; + HRESULT GetMatrixTransposePointerArray( D3DXHANDLE hParameter, D3DXMATRIX** ppMatrix, UINT Count) ; + HRESULT SetString( D3DXHANDLE hParameter, LPCSTR pString) ; + HRESULT GetString( D3DXHANDLE hParameter, LPCSTR* ppString) ; + HRESULT SetTexture( D3DXHANDLE hParameter, IDirect3DBaseTexture9 pTexture) ; + HRESULT GetTexture( D3DXHANDLE hParameter, IDirect3DBaseTexture9 *ppTexture) ; + HRESULT GetPixelShader( D3DXHANDLE hParameter, IDirect3DPixelShader9 *ppPShader) ; + HRESULT GetVertexShader( D3DXHANDLE hParameter, IDirect3DVertexShader9 *ppVShader) ; + + //Set Range of an Array to pass to device + //Useful for sending only a subrange of an array down to the device + HRESULT SetArrayRange( D3DXHANDLE hParameter, UINT uStart, UINT uEnd) ; + +} + +interface ID3DXEffect : ID3DXBaseEffect +{ + extern(Windows): + + // Pool + HRESULT GetPool( ID3DXEffectPool* ppPool) ; + + // Selecting and setting a technique + HRESULT SetTechnique( D3DXHANDLE hTechnique) ; + D3DXHANDLE GetCurrentTechnique() ; + HRESULT ValidateTechnique( D3DXHANDLE hTechnique) ; + HRESULT FindNextValidTechnique( D3DXHANDLE hTechnique, D3DXHANDLE *pTechnique) ; + BOOL IsParameterUsed( D3DXHANDLE hParameter, D3DXHANDLE hTechnique) ; + + // Using current technique + // Begin starts active technique + // BeginPass begins a pass + // CommitChanges updates changes to any set calls in the pass. should be called before + // any DrawPrimitive call to d3d + // EndPass ends a pass + // End ends active technique + HRESULT Begin( UINT *pPasses, DWORD Flags) ; + HRESULT BeginPass( UINT Pass) ; + HRESULT CommitChanges() ; + HRESULT EndPass() ; + HRESULT End() ; + + // Managing D3D Device + HRESULT GetDevice( IDirect3DDevice9* ppDevice) ; + HRESULT OnLostDevice() ; + HRESULT OnResetDevice() ; + + // Logging device calls + HRESULT SetStateManager( ID3DXEffectStateManager pManager) ; + HRESULT GetStateManager( ID3DXEffectStateManager *ppManager) ; + + // Parameter blocks + HRESULT BeginParameterBlock() ; + D3DXHANDLE EndParameterBlock() ; + HRESULT ApplyParameterBlock( D3DXHANDLE hParameterBlock) ; + HRESULT DeleteParameterBlock( D3DXHANDLE hParameterBlock) ; + + // Cloning + HRESULT CloneEffect( IDirect3DDevice9 pDevice, ID3DXEffect* ppEffect) ; +} + +interface ID3DXEffectPool : IUnknown +{ + extern(Windows): + + // No public methods +} + +interface ID3DXEffectStateManager : IUnknown +{ + extern(Windows): + + // The following methods are called by the Effect when it wants to make + // the corresponding device call. Note that: + // 1. Users manage the state and are therefore responsible for making the + // the corresponding device calls themselves inside their callbacks. + // 2. Effects pay attention to the return values of the callbacks, and so + // users must pay attention to what they return in their callbacks. + + HRESULT SetTransform( D3DTRANSFORMSTATETYPE State, D3DMATRIX *pMatrix) ; + HRESULT SetMaterial( D3DMATERIAL9 *pMaterial) ; + HRESULT SetLight( DWORD Index, D3DLIGHT9 *pLight) ; + HRESULT LightEnable( DWORD Index, BOOL Enable) ; + HRESULT SetRenderState( D3DRENDERSTATETYPE State, DWORD Value) ; + HRESULT SetTexture( DWORD Stage, IDirect3DBaseTexture9 pTexture) ; + HRESULT SetTextureStageState( DWORD Stage, D3DTEXTURESTAGESTATETYPE Type, DWORD Value) ; + HRESULT SetSamplerState( DWORD Sampler, D3DSAMPLERSTATETYPE Type, DWORD Value) ; + HRESULT SetNPatchMode( FLOAT NumSegments) ; + HRESULT SetFVF( DWORD FVF) ; + HRESULT SetVertexShader( IDirect3DVertexShader9 pShader) ; + HRESULT SetVertexShaderConstantF( UINT RegisterIndex, FLOAT *pConstantData, UINT RegisterCount) ; + HRESULT SetVertexShaderConstantI( UINT RegisterIndex, INT *pConstantData, UINT RegisterCount) ; + HRESULT SetVertexShaderConstantB( UINT RegisterIndex, BOOL *pConstantData, UINT RegisterCount) ; + HRESULT SetPixelShader( IDirect3DPixelShader9 pShader) ; + HRESULT SetPixelShaderConstantF( UINT RegisterIndex, FLOAT *pConstantData, UINT RegisterCount) ; + HRESULT SetPixelShaderConstantI( UINT RegisterIndex, INT *pConstantData, UINT RegisterCount) ; + HRESULT SetPixelShaderConstantB( UINT RegisterIndex, BOOL *pConstantData, UINT RegisterCount) ; +} + +interface ID3DXInclude +{ + HRESULT Open(D3DXINCLUDE_TYPE IncludeType, LPCSTR pFileName, LPCVOID pParentData, LPCVOID *ppData, UINT *pBytes); + HRESULT Close(LPCVOID pData); +} + +// D3DX Functions --------------------------------------------------------------------------------------- +extern(Windows) +{ + uint D3DXGetShaderVersion(uint* pFunction); + + HRESULT D3DXCheckTextureRequirements( + IDirect3DDevice9 pDevice, + UINT* pWidth, + UINT* pHeight, + UINT* pNumMipLevels, + DWORD Usage, + D3DFORMAT* pFormat, + D3DPOOL Pool) ; + + HRESULT D3DXCreateTexture( + IDirect3DDevice9 pDevice, + UINT Width, + UINT Height, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + IDirect3DTexture9* ppTexture); + + HRESULT D3DXCreateCubeTexture( + IDirect3DDevice9 pDevice, + UINT Size, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + IDirect3DCubeTexture9* ppCubeTexture); + + HRESULT D3DXCreateTextureFromFileA( + LPDIRECT3DDEVICE9 pDevice, + LPCTSTR pSrcFile, + LPDIRECT3DTEXTURE9 * ppTexture); + + HRESULT D3DXCreateTextureFromFileExA( + IDirect3DDevice9 pDevice, + LPCSTR pSrcFile, + UINT Width, + UINT Height, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + IDirect3DTexture9* ppTexture); + + HRESULT D3DXCreateCubeTextureFromFileExA( + IDirect3DDevice9 pDevice, + LPCSTR pSrcFile, + UINT Size, + UINT MipLevels, + DWORD Usage, + D3DFORMAT Format, + D3DPOOL Pool, + DWORD Filter, + DWORD MipFilter, + D3DCOLOR ColorKey, + D3DXIMAGE_INFO* pSrcInfo, + PALETTEENTRY* pPalette, + IDirect3DCubeTexture9* ppCubeTexture); + + HRESULT D3DXSimplifyMesh( + ID3DXMesh pMesh, + DWORD* pAdjacency, + D3DXATTRIBUTEWEIGHTS *pVertexAttributeWeights, + FLOAT *pVertexWeights, + DWORD MinValue, + DWORD Options, + ID3DXMesh* ppMesh); + + HRESULT D3DXCreateSkinInfoFVF( + DWORD NumVertices, + DWORD FVF, + DWORD NumBones, + ID3DXSkinInfo* ppSkinInfo); + + D3DXVECTOR2* D3DXVec2TransformCoord( D3DXVECTOR2 *pOut, D3DXVECTOR2 *pV, D3DXMATRIX *pM ); + + D3DXVECTOR4* D3DXVec3Transform( D3DXVECTOR4 *pOut, D3DXVECTOR3 *pV, D3DXMATRIX *pM ); + + D3DXVECTOR3* D3DXVec3TransformCoord( D3DXVECTOR3 *pOut, D3DXVECTOR3 *pV, D3DXMATRIX *pM ); + + D3DXVECTOR4* D3DXVec4Transform( D3DXVECTOR4 *pOut, D3DXVECTOR4 *pV, D3DXMATRIX *pM ); + + D3DXMATRIX* D3DXMatrixTranspose( D3DXMATRIX *pOut, D3DXMATRIX *pM ); + + D3DXMATRIX* D3DXMatrixMultiply( D3DXMATRIX *pOut, D3DXMATRIX *pM1, D3DXMATRIX *pM2 ); + + D3DXMATRIX* D3DXMatrixInverse( D3DXMATRIX *pOut, FLOAT *pDeterminant, D3DXMATRIX *pM ); + + D3DXMATRIX* D3DXMatrixScaling( D3DXMATRIX *pOut, FLOAT sx, FLOAT sy, FLOAT sz ); + + D3DXMATRIX* D3DXMatrixTranslation( D3DXMATRIX *pOut, FLOAT x, FLOAT y, FLOAT z ); + + D3DXMATRIX* D3DXMatrixRotationX( D3DXMATRIX *pOut, FLOAT Angle ); + + D3DXMATRIX* D3DXMatrixRotationY( D3DXMATRIX *pOut, FLOAT Angle ); + + D3DXMATRIX* D3DXMatrixRotationZ( D3DXMATRIX *pOut, FLOAT Angle ); + + D3DXMATRIX* D3DXMatrixRotationQuaternion( D3DXMATRIX *pOut, D3DXQUATERNION *pQ); + + D3DXMATRIX* D3DXMatrixRotationYawPitchRoll( D3DXMATRIX *pOut, FLOAT Yaw, FLOAT Pitch, FLOAT Roll ); + + D3DXMATRIX* D3DXMatrixAffineTransformation2D( D3DXMATRIX *pOut, FLOAT Scaling, D3DXVECTOR2 *pRotationCenter, + float Rotation, D3DXVECTOR2 *pTranslation); + + D3DXMATRIX* D3DXMatrixPerspectiveFovLH( D3DXMATRIX *pOut, FLOAT fovy, FLOAT Aspect, FLOAT zn, FLOAT zf ); + + D3DXMATRIX* D3DXMatrixOrthoLH( D3DXMATRIX *pOut, FLOAT w, FLOAT h, FLOAT zn, FLOAT zf ); + + D3DXMATRIX* D3DXMatrixOrthoOffCenterLH( D3DXMATRIX *pOut, FLOAT l, FLOAT r, FLOAT b, FLOAT t, FLOAT zn, + FLOAT zf ); + + void D3DXQuaternionToAxisAngle( D3DXQUATERNION *pQ, D3DXVECTOR3 *pAxis, FLOAT *pAngle ); + + D3DXQUATERNION* D3DXQuaternionRotationMatrix( D3DXQUATERNION *pOut, D3DXMATRIX *pM); + + D3DXQUATERNION* D3DXQuaternionNormalize( D3DXQUATERNION *pOut, D3DXQUATERNION *pQ ); + + D3DXPLANE* D3DXPlaneNormalize( D3DXPLANE *pOut, D3DXPLANE *pP); + + char* DXGetErrorDescription9A(HRESULT hr); + + HRESULT D3DXCreateEffectFromFileA( + IDirect3DDevice9 pDevice, + LPCSTR pSrcFile, + D3DXMACRO* pDefines, + ID3DXInclude pInclude, + DWORD Flags, + ID3DXEffectPool pPool, + ID3DXEffect* ppEffect, + ID3DXBuffer* ppCompilationErrors); + + D3DXMATRIX* D3DXMatrixTransformation2D( D3DXMATRIX *pOut, D3DXVECTOR2 *pScalingCenter, + float *pScalingRotation, D3DXVECTOR2 *pScaling, + D3DXVECTOR2 *pRotationCenter, float Rotation, + D3DXVECTOR2 *pTranslation); + + HRESULT D3DXLoadMeshFromXA( + LPCSTR pFilename, + DWORD Options, + IDirect3DDevice9 pD3D, + ID3DXBuffer *ppAdjacency, + ID3DXBuffer *ppMaterials, + ID3DXBuffer *ppEffectInstances, + DWORD *pNumMaterials, + ID3DXMesh *ppMesh); + + HRESULT D3DXCreatePolygon( + IDirect3DDevice9 pDevice, + FLOAT Length, + UINT Sides, + ID3DXMesh* ppMesh, + ID3DXBuffer* ppAdjacency); + + HRESULT D3DXCreateBox( + IDirect3DDevice9 pDevice, + FLOAT Width, + FLOAT Height, + FLOAT Depth, + ID3DXMesh* ppMesh, + ID3DXBuffer* ppAdjacency); + + HRESULT D3DXCreateCylinder( + IDirect3DDevice9 pDevice, + FLOAT Radius1, + FLOAT Radius2, + FLOAT Length, + UINT Slices, + UINT Stacks, + ID3DXMesh* ppMesh, + ID3DXBuffer* ppAdjacency); + + HRESULT D3DXCreateSphere( + IDirect3DDevice9 pDevice, + FLOAT Radius, + UINT Slices, + UINT Stacks, + ID3DXMesh* ppMesh, + ID3DXBuffer* ppAdjacency); + + HRESULT D3DXCreateTorus( + IDirect3DDevice9 pDevice, + FLOAT InnerRadius, + FLOAT OuterRadius, + UINT Sides, + UINT Rings, + ID3DXMesh* ppMesh, + ID3DXBuffer* ppAdjacency); + + HRESULT D3DXCreateTeapot( + IDirect3DDevice9 pDevice, + ID3DXMesh* ppMesh, + ID3DXBuffer* ppAdjacency); + + HRESULT D3DXCreateFontA( + IDirect3DDevice9 pDevice, + UINT Height, + UINT Width, + UINT Weight, + UINT MipLevels, + BOOL Italic, + DWORD CharSet, + DWORD OutputPrecision, + DWORD Quality, + DWORD PitchAndFamily, + LPCTSTR pFacename, + ID3DXFont *ppFont); + + HRESULT D3DXCreateSprite( + IDirect3DDevice9 pDevice, + ID3DXSprite* ppSprite) ; + + HRESULT D3DXCreateEffect( + IDirect3DDevice9 pDevice, + LPCVOID pSrcData, + UINT SrcDataLen, + D3DXMACRO* pDefines, + ID3DXInclude pInclude, + DWORD Flags, + ID3DXEffectPool pPool, + ID3DXEffect* ppEffect, + ID3DXBuffer* ppCompilationErrors); + + HRESULT D3DXCreateEffectPool( + ID3DXEffectPool* pEffectPool); + + HRESULT D3DXGetShaderInputSemantics( + DWORD* pFunction, + D3DXSEMANTIC* pSemantics, + UINT* pCount); + + HRESULT + D3DXCreateMeshFVF( + DWORD NumFaces, + DWORD NumVertices, + DWORD Options, + DWORD FVF, + IDirect3DDevice9 pD3DDevice, + ID3DXMesh* ppMesh); + + UINT D3DXGetFVFVertexSize(DWORD FVF); + + HRESULT D3DXFileCreate(ID3DXFile* lplpDirectXFile); + + HRESULT D3DXLoadMeshFromXof( + ID3DXFileData pxofMesh, + DWORD Options, + IDirect3DDevice9 pD3DDevice, + ID3DXBuffer *ppAdjacency, + ID3DXBuffer *ppMaterials, + ID3DXBuffer *ppEffectInstances, + DWORD *pNumMaterials, + ID3DXMesh *ppMesh); + + HRESULT D3DXConcatenateMeshes( + ID3DXMesh * ppMeshes, + UINT NumMeshes, + DWORD Options, + D3DXMATRIX * pGeomXForms, + D3DXMATRIX * pTextureXForms, + D3DVERTEXELEMENT9 * pDecl, + IDirect3DDevice9 pD3DDevice, + ID3DXMesh * ppMeshOut); + + HRESULT D3DXDeclaratorFromFVF(DWORD FVF, D3DVERTEXELEMENT9* Declaration); + + D3DXQUATERNION* D3DXQuaternionSlerp(D3DXQUATERNION* pOut, D3DXQUATERNION* pQ1, D3DXQUATERNION* pQ2, float t); + + D3DXVECTOR3* D3DXVec3CatmullRom(D3DXVECTOR3 *pOut, D3DXVECTOR3 *pV0, D3DXVECTOR3 *pV1, D3DXVECTOR3 *pV2, D3DXVECTOR3 *pV3, float s); + + void D3DXQuaternionSquadSetup( D3DXQUATERNION *pAOut, + D3DXQUATERNION *pBOut, + D3DXQUATERNION *pCOut, + D3DXQUATERNION *pQ0, + D3DXQUATERNION *pQ1, + D3DXQUATERNION *pQ2, + D3DXQUATERNION *pQ3); + + D3DXQUATERNION* D3DXQuaternionSquad(D3DXQUATERNION *pOut, + D3DXQUATERNION *pQ1, + D3DXQUATERNION *pA, + D3DXQUATERNION *pB, + D3DXQUATERNION *pC, + float t); + + HRESULT D3DXMatrixDecompose(D3DXVECTOR3 *pOutScale, + D3DXQUATERNION *pOutRotation, + D3DXVECTOR3 *pOutTranslation, + D3DXMATRIX *pM + ); + + D3DXQUATERNION* D3DXQuaternionRotationYawPitchRoll(D3DXQUATERNION *pOut, + FLOAT Yaw, + FLOAT Pitch, + FLOAT Roll + ); + + UINT D3DXGetDeclVertexSize(D3DVERTEXELEMENT9 *pDecl, DWORD Stream ); +} // extern(Windows) + +D3DXMATRIX* D3DXMatrixIdentity( D3DXMATRIX *pOut ) +{ + pOut.m[0][1] = pOut.m[0][2] = pOut.m[0][3] = + pOut.m[1][0] = pOut.m[1][2] = pOut.m[1][3] = + pOut.m[2][0] = pOut.m[2][1] = pOut.m[2][3] = + pOut.m[3][0] = pOut.m[3][1] = pOut.m[3][2] = 0.0f; + + pOut.m[0][0] = pOut.m[1][1] = pOut.m[2][2] = pOut.m[3][3] = 1.0f; + return pOut; +} + +FLOAT D3DXVec3LengthSq(D3DXVECTOR3* v) +{ + return (v.x * v.x) + (v.y * v.y) + (v.z * v.z); +} + +template DEFINE_GUID(uint d1, ushort d2, ushort d3, ubyte d4, ubyte d5, ubyte d6, ubyte d7, ubyte d8, ubyte d9, ubyte d10, ubyte d11) +{ + const GUID DEFINE_GUID = {d1, d2, d3, [d4, d5, d6, d7, d8, d9, d10, d11]}; +} + +const GUID TID_D3DRMInfo = DEFINE_GUID!(0x2b957100, 0x9e9a, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMMesh = DEFINE_GUID!(0x3d82ab44, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMVector = DEFINE_GUID!(0x3d82ab5e, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMMeshFace = DEFINE_GUID!(0x3d82ab5f, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMMaterial = DEFINE_GUID!(0x3d82ab4d, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMMaterialArray = DEFINE_GUID!(0x35ff44e1, 0x6c7c, 0x11cf, 0x8F, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMFrame = DEFINE_GUID!(0x3d82ab46, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMFrameTransformMatrix = DEFINE_GUID!(0xf6f23f41, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMMeshMaterialList = DEFINE_GUID!(0xf6f23f42, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMMeshTextureCoords = DEFINE_GUID!(0xf6f23f40, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMMeshNormals = DEFINE_GUID!(0xf6f23f43, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMCoords2d = DEFINE_GUID!(0xf6f23f44, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMMatrix4x4 = DEFINE_GUID!(0xf6f23f45, 0x7686, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMAnimation = DEFINE_GUID!(0x3d82ab4f, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMAnimationSet = DEFINE_GUID!(0x3d82ab50, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMAnimationKey = DEFINE_GUID!(0x10dd46a8, 0x775b, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3); +const GUID TID_D3DRMFloatKeys = DEFINE_GUID!(0x10dd46a9, 0x775b, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3); +const GUID TID_D3DRMMaterialAmbientColor = DEFINE_GUID!(0x01411840, 0x7786, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3); +const GUID TID_D3DRMMaterialDiffuseColor = DEFINE_GUID!(0x01411841, 0x7786, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3); +const GUID TID_D3DRMMaterialSpecularColor = DEFINE_GUID!(0x01411842, 0x7786, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3); +const GUID TID_D3DRMMaterialEmissiveColor = DEFINE_GUID!(0xd3e16e80, 0x7835, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMMaterialPower = DEFINE_GUID!(0x01411843, 0x7786, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3); +const GUID TID_D3DRMColorRGBA = DEFINE_GUID!(0x35ff44e0, 0x6c7c, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xA3); +const GUID TID_D3DRMColorRGB = DEFINE_GUID!(0xd3e16e81, 0x7835, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMGuid = DEFINE_GUID!(0xa42790e0, 0x7810, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMTextureFilename = DEFINE_GUID!(0xa42790e1, 0x7810, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMTextureReference = DEFINE_GUID!(0xa42790e2, 0x7810, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMIndexedColor = DEFINE_GUID!(0x1630b820, 0x7842, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMMeshVertexColors = DEFINE_GUID!(0x1630b821, 0x7842, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMMaterialWrap = DEFINE_GUID!(0x4885ae60, 0x78e8, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMBoolean = DEFINE_GUID!(0x537da6a0, 0xca37, 0x11d0, 0x94, 0x1c, 0x0, 0x80, 0xc8, 0xc, 0xfa, 0x7b); +const GUID TID_D3DRMMeshFaceWraps = DEFINE_GUID!(0xed1ec5c0, 0xc0a8, 0x11d0, 0x94, 0x1c, 0x0, 0x80, 0xc8, 0xc, 0xfa, 0x7b); +const GUID TID_D3DRMBoolean2d = DEFINE_GUID!(0x4885ae63, 0x78e8, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMTimedFloatKeys = DEFINE_GUID!(0xf406b180, 0x7b3b, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMAnimationOptions = DEFINE_GUID!(0xe2bf56c0, 0x840f, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMFramePosition = DEFINE_GUID!(0xe2bf56c1, 0x840f, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMFrameVelocity = DEFINE_GUID!(0xe2bf56c2, 0x840f, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMFrameRotation = DEFINE_GUID!(0xe2bf56c3, 0x840f, 0x11cf, 0x8f, 0x52, 0x0, 0x40, 0x33, 0x35, 0x94, 0xa3); +const GUID TID_D3DRMLight = DEFINE_GUID!(0x3d82ab4a, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMCamera = DEFINE_GUID!(0x3d82ab51, 0x62da, 0x11cf, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMAppData = DEFINE_GUID!(0xe5745280, 0xb24f, 0x11cf, 0x9d, 0xd5, 0x0, 0xaa, 0x0, 0xa7, 0x1a, 0x2f); +const GUID TID_D3DRMLightUmbra = DEFINE_GUID!(0xaed22740, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x0, 0xaa, 0x0, 0xa7, 0x1a, 0x2f); +const GUID TID_D3DRMLightRange = DEFINE_GUID!(0xaed22742, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x0, 0xaa, 0x0, 0xa7, 0x1a, 0x2f); +const GUID TID_D3DRMLightPenumbra = DEFINE_GUID!(0xaed22741, 0xb31f, 0x11cf, 0x9d, 0xd5, 0x0, 0xaa, 0x0, 0xa7, 0x1a, 0x2f); +const GUID TID_D3DRMLightAttenuation = DEFINE_GUID!(0xa8a98ba0, 0xc5e5, 0x11cf, 0xb9, 0x41, 0x0, 0x80, 0xc8, 0xc, 0xfa, 0x7b); +const GUID TID_D3DRMInlineData = DEFINE_GUID!(0x3a23eea0, 0x94b1, 0x11d0, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMUrl = DEFINE_GUID!(0x3a23eea1, 0x94b1, 0x11d0, 0xab, 0x39, 0x0, 0x20, 0xaf, 0x71, 0xe4, 0x33); +const GUID TID_D3DRMProgressiveMesh = DEFINE_GUID!(0x8A63C360, 0x997D, 0x11d0, 0x94, 0x1C, 0x0, 0x80, 0xC8, 0x0C, 0xFA, 0x7B); +const GUID TID_D3DRMExternalVisual = DEFINE_GUID!(0x98116AA0, 0xBDBA, 0x11d1, 0x82, 0xC0, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x71); +const GUID TID_D3DRMStringProperty = DEFINE_GUID!(0x7f0f21e0, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x71); +const GUID TID_D3DRMPropertyBag = DEFINE_GUID!(0x7f0f21e1, 0xbfe1, 0x11d1, 0x82, 0xc0, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x71); +const GUID TID_D3DRMRightHanded = DEFINE_GUID!(0x7f5d5ea0, 0xd53a, 0x11d1, 0x82, 0xc0, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x71); + +ubyte D3DRM_XTEMPLATES[] = +[ + 0x78, 0x6f, 0x66, 0x20, 0x30, 0x33, 0x30, 0x32, 0x62, + 0x69, 0x6e, 0x20, 0x30, 0x30, 0x36, 0x34, 0x1f, 0, 0x1, + 0, 0x6, 0, 0, 0, 0x48, 0x65, 0x61, 0x64, 0x65, + 0x72, 0xa, 0, 0x5, 0, 0x43, 0xab, 0x82, 0x3d, 0xda, + 0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, + 0x33, 0x28, 0, 0x1, 0, 0x5, 0, 0, 0, 0x6d, + 0x61, 0x6a, 0x6f, 0x72, 0x14, 0, 0x28, 0, 0x1, 0, + 0x5, 0, 0, 0, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x14, + 0, 0x29, 0, 0x1, 0, 0x5, 0, 0, 0, 0x66, + 0x6c, 0x61, 0x67, 0x73, 0x14, 0, 0xb, 0, 0x1f, 0, + 0x1, 0, 0x6, 0, 0, 0, 0x56, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0xa, 0, 0x5, 0, 0x5e, 0xab, 0x82, 0x3d, + 0xda, 0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, + 0xe4, 0x33, 0x2a, 0, 0x1, 0, 0x1, 0, 0, 0, + 0x78, 0x14, 0, 0x2a, 0, 0x1, 0, 0x1, 0, 0, + 0, 0x79, 0x14, 0, 0x2a, 0, 0x1, 0, 0x1, 0, + 0, 0, 0x7a, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, + 0, 0x8, 0, 0, 0, 0x43, 0x6f, 0x6f, 0x72, 0x64, + 0x73, 0x32, 0x64, 0xa, 0, 0x5, 0, 0x44, 0x3f, 0xf2, + 0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, + 0x35, 0x94, 0xa3, 0x2a, 0, 0x1, 0, 0x1, 0, 0, + 0, 0x75, 0x14, 0, 0x2a, 0, 0x1, 0, 0x1, 0, + 0, 0, 0x76, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, + 0, 0x9, 0, 0, 0, 0x4d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x34, 0x78, 0x34, 0xa, 0, 0x5, 0, 0x45, 0x3f, + 0xf2, 0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, + 0x33, 0x35, 0x94, 0xa3, 0x34, 0, 0x2a, 0, 0x1, 0, + 0x6, 0, 0, 0, 0x6d, 0x61, 0x74, 0x72, 0x69, 0x78, + 0xe, 0, 0x3, 0, 0x10, 0, 0, 0, 0xf, 0, + 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x9, 0, + 0, 0, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, + 0x41, 0xa, 0, 0x5, 0, 0xe0, 0x44, 0xff, 0x35, 0x7c, + 0x6c, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, + 0xa3, 0x2a, 0, 0x1, 0, 0x3, 0, 0, 0, 0x72, + 0x65, 0x64, 0x14, 0, 0x2a, 0, 0x1, 0, 0x5, 0, + 0, 0, 0x67, 0x72, 0x65, 0x65, 0x6e, 0x14, 0, 0x2a, + 0, 0x1, 0, 0x4, 0, 0, 0, 0x62, 0x6c, 0x75, + 0x65, 0x14, 0, 0x2a, 0, 0x1, 0, 0x5, 0, 0, + 0, 0x61, 0x6c, 0x70, 0x68, 0x61, 0x14, 0, 0xb, 0, + 0x1f, 0, 0x1, 0, 0x8, 0, 0, 0, 0x43, 0x6f, + 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, 0xa, 0, 0x5, 0, + 0x81, 0x6e, 0xe1, 0xd3, 0x35, 0x78, 0xcf, 0x11, 0x8f, 0x52, + 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x2a, 0, 0x1, 0, + 0x3, 0, 0, 0, 0x72, 0x65, 0x64, 0x14, 0, 0x2a, + 0, 0x1, 0, 0x5, 0, 0, 0, 0x67, 0x72, 0x65, + 0x65, 0x6e, 0x14, 0, 0x2a, 0, 0x1, 0, 0x4, 0, + 0, 0, 0x62, 0x6c, 0x75, 0x65, 0x14, 0, 0xb, 0, + 0x1f, 0, 0x1, 0, 0xc, 0, 0, 0, 0x49, 0x6e, + 0x64, 0x65, 0x78, 0x65, 0x64, 0x43, 0x6f, 0x6c, 0x6f, 0x72, + 0xa, 0, 0x5, 0, 0x20, 0xb8, 0x30, 0x16, 0x42, 0x78, + 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, + 0x29, 0, 0x1, 0, 0x5, 0, 0, 0, 0x69, 0x6e, + 0x64, 0x65, 0x78, 0x14, 0, 0x1, 0, 0x9, 0, 0, + 0, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, 0x41, + 0x1, 0, 0xa, 0, 0, 0, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x14, 0, 0xb, 0, + 0x1f, 0, 0x1, 0, 0x7, 0, 0, 0, 0x42, 0x6f, + 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0xa, 0, 0x5, 0, 0xa0, + 0xa6, 0x7d, 0x53, 0x37, 0xca, 0xd0, 0x11, 0x94, 0x1c, 0, + 0x80, 0xc8, 0xc, 0xfa, 0x7b, 0x29, 0, 0x1, 0, 0x9, + 0, 0, 0, 0x74, 0x72, 0x75, 0x65, 0x66, 0x61, 0x6c, + 0x73, 0x65, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, + 0x9, 0, 0, 0, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, + 0x6e, 0x32, 0x64, 0xa, 0, 0x5, 0, 0x63, 0xae, 0x85, + 0x48, 0xe8, 0x78, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, + 0x35, 0x94, 0xa3, 0x1, 0, 0x7, 0, 0, 0, 0x42, + 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x1, 0, 0x1, 0, + 0, 0, 0x75, 0x14, 0, 0x1, 0, 0x7, 0, 0, + 0, 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x1, 0, + 0x1, 0, 0, 0, 0x76, 0x14, 0, 0xb, 0, 0x1f, + 0, 0x1, 0, 0xc, 0, 0, 0, 0x4d, 0x61, 0x74, + 0x65, 0x72, 0x69, 0x61, 0x6c, 0x57, 0x72, 0x61, 0x70, 0xa, + 0, 0x5, 0, 0x60, 0xae, 0x85, 0x48, 0xe8, 0x78, 0xcf, + 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x1, + 0, 0x7, 0, 0, 0, 0x42, 0x6f, 0x6f, 0x6c, 0x65, + 0x61, 0x6e, 0x1, 0, 0x1, 0, 0, 0, 0x75, 0x14, + 0, 0x1, 0, 0x7, 0, 0, 0, 0x42, 0x6f, 0x6f, + 0x6c, 0x65, 0x61, 0x6e, 0x1, 0, 0x1, 0, 0, 0, + 0x76, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0xf, + 0, 0, 0, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, + 0x46, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0xa, 0, + 0x5, 0, 0xe1, 0x90, 0x27, 0xa4, 0x10, 0x78, 0xcf, 0x11, + 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x31, 0, + 0x1, 0, 0x8, 0, 0, 0, 0x66, 0x69, 0x6c, 0x65, + 0x6e, 0x61, 0x6d, 0x65, 0x14, 0, 0xb, 0, 0x1f, 0, + 0x1, 0, 0x8, 0, 0, 0, 0x4d, 0x61, 0x74, 0x65, + 0x72, 0x69, 0x61, 0x6c, 0xa, 0, 0x5, 0, 0x4d, 0xab, + 0x82, 0x3d, 0xda, 0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20, + 0xaf, 0x71, 0xe4, 0x33, 0x1, 0, 0x9, 0, 0, 0, + 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, 0x41, 0x1, + 0, 0x9, 0, 0, 0, 0x66, 0x61, 0x63, 0x65, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x14, 0, 0x2a, 0, 0x1, 0, + 0x5, 0, 0, 0, 0x70, 0x6f, 0x77, 0x65, 0x72, 0x14, + 0, 0x1, 0, 0x8, 0, 0, 0, 0x43, 0x6f, 0x6c, + 0x6f, 0x72, 0x52, 0x47, 0x42, 0x1, 0, 0xd, 0, 0, + 0, 0x73, 0x70, 0x65, 0x63, 0x75, 0x6c, 0x61, 0x72, 0x43, + 0x6f, 0x6c, 0x6f, 0x72, 0x14, 0, 0x1, 0, 0x8, 0, + 0, 0, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x52, 0x47, 0x42, + 0x1, 0, 0xd, 0, 0, 0, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x14, + 0, 0xe, 0, 0x12, 0, 0x12, 0, 0x12, 0, 0xf, + 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x8, 0, 0, + 0, 0x4d, 0x65, 0x73, 0x68, 0x46, 0x61, 0x63, 0x65, 0xa, + 0, 0x5, 0, 0x5f, 0xab, 0x82, 0x3d, 0xda, 0x62, 0xcf, + 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0x29, + 0, 0x1, 0, 0x12, 0, 0, 0, 0x6e, 0x46, 0x61, + 0x63, 0x65, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e, + 0x64, 0x69, 0x63, 0x65, 0x73, 0x14, 0, 0x34, 0, 0x29, + 0, 0x1, 0, 0x11, 0, 0, 0, 0x66, 0x61, 0x63, + 0x65, 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x49, 0x6e, 0x64, + 0x69, 0x63, 0x65, 0x73, 0xe, 0, 0x1, 0, 0x12, 0, + 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, 0x56, 0x65, 0x72, + 0x74, 0x65, 0x78, 0x49, 0x6e, 0x64, 0x69, 0x63, 0x65, 0x73, + 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, + 0xd, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, 0x46, 0x61, + 0x63, 0x65, 0x57, 0x72, 0x61, 0x70, 0x73, 0xa, 0, 0x5, + 0, 0xc0, 0xc5, 0x1e, 0xed, 0xa8, 0xc0, 0xd0, 0x11, 0x94, + 0x1c, 0, 0x80, 0xc8, 0xc, 0xfa, 0x7b, 0x29, 0, 0x1, + 0, 0xf, 0, 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, + 0x57, 0x72, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x14, 0, 0x34, 0, 0x1, 0, 0x9, 0, 0, 0, + 0x42, 0x6f, 0x6f, 0x6c, 0x65, 0x61, 0x6e, 0x32, 0x64, 0x1, + 0, 0xe, 0, 0, 0, 0x66, 0x61, 0x63, 0x65, 0x57, + 0x72, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0xe, + 0, 0x1, 0, 0xf, 0, 0, 0, 0x6e, 0x46, 0x61, + 0x63, 0x65, 0x57, 0x72, 0x61, 0x70, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, + 0x1, 0, 0x11, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, + 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6f, + 0x72, 0x64, 0x73, 0xa, 0, 0x5, 0, 0x40, 0x3f, 0xf2, + 0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, + 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0xe, 0, 0, + 0, 0x6e, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, + 0x6f, 0x6f, 0x72, 0x64, 0x73, 0x14, 0, 0x34, 0, 0x1, + 0, 0x8, 0, 0, 0, 0x43, 0x6f, 0x6f, 0x72, 0x64, + 0x73, 0x32, 0x64, 0x1, 0, 0xd, 0, 0, 0, 0x74, + 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, 0x6f, 0x72, + 0x64, 0x73, 0xe, 0, 0x1, 0, 0xe, 0, 0, 0, + 0x6e, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6f, + 0x6f, 0x72, 0x64, 0x73, 0xf, 0, 0x14, 0, 0xb, 0, + 0x1f, 0, 0x1, 0, 0x10, 0, 0, 0, 0x4d, 0x65, + 0x73, 0x68, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, + 0x4c, 0x69, 0x73, 0x74, 0xa, 0, 0x5, 0, 0x42, 0x3f, + 0xf2, 0xf6, 0x86, 0x76, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, + 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0xa, 0, + 0, 0, 0x6e, 0x4d, 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, + 0x6c, 0x73, 0x14, 0, 0x29, 0, 0x1, 0, 0xc, 0, + 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, 0x49, 0x6e, 0x64, + 0x65, 0x78, 0x65, 0x73, 0x14, 0, 0x34, 0, 0x29, 0, + 0x1, 0, 0xb, 0, 0, 0, 0x66, 0x61, 0x63, 0x65, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0xe, 0, 0x1, + 0, 0xc, 0, 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, + 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x73, 0xf, 0, 0x14, + 0, 0xe, 0, 0x1, 0, 0x8, 0, 0, 0, 0x4d, + 0x61, 0x74, 0x65, 0x72, 0x69, 0x61, 0x6c, 0xf, 0, 0xb, + 0, 0x1f, 0, 0x1, 0, 0xb, 0, 0, 0, 0x4d, + 0x65, 0x73, 0x68, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73, + 0xa, 0, 0x5, 0, 0x43, 0x3f, 0xf2, 0xf6, 0x86, 0x76, + 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, + 0x29, 0, 0x1, 0, 0x8, 0, 0, 0, 0x6e, 0x4e, + 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73, 0x14, 0, 0x34, 0, + 0x1, 0, 0x6, 0, 0, 0, 0x56, 0x65, 0x63, 0x74, + 0x6f, 0x72, 0x1, 0, 0x7, 0, 0, 0, 0x6e, 0x6f, + 0x72, 0x6d, 0x61, 0x6c, 0x73, 0xe, 0, 0x1, 0, 0x8, + 0, 0, 0, 0x6e, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, + 0x73, 0xf, 0, 0x14, 0, 0x29, 0, 0x1, 0, 0xc, + 0, 0, 0, 0x6e, 0x46, 0x61, 0x63, 0x65, 0x4e, 0x6f, + 0x72, 0x6d, 0x61, 0x6c, 0x73, 0x14, 0, 0x34, 0, 0x1, + 0, 0x8, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, 0x46, + 0x61, 0x63, 0x65, 0x1, 0, 0xb, 0, 0, 0, 0x66, + 0x61, 0x63, 0x65, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73, + 0xe, 0, 0x1, 0, 0xc, 0, 0, 0, 0x6e, 0x46, + 0x61, 0x63, 0x65, 0x4e, 0x6f, 0x72, 0x6d, 0x61, 0x6c, 0x73, + 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, + 0x10, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, 0x56, 0x65, + 0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x73, + 0xa, 0, 0x5, 0, 0x21, 0xb8, 0x30, 0x16, 0x42, 0x78, + 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, + 0x29, 0, 0x1, 0, 0xd, 0, 0, 0, 0x6e, 0x56, + 0x65, 0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, + 0x73, 0x14, 0, 0x34, 0, 0x1, 0, 0xc, 0, 0, + 0, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x65, 0x64, 0x43, 0x6f, + 0x6c, 0x6f, 0x72, 0x1, 0, 0xc, 0, 0, 0, 0x76, + 0x65, 0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, 0x72, + 0x73, 0xe, 0, 0x1, 0, 0xd, 0, 0, 0, 0x6e, + 0x56, 0x65, 0x72, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6c, 0x6f, + 0x72, 0x73, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, + 0x1, 0, 0x4, 0, 0, 0, 0x4d, 0x65, 0x73, 0x68, + 0xa, 0, 0x5, 0, 0x44, 0xab, 0x82, 0x3d, 0xda, 0x62, + 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, + 0x29, 0, 0x1, 0, 0x9, 0, 0, 0, 0x6e, 0x56, + 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0x14, 0, 0x34, + 0, 0x1, 0, 0x6, 0, 0, 0, 0x56, 0x65, 0x63, + 0x74, 0x6f, 0x72, 0x1, 0, 0x8, 0, 0, 0, 0x76, + 0x65, 0x72, 0x74, 0x69, 0x63, 0x65, 0x73, 0xe, 0, 0x1, + 0, 0x9, 0, 0, 0, 0x6e, 0x56, 0x65, 0x72, 0x74, + 0x69, 0x63, 0x65, 0x73, 0xf, 0, 0x14, 0, 0x29, 0, + 0x1, 0, 0x6, 0, 0, 0, 0x6e, 0x46, 0x61, 0x63, + 0x65, 0x73, 0x14, 0, 0x34, 0, 0x1, 0, 0x8, 0, + 0, 0, 0x4d, 0x65, 0x73, 0x68, 0x46, 0x61, 0x63, 0x65, + 0x1, 0, 0x5, 0, 0, 0, 0x66, 0x61, 0x63, 0x65, + 0x73, 0xe, 0, 0x1, 0, 0x6, 0, 0, 0, 0x6e, + 0x46, 0x61, 0x63, 0x65, 0x73, 0xf, 0, 0x14, 0, 0xe, + 0, 0x12, 0, 0x12, 0, 0x12, 0, 0xf, 0, 0xb, + 0, 0x1f, 0, 0x1, 0, 0x14, 0, 0, 0, 0x46, + 0x72, 0x61, 0x6d, 0x65, 0x54, 0x72, 0x61, 0x6e, 0x73, 0x66, + 0x6f, 0x72, 0x6d, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0xa, + 0, 0x5, 0, 0x41, 0x3f, 0xf2, 0xf6, 0x86, 0x76, 0xcf, + 0x11, 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x1, + 0, 0x9, 0, 0, 0, 0x4d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x34, 0x78, 0x34, 0x1, 0, 0xb, 0, 0, 0, + 0x66, 0x72, 0x61, 0x6d, 0x65, 0x4d, 0x61, 0x74, 0x72, 0x69, + 0x78, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x5, + 0, 0, 0, 0x46, 0x72, 0x61, 0x6d, 0x65, 0xa, 0, + 0x5, 0, 0x46, 0xab, 0x82, 0x3d, 0xda, 0x62, 0xcf, 0x11, + 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0xe, 0, + 0x12, 0, 0x12, 0, 0x12, 0, 0xf, 0, 0xb, 0, + 0x1f, 0, 0x1, 0, 0x9, 0, 0, 0, 0x46, 0x6c, + 0x6f, 0x61, 0x74, 0x4b, 0x65, 0x79, 0x73, 0xa, 0, 0x5, + 0, 0xa9, 0x46, 0xdd, 0x10, 0x5b, 0x77, 0xcf, 0x11, 0x8f, + 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1, + 0, 0x7, 0, 0, 0, 0x6e, 0x56, 0x61, 0x6c, 0x75, + 0x65, 0x73, 0x14, 0, 0x34, 0, 0x2a, 0, 0x1, 0, + 0x6, 0, 0, 0, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0xe, 0, 0x1, 0, 0x7, 0, 0, 0, 0x6e, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x73, 0xf, 0, 0x14, 0, 0xb, + 0, 0x1f, 0, 0x1, 0, 0xe, 0, 0, 0, 0x54, + 0x69, 0x6d, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4b, + 0x65, 0x79, 0x73, 0xa, 0, 0x5, 0, 0x80, 0xb1, 0x6, + 0xf4, 0x3b, 0x7b, 0xcf, 0x11, 0x8f, 0x52, 0, 0x40, 0x33, + 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0x4, 0, 0, + 0, 0x74, 0x69, 0x6d, 0x65, 0x14, 0, 0x1, 0, 0x9, + 0, 0, 0, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4b, 0x65, + 0x79, 0x73, 0x1, 0, 0x6, 0, 0, 0, 0x74, 0x66, + 0x6b, 0x65, 0x79, 0x73, 0x14, 0, 0xb, 0, 0x1f, 0, + 0x1, 0, 0xc, 0, 0, 0, 0x41, 0x6e, 0x69, 0x6d, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4b, 0x65, 0x79, 0xa, 0, + 0x5, 0, 0xa8, 0x46, 0xdd, 0x10, 0x5b, 0x77, 0xcf, 0x11, + 0x8f, 0x52, 0, 0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0, + 0x1, 0, 0x7, 0, 0, 0, 0x6b, 0x65, 0x79, 0x54, + 0x79, 0x70, 0x65, 0x14, 0, 0x29, 0, 0x1, 0, 0x5, + 0, 0, 0, 0x6e, 0x4b, 0x65, 0x79, 0x73, 0x14, 0, + 0x34, 0, 0x1, 0, 0xe, 0, 0, 0, 0x54, 0x69, + 0x6d, 0x65, 0x64, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x4b, 0x65, + 0x79, 0x73, 0x1, 0, 0x4, 0, 0, 0, 0x6b, 0x65, + 0x79, 0x73, 0xe, 0, 0x1, 0, 0x5, 0, 0, 0, + 0x6e, 0x4b, 0x65, 0x79, 0x73, 0xf, 0, 0x14, 0, 0xb, + 0, 0x1f, 0, 0x1, 0, 0x10, 0, 0, 0, 0x41, + 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x70, + 0x74, 0x69, 0x6f, 0x6e, 0x73, 0xa, 0, 0x5, 0, 0xc0, + 0x56, 0xbf, 0xe2, 0xf, 0x84, 0xcf, 0x11, 0x8f, 0x52, 0, + 0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0xa, + 0, 0, 0, 0x6f, 0x70, 0x65, 0x6e, 0x63, 0x6c, 0x6f, + 0x73, 0x65, 0x64, 0x14, 0, 0x29, 0, 0x1, 0, 0xf, + 0, 0, 0, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x71, 0x75, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x14, 0, + 0xb, 0, 0x1f, 0, 0x1, 0, 0x9, 0, 0, 0, + 0x41, 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xa, + 0, 0x5, 0, 0x4f, 0xab, 0x82, 0x3d, 0xda, 0x62, 0xcf, + 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0xe, + 0, 0x12, 0, 0x12, 0, 0x12, 0, 0xf, 0, 0xb, + 0, 0x1f, 0, 0x1, 0, 0xc, 0, 0, 0, 0x41, + 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x65, + 0x74, 0xa, 0, 0x5, 0, 0x50, 0xab, 0x82, 0x3d, 0xda, + 0x62, 0xcf, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, + 0x33, 0xe, 0, 0x1, 0, 0x9, 0, 0, 0, 0x41, + 0x6e, 0x69, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0xf, 0, + 0xb, 0, 0x1f, 0, 0x1, 0, 0xa, 0, 0, 0, + 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x61, 0x74, 0x61, + 0xa, 0, 0x5, 0, 0xa0, 0xee, 0x23, 0x3a, 0xb1, 0x94, + 0xd0, 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, + 0xe, 0, 0x1, 0, 0x6, 0, 0, 0, 0x42, 0x49, + 0x4e, 0x41, 0x52, 0x59, 0xf, 0, 0xb, 0, 0x1f, 0, + 0x1, 0, 0x3, 0, 0, 0, 0x55, 0x72, 0x6c, 0xa, + 0, 0x5, 0, 0xa1, 0xee, 0x23, 0x3a, 0xb1, 0x94, 0xd0, + 0x11, 0xab, 0x39, 0, 0x20, 0xaf, 0x71, 0xe4, 0x33, 0x29, + 0, 0x1, 0, 0x5, 0, 0, 0, 0x6e, 0x55, 0x72, + 0x6c, 0x73, 0x14, 0, 0x34, 0, 0x31, 0, 0x1, 0, + 0x4, 0, 0, 0, 0x75, 0x72, 0x6c, 0x73, 0xe, 0, + 0x1, 0, 0x5, 0, 0, 0, 0x6e, 0x55, 0x72, 0x6c, + 0x73, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, 0, 0x1, + 0, 0xf, 0, 0, 0, 0x50, 0x72, 0x6f, 0x67, 0x72, + 0x65, 0x73, 0x73, 0x69, 0x76, 0x65, 0x4d, 0x65, 0x73, 0x68, + 0xa, 0, 0x5, 0, 0x60, 0xc3, 0x63, 0x8a, 0x7d, 0x99, + 0xd0, 0x11, 0x94, 0x1c, 0, 0x80, 0xc8, 0xc, 0xfa, 0x7b, + 0xe, 0, 0x1, 0, 0x3, 0, 0, 0, 0x55, 0x72, + 0x6c, 0x13, 0, 0x1, 0, 0xa, 0, 0, 0, 0x49, + 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x44, 0x61, 0x74, 0x61, 0xf, + 0, 0xb, 0, 0x1f, 0, 0x1, 0, 0x4, 0, 0, + 0, 0x47, 0x75, 0x69, 0x64, 0xa, 0, 0x5, 0, 0xe0, + 0x90, 0x27, 0xa4, 0x10, 0x78, 0xcf, 0x11, 0x8f, 0x52, 0, + 0x40, 0x33, 0x35, 0x94, 0xa3, 0x29, 0, 0x1, 0, 0x5, + 0, 0, 0, 0x64, 0x61, 0x74, 0x61, 0x31, 0x14, 0, + 0x28, 0, 0x1, 0, 0x5, 0, 0, 0, 0x64, 0x61, + 0x74, 0x61, 0x32, 0x14, 0, 0x28, 0, 0x1, 0, 0x5, + 0, 0, 0, 0x64, 0x61, 0x74, 0x61, 0x33, 0x14, 0, + 0x34, 0, 0x2d, 0, 0x1, 0, 0x5, 0, 0, 0, + 0x64, 0x61, 0x74, 0x61, 0x34, 0xe, 0, 0x3, 0, 0x8, + 0, 0, 0, 0xf, 0, 0x14, 0, 0xb, 0, 0x1f, + 0, 0x1, 0, 0xe, 0, 0, 0, 0x53, 0x74, 0x72, + 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, + 0x79, 0xa, 0, 0x5, 0, 0xe0, 0x21, 0xf, 0x7f, 0xe1, + 0xbf, 0xd1, 0x11, 0x82, 0xc0, 0, 0xa0, 0xc9, 0x69, 0x72, + 0x71, 0x31, 0, 0x1, 0, 0x3, 0, 0, 0, 0x6b, + 0x65, 0x79, 0x14, 0, 0x31, 0, 0x1, 0, 0x5, 0, + 0, 0, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x14, 0, 0xb, + 0, 0x1f, 0, 0x1, 0, 0xb, 0, 0, 0, 0x50, + 0x72, 0x6f, 0x70, 0x65, 0x72, 0x74, 0x79, 0x42, 0x61, 0x67, + 0xa, 0, 0x5, 0, 0xe1, 0x21, 0xf, 0x7f, 0xe1, 0xbf, + 0xd1, 0x11, 0x82, 0xc0, 0, 0xa0, 0xc9, 0x69, 0x72, 0x71, + 0xe, 0, 0x1, 0, 0xe, 0, 0, 0, 0x53, 0x74, + 0x72, 0x69, 0x6e, 0x67, 0x50, 0x72, 0x6f, 0x70, 0x65, 0x72, + 0x74, 0x79, 0xf, 0, 0xb, 0, 0x1f, 0, 0x1, 0, + 0xe, 0, 0, 0, 0x45, 0x78, 0x74, 0x65, 0x72, 0x6e, + 0x61, 0x6c, 0x56, 0x69, 0x73, 0x75, 0x61, 0x6c, 0xa, 0, + 0x5, 0, 0xa0, 0x6a, 0x11, 0x98, 0xba, 0xbd, 0xd1, 0x11, + 0x82, 0xc0, 0, 0xa0, 0xc9, 0x69, 0x72, 0x71, 0x1, 0, + 0x4, 0, 0, 0, 0x47, 0x75, 0x69, 0x64, 0x1, 0, + 0x12, 0, 0, 0, 0x67, 0x75, 0x69, 0x64, 0x45, 0x78, + 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x56, 0x69, 0x73, 0x75, + 0x61, 0x6c, 0x14, 0, 0xe, 0, 0x12, 0, 0x12, 0, + 0x12, 0, 0xf, 0, 0xb, 0, 0x1f, 0, 0x1, 0, + 0xb, 0, 0, 0, 0x52, 0x69, 0x67, 0x68, 0x74, 0x48, + 0x61, 0x6e, 0x64, 0x65, 0x64, 0xa, 0, 0x5, 0, 0xa0, + 0x5e, 0x5d, 0x7f, 0x3a, 0xd5, 0xd1, 0x11, 0x82, 0xc0, 0, + 0xa0, 0xc9, 0x69, 0x72, 0x71, 0x29, 0, 0x1, 0, 0xc, + 0, 0, 0, 0x62, 0x52, 0x69, 0x67, 0x68, 0x74, 0x48, + 0x61, 0x6e, 0x64, 0x65, 0x64, 0x14, 0, 0xb, 0 +]; + +const GUID DXFILEOBJ_XSkinMeshHeader = DEFINE_GUID!(0x3cf169ce, 0xff7c, 0x44ab, 0x93, 0xc0, 0xf7, 0x8f, 0x62, 0xd1, 0x72, 0xe2); +const GUID DXFILEOBJ_VertexDuplicationIndices = DEFINE_GUID!(0xb8d65549, 0xd7c9, 0x4995, 0x89, 0xcf, 0x53, 0xa9, 0xa8, 0xb0, 0x31, 0xe3); +const GUID DXFILEOBJ_FaceAdjacency = DEFINE_GUID!(0xa64c844a, 0xe282, 0x4756, 0x8b, 0x80, 0x25, 0xc, 0xde, 0x4, 0x39, 0x8c); +const GUID DXFILEOBJ_SkinWeights = DEFINE_GUID!(0x6f0d123b, 0xbad2, 0x4167, 0xa0, 0xd0, 0x80, 0x22, 0x4f, 0x25, 0xfa, 0xbb); +const GUID DXFILEOBJ_Patch = DEFINE_GUID!(0xa3eb5d44, 0xfc22, 0x429d, 0x9a, 0xfb, 0x32, 0x21, 0xcb, 0x97, 0x19, 0xa6); +const GUID DXFILEOBJ_PatchMesh = DEFINE_GUID!(0xd02c95cc, 0xedba, 0x4305, 0x9b, 0x5d, 0x18, 0x20, 0xd7, 0x70, 0x4b, 0xbf); +const GUID DXFILEOBJ_PatchMesh9 = DEFINE_GUID!(0xb9ec94e1, 0xb9a6, 0x4251, 0xba, 0x18, 0x94, 0x89, 0x3f, 0x2, 0xc0, 0xea); +const GUID DXFILEOBJ_PMInfo = DEFINE_GUID!(0xb6c3e656, 0xec8b, 0x4b92, 0x9b, 0x62, 0x68, 0x16, 0x59, 0x52, 0x29, 0x47); +const GUID DXFILEOBJ_PMAttributeRange = DEFINE_GUID!(0x917e0427, 0xc61e, 0x4a14, 0x9c, 0x64, 0xaf, 0xe6, 0x5f, 0x9e, 0x98, 0x44); +const GUID DXFILEOBJ_PMVSplitRecord = DEFINE_GUID!(0x574ccc14, 0xf0b3, 0x4333, 0x82, 0x2d, 0x93, 0xe8, 0xa8, 0xa0, 0x8e, 0x4c); +const GUID DXFILEOBJ_FVFData = DEFINE_GUID!(0xb6e70a0e, 0x8ef9, 0x4e83, 0x94, 0xad, 0xec, 0xc8, 0xb0, 0xc0, 0x48, 0x97); +const GUID DXFILEOBJ_VertexElement = DEFINE_GUID!(0xf752461c, 0x1e23, 0x48f6, 0xb9, 0xf8, 0x83, 0x50, 0x85, 0xf, 0x33, 0x6f); +const GUID DXFILEOBJ_DeclData = DEFINE_GUID!(0xbf22e553, 0x292c, 0x4781, 0x9f, 0xea, 0x62, 0xbd, 0x55, 0x4b, 0xdd, 0x93); +const GUID DXFILEOBJ_EffectFloats = DEFINE_GUID!(0xf1cfe2b3, 0xde3, 0x4e28, 0xaf, 0xa1, 0x15, 0x5a, 0x75, 0xa, 0x28, 0x2d); +const GUID DXFILEOBJ_EffectString = DEFINE_GUID!(0xd55b097e, 0xbdb6, 0x4c52, 0xb0, 0x3d, 0x60, 0x51, 0xc8, 0x9d, 0xe, 0x42); +const GUID DXFILEOBJ_EffectDWord = DEFINE_GUID!(0x622c0ed0, 0x956e, 0x4da9, 0x90, 0x8a, 0x2a, 0xf9, 0x4f, 0x3c, 0xe7, 0x16); +const GUID DXFILEOBJ_EffectParamFloats = DEFINE_GUID!(0x3014b9a0, 0x62f5, 0x478c, 0x9b, 0x86, 0xe4, 0xac, 0x9f, 0x4e, 0x41, 0x8b); +const GUID DXFILEOBJ_EffectParamString = DEFINE_GUID!(0x1dbc4c88, 0x94c1, 0x46ee, 0x90, 0x76, 0x2c, 0x28, 0x81, 0x8c, 0x94, 0x81); +const GUID DXFILEOBJ_EffectParamDWord = DEFINE_GUID!(0xe13963bc, 0xae51, 0x4c5d, 0xb0, 0xf, 0xcf, 0xa3, 0xa9, 0xd9, 0x7c, 0xe5); +const GUID DXFILEOBJ_EffectInstance = DEFINE_GUID!(0xe331f7e4, 0x559, 0x4cc2, 0x8e, 0x99, 0x1c, 0xec, 0x16, 0x57, 0x92, 0x8f); +const GUID DXFILEOBJ_AnimTicksPerSecond = DEFINE_GUID!(0x9e415a43, 0x7ba6, 0x4a73, 0x87, 0x43, 0xb7, 0x3d, 0x47, 0xe8, 0x84, 0x76); +const GUID DXFILEOBJ_CompressedAnimationSet = DEFINE_GUID!(0x7f9b00b3, 0xf125, 0x4890, 0x87, 0x6e, 0x1c, 0x42, 0xbf, 0x69, 0x7c, 0x4d); + +align(1) struct XFILECOMPRESSEDANIMATIONSET +{ + DWORD CompressedBlockSize; + FLOAT TicksPerSec; + DWORD PlaybackType; + DWORD BufferLength; +} + +const char[] XSKINEXP_TEMPLATES = + "xof 0303txt 0032 + template XSkinMeshHeader + { + <3CF169CE-FF7C-44ab-93C0-F78F62D172E2> + WORD nMaxSkinWeightsPerVertex; + WORD nMaxSkinWeightsPerFace; + WORD nBones; + } + template VertexDuplicationIndices + { + + DWORD nIndices; + DWORD nOriginalVertices; + array DWORD indices[nIndices]; + } + template FaceAdjacency + { + + DWORD nIndices; + array DWORD indices[nIndices]; + } + template SkinWeights + { + <6F0D123B-BAD2-4167-A0D0-80224F25FABB> + STRING transformNodeName; + DWORD nWeights; + array DWORD vertexIndices[nWeights]; + array float weights[nWeights]; + Matrix4x4 matrixOffset; + } + template Patch + { + + DWORD nControlIndices; + array DWORD controlIndices[nControlIndices]; + } + template PatchMesh + { + + DWORD nVertices; + array Vector vertices[nVertices]; + DWORD nPatches; + array Patch patches[nPatches]; + [ ... ] + } + template PatchMesh9 + { + + DWORD Type; + DWORD Degree; + DWORD Basis; + DWORD nVertices; + array Vector vertices[nVertices]; + DWORD nPatches; + array Patch patches[nPatches]; + [ ... ] + } " + "template EffectFloats + { + + DWORD nFloats; + array float Floats[nFloats]; + } + template EffectString + { + + STRING Value; + } + template EffectDWord + { + <622C0ED0-956E-4da9-908A-2AF94F3CE716> + DWORD Value; + } " + "template EffectParamFloats + { + <3014B9A0-62F5-478c-9B86-E4AC9F4E418B> + STRING ParamName; + DWORD nFloats; + array float Floats[nFloats]; + } " + "template EffectParamString + { + <1DBC4C88-94C1-46ee-9076-2C28818C9481> + STRING ParamName; + STRING Value; + } + template EffectParamDWord + { + + STRING ParamName; + DWORD Value; + } + template EffectInstance + { + + STRING EffectFilename; + [ ... ] + } " + "template AnimTicksPerSecond + { + <9E415A43-7BA6-4a73-8743-B73D47E88476> + DWORD AnimTicksPerSecond; + } + template CompressedAnimationSet + { + <7F9B00B3-F125-4890-876E-1C42BF697C4D> + DWORD CompressedBlockSize; + FLOAT TicksPerSec; + DWORD PlaybackType; + DWORD BufferLength; + array DWORD CompressedData[BufferLength]; + } "; + +const char[] XEXTENSIONS_TEMPLATES = + "xof 0303txt 0032 + template FVFData + { + + DWORD dwFVF; + DWORD nDWords; + array DWORD data[nDWords]; + } + template VertexElement + { + + DWORD Type; + DWORD Method; + DWORD Usage; + DWORD UsageIndex; + } + template DeclData + { + + DWORD nElements; + array VertexElement Elements[nElements]; + DWORD nDWords; + array DWORD data[nDWords]; + } + template PMAttributeRange + { + <917E0427-C61E-4a14-9C64-AFE65F9E9844> + DWORD iFaceOffset; + DWORD nFacesMin; + DWORD nFacesMax; + DWORD iVertexOffset; + DWORD nVerticesMin; + DWORD nVerticesMax; + } + template PMVSplitRecord + { + <574CCC14-F0B3-4333-822D-93E8A8A08E4C> + DWORD iFaceCLW; + DWORD iVlrOffset; + DWORD iCode; + } + template PMInfo + { + + DWORD nAttributes; + array PMAttributeRange attributeRanges[nAttributes]; + DWORD nMaxValence; + DWORD nMinLogicalVertices; + DWORD nMaxLogicalVertices; + DWORD nVSplits; + array PMVSplitRecord splitRecords[nVSplits]; + DWORD nAttributeMispredicts; + array DWORD attributeMispredicts[nAttributeMispredicts]; + } "; + +enum : uint +{ + D3DXF_FILEFORMAT_BINARY = 0, + D3DXF_FILEFORMAT_TEXT = 1, + D3DXF_FILEFORMAT_COMPRESSED = 2 +} +alias uint D3DXF_FILEFORMAT; + +enum : uint +{ + D3DXF_FILESAVE_TOFILE = 0x00L, + D3DXF_FILESAVE_TOWFILE = 0x01L +} +alias uint D3DXF_FILESAVEOPTIONS; + +enum : uint +{ + D3DXF_FILELOAD_FROMFILE = 0x00L, + D3DXF_FILELOAD_FROMWFILE = 0x01L, + D3DXF_FILELOAD_FROMRESOURCE = 0x02L, + D3DXF_FILELOAD_FROMMEMORY = 0x03L +} +alias uint D3DXF_FILELOADOPTIONS; + +struct D3DXF_FILELOADRESOURCE +{ + HMODULE hModule; // Desc + LPCSTR lpName; // Desc + LPCSTR lpType; // Desc +} + +struct D3DXF_FILELOADMEMORY +{ + LPCVOID lpMemory; // Desc + size_t dSize; // Desc +} + +const GUID IID_ID3DXFile = DEFINE_GUID!(0xcef08cf9, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 ); +const GUID IID_ID3DXFileSaveObject = DEFINE_GUID!(0xcef08cfa, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 ); +const GUID IID_ID3DXFileSaveData = DEFINE_GUID!(0xcef08cfb, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 ); +const GUID IID_ID3DXFileEnumObject = DEFINE_GUID!(0xcef08cfc, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 ); +const GUID IID_ID3DXFileData = DEFINE_GUID!(0xcef08cfd, 0x7b4f, 0x4429, 0x96, 0x24, 0x2a, 0x69, 0x0a, 0x93, 0x32, 0x01 ); + +interface ID3DXFile : IUnknown +{ + HRESULT CreateEnumObject(LPCVOID, D3DXF_FILELOADOPTIONS, ID3DXFileEnumObject*); + HRESULT CreateSaveObject(LPCVOID, D3DXF_FILESAVEOPTIONS, D3DXF_FILEFORMAT, ID3DXFileSaveObject*); + HRESULT RegisterTemplates(LPCVOID, size_t); + HRESULT RegisterEnumTemplates(ID3DXFileEnumObject); +} + +interface ID3DXFileSaveObject : IUnknown +{ + HRESULT GetFile(ID3DXFile*); + HRESULT AddDataObject(GUID*, LPCSTR, GUID*, size_t, LPCVOID, ID3DXFileSaveData*); + HRESULT Save(); +} + +interface ID3DXFileSaveData : IUnknown +{ + HRESULT GetSave(ID3DXFileSaveObject*); + HRESULT GetName(LPSTR, size_t*); + HRESULT GetId(GUID*); + HRESULT GetType(GUID*); + HRESULT AddDataObject(GUID*, LPCSTR, GUID*, size_t, LPCVOID, ID3DXFileSaveData*); + HRESULT AddDataReference(LPCSTR, GUID* ); +} + +interface ID3DXFileEnumObject : IUnknown +{ + HRESULT GetFile(ID3DXFile*); + HRESULT GetChildren(size_t*); + HRESULT GetChild(size_t, ID3DXFileData*); + HRESULT GetDataObjectById(REFGUID, ID3DXFileData*); + HRESULT GetDataObjectByName(LPCSTR, ID3DXFileData*); +} + +interface ID3DXFileData : IUnknown +{ + HRESULT GetEnum(ID3DXFileEnumObject*); + HRESULT GetName(LPSTR, size_t*); + HRESULT GetId(GUID*); + HRESULT Lock(size_t*, LPCVOID*); + HRESULT Unlock(); + HRESULT GetType(GUID*); + BOOL IsReference(); + HRESULT GetChildren(size_t*); + HRESULT GetChild(size_t, ID3DXFileData*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/d3dx9.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/d3dx9.def Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,48 @@ +IMPORTS +_D3DXConcatenateMeshes@32 = d3dx9_29.D3DXConcatenateMeshes +_D3DXCreateBox@24 = d3dx9_29.D3DXCreateBox +_D3DXCreateCubeTexture@28 = d3dx9_29.D3DXCreateCubeTexture +_D3DXCreateCubeTextureFromFileExA@52 = d3dx9_29.D3DXCreateCubeTextureFromFileExA +_D3DXCreateCylinder@32 = d3dx9_29.D3DXCreateCylinder +_D3DXCreateFontA@48 = d3dx9_29.D3DXCreateFontA +_D3DXCreatePolygon@20 = d3dx9_29.D3DXCreatePolygon +_D3DXCreateSkinInfoFVF@16 = d3dx9_29.D3DXCreateSkinInfoFVF +_D3DXCreateSphere@24 = d3dx9_29.D3DXCreateSphere +_D3DXCreateSprite@8 = d3dx9_29.D3DXCreateSprite +_D3DXCreateTeapot@12 = d3dx9_29.D3DXCreateTeapot +_D3DXCreateTexture@32 = d3dx9_29.D3DXCreateTexture +_D3DXCreateTextureFromFileExA@56 = d3dx9_29.D3DXCreateTextureFromFileExA +_D3DXCreateTextureFromFileA@12 = d3dx9_29.D3DXCreateTextureFromFileA +_D3DXCreateTorus@28 = d3dx9_29.D3DXCreateTorus +_D3DXFileCreate@4 = d3dx9_29.D3DXFileCreate +_D3DXGetDeclVertexSize@8 = d3dx9_29.D3DXGetDeclVertexSize +_D3DXLoadMeshFromXof@32 = d3dx9_29.D3DXLoadMeshFromXof +_D3DXMatrixDecompose@16 = d3dx9_29.D3DXMatrixDecompose +_D3DXMatrixInverse@12 = d3dx9_29.D3DXMatrixInverse +_D3DXMatrixMultiply@12 = d3dx9_29.D3DXMatrixMultiply +_D3DXMatrixOrthoOffCenterLH@28 = d3dx9_29.D3DXMatrixOrthoOffCenterLH +_D3DXMatrixPerspectiveFovLH@20 = d3dx9_29.D3DXMatrixPerspectiveFovLH +_D3DXMatrixRotationQuaternion@8 = d3dx9_29.D3DXMatrixRotationQuaternion +_D3DXMatrixRotationX@8 = d3dx9_29.D3DXMatrixRotationX +_D3DXMatrixRotationY@8 = d3dx9_29.D3DXMatrixRotationY +_D3DXMatrixRotationYawPitchRoll@16 = d3dx9_29.D3DXMatrixRotationYawPitchRoll +_D3DXMatrixRotationZ@8 = d3dx9_29.D3DXMatrixRotationZ +_D3DXMatrixScaling@16 = d3dx9_29.D3DXMatrixScaling +_D3DXMatrixTransformation2D@28 = d3dx9_29.D3DXMatrixTransformation2D +_D3DXMatrixTranslation@16 = d3dx9_29.D3DXMatrixTranslation +_D3DXPlaneNormalize@8 = d3dx9_29.D3DXPlaneNormalize +_D3DXQuaternionNormalize@8 = d3dx9_29.D3DXQuaternionNormalize +_D3DXQuaternionRotationYawPitchRoll@16 = d3dx9_29.D3DXQuaternionRotationYawPitchRoll +_D3DXQuaternionSlerp@16 = d3dx9_29.D3DXQuaternionSlerp +_D3DXQuaternionSquad@24 = d3dx9_29.D3DXQuaternionSquad +_D3DXQuaternionSquadSetup@28 = d3dx9_29.D3DXQuaternionSquadSetup +_D3DXSimplifyMesh@28 = d3dx9_29.D3DXSimplifyMesh +_D3DXVec2TransformCoord@12 = d3dx9_29.D3DXVec2TransformCoord +_D3DXVec3CatmullRom@24 = d3dx9_29.D3DXVec3CatmullRom +_D3DXVec3TransformCoord@12 = d3dx9_29.D3DXVec3TransformCoord +_D3DXCreateEffect@36 = d3dx9_29.D3DXCreateEffect +_D3DXCreateEffectFromFileA@32 = d3dx9_29.D3DXCreateEffectFromFileA +_D3DXCreateEffectPool@4 = d3dx9_29.D3DXCreateEffectPool +_D3DXGetShaderInputSemantics@12 = d3dx9_29.D3DXGetShaderInputSemantics +_D3DXGetShaderVersion@4 = d3dx9_29.D3DXGetShaderVersion +_D3DXMatrixTranspose@8 = d3dx9_29.D3DXMatrixTranspose diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/dinput8.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/dinput8.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,431 @@ +module win32.directx.dinput8; + +//import tango.sys.win32.Types; +//alias char CHAR; + +import win32.windows; + +enum { + CLASS_E_NOAGGREGATION = cast(int) 0x80040110, +} + +interface IUnknown { + HRESULT QueryInterface(IID* riid, void** pvObject); + ULONG AddRef(); + ULONG Release(); +} + +extern(C): + +struct DIDEVICEINSTANCEA +{ + DWORD dwSize; + GUID guidInstance; + GUID guidProduct; + DWORD dwDevType; + CHAR tszInstanceName[MAX_PATH]; + CHAR tszProductName[MAX_PATH]; + GUID guidFFDriver; + WORD wUsagePage; + WORD wUsage; +} +alias DIDEVICEINSTANCEA DIDEVICEINSTANCE; + +struct DIDEVICEOBJECTINSTANCEA +{ + DWORD dwSize; + GUID guidType; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; + CHAR tszName[MAX_PATH]; + DWORD dwFFMaxForce; + DWORD dwFFForceResolution; + WORD wCollectionNumber; + WORD wDesignatorIndex; + WORD wUsagePage; + WORD wUsage; + DWORD dwDimension; + WORD wExponent; + WORD wReportId; +} + +struct DIOBJECTDATAFORMAT +{ + const GUID *pguid; + DWORD dwOfs; + DWORD dwType; + DWORD dwFlags; +} + +struct DIDATAFORMAT +{ + DWORD dwSize; + DWORD dwObjSize; + DWORD dwFlags; + DWORD dwDataSize; + DWORD dwNumObjs; + DIOBJECTDATAFORMAT* rgodf; +} + +extern DIDATAFORMAT c_dfDIKeyboard; +extern DIDATAFORMAT c_dfDIMouse2; +extern DIDATAFORMAT c_dfDIJoystick; + +struct DIACTIONA +{ + UINT* uAppData; + DWORD dwSemantic; + DWORD dwFlags; + union + { + LPCSTR lptszActionName; + UINT uResIdString; + } + GUID guidInstance; + DWORD dwObjID; + DWORD dwHow; +} + +struct DIACTIONFORMATA +{ + DWORD dwSize; + DWORD dwActionSize; + DWORD dwDataSize; + DWORD dwNumActions; + DIACTIONA* rgoAction; + GUID guidActionMap; + DWORD dwGenre; + DWORD dwBufferSize; + LONG lAxisMin; + LONG lAxisMax; + HINSTANCE hInstString; + FILETIME ftTimeStamp; + DWORD dwCRC; + CHAR tszActionMap[MAX_PATH]; +} + +struct DIDEVCAPS +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwDevType; + DWORD dwAxes; + DWORD dwButtons; + DWORD dwPOVs; + DWORD dwFFSamplePeriod; + DWORD dwFFMinTimeResolution; + DWORD dwFirmwareRevision; + DWORD dwHardwareRevision; + DWORD dwFFDriverVersion; +} + +struct DIPROPHEADER +{ + DWORD dwSize; + DWORD dwHeaderSize; + DWORD dwObj; + DWORD dwHow; +} + +struct DIDEVICEOBJECTDATA +{ + DWORD dwOfs; + DWORD dwData; + DWORD dwTimeStamp; + DWORD dwSequence; + UINT* uAppData; +} + +struct DIENVELOPE +{ + DWORD dwSize = DIENVELOPE.sizeof; + DWORD dwAttackLevel; + DWORD dwAttackTime; // Microseconds + DWORD dwFadeLevel; + DWORD dwFadeTime; // Microseconds +} + +struct DIEFFECT +{ + DWORD dwSize = DIEFFECT.sizeof; + DWORD dwFlags; // DIEFF_* + DWORD dwDuration; // Microseconds + DWORD dwSamplePeriod; // Microseconds + DWORD dwGain; + DWORD dwTriggerButton; // or DIEB_NOTRIGGER + DWORD dwTriggerRepeatInterval; // Microseconds + DWORD cAxes; // Number of axes + LPDWORD rgdwAxes; // Array of axes + LPLONG rglDirection; // Array of directions + DIENVELOPE* lpEnvelope; // Optional + DWORD cbTypeSpecificParams; // Size of params + LPVOID lpvTypeSpecificParams; // Pointer to params + DWORD dwStartDelay; // Microseconds +} + +struct DIEFFESCAPE +{ + DWORD dwSize; + DWORD dwCommand; + LPVOID lpvInBuffer; + DWORD cbInBuffer; + LPVOID lpvOutBuffer; + DWORD cbOutBuffer; +} + +struct DIEFFECTINFOA +{ + DWORD dwSize; + GUID guid; + DWORD dwEffType; + DWORD dwStaticParams; + DWORD dwDynamicParams; + CHAR tszName[MAX_PATH]; +} + +struct DIFILEEFFECT +{ + DWORD dwSize; + GUID GuidEffect; + DIEFFECT* lpDiEffect; + CHAR szFriendlyName[MAX_PATH]; +} + +struct DIDEVICEIMAGEINFOA +{ + CHAR tszImagePath[MAX_PATH]; + DWORD dwFlags; + // These are valid if DIDIFT_OVERLAY is present in dwFlags. + DWORD dwViewID; + RECT rcOverlay; + DWORD dwObjID; + DWORD dwcValidPts; + POINT rgptCalloutLine[5]; + RECT rcCalloutRect; + DWORD dwTextAlign; +} + +struct DIDEVICEIMAGEINFOHEADERA +{ + DWORD dwSize; + DWORD dwSizeImageInfo; + DWORD dwcViews; + DWORD dwcButtons; + DWORD dwcAxes; + DWORD dwcPOVs; + DWORD dwBufferSize; + DWORD dwBufferUsed; + DIDEVICEIMAGEINFOA* lprgImageInfoArray; +} + +struct DICONFIGUREDEVICESPARAMSA +{ + DWORD dwSize; + DWORD dwcUsers; + LPSTR lptszUserNames; + DWORD dwcFormats; + DIACTIONFORMATA* lprgFormats; + HWND hwnd; + DICOLORSET dics; + IUnknown lpUnkDDSTarget; +} + +struct DICOLORSET +{ + DWORD dwSize; + DWORD cTextFore; + DWORD cTextHighlight; + DWORD cCalloutLine; + DWORD cCalloutHighlight; + DWORD cBorder; + DWORD cControlFill; + DWORD cHighlightFill; + DWORD cAreaFill; +} + +struct DIMOUSESTATE2 +{ + LONG lX; + LONG lY; + LONG lZ; + BYTE rgbButtons[8]; +} + +struct DIJOYSTATE +{ + LONG lX; /* x-axis position */ + LONG lY; /* y-axis position */ + LONG lZ; /* z-axis position */ + LONG lRx; /* x-axis rotation */ + LONG lRy; /* y-axis rotation */ + LONG lRz; /* z-axis rotation */ + LONG rglSlider[2]; /* extra axes positions */ + DWORD rgdwPOV[4]; /* POV directions */ + BYTE rgbButtons[32]; /* 32 buttons */ +} + +struct DIPROPRANGE +{ + DIPROPHEADER diph; + LONG lMin; + LONG lMax; +} + +interface IDirectInputEffect : IUnknown +{ + HRESULT Initialize(HINSTANCE, DWORD, GUID*); + HRESULT GetEffectGuid(GUID*); + HRESULT GetParameters(DIEFFECT*, DWORD); + HRESULT SetParameters(DIEFFECT*, DWORD); + HRESULT Start(DWORD, DWORD); + HRESULT Stop(); + HRESULT GetEffectStatus(LPDWORD); + HRESULT Download(); + HRESULT Unload(); + HRESULT Escape(DIEFFESCAPE*); +} + +extern(Windows) alias bool function(DIDEVICEINSTANCEA*, LPVOID) LPDIENUMDEVICESCALLBACKA; +extern(Windows) alias bool function(DIDEVICEINSTANCEA*, IDirectInputDevice8A*, DWORD, DWORD, LPVOID) LPDIENUMDEVICESBYSEMANTICSCBA; + +extern(Windows) alias bool function(DIDEVICEOBJECTINSTANCEA *didoi, void* pContext) LPDIENUMDEVICEOBJECTSCALLBACKA; + +extern(Windows) alias bool function(DIEFFECTINFOA*, LPVOID) LPDIENUMEFFECTSCALLBACKA; +extern(Windows) alias bool function(IDirectInputEffect, LPVOID) LPDIENUMCREATEDEFFECTOBJECTSCALLBACK; +extern(Windows) alias bool function(DIFILEEFFECT* , LPVOID) LPDIENUMEFFECTSINFILECALLBACK; +extern(Windows) alias bool function(IUnknown, LPVOID) LPDICONFIGUREDEVICESCALLBACK; + +interface IDirectInputDevice8A : IUnknown +{ + HRESULT GetCapabilities(DIDEVCAPS*); + HRESULT EnumObjects(LPDIENUMDEVICEOBJECTSCALLBACKA, VOID*, DWORD); + HRESULT GetProperty(GUID*, DIPROPHEADER*); + HRESULT SetProperty(GUID*, DIPROPHEADER*); + HRESULT Acquire(); + HRESULT Unacquire(); + HRESULT GetDeviceState(DWORD, LPVOID); + HRESULT GetDeviceData(DWORD, DIDEVICEOBJECTDATA*, LPDWORD, DWORD); + HRESULT SetDataFormat(DIDATAFORMAT*); + HRESULT SetEventNotification(HANDLE); + HRESULT SetCooperativeLevel(HWND, DWORD); + HRESULT GetObjectInfo(DIDEVICEOBJECTINSTANCEA*, DWORD, DWORD); + HRESULT GetDeviceInfo(DIDEVICEINSTANCEA*); + HRESULT RunControlPanel(HWND, DWORD); + HRESULT Initialize(HINSTANCE, DWORD, GUID*); + HRESULT CreateEffect(GUID*, DIEFFECT*, IDirectInputEffect*, IUnknown); + HRESULT EnumEffects(LPDIENUMEFFECTSCALLBACKA, LPVOID, DWORD); + HRESULT GetEffectInfo(DIEFFECTINFOA*, GUID*); + HRESULT GetForceFeedbackState(LPDWORD); + HRESULT SendForceFeedbackCommand(DWORD); + HRESULT EnumCreatedEffectObjects(LPDIENUMCREATEDEFFECTOBJECTSCALLBACK, LPVOID, DWORD); + HRESULT Escape(DIEFFESCAPE*); + HRESULT Poll(); + HRESULT SendDeviceData(DWORD, DIDEVICEOBJECTDATA*, LPDWORD, DWORD); + HRESULT EnumEffectsInFile(LPCSTR, LPDIENUMEFFECTSINFILECALLBACK, LPVOID, DWORD); + HRESULT WriteEffectToFile(LPCSTR, DWORD, DIFILEEFFECT*, DWORD); + HRESULT BuildActionMap(DIACTIONFORMATA*, LPCSTR, DWORD); + HRESULT SetActionMap(DIACTIONFORMATA*, LPCSTR, DWORD); + HRESULT GetImageInfo(DIDEVICEIMAGEINFOHEADERA*); +} +alias IDirectInputDevice8A IDirectInputDevice8; + +interface IDirectInput8A : IUnknown +{ +extern(Windows): + HRESULT CreateDevice(GUID*, IDirectInputDevice8A*, IUnknown); + HRESULT EnumDevices(DWORD, LPDIENUMDEVICESCALLBACKA, LPVOID, DWORD); + HRESULT GetDeviceStatus(GUID*); + HRESULT RunControlPanel(HWND, DWORD); + HRESULT Initialize(HINSTANCE, DWORD); + HRESULT FindDevice(GUID*, LPCSTR, GUID*); + HRESULT EnumDevicesBySemantics(LPCSTR, DIACTIONFORMATA*, LPDIENUMDEVICESBYSEMANTICSCBA, LPVOID, DWORD); + HRESULT ConfigureDevices(LPDICONFIGUREDEVICESCALLBACK, DICONFIGUREDEVICESPARAMSA*, DWORD, LPVOID); +} +alias IDirectInput8A IDirectInput8; + +extern(Windows) HRESULT DirectInput8Create(HINSTANCE hinst, DWORD dwVersion, GUID* riidltf, void** ppvOut, IUnknown punkOuter); + +const GUID IID_IDirectInput8A={0xBF798030, 0x483A, 0x4DA2, [0xAA, 0x99, 0x5D, 0x64, 0xED, 0x36, 0x97, 0x00]}; +alias IID_IDirectInput8A IID_IDirectInput8; +const GUID GUID_SysKeyboard = {0x6F1D2B61, 0xD5A0, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; +const GUID GUID_SysMouse = {0x6F1D2B60, 0xD5A0, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; +const GUID GUID_XAxis = {0xA36D02E0, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; +const GUID GUID_YAxis = {0xA36D02E1, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; +const GUID GUID_ZAxis = {0xA36D02E2, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; +const GUID GUID_RxAxis = {0xA36D02F4, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; +const GUID GUID_RyAxis = {0xA36D02F5, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; +const GUID GUID_RzAxis = {0xA36D02E3, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; +const GUID GUID_Slider = {0xA36D02E4, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; +const GUID GUID_Key = {0x55728220, 0xD33C, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; +const GUID GUID_POV = {0xA36D02F2, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + +enum : uint +{ + DISCL_EXCLUSIVE= 0x00000001, + DISCL_NONEXCLUSIVE= 0x00000002, + DISCL_FOREGROUND= 0x00000004, + DISCL_BACKGROUND= 0x00000008, + DISCL_NOWINKEY= 0x00000010, + + DIPH_DEVICE=0, + DIPH_BYOFFSET=1, + + DI8DEVCLASS_GAMECTRL=4, + DIEDFL_ATTACHEDONLY= 0x00000001, + DIDFT_AXIS= 0x00000003 +} + +enum +{ + SEVERITY_SUCCESS= 0, + SEVERITY_ERROR= 1, + FACILITY_WIN32= 7, + ERROR_READ_FAULT= 30L, + DIENUM_CONTINUE= 1, + DIPH_BYID= 2 +} + +struct DIPROPDWORD +{ + DIPROPHEADER diph; + DWORD dwData; +} + +template MAKE_HRESULT(uint sev, uint fac, uint code) +{ + const HRESULT MAKE_HRESULT = cast(HRESULT)((sev << 31) | (fac << 16) | code); +} + +const HRESULT DIERR_OLDDIRECTINPUTVERSION = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 1150); +const HRESULT DIERR_BETADIRECTINPUTVERSION = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 1153); +const HRESULT DIERR_BADDRIVERVER = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 119); +const HRESULT DIERR_DEVICENOTREG = 0x80040154; +const HRESULT DIERR_NOTFOUND = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND); +const HRESULT DIERR_OBJECTNOTFOUND = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, ERROR_FILE_NOT_FOUND); +const HRESULT DIERR_INVALIDPARAM = E_INVALIDARG; +const HRESULT DIERR_NOINTERFACE = E_NOINTERFACE; +const HRESULT DIERR_GENERIC = E_FAIL; +const HRESULT DIERR_OUTOFMEMORY = E_OUTOFMEMORY; +const HRESULT DIERR_UNSUPPORTED = E_NOTIMPL; +const HRESULT DIERR_NOTINITIALIZED = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 21); +const HRESULT DIERR_ALREADYINITIALIZED = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 1247); +const HRESULT DIERR_NOAGGREGATION = CLASS_E_NOAGGREGATION; +const HRESULT DIERR_OTHERAPPHASPRIO = 0x80070005; +const HRESULT DIERR_INPUTLOST = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, ERROR_READ_FAULT); +const HRESULT DIERR_ACQUIRED = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 170); +const HRESULT DIERR_NOTACQUIRED = MAKE_HRESULT!(SEVERITY_ERROR, FACILITY_WIN32, 12); +const HRESULT DIERR_READONLY = 0x80070005; +const HRESULT DIERR_HANDLEEXISTS = 0x80070005; +const HRESULT DIERR_INSUFFICIENTPRIVS = 0x80040200; +const HRESULT DIERR_DEVICEFULL = 0x80040201; +const HRESULT DIERR_MOREDATA = 0x80040202; +const HRESULT DIERR_NOTDOWNLOADED = 0x80040203; +const HRESULT DIERR_HASEFFECTS = 0x80040204; +const HRESULT DIERR_NOTEXCLUSIVEACQUIRED = 0x80040205; +const HRESULT DIERR_INCOMPLETEEFFECT = 0x80040206; +const HRESULT DIERR_NOTBUFFERED = 0x80040207; +const HRESULT DIERR_EFFECTPLAYING = 0x80040208; +const HRESULT DIERR_UNPLUGGED = 0x80040209; +const HRESULT DIERR_REPORTFULL = 0x8004020A; +const HRESULT DIERR_MAPFILEFAIL = 0x8004020B; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/dinput8.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/dinput8.def Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,2 @@ +IMPORTS +_DirectInput8Create@20 = dinput8.DirectInput8Create \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/dsound8.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/dsound8.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,228 @@ +module win32.directx.dsound8; + +//import tango.sys.win32.Types; +import win32.windows; + +alias GUID* LPCGUID; + +interface IUnknown +{ + HRESULT QueryInterface(IID* riid, void** pvObject); + ULONG AddRef(); + ULONG Release(); +} + +alias IUnknown LPUNKNOWN; + +interface IDirectSound : IUnknown +{ + extern(Windows): + + // IDirectSound methods + HRESULT CreateSoundBuffer (LPCDSBUFFERDESC pcDSBufferDesc, LPDIRECTSOUNDBUFFER *ppDSBuffer, LPUNKNOWN pUnkOuter); + HRESULT GetCaps (LPDSCAPS pDSCaps); + HRESULT DuplicateSoundBuffer (LPDIRECTSOUNDBUFFER pDSBufferOriginal, LPDIRECTSOUNDBUFFER *ppDSBufferDuplicate); + HRESULT SetCooperativeLevel (HWND hwnd, DWORD dwLevel); + HRESULT Compact (); + HRESULT GetSpeakerConfig (LPDWORD pdwSpeakerConfig); + HRESULT SetSpeakerConfig (DWORD dwSpeakerConfig); + HRESULT Initialize (LPCGUID pcGuidDevice); +} + +alias IDirectSound LPDIRECTSOUND; + +interface IDirectSound8 : IDirectSound +{ + extern(Windows): + + // IDirectSound8 methods + HRESULT VerifyCertification (LPDWORD pdwCertified); +} + +alias IDirectSound8 LPDIRECTSOUND8; + +interface IDirectSoundBuffer : IUnknown +{ + extern(Windows): + + // IDirectSoundBuffer methods + HRESULT GetCaps (LPDSBCAPS pDSBufferCaps); + HRESULT GetCurrentPosition (LPDWORD pdwCurrentPlayCursor, LPDWORD pdwCurrentWriteCursor); + HRESULT GetFormat (LPWAVEFORMATEX pwfxFormat, DWORD dwSizeAllocated, LPDWORD pdwSizeWritten); + HRESULT GetVolume (LPLONG plVolume); + HRESULT GetPan (LPLONG plPan); + HRESULT GetFrequency (LPDWORD pdwFrequency); + HRESULT GetStatus (LPDWORD pdwStatus); + HRESULT Initialize (LPDIRECTSOUND pDirectSound, LPCDSBUFFERDESC pcDSBufferDesc); + HRESULT Lock (DWORD dwOffset, DWORD dwBytes, LPVOID *ppvAudioPtr1, LPDWORD pdwAudioBytes1, + LPVOID *ppvAudioPtr2, LPDWORD pdwAudioBytes2, DWORD dwFlags); + HRESULT Play (DWORD dwReserved1, DWORD dwPriority, DWORD dwFlags); + HRESULT SetCurrentPosition (DWORD dwNewPosition); + HRESULT SetFormat (LPCWAVEFORMATEX pcfxFormat); + HRESULT SetVolume (LONG lVolume); + HRESULT SetPan (LONG lPan); + HRESULT SetFrequency (DWORD dwFrequency); + HRESULT Stop (); + HRESULT Unlock (LPVOID pvAudioPtr1, DWORD dwAudioBytes1, LPVOID pvAudioPtr2, DWORD dwAudioBytes2); + HRESULT Restore (); +} + +alias IDirectSoundBuffer LPDIRECTSOUNDBUFFER; + +interface IDirectSound3DListener : IUnknown +{ + extern(Windows): + + // IDirectSound3DListener methods + HRESULT GetAllParameters (LPDS3DLISTENER pListener); + HRESULT GetDistanceFactor (D3DVALUE* pflDistanceFactor); + HRESULT GetDopplerFactor (D3DVALUE* pflDopplerFactor); + HRESULT GetOrientation (D3DVECTOR* pvOrientFront, D3DVECTOR* pvOrientTop); + HRESULT GetPosition (D3DVECTOR* pvPosition); + HRESULT GetRolloffFactor (D3DVALUE* pflRolloffFactor); + HRESULT GetVelocity (D3DVECTOR* pvVelocity); + HRESULT SetAllParameters (LPCDS3DLISTENER pcListener, DWORD dwApply); + HRESULT SetDistanceFactor (D3DVALUE flDistanceFactor, DWORD dwApply); + HRESULT SetDopplerFactor (D3DVALUE flDopplerFactor, DWORD dwApply); + HRESULT SetOrientation (D3DVALUE xFront, D3DVALUE yFront, D3DVALUE zFront, + D3DVALUE xTop, D3DVALUE yTop, D3DVALUE zTop, DWORD dwApply); + HRESULT SetPosition (D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply); + HRESULT SetRolloffFactor (D3DVALUE flRolloffFactor, DWORD dwApply); + HRESULT SetVelocity (D3DVALUE x, D3DVALUE y, D3DVALUE z, DWORD dwApply); + HRESULT CommitDeferredSettings (); +} + +struct WAVEFORMATEX +{ + ushort wFormatTag; + ushort nChannels; + uint nSamplesPerSec; + uint nAvgBytesPerSec; + ushort nBlockAlign; + ushort wBitsPerSample; + ushort cbSize; +} + +alias WAVEFORMATEX* LPWAVEFORMATEX, LPCWAVEFORMATEX; + +enum : uint +{ + WAVE_FORMAT_PCM = 1 +} + +struct DSCBUFFERDESC +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwBufferBytes; + DWORD dwReserved; + LPWAVEFORMATEX lpwfxFormat; + DWORD dwFXCount; + LPDSCEFFECTDESC lpDSCFXDesc; +} + +alias DSCBUFFERDESC* LPDSCBUFFERDESC; + +struct DSBUFFERDESC +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwBufferBytes; + DWORD dwReserved; + LPWAVEFORMATEX lpwfxFormat; + GUID guid3DAlgorithm; +} + +alias DSBUFFERDESC* LPCDSBUFFERDESC; + +struct DSCAPS +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwMinSecondarySampleRate; + DWORD dwMaxSecondarySampleRate; + DWORD dwPrimaryBuffers; + DWORD dwMaxHwMixingAllBuffers; + DWORD dwMaxHwMixingStaticBuffers; + DWORD dwMaxHwMixingStreamingBuffers; + DWORD dwFreeHwMixingAllBuffers; + DWORD dwFreeHwMixingStaticBuffers; + DWORD dwFreeHwMixingStreamingBuffers; + DWORD dwMaxHw3DAllBuffers; + DWORD dwMaxHw3DStaticBuffers; + DWORD dwMaxHw3DStreamingBuffers; + DWORD dwFreeHw3DAllBuffers; + DWORD dwFreeHw3DStaticBuffers; + DWORD dwFreeHw3DStreamingBuffers; + DWORD dwTotalHwMemBytes; + DWORD dwFreeHwMemBytes; + DWORD dwMaxContigFreeHwMemBytes; + DWORD dwUnlockTransferRateHwBuffers; + DWORD dwPlayCpuOverheadSwBuffers; + DWORD dwReserved1; + DWORD dwReserved2; +} + +alias DSCAPS* LPDSCAPS; + +struct DSBCAPS +{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwBufferBytes; + DWORD dwUnlockTransferRate; + DWORD dwPlayCpuOverhead; +} + +alias DSBCAPS *LPDSBCAPS; + +struct DSCEFFECTDESC +{ + DWORD dwSize; + DWORD dwFlags; + GUID guidDSCFXClass; + GUID guidDSCFXInstance; + DWORD dwReserved1; + DWORD dwReserved2; +} + +alias DSCEFFECTDESC *LPDSCEFFECTDESC; + +struct DS3DLISTENER +{ + DWORD dwSize; + D3DVECTOR vPosition; + D3DVECTOR vVelocity; + D3DVECTOR vOrientFront; + D3DVECTOR vOrientTop; + D3DVALUE flDistanceFactor; + D3DVALUE flRolloffFactor; + D3DVALUE flDopplerFactor; +} + +alias DS3DLISTENER *LPDS3DLISTENER, LPCDS3DLISTENER; + +alias float D3DVALUE; + +struct D3DVECTOR +{ + float x; + float y; + float z; +} + +extern(Windows) export HRESULT DirectSoundCreate8(LPCGUID pcGuidDevice, LPDIRECTSOUND8 *ppDS8, LPUNKNOWN pUnkOuter); + +const DSSCL_PRIORITY = 0x00000002; +const DSBCAPS_PRIMARYBUFFER = 0x00000001; +const DSBCAPS_CTRL3D = 0x00000010; +const DSBCAPS_GETCURRENTPOSITION2 = 0x00010000; +const DSBCAPS_LOCDEFER = 0x00040000; +const DSBPLAY_LOOPING = 0x00000001; +const DSBSTATUS_PLAYING = 0x00000001; +const DSBCAPS_CTRLFREQUENCY = 0x00000020; +const DSBCAPS_CTRLPAN = 0x00000040; +const DSBCAPS_CTRLVOLUME = 0x00000080; +const DSBLOCK_ENTIREBUFFER = 0x00000002; + +const GUID IID_IDirectSound3DListener8 = {0x279AFA84,0x4981,0x11CE,[0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60]}; \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/dsound8.def --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/dsound8.def Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,2 @@ +IMPORTS +_DirectSoundCreate8@12 = dsound.DirectSoundCreate8 \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/dxerr.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/dxerr.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,55 @@ +/***********************************************************************\ +* dxerr.d * +* * +* Windows API header module * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.directx.dxerr; + +import win32.windows; + +pragma(lib, "dxerr.lib"); + +extern (Windows) { + CHAR* DXGetErrorStringA(HRESULT hr); + WCHAR* DXGetErrorStringW(HRESULT hr); + CHAR* DXGetErrorDescriptionA(HRESULT hr); + WCHAR* DXGetErrorDescriptionW(HRESULT hr); + HRESULT DXTraceA(CHAR* strFile, DWORD dwLine, HRESULT hr, CHAR* strMsg, + BOOL bPopMsgBox); + HRESULT DXTraceW(CHAR* strFile, DWORD dwLine, HRESULT hr, WCHAR* strMsg, + BOOL bPopMsgBox); +} + +version (Unicode) { + alias DXGetErrorStringW DXGetErrorString; + alias DXGetErrorDescriptionW DXGetErrorDescription; + alias DXTraceW DXTrace; +} else { + alias DXGetErrorStringA DXGetErrorString; + alias DXGetErrorDescriptionA DXGetErrorDescription; + alias DXTraceA DXTrace; +} + +debug (dxerr) { + HRESULT DXTRACE_MSG(TCHAR* str) { + return DXTrace(__FILE__, __LINE__, 0, str, false); + } + HRESULT DXTRACE_ERR(TCHAR* str, HRESULT hr) { + return DXTrace(__FILE__, __LINE__, hr, str, false); + } + HRESULT DXTRACE_ERR_MSGBOX(TCHAR* str, HRESULT hr) { + return DXTrace(__FILE__, __LINE__, hr, str, true); + } +} else { + HRESULT DXTRACE_MSG(TCHAR* str) { + return 0; + } + HRESULT DXTRACE_ERR(TCHAR* str, HRESULT hr) { + return hr; + } + HRESULT DXTRACE_ERR_MSGBOX(TCHAR* str, HRESULT hr) { + return hr; + } +} \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/dxerr8.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/dxerr8.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,68 @@ +/***********************************************************************\ +* dxerr8.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.directx.dxerr8; + +/* + dxerr8.d - Header file for the DirectX 8 Error API + + Written by Filip Navara + Ported to D by James Pelcis + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +private import win32.windef; + +extern (Windows) { + char* DXGetErrorString8A (HRESULT); + WCHAR* DXGetErrorString8W (HRESULT); + char* DXGetErrorDescription8A (HRESULT); + WCHAR* DXGetErrorDescription8W (HRESULT); + HRESULT DXTraceA (char*, DWORD, HRESULT, char*, BOOL); + HRESULT DXTraceW (char*, DWORD, HRESULT, WCHAR*, BOOL); +} + +version (Unicode) { + alias DXGetErrorString8W DXGetErrorString8; + alias DXGetErrorDescription8W DXGetErrorDescription8; + alias DXTraceW DXTrace; +} else { + alias DXGetErrorString8A DXGetErrorString8; + alias DXGetErrorDescription8A DXGetErrorDescription8; + alias DXTraceA DXTrace; +} + +debug (dxerr) { + HRESULT DXTRACE_MSG(TCHAR* str) { + return DXTrace(__FILE__, __LINE__, 0, str, FALSE); + } + + HRESULT DXTRACE_ERR(TCHAR* str, HRESULT hr) { + return DXTrace(__FILE__, __LINE__, hr, str, TRUE); + } + + HRESULT DXTRACE_ERR_NOMSGBOX (WCHAR* str, HRESULT hr) { + return DXTrace(__FILE__, __LINE__, hr, str, FALSE); + } +} else { + HRESULT DXTRACE_MSG(TCHAR* str) { + return 0; + } + + HRESULT DXTRACE_ERR(TCHAR* str, HRESULT hr) { + return hr; + } + + HRESULT DXTRACE_ERR_NOMSGBOX(TCHAR* str, HRESULT hr) { + return hr; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/dxerr9.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/dxerr9.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,69 @@ +/***********************************************************************\ +* dxerr9.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.directx.dxerr9; + +/* + dxerr9.h - Header file for the DirectX 9 Error API + + Written by Filip Navara + Ported to D by James Pelcis + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +*/ + +private import win32.windef; + +extern (Windows) { + char* DXGetErrorString9A(HRESULT); + WCHAR* DXGetErrorString9W(HRESULT); + char* DXGetErrorDescription9A(HRESULT); + WCHAR* DXGetErrorDescription9W(HRESULT); + HRESULT DXTraceA(char*, DWORD, HRESULT, char*, BOOL); + HRESULT DXTraceW(char*, DWORD, HRESULT, WCHAR*, BOOL); +} + +version (Unicode) { + alias DXGetErrorString9W DXGetErrorString9; + alias DXGetErrorDescription9W DXGetErrorDescription9; + alias DXTraceW DXTrace; +} else { + alias DXGetErrorString9A DXGetErrorString9; + alias DXGetErrorDescription9A DXGetErrorDescription9; + alias DXTraceA DXTrace; +} + +debug (dxerr) { + HRESULT DXTRACE_MSG(TCHAR* str) { + return DXTrace(__FILE__, cast(DWORD)__LINE__, 0, str, FALSE); + } + + HRESULT DXTRACE_ERR(TCHAR* str, HRESULT hr) { + return DXTrace(__FILE__, cast(DWORD)__LINE__, hr, str, FALSE); + } + + HRESULT DXTRACE_ERR_NOMSGBOX(TCHAR* str, HRESULT hr) { + return DXTrace(__FILE__, cast(DWORD)__LINE__, hr, str, TRUE); + } +} else { + HRESULT DXTRACE_MSG(TCHAR* str) { + return 0; + } + + HRESULT DXTRACE_ERR(TCHAR* str, HRESULT hr) { + return hr; + } + + HRESULT DXTRACE_ERR_NOMSGBOX(TCHAR* str, HRESULT hr) { + return hr; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/dxgi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/dxgi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,211 @@ +/***********************************************************************\ +* dxgi.d * +* * +* Windows API header module * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.directx.dxgi; + +private import win32.windows; + +private import win32.directx.dxgitype; + +enum { + DXGI_CPU_ACCESS_NONE = 0, + DXGI_CPU_ACCESS_DYNAMIC = 1, + DXGI_CPU_ACCESS_READ_WRITE = 2, + DXGI_CPU_ACCESS_SCRATCH = 3, + DXGI_CPU_ACCESS_FIELD = 15 +} + +enum { + DXGI_USAGE_SHADER_INPUT = 0b00_00010000, + DXGI_USAGE_RENDER_TARGET_OUTPUT = 0b00_00100000, + DXGI_USAGE_BACK_BUFFER = 0b00_01000000, + DXGI_USAGE_SHARED = 0b00_10000000, + DXGI_USAGE_READ_ONLY = 0b01_00000000, + DXGI_USAGE_DISCARD_ON_PRESENT = 0b10_00000000, +} +alias UINT DXGI_USAGE; + +struct DXGI_FRAME_STATISTICS { + UINT PresentCount; + UINT PresentRefreshCount; + UINT SyncRefreshCount; + LARGE_INTEGER SyncQPCTime; + LARGE_INTEGER SyncGPUTime; +} + +struct DXGI_MAPPED_RECT { + INT Pitch; + BYTE* pBits; +} + +struct DXGI_ADAPTER_DESC { + WCHAR[128] Description; + UINT VendorId; + UINT DeviceId; + UINT SubSysId; + UINT Revision; + SIZE_T DedicatedVideoMemory; + SIZE_T DedicatedSystemMemory; + SIZE_T SharedSystemMemory; + LUID AdapterLuid; +} + +struct DXGI_OUTPUT_DESC { + WCHAR[32] DeviceName; + RECT DesktopCoordinates; + BOOL AttachedToDesktop; + DXGI_MODE_ROTATION Rotation; + HMONITOR Monitor; +} + +struct DXGI_SHARED_RESOURCE { + HANDLE Handle; +} + +enum { + DXGI_RESOURCE_PRIORITY_MINIMUM = 0x28000000, + DXGI_RESOURCE_PRIORITY_LOW = 0x50000000, + DXGI_RESOURCE_PRIORITY_NORMAL = 0x78000000, + DXGI_RESOURCE_PRIORITY_HIGH = 0xa0000000, + DXGI_RESOURCE_PRIORITY_MAXIMUM = 0xc8000000 +} + +enum DXGI_RESIDENCY { + DXGI_RESIDENCY_FULLY_RESIDENT = 1, + DXGI_RESIDENCY_RESIDENT_IN_SHARED_MEMORY = 2, + DXGI_RESIDENCY_EVICTED_TO_DISK = 3 +} + +struct DXGI_SURFACE_DESC { + UINT Width; + UINT Height; + DXGI_FORMAT Format; + DXGI_SAMPLE_DESC SampleDesc; +} + +enum DXGI_SWAP_EFFECT { + DXGI_SWAP_EFFECT_DISCARD = 0, + DXGI_SWAP_EFFECT_SEQUENTIAL = 1 +} + +enum DXGI_SWAP_CHAIN_FLAG { + DXGI_SWAP_CHAIN_FLAG_NONPREROTATED = 1, + DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH = 2 +} + +struct DXGI_SWAP_CHAIN_DESC { + DXGI_MODE_DESC BufferDesc; + DXGI_SAMPLE_DESC SampleDesc; + DXGI_USAGE BufferUsage; + UINT BufferCount; + HWND OutputWindow; + BOOL Windowed; + DXGI_SWAP_EFFECT SwapEffect; + UINT Flags; +} + +interface IDXGIObject : IUnknown { + extern(Windows) : + HRESULT SetPrivateData(REFGUID Name, UINT DataSize, void* pData); + HRESULT SetPrivateDataInterface(REFGUID Name, IUnknown pUnknown); + HRESULT GetPrivateData(REFGUID Name, UINT* pDataSize, void* pData); + HRESULT GetParent(REFIID riid, void** ppParent); +} + +interface IDXGIDeviceSubObject : IDXGIObject { + extern(Windows) : + HRESULT GetDevice(REFIID riid, void** ppDevice); +} + +interface IDXGIResource : IDXGIDeviceSubObject { + extern(Windows) : + HRESULT GetSharedHandle(HANDLE* pSharedHandle); + HRESULT GetUsage(DXGI_USAGE* pUsage); + HRESULT SetEvictionPriority(UINT EvictionPriority); + HRESULT GetEvictionPriority(UINT* pEvictionPriority); +} + +interface IDXGISurface : IDXGIDeviceSubObject { + extern(Windows) : + HRESULT GetDesc(DXGI_SURFACE_DESC* pDesc); + HRESULT Map(DXGI_MAPPED_RECT* pLockedRect, UINT MapFlags); + HRESULT Unmap(); +} + +interface IDXGIAdapter : IDXGIObject { + extern(Windows) : + HRESULT EnumOutputs(UINT Output, IDXGIOutput* ppOutput); + HRESULT GetDesc(DXGI_ADAPTER_DESC* pDesc); + HRESULT CheckInterfaceSupport(REFGUID InterfaceName, LARGE_INTEGER* pUMDVersion); +} + +interface IDXGIOutput : IDXGIObject { + extern(Windows) : + HRESULT GetDesc(DXGI_OUTPUT_DESC* pDesc); + HRESULT GetDisplayModeList(DXGI_FORMAT EnumFormat, UINT Flags, UINT* pNumModes, DXGI_MODE_DESC* pDesc); + HRESULT FindClosestMatchingMode(DXGI_MODE_DESC* pModeToMatch, DXGI_MODE_DESC* pClosestMatch, IUnknown pConcernedDevice); + HRESULT WaitForVBlank(); + HRESULT TakeOwnership(IUnknown pDevice, BOOL Exclusive); + void ReleaseOwnership(); + HRESULT GetGammaControlCapabilities(DXGI_GAMMA_CONTROL_CAPABILITIES* pGammaCaps); + HRESULT SetGammaControl(DXGI_GAMMA_CONTROL* pArray); + HRESULT GetGammaControl(DXGI_GAMMA_CONTROL* pArray); + HRESULT SetDisplaySurface(IDXGISurface pScanoutSurface); + HRESULT GetDisplaySurfaceData(IDXGISurface pDestination); + HRESULT GetFrameStatistics(DXGI_FRAME_STATISTICS* pStats); +} + +const DXGI_MAX_SWAP_CHAIN_BUFFERS = 16; + +enum { + DXGI_PRESENT_TEST = 0x00000001, + DXGI_PRESENT_DO_NOT_SEQUENCE = 0x00000002, + DXGI_PRESENT_RESTART = 0x00000004 +} + +interface IDXGISwapChain : IDXGIDeviceSubObject { + extern(Windows) : + HRESULT Present(UINT SyncInterval, UINT Flags); + HRESULT GetBuffer(UINT Buffer, REFIID riid, void** ppSurface); + HRESULT SetFullscreenState(BOOL Fullscreen, IDXGIOutput pTarget); + HRESULT GetFullscreenState(BOOL* pFullscreen, IDXGIOutput* ppTarget); + HRESULT GetDesc(DXGI_SWAP_CHAIN_DESC* pDesc); + HRESULT ResizeBuffers(UINT BufferCount, UINT Width, UINT Height, DXGI_FORMAT NewFormat, UINT SwapChainFlags); + HRESULT ResizeTarget(DXGI_MODE_DESC* pNewTargetParameters); + HRESULT GetContainingOutput(IDXGIOutput* ppOutput); + HRESULT GetFrameStatistics(DXGI_FRAME_STATISTICS* pStats); + HRESULT GetLastPresentCount(UINT* pLastPresentCount); +} + +interface IDXGIFactory : IDXGIObject { + extern(Windows) : + HRESULT EnumAdapters(UINT Adapter, IDXGIAdapter* ppAdapter); + HRESULT MakeWindowAssociation(HWND WindowHandle, UINT Flags); + HRESULT GetWindowAssociation(HWND* pWindowHandle); + HRESULT CreateSwapChain(IUnknown pDevice, DXGI_SWAP_CHAIN_DESC* pDesc, IDXGISwapChain* ppSwapChain); + HRESULT CreateSoftwareAdapter(HMODULE Module, IDXGIAdapter* ppAdapter); +} + +interface IDXGIDevice : IDXGIObject { + extern(Windows) : + HRESULT GetAdapter(IDXGIAdapter* pAdapter); + HRESULT CreateSurface(DXGI_SURFACE_DESC* pDesc, UINT NumSurfaces, DXGI_USAGE Usage, DXGI_SHARED_RESOURCE* pSharedResource, IDXGISurface* ppSurface); + HRESULT QueryResourceResidency(IUnknown* ppResources, DXGI_RESIDENCY* pResidencyStatus, UINT NumResources); + HRESULT SetGPUThreadPriority(INT Priority); + HRESULT GetGPUThreadPriority(INT* pPriority); +} + +extern(C) const GUID IID_IDXGIObject = {0xaec22fb8, 0x76f3, 0x4639, [0x9b, 0xe0, 0x28, 0xeb, 0x43, 0xa6, 0x7a, 0x2e]}; +extern(C) const GUID IID_IDXGIDeviceSubObject = {0x3d3e0379, 0xf9de, 0x4d58, [0xbb, 0x6c, 0x18, 0xd6, 0x29, 0x92, 0xf1, 0xa6]}; +extern(C) const GUID IID_IDXGIResource = {0x035f3ab4, 0x482e, 0x4e50, [0xb4, 0x1f, 0x8a, 0x7f, 0x8b, 0xd8, 0x96, 0x0b]}; +extern(C) const GUID IID_IDXGISurface = {0xcafcb56c, 0x6ac3, 0x4889, [0xbf, 0x47, 0x9e, 0x23, 0xbb, 0xd2, 0x60, 0xec]}; +extern(C) const GUID IID_IDXGIAdapter = {0x2411e7e1, 0x12ac, 0x4ccf, [0xbd, 0x14, 0x97, 0x98, 0xe8, 0x53, 0x4d, 0xc0]}; +extern(C) const GUID IID_IDXGIOutput = {0xae02eedb, 0xc735, 0x4690, [0x8d, 0x52, 0x5a, 0x8d, 0xc2, 0x02, 0x13, 0xaa]}; +extern(C) const GUID IID_IDXGISwapChain = {0x310d36a0, 0xd2e7, 0x4c0a, [0xaa, 0x04, 0x6a, 0x9d, 0x23, 0xb8, 0x88, 0x6a]}; +extern(C) const GUID IID_IDXGIFactory = {0x7b7166ec, 0x21c7, 0x44ae, [0xb2, 0x1a, 0xc9, 0xae, 0x32, 0x1a, 0xe3, 0x69]}; +extern(C) const GUID IID_IDXGIDevice = {0x54ec77fa, 0x1377, 0x44e6, [0x8c, 0x32, 0x88, 0xfd, 0x5f, 0x44, 0xc8, 0x4c]}; + diff -r 586e4a649642 -r 4a9dcbd9e54f win32/directx/dxgitype.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/directx/dxgitype.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,195 @@ +/***********************************************************************\ +* dxgitype.d * +* * +* Windows API header module * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.directx.dxgitype; + +private import win32.windows; + +const _FACDXGI = 0x87a; + +HRESULT MAKE_DXGI_HRESULT(T)(T code) { + return MAKE_HRESULT(1, _FACDXGI, code); +} + +HRESULT MAKE_DXGI_STATUS(T)(T code) { + return MAKE_HRESULT(0, _FACDXGI, code); +} + +const HRESULT DXGI_STATUS_OCCLUDED = MAKE_DXGI_STATUS(1); +const HRESULT DXGI_STATUS_CLIPPED = MAKE_DXGI_STATUS(2); +const HRESULT DXGI_STATUS_NO_REDIRECTION = MAKE_DXGI_STATUS(4); +const HRESULT DXGI_STATUS_NO_DESKTOP_ACCESS = MAKE_DXGI_STATUS(5); +const HRESULT DXGI_STATUS_GRAPHICS_VIDPN_SOURCE_IN_USE = MAKE_DXGI_STATUS(6); +const HRESULT DXGI_STATUS_MODE_CHANGED = MAKE_DXGI_STATUS(7); +const HRESULT DXGI_STATUS_MODE_CHANGE_IN_PROGRESS = MAKE_DXGI_STATUS(8); +const HRESULT DXGI_ERROR_INVALID_CALL = MAKE_DXGI_HRESULT( 1); +const HRESULT DXGI_ERROR_NOT_FOUND = MAKE_DXGI_HRESULT( 2); +const HRESULT DXGI_ERROR_MORE_DATA = MAKE_DXGI_HRESULT( 3); +const HRESULT DXGI_ERROR_UNSUPPORTED = MAKE_DXGI_HRESULT( 4); +const HRESULT DXGI_ERROR_DEVICE_REMOVED = MAKE_DXGI_HRESULT( 5); +const HRESULT DXGI_ERROR_DEVICE_HUNG = MAKE_DXGI_HRESULT( 6); +const HRESULT DXGI_ERROR_DEVICE_RESET = MAKE_DXGI_HRESULT( 7); +const HRESULT DXGI_ERROR_WAS_STILL_DRAWING = MAKE_DXGI_HRESULT(10); +const HRESULT DXGI_ERROR_FRAME_STATISTICS_DISJOINT = MAKE_DXGI_HRESULT(11); +const HRESULT DXGI_ERROR_GRAPHICS_VIDPN_SOURCE_IN_USE = MAKE_DXGI_HRESULT(12); +const HRESULT DXGI_ERROR_DRIVER_INTERNAL_ERROR = MAKE_DXGI_HRESULT(32); +const HRESULT DXGI_ERROR_NONEXCLUSIVE = MAKE_DXGI_HRESULT(33); +const HRESULT DXGI_ERROR_NOT_CURRENTLY_AVAILABLE = MAKE_DXGI_HRESULT(34); +const HRESULT DXGI_FORMAT_DEFINED = 1; + +enum DXGI_FORMAT { + DXGI_FORMAT_UNKNOWN = 0, + DXGI_FORMAT_R32G32B32A32_TYPELESS, + DXGI_FORMAT_R32G32B32A32_FLOAT, + DXGI_FORMAT_R32G32B32A32_UINT, + DXGI_FORMAT_R32G32B32A32_SINT, + DXGI_FORMAT_R32G32B32_TYPELESS, + DXGI_FORMAT_R32G32B32_FLOAT, + DXGI_FORMAT_R32G32B32_UINT, + DXGI_FORMAT_R32G32B32_SINT, + DXGI_FORMAT_R16G16B16A16_TYPELESS, + DXGI_FORMAT_R16G16B16A16_FLOAT, + DXGI_FORMAT_R16G16B16A16_UNORM, + DXGI_FORMAT_R16G16B16A16_UINT, + DXGI_FORMAT_R16G16B16A16_SNORM, + DXGI_FORMAT_R16G16B16A16_SINT, + DXGI_FORMAT_R32G32_TYPELESS, + DXGI_FORMAT_R32G32_FLOAT, + DXGI_FORMAT_R32G32_UINT, + DXGI_FORMAT_R32G32_SINT, + DXGI_FORMAT_R32G8X24_TYPELESS, + DXGI_FORMAT_D32_FLOAT_S8X24_UINT, + DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS, + DXGI_FORMAT_X32_TYPELESS_G8X24_UINT, + DXGI_FORMAT_R10G10B10A2_TYPELESS, + DXGI_FORMAT_R10G10B10A2_UNORM, + DXGI_FORMAT_R10G10B10A2_UINT, + DXGI_FORMAT_R11G11B10_FLOAT, + DXGI_FORMAT_R8G8B8A8_TYPELESS, + DXGI_FORMAT_R8G8B8A8_UNORM, + DXGI_FORMAT_R8G8B8A8_UNORM_SRGB, + DXGI_FORMAT_R8G8B8A8_UINT, + DXGI_FORMAT_R8G8B8A8_SNORM, + DXGI_FORMAT_R8G8B8A8_SINT, + DXGI_FORMAT_R16G16_TYPELESS, + DXGI_FORMAT_R16G16_FLOAT, + DXGI_FORMAT_R16G16_UNORM, + DXGI_FORMAT_R16G16_UINT, + DXGI_FORMAT_R16G16_SNORM, + DXGI_FORMAT_R16G16_SINT, + DXGI_FORMAT_R32_TYPELESS, + DXGI_FORMAT_D32_FLOAT, + DXGI_FORMAT_R32_FLOAT, + DXGI_FORMAT_R32_UINT, + DXGI_FORMAT_R32_SINT, + DXGI_FORMAT_R24G8_TYPELESS, + DXGI_FORMAT_D24_UNORM_S8_UINT, + DXGI_FORMAT_R24_UNORM_X8_TYPELESS, + DXGI_FORMAT_X24_TYPELESS_G8_UINT, + DXGI_FORMAT_R8G8_TYPELESS, + DXGI_FORMAT_R8G8_UNORM, + DXGI_FORMAT_R8G8_UINT, + DXGI_FORMAT_R8G8_SNORM, + DXGI_FORMAT_R8G8_SINT, + DXGI_FORMAT_R16_TYPELESS, + DXGI_FORMAT_R16_FLOAT, + DXGI_FORMAT_D16_UNORM, + DXGI_FORMAT_R16_UNORM, + DXGI_FORMAT_R16_UINT, + DXGI_FORMAT_R16_SNORM, + DXGI_FORMAT_R16_SINT, + DXGI_FORMAT_R8_TYPELESS, + DXGI_FORMAT_R8_UNORM, + DXGI_FORMAT_R8_UINT, + DXGI_FORMAT_R8_SNORM, + DXGI_FORMAT_R8_SINT, + DXGI_FORMAT_A8_UNORM, + DXGI_FORMAT_R1_UNORM, + DXGI_FORMAT_R9G9B9E5_SHAREDEXP, + DXGI_FORMAT_R8G8_B8G8_UNORM, + DXGI_FORMAT_G8R8_G8B8_UNORM, + DXGI_FORMAT_BC1_TYPELESS, + DXGI_FORMAT_BC1_UNORM, + DXGI_FORMAT_BC1_UNORM_SRGB, + DXGI_FORMAT_BC2_TYPELESS, + DXGI_FORMAT_BC2_UNORM, + DXGI_FORMAT_BC2_UNORM_SRGB, + DXGI_FORMAT_BC3_TYPELESS, + DXGI_FORMAT_BC3_UNORM, + DXGI_FORMAT_BC3_UNORM_SRGB, + DXGI_FORMAT_BC4_TYPELESS, + DXGI_FORMAT_BC4_UNORM, + DXGI_FORMAT_BC4_SNORM, + DXGI_FORMAT_BC5_TYPELESS, + DXGI_FORMAT_BC5_UNORM, + DXGI_FORMAT_BC5_SNORM, + DXGI_FORMAT_B5G6R5_UNORM, + DXGI_FORMAT_B5G5R5A1_UNORM, + DXGI_FORMAT_B8G8R8A8_UNORM, + DXGI_FORMAT_B8G8R8X8_UNORM, + DXGI_FORMAT_FORCE_UINT = 0xffffffff +} + +struct DXGI_RGB { + float Red; + float Green; + float Blue; +} + +struct DXGI_GAMMA_CONTROL { + DXGI_RGB Scale; + DXGI_RGB Offset; + DXGI_RGB[1025] GammaCurve; +} + +struct DXGI_GAMMA_CONTROL_CAPABILITIES { + BOOL ScaleAndOffsetSupported; + float MaxConvertedValue; + float MinConvertedValue; + UINT NumGammaControlPoints; + float[1025] ControlPointPositions; +} + +struct DXGI_RATIONAL { + UINT Numerator; + UINT Denominator; +} + +enum DXGI_MODE_SCANLINE_ORDER { + DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED = 0, + DXGI_MODE_SCANLINE_ORDER_PROGRESSIVE = 1, + DXGI_MODE_SCANLINE_ORDER_UPPER_FIELD_FIRST = 2, + DXGI_MODE_SCANLINE_ORDER_LOWER_FIELD_FIRST = 3 +} + +enum DXGI_MODE_SCALING { + DXGI_MODE_SCALING_UNSPECIFIED = 0, + DXGI_MODE_SCALING_CENTERED = 1, + DXGI_MODE_SCALING_STRETCHED = 2 +} + +enum DXGI_MODE_ROTATION { + DXGI_MODE_ROTATION_UNSPECIFIED = 0, + DXGI_MODE_ROTATION_IDENTITY = 1, + DXGI_MODE_ROTATION_ROTATE90 = 2, + DXGI_MODE_ROTATION_ROTATE180 = 3, + DXGI_MODE_ROTATION_ROTATE270 = 4 +} + +struct DXGI_MODE_DESC { + UINT Width; + UINT Height; + DXGI_RATIONAL RefreshRate; + DXGI_FORMAT Format; + DXGI_MODE_SCANLINE_ORDER ScanlineOrdering; + DXGI_MODE_SCALING Scaling; +} + +struct DXGI_SAMPLE_DESC { + UINT Count; + UINT Quality; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/dlgs.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/dlgs.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,191 @@ +/***********************************************************************\ +* dlgs.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.dlgs; + +private import win32.windef; + +enum : ushort { + FILEOPENORD = 1536, + MULTIFILEOPENORD = 1537, + PRINTDLGORD = 1538, + PRNSETUPDLGORD = 1539, + FINDDLGORD = 1540, + REPLACEDLGORD = 1541, + FONTDLGORD = 1542, + FORMATDLGORD31 = 1543, + FORMATDLGORD30 = 1544, + PAGESETUPDLGORD = 1546 +} + +enum : int { + ctlFirst = 0x400, + ctlLast = 0x4ff, + chx1 = 0x410, + chx2 = 0x411, + chx3 = 0x412, + chx4 = 0x413, + chx5 = 0x414, + chx6 = 0x415, + chx7 = 0x416, + chx8 = 0x417, + chx9 = 0x418, + chx10 = 0x419, + chx11 = 0x41a, + chx12 = 0x41b, + chx13 = 0x41c, + chx14 = 0x41d, + chx15 = 0x41e, + chx16 = 0x41f, + cmb1 = 0x470, + cmb2 = 0x471, + cmb3 = 0x472, + cmb4 = 0x473, + cmb5 = 0x474, + cmb6 = 0x475, + cmb7 = 0x476, + cmb8 = 0x477, + cmb9 = 0x478, + cmb10 = 0x479, + cmb11 = 0x47a, + cmb12 = 0x47b, + cmb13 = 0x47c, + cmb14 = 0x47d, + cmb15 = 0x47e, + cmb16 = 0x47f, + edt1 = 0x480, + edt2 = 0x481, + edt3 = 0x482, + edt4 = 0x483, + edt5 = 0x484, + edt6 = 0x485, + edt7 = 0x486, + edt8 = 0x487, + edt9 = 0x488, + edt10 = 0x489, + edt11 = 0x48a, + edt12 = 0x48b, + edt13 = 0x48c, + edt14 = 0x48d, + edt15 = 0x48e, + edt16 = 0x48f, + frm1 = 0x434, + frm2 = 0x435, + frm3 = 0x436, + frm4 = 0x437, + grp1 = 0x430, + grp2 = 0x431, + grp3 = 0x432, + grp4 = 0x433, + ico1 = 0x43c, + ico2 = 0x43d, + ico3 = 0x43e, + ico4 = 0x43f, + lst1 = 0x460, + lst2 = 0x461, + lst3 = 0x462, + lst4 = 0x463, + lst5 = 0x464, + lst6 = 0x465, + lst7 = 0x466, + lst8 = 0x467, + lst9 = 0x468, + lst10 = 0x469, + lst11 = 0x46a, + lst12 = 0x46b, + lst13 = 0x46c, + lst14 = 0x46d, + lst15 = 0x46e, + lst16 = 0x46f, + psh1 = 0x400, + psh2 = 0x401, + psh3 = 0x402, + psh4 = 0x403, + psh5 = 0x404, + psh6 = 0x405, + psh7 = 0x406, + psh8 = 0x407, + psh9 = 0x408, + psh10 = 0x409, + psh11 = 0x40a, + psh12 = 0x40b, + psh13 = 0x40c, + psh14 = 0x40d, + psh15 = 0x40e, + pshHelp = 0x40e, + psh16 = 0x40f, + rad1 = 0x420, + rad2 = 0x421, + rad3 = 0x422, + rad4 = 0x423, + rad5 = 0x424, + rad6 = 0x425, + rad7 = 0x426, + rad8 = 0x427, + rad9 = 0x428, + rad10 = 0x429, + rad11 = 0x42a, + rad12 = 0x42b, + rad13 = 0x42c, + rad14 = 0x42d, + rad15 = 0x42e, + rad16 = 0x42f, + rct1 = 0x438, + rct2 = 0x439, + rct3 = 0x43a, + rct4 = 0x43b, + scr1 = 0x490, + scr2 = 0x491, + scr3 = 0x492, + scr4 = 0x493, + scr5 = 0x494, + scr6 = 0x495, + scr7 = 0x496, + scr8 = 0x497, + stc1 = 0x440, + stc2 = 0x441, + stc3 = 0x442, + stc4 = 0x443, + stc5 = 0x444, + stc6 = 0x445, + stc7 = 0x446, + stc8 = 0x447, + stc9 = 0x448, + stc10 = 0x449, + stc11 = 0x44a, + stc12 = 0x44b, + stc13 = 0x44c, + stc14 = 0x44d, + stc15 = 0x44e, + stc16 = 0x44f, + stc17 = 0x450, + stc18 = 0x451, + stc19 = 0x452, + stc20 = 0x453, + stc21 = 0x454, + stc22 = 0x455, + stc23 = 0x456, + stc24 = 0x457, + stc25 = 0x458, + stc26 = 0x459, + stc27 = 0x45a, + stc28 = 0x45b, + stc29 = 0x45c, + stc30 = 0x45d, + stc31 = 0x45e, + stc32 = 0x45f +} + +struct CRGB { + ubyte bRed; + ubyte bGreen; + ubyte bBlue; + ubyte bExtra; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/docobj.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/docobj.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,133 @@ +/***********************************************************************\ +* docobj.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.docobj; + +private import win32.basetyps, win32.oaidl, win32.objidl, win32.oleidl, + win32.unknwn, win32.windef, win32.wtypes; + +// FIXME: remove inherited methods from interface definitions + +enum { + OLECMDERR_E_UNKNOWNGROUP = -2147221244, + OLECMDERR_E_CANCELED = -2147221245, + OLECMDERR_E_NOHELP = -2147221246, + OLECMDERR_E_DISABLED = -2147221247, + OLECMDERR_E_NOTSUPPORTED = -2147221248 +} + +enum OLECMDID { + OLECMDID_OPEN = 1, + OLECMDID_NEW = 2, + OLECMDID_SAVE = 3, + OLECMDID_SAVEAS = 4, + OLECMDID_SAVECOPYAS = 5, + OLECMDID_PRINT = 6, + OLECMDID_PRINTPREVIEW = 7, + OLECMDID_PAGESETUP = 8, + OLECMDID_SPELL = 9, + OLECMDID_PROPERTIES = 10, + OLECMDID_CUT = 11, + OLECMDID_COPY = 12, + OLECMDID_PASTE = 13, + OLECMDID_PASTESPECIAL = 14, + OLECMDID_UNDO = 15, + OLECMDID_REDO = 16, + OLECMDID_SELECTALL = 17, + OLECMDID_CLEARSELECTION = 18, + OLECMDID_ZOOM = 19, + OLECMDID_GETZOOMRANGE = 20, + OLECMDID_UPDATECOMMANDS = 21, + OLECMDID_REFRESH = 22, + OLECMDID_STOP = 23, + OLECMDID_HIDETOOLBARS = 24, + OLECMDID_SETPROGRESSMAX = 25, + OLECMDID_SETPROGRESSPOS = 26, + OLECMDID_SETPROGRESSTEXT = 27, + OLECMDID_SETTITLE = 28, + OLECMDID_SETDOWNLOADSTATE = 29, + OLECMDID_STOPDOWNLOAD = 30 +} + +enum OLECMDF { + OLECMDF_SUPPORTED = 1, + OLECMDF_ENABLED = 2, + OLECMDF_LATCHED = 4, + OLECMDF_NINCHED = 8 +} + +enum OLECMDEXECOPT { + OLECMDEXECOPT_DODEFAULT = 0, + OLECMDEXECOPT_PROMPTUSER = 1, + OLECMDEXECOPT_DONTPROMPTUSER = 2, + OLECMDEXECOPT_SHOWHELP = 3 +} + +struct OLECMDTEXT { + DWORD cmdtextf; + ULONG cwActual; + ULONG cwBuf; + wchar rgwz[1]; +} + +struct OLECMD { + ULONG cmdID; + DWORD cmdf; +} + +alias IOleInPlaceSite* LPOLEINPLACESITE; +alias IEnumOleDocumentViews* LPENUMOLEDOCUMENTVIEWS; + +extern (C) extern const IID + IID_IContinueCallback, + IID_IEnumOleDocumentViews, + IID_IPrint, + IID_IOleDocumentView, + IID_IOleDocument, + IID_IOleCommandTarget, + IID_IOleDocumentSite; + + +interface IOleDocumentView : public IUnknown { + HRESULT SetInPlaceSite(LPOLEINPLACESITE); + HRESULT GetInPlaceSite(LPOLEINPLACESITE*); + HRESULT GetDocument(IUnknown**); + HRESULT SetRect(LPRECT); + HRESULT GetRect(LPRECT); + HRESULT SetRectComplex(LPRECT, LPRECT, LPRECT, LPRECT); + HRESULT Show(BOOL); + HRESULT UIActivate(BOOL); + HRESULT Open(); + HRESULT Close(DWORD); + HRESULT SaveViewState(IStream*); + HRESULT ApplyViewState(IStream*); + HRESULT Clone(LPOLEINPLACESITE, IOleDocumentView**); +} + +interface IEnumOleDocumentViews : public IUnknown { + HRESULT Next(ULONG, IOleDocumentView*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumOleDocumentViews**); +} + +interface IOleDocument : public IUnknown { + HRESULT CreateView(LPOLEINPLACESITE, IStream*, DWORD, IOleDocumentView**); + HRESULT GetDocMiscStatus(DWORD*); + HRESULT EnumViews(LPENUMOLEDOCUMENTVIEWS*, IOleDocumentView**); +} + +interface IOleCommandTarget : public IUnknown { + HRESULT QueryStatus(GUID*, ULONG, OLECMD*, OLECMDTEXT*); + HRESULT Exec(GUID*, DWORD, DWORD, VARIANTARG*, VARIANTARG*); +} + +interface IOleDocumentSite : public IUnknown { + HRESULT ActivateMe(IOleDocumentView*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/errorrep.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/errorrep.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,40 @@ +/***********************************************************************\ +* errorrep.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.errorrep; + +private import win32.w32api, win32.windef; + +static assert (_WIN32_WINNT >= 0x501, + "win32.errorrep is available only if version WindowsXP, Windows2003 " + "or WindowsVista is set"); + +enum EFaultRepRetVal { + frrvOk, + frrvOkManifest, + frrvOkQueued, + frrvErr, + frrvErrNoDW, + frrvErrTimeout, + frrvLaunchDebugger, + frrvOkHeadless // = 7 +} + +extern (Windows) { + BOOL AddERExcludedApplicationA(LPCSTR); + BOOL AddERExcludedApplicationW(LPCWSTR); + EFaultRepRetVal ReportFault(LPEXCEPTION_POINTERS, DWORD); +} + +version (Unicode) { + alias AddERExcludedApplicationW AddERExcludedApplication; +} else { + alias AddERExcludedApplicationA AddERExcludedApplication; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/exdisp.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/exdisp.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,127 @@ +/***********************************************************************\ +* exdisp.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.exdisp; + +import win32.docobj, win32.oaidl, win32.ocidl; +private import win32.basetyps, win32.windef, win32.wtypes; + + +enum BrowserNavConstants { + navOpenInNewWindow = 0x01, + navNoHistory = 0x02, + navNoReadFromCache = 0x04, + navNoWriteTocache = 0x08, + navAllowAutosearch = 0x10, + navBrowserBar = 0x20, + navHyperLink = 0x40 +} + +interface IWebBrowser : public IDispatch { + HRESULT GoBack(); + HRESULT GoForward(); + HRESULT GoHome(); + HRESULT GoSearch(); + HRESULT Navigate(BSTR, VARIANT*, VARIANT*, VARIANT*, VARIANT*); + HRESULT Refresh(); + HRESULT Refresh2(VARIANT*); + HRESULT Stop(); + HRESULT get_Application(IDispatch* ppDisp); + HRESULT get_Parent(IDispatch* ppDisp); + HRESULT get_Container(IDispatch* ppDisp); + HRESULT get_Document(IDispatch* ppDisp); + HRESULT get_TopLevelContainer(VARIANT_BOOL*); + HRESULT get_Type(BSTR*); + HRESULT get_Left(LONG*); + HRESULT put_Left(LONG); + HRESULT get_Top(LONG*); + HRESULT put_Top(LONG); + HRESULT get_Width(LONG*); + HRESULT put_Width(LONG); + HRESULT get_Height(LONG*); + HRESULT put_Height(LONG); + HRESULT get_LocationName(BSTR*); + HRESULT get_LocationURL(BSTR*); + HRESULT get_Busy(VARIANT_BOOL*); +} + +interface IWebBrowserApp : public IWebBrowser { + HRESULT Quit(); + HRESULT ClientToWindow(int*, int*); + HRESULT PutProperty(BSTR, VARIANT); + HRESULT GetProperty(BSTR, VARIANT*); + HRESULT get_Name(BSTR*); + HRESULT get_HWND(LONG*); + HRESULT get_FullName(BSTR*); + HRESULT get_Path(BSTR*); + HRESULT get_Visible(VARIANT_BOOL*); + HRESULT put_Visible(VARIANT_BOOL); + HRESULT get_StatusBar(VARIANT_BOOL*); + HRESULT put_StatusBar(VARIANT_BOOL); + HRESULT get_StatusText(BSTR*); + HRESULT put_StatusText(BSTR); + HRESULT get_ToolBar(int*); + HRESULT put_ToolBar(int); + HRESULT get_MenuBar(VARIANT_BOOL*); + HRESULT put_MenuBar(VARIANT_BOOL); + HRESULT get_FullScreen(VARIANT_BOOL*); + HRESULT put_FullScreen(VARIANT_BOOL); +} + +interface IWebBrowser2 : public IWebBrowserApp { + HRESULT Navigate2(VARIANT*, VARIANT*, VARIANT*, VARIANT*, VARIANT*); + HRESULT QueryStatusWB(OLECMDID, OLECMDF*); + HRESULT ExecWB(OLECMDID, OLECMDEXECOPT, VARIANT*, VARIANT*); + HRESULT ShowBrowserBar(VARIANT*, VARIANT*, VARIANT*); + HRESULT get_ReadyState(READYSTATE*); + HRESULT get_Offline(VARIANT_BOOL*); + HRESULT put_Offline(VARIANT_BOOL); + HRESULT get_Silent(VARIANT_BOOL*); + HRESULT put_Silent(VARIANT_BOOL); + HRESULT get_RegistaerAsBrowser(VARIANT_BOOL*); + HRESULT put_RegisterAsBrowser(VARIANT_BOOL); + HRESULT get_RegistaerAsDropTarget(VARIANT_BOOL*); + HRESULT put_RegisterAsDropTarget(VARIANT_BOOL); + HRESULT get_TheaterMode(VARIANT_BOOL*); + HRESULT put_TheaterMode(VARIANT_BOOL); + HRESULT get_AddressBar(VARIANT_BOOL*); + HRESULT put_AddressBar(VARIANT_BOOL); + HRESULT get_Resizable(VARIANT_BOOL*); + HRESULT put_Resizable(VARIANT_BOOL); +} + +interface DWebBrowserEvents2 : public IDispatch { + void StatusTextChange(BSTR); + void ProgressChange(LONG, LONG); + void CommandStateChange(LONG, VARIANT_BOOL); + void DownloadBegin(); + void DownloadComplete(); + void TitleChange(BSTR); + void PropertyChange(BSTR); + void BeforeNavigate2(IDispatch pDisp, VARIANT*, VARIANT*, VARIANT*, VARIANT*, VARIANT*, VARIANT_BOOL*); + void NewWindow2(IDispatch* ppDisp, VARIANT_BOOL*); + void NavigateComplete(IDispatch pDisp, VARIANT*); + void DocumentComplete(IDispatch pDisp, VARIANT*); + void OnQuit(); + void OnVisible(VARIANT_BOOL); + void OnToolBar(VARIANT_BOOL); + void OnMenuBar(VARIANT_BOOL); + void OnStatusBar(VARIANT_BOOL); + void OnFullScreen(VARIANT_BOOL); + void OnTheaterMode(VARIANT_BOOL); + void WindowSetResizable(VARIANT_BOOL); + void WindowSetLeft(LONG); + void WindowSetTop(LONG); + void WindowSetWidth(LONG); + void WindowSetHeight(LONG); + void WindowClosing(VARIANT_BOOL, VARIANT_BOOL*); + void ClientToHostWindow(LONG*, LONG*); + void SetSecureLockIcon(LONG); + void FileDownload(VARIANT_BOOL*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/exdispid.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/exdispid.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,20 @@ +/***********************************************************************\ +* exdispid.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.exdispid; + +enum : int { + DISPID_STATUSTEXTCHANGE = 102, + DISPID_PROGRESSCHANGE = 108, + DISPID_TITLECHANGE = 113, + DISPID_BEFORENAVIGATE2 = 250, + DISPID_NEWWINDOW2 = 251, + DISPID_DOCUMENTCOMPLETE = 259 +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/httpext.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/httpext.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,114 @@ +/***********************************************************************\ +* httpext.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.httpext; + +/* Comment from MinGW + httpext.h - Header for ISAPI extensions. + + This file is part of a free library for the Win32 API. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +private import win32.windows; + +enum { + HSE_VERSION_MAJOR = 2, + HSE_VERSION_MINOR = 0, + HSE_LOG_BUFFER_LEN = 80, + HSE_MAX_EXT_DLL_NAME_LEN = 256, + HSE_STATUS_SUCCESS = 1, + HSE_STATUS_SUCCESS_AND_KEEP_CONN, + HSE_STATUS_PENDING, + HSE_STATUS_ERROR, + HSE_REQ_BASE = 0, + HSE_REQ_SEND_URL_REDIRECT_RESP, + HSE_REQ_SEND_URL, + HSE_REQ_SEND_RESPONSE_HEADER, + HSE_REQ_DONE_WITH_SESSION, + HSE_REQ_SEND_RESPONSE_HEADER_EX = 1016, + HSE_REQ_END_RESERVED = 1000, + HSE_TERM_ADVISORY_UNLOAD = 0x00000001, + HSE_TERM_MUST_UNLOAD, + HSE_IO_SYNC = 0x00000001, + HSE_IO_ASYNC, + HSE_IO_DISCONNECT_AFTER_SEND = 0x00000004, + HSE_IO_SEND_HEADERS = 0x00000008 +} + +alias HANDLE HCONN; + +struct HSE_VERSION_INFO { + DWORD dwExtensionVersion; + CHAR[HSE_MAX_EXT_DLL_NAME_LEN] lpszExtensionDesc; +} +alias HSE_VERSION_INFO* LPHSE_VERSION_INFO; + +struct EXTENSION_CONTROL_BLOCK { + DWORD cbSize = EXTENSION_CONTROL_BLOCK.sizeof; + DWORD dwVersion; + HCONN ConnID; + DWORD dwHttpStatusCode; + CHAR[HSE_LOG_BUFFER_LEN] lpszLogData; + LPSTR lpszMethod; + LPSTR lpszQueryString; + LPSTR lpszPathInfo; + LPSTR lpszPathTranslated; + DWORD cbTotalBytes; + DWORD cbAvailable; + LPBYTE lpbData; + LPSTR lpszContentType; + extern(Pascal) BOOL function(HCONN, LPSTR, LPVOID, LPDWORD) + GetServerVariable; + extern(Pascal) BOOL function(HCONN, LPVOID, LPDWORD, DWORD) WriteClient; + extern(Pascal) BOOL function(HCONN, LPVOID, LPDWORD) ReadClient; + extern(Pascal) BOOL function(HCONN, DWORD, LPVOID, LPDWORD, LPDWORD) + ServerSupportFunction; +} +alias EXTENSION_CONTROL_BLOCK* LPEXTENSION_CONTROL_BLOCK; + +extern (Pascal) { + alias BOOL function(HSE_VERSION_INFO*) PFN_GETEXTENSIONVERSION; + alias DWORD function(EXTENSION_CONTROL_BLOCK*) PFN_HTTPEXTENSIONPROC; + alias BOOL function(DWORD) PFN_TERMINATEEXTENSION; + alias VOID function(EXTENSION_CONTROL_BLOCK*, PVOID, DWORD, DWORD) PFN_HSE_IO_COMPLETION; +} + +struct HSE_TF_INFO { + PFN_HSE_IO_COMPLETION pfnHseIO; + PVOID pContext; + HANDLE hFile; + LPCSTR pszStatusCode; + DWORD BytesToWrite; + DWORD Offset; + PVOID pHead; + DWORD HeadLength; + PVOID pTail; + DWORD TailLength; + DWORD dwFlags; +} +alias HSE_TF_INFO* LPHSE_TF_INFO; + +struct HSE_SEND_HEADER_EX_INFO { + LPCSTR pszStatus; + LPCSTR pszHeader; + DWORD cchStatus; + DWORD cchHeader; + BOOL fKeepConn; +} +alias HSE_SEND_HEADER_EX_INFO* LPHSE_SEND_HEADER_EX_INF; + +extern (Pascal) { + BOOL GetExtensionVersion(HSE_VERSION_INFO*); + DWORD HttpExtensionProc(EXTENSION_CONTROL_BLOCK*); + BOOL TerminateExtension(DWORD); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/idispids.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/idispids.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,16 @@ +/***********************************************************************\ +* idispids.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.idispids; + +enum : int { + DISPID_AMBIENT_OFFLINEIFNOTCONNECTED = -5501, + DISPID_AMBIENT_SILENT = -5502 +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/imagehlp.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/imagehlp.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,363 @@ +/***********************************************************************\ +* imagehlp.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.imagehlp; + +/* Comment from MinGW + NOTE: This strictly does not belong in the Win32 API since it's + really part of Platform SDK. However, GDB needs it and we might + as well provide it here. +*/ + +private import win32.winbase, win32.windef; + +// FIXME: check types of constants + +const API_VERSION_NUMBER = 7; + +const BIND_NO_BOUND_IMPORTS = 1; +const BIND_NO_UPDATE = 2; +const BIND_ALL_IMAGES = 4; +const BIND_CACHE_IMPORT_DLLS = 8; + +enum { + CBA_DEFERRED_SYMBOL_LOAD_START = 1, + CBA_DEFERRED_SYMBOL_LOAD_COMPLETE, + CBA_DEFERRED_SYMBOL_LOAD_FAILURE, + CBA_SYMBOLS_UNLOADED, + CBA_DUPLICATE_SYMBOL +} + +const CERT_PE_IMAGE_DIGEST_DEBUG_INFO = 1; +const CERT_PE_IMAGE_DIGEST_RESOURCES = 2; +const CERT_PE_IMAGE_DIGEST_ALL_IMPORT_INFO = 4; +const CERT_PE_IMAGE_DIGEST_NON_PE_INFO = 8; + +const CERT_SECTION_TYPE_ANY = 255; + +enum { + CHECKSUM_SUCCESS = 0, + CHECKSUM_OPEN_FAILURE, + CHECKSUM_MAP_FAILURE, + CHECKSUM_MAPVIEW_FAILURE, + CHECKSUM_UNICODE_FAILURE +} + +const IMAGE_SEPARATION = 65536; + +const SPLITSYM_REMOVE_PRIVATE = 1; +const SPLITSYM_EXTRACT_ALL = 2; +const SPLITSYM_SYMBOLPATH_IS_SRC = 4; + +const SYMF_OMAP_GENERATED = 1; +const SYMF_OMAP_MODIFIED = 2; + +const SYMOPT_CASE_INSENSITIVE = 1; +const SYMOPT_UNDNAME = 2; +const SYMOPT_DEFERRED_LOADS = 4; +const SYMOPT_NO_CPP = 8; +const SYMOPT_LOAD_LINES = 16; +const SYMOPT_OMAP_FIND_NEAREST = 32; + +const UNDNAME_COMPLETE = 0; +const UNDNAME_NO_LEADING_UNDERSCORES = 1; +const UNDNAME_NO_MS_KEYWORDS = 2; +const UNDNAME_NO_FUNCTION_RETURNS = 4; +const UNDNAME_NO_ALLOCATION_MODEL = 8; +const UNDNAME_NO_ALLOCATION_LANGUAGE = 16; +const UNDNAME_NO_MS_THISTYPE = 32; +const UNDNAME_NO_CV_THISTYPE = 64; +const UNDNAME_NO_THISTYPE = 96; +const UNDNAME_NO_ACCESS_SPECIFIERS = 128; +const UNDNAME_NO_THROW_SIGNATURES = 256; +const UNDNAME_NO_MEMBER_TYPE = 512; +const UNDNAME_NO_RETURN_UDT_MODEL = 1024; +const UNDNAME_32_BIT_DECODE = 2048; +const UNDNAME_NAME_ONLY = 4096; +const UNDNAME_NO_ARGUMENTS = 8192; +const UNDNAME_NO_SPECIAL_SYMS = 16384; + +enum IMAGEHLP_STATUS_REASON { + BindOutOfMemory, + BindRvaToVaFailed, + BindNoRoomInImage, + BindImportModuleFailed, + BindImportProcedureFailed, + BindImportModule, + BindImportProcedure, + BindForwarder, + BindForwarderNOT, + BindImageModified, + BindExpandFileHeaders, + BindImageComplete, + BindMismatchedSymbols, + BindSymbolsNotUpdated +} + +struct LOADED_IMAGE { + LPSTR ModuleName; + HANDLE hFile; + PUCHAR MappedAddress; + PIMAGE_NT_HEADERS FileHeader; + PIMAGE_SECTION_HEADER LastRvaSection; + ULONG NumberOfSections; + PIMAGE_SECTION_HEADER Sections; + ULONG Characteristics; + BOOLEAN fSystemImage; + BOOLEAN fDOSImage; + LIST_ENTRY Links; + ULONG SizeOfImage; +} +alias LOADED_IMAGE* PLOADED_IMAGE; + +struct IMAGE_DEBUG_INFORMATION { + LIST_ENTRY List; + DWORD Size; + PVOID MappedBase; + USHORT Machine; + USHORT Characteristics; + DWORD CheckSum; + DWORD ImageBase; + DWORD SizeOfImage; + DWORD NumberOfSections; + PIMAGE_SECTION_HEADER Sections; + DWORD ExportedNamesSize; + LPSTR ExportedNames; + DWORD NumberOfFunctionTableEntries; + PIMAGE_FUNCTION_ENTRY FunctionTableEntries; + DWORD LowestFunctionStartingAddress; + DWORD HighestFunctionEndingAddress; + DWORD NumberOfFpoTableEntries; + PFPO_DATA FpoTableEntries; + DWORD SizeOfCoffSymbols; + PIMAGE_COFF_SYMBOLS_HEADER CoffSymbols; + DWORD SizeOfCodeViewSymbols; + PVOID CodeViewSymbols; + LPSTR ImageFilePath; + LPSTR ImageFileName; + LPSTR DebugFilePath; + DWORD TimeDateStamp; + BOOL RomImage; + PIMAGE_DEBUG_DIRECTORY DebugDirectory; + DWORD NumberOfDebugDirectories; + DWORD[3] Reserved; +} +alias IMAGE_DEBUG_INFORMATION* PIMAGE_DEBUG_INFORMATION; + +enum ADDRESS_MODE { + AddrMode1616, + AddrMode1632, + AddrModeReal, + AddrModeFlat +} + +struct ADDRESS { + DWORD Offset; + WORD Segment; + ADDRESS_MODE Mode; +} +alias ADDRESS* LPADDRESS; + +struct KDHELP { + DWORD Thread; + DWORD ThCallbackStack; + DWORD NextCallback; + DWORD FramePointer; + DWORD KiCallUserMode; + DWORD KeUserCallbackDispatcher; + DWORD SystemRangeStart; +} +alias KDHELP* PKDHELP; + +struct STACKFRAME { + ADDRESS AddrPC; + ADDRESS AddrReturn; + ADDRESS AddrFrame; + ADDRESS AddrStack; + LPVOID FuncTableEntry; + DWORD[4] Params; + BOOL Far; + BOOL Virtual; + DWORD[3] Reserved; + KDHELP KdHelp; +} +alias STACKFRAME* LPSTACKFRAME; + +struct API_VERSION { + USHORT MajorVersion; + USHORT MinorVersion; + USHORT Revision; + USHORT Reserved; +} +alias API_VERSION* LPAPI_VERSION; + +enum SYM_TYPE { + SymNone, + SymCoff, + SymCv, + SymPdb, + SymExport, + SymDeferred, + SymSym +} + +struct IMAGEHLP_SYMBOL { + DWORD SizeOfStruct; + DWORD Address; + DWORD Size; + DWORD Flags; + DWORD MaxNameLength; + CHAR[1] Name; +} +alias IMAGEHLP_SYMBOL* PIMAGEHLP_SYMBOL; + +struct IMAGEHLP_MODULE { + DWORD SizeOfStruct; + DWORD BaseOfImage; + DWORD ImageSize; + DWORD TimeDateStamp; + DWORD CheckSum; + DWORD NumSyms; + SYM_TYPE SymType; + CHAR[32] ModuleName; + CHAR[256] ImageName; + CHAR[256] LoadedImageName; +} +alias IMAGEHLP_MODULE* PIMAGEHLP_MODULE; + +struct IMAGEHLP_LINE { + DWORD SizeOfStruct; + DWORD Key; + DWORD LineNumber; + PCHAR FileName; + DWORD Address; +} +alias IMAGEHLP_LINE* PIMAGEHLP_LINE; + +struct IMAGEHLP_DEFERRED_SYMBOL_LOAD { + DWORD SizeOfStruct; + DWORD BaseOfImage; + DWORD CheckSum; + DWORD TimeDateStamp; + CHAR[MAX_PATH] FileName; + BOOLEAN Reparse; +} +alias IMAGEHLP_DEFERRED_SYMBOL_LOAD* PIMAGEHLP_DEFERRED_SYMBOL_LOAD; + +struct IMAGEHLP_DUPLICATE_SYMBOL { + DWORD SizeOfStruct; + DWORD NumberOfDups; + PIMAGEHLP_SYMBOL Symbol; + ULONG SelectedSymbol; +} +alias IMAGEHLP_DUPLICATE_SYMBOL* PIMAGEHLP_DUPLICATE_SYMBOL; + +alias HANDLE DIGEST_HANDLE; + +extern (Windows) { + alias BOOL function(IMAGEHLP_STATUS_REASON, LPSTR, LPSTR, ULONG, ULONG) + PIMAGEHLP_STATUS_ROUTINE; + alias BOOL function(HANDLE , LPCVOID, LPVOID, DWORD, LPDWORD) + PREAD_PROCESS_MEMORY_ROUTINE; + alias LPVOID function(HANDLE, DWORD) PFUNCTION_TABLE_ACCESS_ROUTINE; + alias DWORD function(HANDLE, DWORD) PGET_MODULE_BASE_ROUTINE; + alias DWORD function(HANDLE, HANDLE, LPADDRESS) + PTRANSLATE_ADDRESS_ROUTINE; + alias BOOL function(LPSTR, ULONG, PVOID) PSYM_ENUMMODULES_CALLBACK; + alias BOOL function(LPSTR, ULONG, ULONG, PVOID) PSYM_ENUMSYMBOLS_CALLBACK; + alias BOOL function(LPSTR, ULONG, ULONG, PVOID) + PENUMLOADED_MODULES_CALLBACK; + alias BOOL function(HANDLE, ULONG, PVOID, PVOID) + PSYMBOL_REGISTERED_CALLBACK; + alias BOOL function(DIGEST_HANDLE refdata, PBYTE pData, DWORD dwLength) + DIGEST_FUNCTION; + + PIMAGE_NT_HEADERS CheckSumMappedFile(LPVOID, DWORD, LPDWORD, LPDWORD); + DWORD MapFileAndCheckSumA(LPSTR, LPDWORD, LPDWORD); + DWORD MapFileAndCheckSumW(PWSTR, LPDWORD, LPDWORD); + BOOL TouchFileTimes(HANDLE, LPSYSTEMTIME); + BOOL SplitSymbols(LPSTR, LPSTR, LPSTR, DWORD); + HANDLE FindDebugInfoFile(LPSTR, LPSTR, LPSTR); + HANDLE FindExecutableImage(LPSTR, LPSTR, LPSTR); + BOOL UpdateDebugInfoFile(LPSTR, LPSTR, LPSTR, PIMAGE_NT_HEADERS); + BOOL UpdateDebugInfoFileEx(LPSTR, LPSTR, LPSTR, PIMAGE_NT_HEADERS, DWORD); + BOOL BindImage(LPSTR, LPSTR, LPSTR); + BOOL BindImageEx(DWORD, LPSTR, LPSTR, LPSTR, PIMAGEHLP_STATUS_ROUTINE); + BOOL ReBaseImage(LPSTR, LPSTR, BOOL, BOOL, BOOL, ULONG, ULONG*, ULONG*, + ULONG*, ULONG*, ULONG); + PLOADED_IMAGE ImageLoad(LPSTR, LPSTR); + BOOL ImageUnload(PLOADED_IMAGE); + PIMAGE_NT_HEADERS ImageNtHeader(PVOID); + PVOID ImageDirectoryEntryToData(PVOID, BOOLEAN, USHORT, PULONG); + PIMAGE_SECTION_HEADER ImageRvaToSection(PIMAGE_NT_HEADERS, PVOID, ULONG); + PVOID ImageRvaToVa(PIMAGE_NT_HEADERS, PVOID, ULONG, + PIMAGE_SECTION_HEADER*); + BOOL MapAndLoad(LPSTR, LPSTR, PLOADED_IMAGE, BOOL, BOOL); + BOOL GetImageConfigInformation(PLOADED_IMAGE, + PIMAGE_LOAD_CONFIG_DIRECTORY); + DWORD GetImageUnusedHeaderBytes(PLOADED_IMAGE, LPDWORD); + BOOL SetImageConfigInformation(PLOADED_IMAGE, + PIMAGE_LOAD_CONFIG_DIRECTORY); + BOOL UnMapAndLoad(PLOADED_IMAGE); + PIMAGE_DEBUG_INFORMATION MapDebugInformation(HANDLE, LPSTR, LPSTR, DWORD); + BOOL UnmapDebugInformation(PIMAGE_DEBUG_INFORMATION); + HANDLE FindExecutableImage(LPSTR, LPSTR, LPSTR); + BOOL SearchTreeForFile(LPSTR, LPSTR, LPSTR); + BOOL MakeSureDirectoryPathExists(LPCSTR); + DWORD UnDecorateSymbolName(LPCSTR, LPSTR, DWORD, DWORD); + BOOL StackWalk(DWORD, HANDLE, HANDLE, LPSTACKFRAME, LPVOID, + PREAD_PROCESS_MEMORY_ROUTINE, PFUNCTION_TABLE_ACCESS_ROUTINE, + PGET_MODULE_BASE_ROUTINE, PTRANSLATE_ADDRESS_ROUTINE); + LPAPI_VERSION ImagehlpApiVersion(); + LPAPI_VERSION ImagehlpApiVersionEx(LPAPI_VERSION); + DWORD GetTimestampForLoadedLibrary(HMODULE); + BOOL RemovePrivateCvSymbolic(PCHAR, PCHAR*, ULONG*); + VOID RemoveRelocations(PCHAR); + DWORD SymSetOptions(DWORD); + DWORD SymGetOptions(); + BOOL SymCleanup(HANDLE); + BOOL SymEnumerateModules(HANDLE, PSYM_ENUMMODULES_CALLBACK, PVOID); + BOOL SymEnumerateSymbols(HANDLE, DWORD, PSYM_ENUMSYMBOLS_CALLBACK, PVOID); + BOOL EnumerateLoadedModules(HANDLE, PENUMLOADED_MODULES_CALLBACK, PVOID); + LPVOID SymFunctionTableAccess(HANDLE, DWORD); + BOOL SymGetModuleInfo(HANDLE, DWORD, PIMAGEHLP_MODULE); + DWORD SymGetModuleBase(HANDLE, DWORD); + BOOL SymGetSymFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_SYMBOL); + BOOL SymGetSymFromName(HANDLE, LPSTR, PIMAGEHLP_SYMBOL); + BOOL SymGetSymNext(HANDLE, PIMAGEHLP_SYMBOL); + BOOL SymGetSymPrev(HANDLE, PIMAGEHLP_SYMBOL); + BOOL SymGetLineFromAddr(HANDLE, DWORD, PDWORD, PIMAGEHLP_LINE); + BOOL SymGetLineFromName(HANDLE, LPSTR, LPSTR, DWORD, PLONG, + PIMAGEHLP_LINE); + BOOL SymGetLineNext(HANDLE, PIMAGEHLP_LINE); + BOOL SymGetLinePrev(HANDLE, PIMAGEHLP_LINE); + BOOL SymMatchFileName(LPSTR, LPSTR, LPSTR*, LPSTR*); + BOOL SymInitialize(HANDLE, LPSTR, BOOL); + BOOL SymGetSearchPath(HANDLE, LPSTR, DWORD); + BOOL SymSetSearchPath(HANDLE, LPSTR); + BOOL SymLoadModule(HANDLE, HANDLE, PSTR, PSTR, DWORD, DWORD); + BOOL SymUnloadModule(HANDLE, DWORD); + BOOL SymUnDName(PIMAGEHLP_SYMBOL, LPSTR, DWORD); + BOOL SymRegisterCallback(HANDLE, PSYMBOL_REGISTERED_CALLBACK, PVOID); + BOOL ImageGetDigestStream(HANDLE, DWORD, DIGEST_FUNCTION, DIGEST_HANDLE); + BOOL ImageAddCertificate(HANDLE, LPWIN_CERTIFICATE, PDWORD); + BOOL ImageRemoveCertificate(HANDLE, DWORD); + BOOL ImageEnumerateCertificates(HANDLE, WORD, PDWORD, PDWORD, DWORD); + BOOL ImageGetCertificateData(HANDLE, DWORD, LPWIN_CERTIFICATE, PDWORD); + BOOL ImageGetCertificateHeader(HANDLE, DWORD, LPWIN_CERTIFICATE); + BOOL CopyPdb(CHAR*, CHAR*, BOOL); + BOOL RemovePrivateCvSymbolicEx(PCHAR, ULONG, PCHAR*, ULONG*); +} + +version (Unicode) { + alias MapFileAndCheckSumW MapFileAndCheckSum; +} else { + alias MapFileAndCheckSumA MapFileAndCheckSum; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/imm.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/imm.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,482 @@ +/***********************************************************************\ +* imm.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.imm; +pragma(lib, "imm32.lib"); + +import win32.windef, win32.wingdi; +import win32.winuser; // for the MFS_xxx enums. +private import win32.w32api; + +const WM_CONVERTREQUESTEX = 0x108; +const WM_IME_STARTCOMPOSITION = 0x10D; +const WM_IME_ENDCOMPOSITION = 0x10E; +const WM_IME_COMPOSITION = 0x10F; +const WM_IME_KEYLAST = 0x10F; +const WM_IME_SETCONTEXT = 0x281; +const WM_IME_NOTIFY = 0x282; +const WM_IME_CONTROL = 0x283; +const WM_IME_COMPOSITIONFULL = 0x284; +const WM_IME_SELECT = 0x285; +const WM_IME_CHAR = 0x286; +static if (WINVER >= 0x500) { + const WM_IME_REQUEST = 0x288; +} +const WM_IME_KEYDOWN = 0x290; +const WM_IME_KEYUP = 0x291; + + +const IMC_GETCANDIDATEPOS=7; +const IMC_SETCANDIDATEPOS=8; +const IMC_GETCOMPOSITIONFONT=9; +const IMC_SETCOMPOSITIONFONT=10; +const IMC_GETCOMPOSITIONWINDOW=11; +const IMC_SETCOMPOSITIONWINDOW=12; +const IMC_GETSTATUSWINDOWPOS=15; +const IMC_SETSTATUSWINDOWPOS=16; +const IMC_CLOSESTATUSWINDOW=0x21; +const IMC_OPENSTATUSWINDOW=0x22; +const IMN_CLOSESTATUSWINDOW=1; +const IMN_OPENSTATUSWINDOW=2; +const IMN_CHANGECANDIDATE=3; +const IMN_CLOSECANDIDATE=4; +const IMN_OPENCANDIDATE=5; +const IMN_SETCONVERSIONMODE=6; +const IMN_SETSENTENCEMODE=7; +const IMN_SETOPENSTATUS=8; +const IMN_SETCANDIDATEPOS=9; +const IMN_SETCOMPOSITIONFONT=10; +const IMN_SETCOMPOSITIONWINDOW=11; +const IMN_SETSTATUSWINDOWPOS=12; +const IMN_GUIDELINE=13; +const IMN_PRIVATE=14; + +const NI_OPENCANDIDATE=16; +const NI_CLOSECANDIDATE=17; +const NI_SELECTCANDIDATESTR=18; +const NI_CHANGECANDIDATELIST=19; +const NI_FINALIZECONVERSIONRESULT=20; +const NI_COMPOSITIONSTR=21; +const NI_SETCANDIDATE_PAGESTART=22; +const NI_SETCANDIDATE_PAGESIZE=23; +const NI_IMEMENUSELECTED=24; + +const ISC_SHOWUICANDIDATEWINDOW=1; +const ISC_SHOWUICOMPOSITIONWINDOW=0x80000000; +const ISC_SHOWUIGUIDELINE=0x40000000; +const ISC_SHOWUIALLCANDIDATEWINDOW=15; +const ISC_SHOWUIALL=0xC000000F; + +const CPS_COMPLETE=1; +const CPS_CONVERT=2; +const CPS_REVERT=3; +const CPS_CANCEL=4; + +const IME_CHOTKEY_IME_NONIME_TOGGLE=16; +const IME_CHOTKEY_SHAPE_TOGGLE=17; +const IME_CHOTKEY_SYMBOL_TOGGLE=18; +const IME_JHOTKEY_CLOSE_OPEN=0x30; +const IME_KHOTKEY_SHAPE_TOGGLE=0x50; +const IME_KHOTKEY_HANJACONVERT=0x51; +const IME_KHOTKEY_ENGLISH=0x52; +const IME_THOTKEY_IME_NONIME_TOGGLE=0x70; +const IME_THOTKEY_SHAPE_TOGGLE=0x71; +const IME_THOTKEY_SYMBOL_TOGGLE=0x72; +const IME_HOTKEY_DSWITCH_FIRST=256; +const IME_HOTKEY_DSWITCH_LAST=0x11F; +const IME_ITHOTKEY_RESEND_RESULTSTR=512; +const IME_ITHOTKEY_PREVIOUS_COMPOSITION=513; +const IME_ITHOTKEY_UISTYLE_TOGGLE=514; + +const GCS_COMPREADSTR=1; +const GCS_COMPREADATTR=2; +const GCS_COMPREADCLAUSE=4; +const GCS_COMPSTR=8; +const GCS_COMPATTR=16; +const GCS_COMPCLAUSE=32; +const GCS_CURSORPOS=128; +const GCS_DELTASTART=256; +const GCS_RESULTREADSTR=512; +const GCS_RESULTREADCLAUSE=1024; +const GCS_RESULTSTR=2048; +const GCS_RESULTCLAUSE=4096; + +const CS_INSERTCHAR=0x2000; +const CS_NOMOVECARET=0x4000; + +const IMEVER_0310=0x3000A; +const IMEVER_0400=0x40000; + +const IME_PROP_AT_CARET=0x10000; +const IME_PROP_SPECIAL_UI=0x20000; +const IME_PROP_CANDLIST_START_FROM_1=0x40000; +const IME_PROP_UNICODE=0x80000; + +const UI_CAP_2700=1; +const UI_CAP_ROT90=2; +const UI_CAP_ROTANY=4; + +const SCS_CAP_COMPSTR=1; +const SCS_CAP_MAKEREAD=2; +const SELECT_CAP_CONVERSION=1; +const SELECT_CAP_SENTENCE=2; +const GGL_LEVEL=1; +const GGL_INDEX=2; +const GGL_STRING=3; +const GGL_PRIVATE=4; +const GL_LEVEL_NOGUIDELINE=0; +const GL_LEVEL_FATAL=1; +const GL_LEVEL_ERROR=2; +const GL_LEVEL_WARNING=3; +const GL_LEVEL_INFORMATION=4; +const GL_ID_UNKNOWN=0; +const GL_ID_NOMODULE=1; +const GL_ID_NODICTIONARY=16; +const GL_ID_CANNOTSAVE=17; +const GL_ID_NOCONVERT=32; +const GL_ID_TYPINGERROR=33; +const GL_ID_TOOMANYSTROKE=34; +const GL_ID_READINGCONFLICT=35; +const GL_ID_INPUTREADING=36; +const GL_ID_INPUTRADICAL=37; +const GL_ID_INPUTCODE=38; +const GL_ID_INPUTSYMBOL=39; +const GL_ID_CHOOSECANDIDATE=40; +const GL_ID_REVERSECONVERSION=41; +const GL_ID_PRIVATE_FIRST=0x8000; +const GL_ID_PRIVATE_LAST=0xFFFF; + +const DWORD IGP_GETIMEVERSION = -4; +const IGP_PROPERTY=4; +const IGP_CONVERSION=8; +const IGP_SENTENCE=12; +const IGP_UI=16; +const IGP_SETCOMPSTR=0x14; +const IGP_SELECT=0x18; + +const SCS_SETSTR = GCS_COMPREADSTR|GCS_COMPSTR; +const SCS_CHANGEATTR = GCS_COMPREADATTR|GCS_COMPATTR; +const SCS_CHANGECLAUSE = GCS_COMPREADCLAUSE|GCS_COMPCLAUSE; + +const ATTR_INPUT=0; +const ATTR_TARGET_CONVERTED=1; +const ATTR_CONVERTED=2; +const ATTR_TARGET_NOTCONVERTED=3; +const ATTR_INPUT_ERROR=4; +const ATTR_FIXEDCONVERTED=5; +const CFS_DEFAULT=0; +const CFS_RECT=1; +const CFS_POINT=2; +const CFS_SCREEN=4; +const CFS_FORCE_POSITION=32; +const CFS_CANDIDATEPOS=64; +const CFS_EXCLUDE=128; +const GCL_CONVERSION=1; +const GCL_REVERSECONVERSION=2; +const GCL_REVERSE_LENGTH=3; + +const IME_CMODE_ALPHANUMERIC=0; +const IME_CMODE_NATIVE=1; +const IME_CMODE_CHINESE=IME_CMODE_NATIVE; +const IME_CMODE_HANGEUL=IME_CMODE_NATIVE; +const IME_CMODE_HANGUL=IME_CMODE_NATIVE; +const IME_CMODE_JAPANESE=IME_CMODE_NATIVE; +const IME_CMODE_KATAKANA=2; +const IME_CMODE_LANGUAGE=3; +const IME_CMODE_FULLSHAPE=8; +const IME_CMODE_ROMAN=16; +const IME_CMODE_CHARCODE=32; +const IME_CMODE_HANJACONVERT=64; +const IME_CMODE_SOFTKBD=128; +const IME_CMODE_NOCONVERSION=256; +const IME_CMODE_EUDC=512; +const IME_CMODE_SYMBOL=1024; +const IME_CMODE_FIXED=2048; +const IME_SMODE_NONE=0; +const IME_SMODE_PLAURALCLAUSE=1; +const IME_SMODE_SINGLECONVERT=2; +const IME_SMODE_AUTOMATIC=4; +const IME_SMODE_PHRASEPREDICT=8; +const IME_CAND_UNKNOWN=0; +const IME_CAND_READ=1; +const IME_CAND_CODE=2; +const IME_CAND_MEANING=3; +const IME_CAND_RADICAL=4; +const IME_CAND_STROKE=5; +const IMM_ERROR_NODATA=(-1); +const IMM_ERROR_GENERAL=(-2); +const IME_CONFIG_GENERAL=1; +const IME_CONFIG_REGISTERWORD=2; +const IME_CONFIG_SELECTDICTIONARY=3; +const IME_ESC_QUERY_SUPPORT=3; +const IME_ESC_RESERVED_FIRST=4; +const IME_ESC_RESERVED_LAST=0x7FF; +const IME_ESC_PRIVATE_FIRST=0x800; +const IME_ESC_PRIVATE_LAST=0xFFF; +const IME_ESC_SEQUENCE_TO_INTERNAL=0x1001; +const IME_ESC_GET_EUDC_DICTIONARY=0x1003; +const IME_ESC_SET_EUDC_DICTIONARY=0x1004; +const IME_ESC_MAX_KEY=0x1005; +const IME_ESC_IME_NAME=0x1006; +const IME_ESC_SYNC_HOTKEY=0x1007; +const IME_ESC_HANJA_MODE=0x1008; +const IME_ESC_AUTOMATA=0x1009; +const IME_REGWORD_STYLE_EUDC=1; +const IME_REGWORD_STYLE_USER_FIRST=0x80000000; +const IME_REGWORD_STYLE_USER_LAST=0xFFFFFFFF; + +const SOFTKEYBOARD_TYPE_T1=1; +const SOFTKEYBOARD_TYPE_C1=2; + +const IMEMENUITEM_STRING_SIZE=80; + +const MOD_ALT=1; +const MOD_CONTROL=2; +const MOD_SHIFT=4; +const MOD_WIN=8; +const MOD_IGNORE_ALL_MODIFIER=1024; +const MOD_ON_KEYUP=2048; +const MOD_RIGHT=16384; +const MOD_LEFT=32768; + +const IACE_CHILDREN=1; +const IACE_DEFAULT=16; +const IACE_IGNORENOCONTEXT=32; + +const IGIMIF_RIGHTMENU=1; + +const IGIMII_CMODE=1; +const IGIMII_SMODE=2; +const IGIMII_CONFIGURE=4; +const IGIMII_TOOLS=8; +const IGIMII_HELP=16; +const IGIMII_OTHER=32; +const IGIMII_INPUTTOOLS=64; + +const IMFT_RADIOCHECK=1; +const IMFT_SEPARATOR=2; +const IMFT_SUBMENU=4; + +const IMFS_GRAYED=MFS_GRAYED; +const IMFS_DISABLED=MFS_DISABLED; +const IMFS_CHECKED=MFS_CHECKED; +const IMFS_HILITE=MFS_HILITE; +const IMFS_ENABLED=MFS_ENABLED; +const IMFS_UNCHECKED=MFS_UNCHECKED; +const IMFS_UNHILITE=MFS_UNHILITE; +const IMFS_DEFAULT=MFS_DEFAULT; + +const STYLE_DESCRIPTION_SIZE=32; + +alias DWORD HIMC; +alias DWORD HIMCC; +alias HKL* LPHKL; + +struct COMPOSITIONFORM{ + DWORD dwStyle; + POINT ptCurrentPos; + RECT rcArea; +} +alias COMPOSITIONFORM* PCOMPOSITIONFORM, LPCOMPOSITIONFORM; + +struct CANDIDATEFORM{ + DWORD dwIndex; + DWORD dwStyle; + POINT ptCurrentPos; + RECT rcArea; +} +alias CANDIDATEFORM* PCANDIDATEFORM, LPCANDIDATEFORM; + +struct CANDIDATELIST{ + DWORD dwSize; + DWORD dwStyle; + DWORD dwCount; + DWORD dwSelection; + DWORD dwPageStart; + DWORD dwPageSize; + DWORD dwOffset[1]; +} +alias CANDIDATELIST* PCANDIDATELIST, LPCANDIDATELIST; + +struct REGISTERWORDA{ + LPSTR lpReading; + LPSTR lpWord; +} +alias REGISTERWORDA* PREGISTERWORDA, LPREGISTERWORDA; + +struct REGISTERWORDW{ + LPWSTR lpReading; + LPWSTR lpWord; +} +alias REGISTERWORDW* PREGISTERWORDW, LPREGISTERWORDW; + +struct STYLEBUFA{ + DWORD dwStyle; + CHAR szDescription[STYLE_DESCRIPTION_SIZE]; +} +alias STYLEBUFA* PSTYLEBUFA, LPSTYLEBUFA; + +struct STYLEBUFW{ + DWORD dwStyle; + WCHAR szDescription[STYLE_DESCRIPTION_SIZE]; +} +alias STYLEBUFW* PSTYLEBUFW, LPSTYLEBUFW; + +struct IMEMENUITEMINFOA{ + UINT cbSize = this.sizeof; + UINT fType; + UINT fState; + UINT wID; + HBITMAP hbmpChecked; + HBITMAP hbmpUnchecked; + DWORD dwItemData; + CHAR szString[IMEMENUITEM_STRING_SIZE]; + HBITMAP hbmpItem; +} +alias IMEMENUITEMINFOA* PIMEMENUITEMINFOA, LPIMEMENUITEMINFOA; + +struct IMEMENUITEMINFOW{ + UINT cbSize = this.sizeof; + UINT fType; + UINT fState; + UINT wID; + HBITMAP hbmpChecked; + HBITMAP hbmpUnchecked; + DWORD dwItemData; + WCHAR szString[IMEMENUITEM_STRING_SIZE]; + HBITMAP hbmpItem; +} +alias IMEMENUITEMINFOW* PIMEMENUITEMINFOW, LPIMEMENUITEMINFOW; + +alias int function (LPCSTR, DWORD, LPCSTR, LPVOID) REGISTERWORDENUMPROCA; +alias int function (LPCWSTR, DWORD, LPCWSTR, LPVOID) REGISTERWORDENUMPROCW; + +version(Unicode) { + alias REGISTERWORDENUMPROCW REGISTERWORDENUMPROC; + alias REGISTERWORDW REGISTERWORD; + alias IMEMENUITEMINFOW IMEMENUITEMINFO; + alias STYLEBUFW STYLEBUF; +} else { + alias REGISTERWORDENUMPROCA REGISTERWORDENUMPROC; + alias REGISTERWORDA REGISTERWORD; + alias IMEMENUITEMINFOA IMEMENUITEMINFO; + alias STYLEBUFA STYLEBUF; +} + +alias STYLEBUF* PSTYLEBUF, LPSTYLEBUF; +alias REGISTERWORD* PREGISTERWORD, LPREGISTERWORD; +alias IMEMENUITEMINFO* PIMEMENUITEMINFO, LPIMEMENUITEMINFO; + + +extern (Windows): +HKL ImmInstallIMEA(LPCSTR, LPCSTR); +HKL ImmInstallIMEW(LPCWSTR, LPCWSTR); +HWND ImmGetDefaultIMEWnd(HWND); +UINT ImmGetDescriptionA(HKL, LPSTR, UINT); +UINT ImmGetDescriptionW(HKL, LPWSTR, UINT); +UINT ImmGetIMEFileNameA(HKL, LPSTR, UINT); +UINT ImmGetIMEFileNameW(HKL, LPWSTR, UINT); +DWORD ImmGetProperty(HKL, DWORD); +BOOL ImmIsIME(HKL); +BOOL ImmSimulateHotKey(HWND, DWORD); +HIMC ImmCreateContext(); +BOOL ImmDestroyContext(HIMC); +HIMC ImmGetContext(HWND); +BOOL ImmReleaseContext(HWND, HIMC); +HIMC ImmAssociateContext(HWND, HIMC); +LONG ImmGetCompositionStringA(HIMC, DWORD, PVOID, DWORD); +LONG ImmGetCompositionStringW(HIMC, DWORD, PVOID, DWORD); +BOOL ImmSetCompositionStringA(HIMC, DWORD, PCVOID, DWORD, PCVOID, DWORD); +BOOL ImmSetCompositionStringW(HIMC, DWORD, PCVOID, DWORD, PCVOID, DWORD); +DWORD ImmGetCandidateListCountA(HIMC, PDWORD); +DWORD ImmGetCandidateListCountW(HIMC, PDWORD); +DWORD ImmGetCandidateListA(HIMC, DWORD, PCANDIDATELIST, DWORD); +DWORD ImmGetCandidateListW(HIMC, DWORD, PCANDIDATELIST, DWORD); +DWORD ImmGetGuideLineA(HIMC, DWORD, LPSTR, DWORD); +DWORD ImmGetGuideLineW(HIMC, DWORD, LPWSTR, DWORD); +BOOL ImmGetConversionStatus(HIMC, LPDWORD, PDWORD); +BOOL ImmSetConversionStatus(HIMC, DWORD, DWORD); +BOOL ImmGetOpenStatus(HIMC); +BOOL ImmSetOpenStatus(HIMC, BOOL); + +BOOL ImmGetCompositionFontA(HIMC, LPLOGFONTA); +BOOL ImmGetCompositionFontW(HIMC, LPLOGFONTW); +BOOL ImmSetCompositionFontA(HIMC, LPLOGFONTA); +BOOL ImmSetCompositionFontW(HIMC, LPLOGFONTW); + +BOOL ImmConfigureIMEA(HKL, HWND, DWORD, PVOID); +BOOL ImmConfigureIMEW(HKL, HWND, DWORD, PVOID); +LRESULT ImmEscapeA(HKL, HIMC, UINT, PVOID); +LRESULT ImmEscapeW(HKL, HIMC, UINT, PVOID); +DWORD ImmGetConversionListA(HKL, HIMC, LPCSTR, PCANDIDATELIST, DWORD, UINT); +DWORD ImmGetConversionListW(HKL, HIMC, LPCWSTR, PCANDIDATELIST, DWORD, UINT); +BOOL ImmNotifyIME(HIMC, DWORD, DWORD, DWORD); +BOOL ImmGetStatusWindowPos(HIMC, LPPOINT); +BOOL ImmSetStatusWindowPos(HIMC, LPPOINT); +BOOL ImmGetCompositionWindow(HIMC, PCOMPOSITIONFORM); +BOOL ImmSetCompositionWindow(HIMC, PCOMPOSITIONFORM); +BOOL ImmGetCandidateWindow(HIMC, DWORD, PCANDIDATEFORM); +BOOL ImmSetCandidateWindow(HIMC, PCANDIDATEFORM); +BOOL ImmIsUIMessageA(HWND, UINT, WPARAM, LPARAM); +BOOL ImmIsUIMessageW(HWND, UINT, WPARAM, LPARAM); +UINT ImmGetVirtualKey(HWND); +BOOL ImmRegisterWordA(HKL, LPCSTR, DWORD, LPCSTR); +BOOL ImmRegisterWordW(HKL, LPCWSTR, DWORD, LPCWSTR); +BOOL ImmUnregisterWordA(HKL, LPCSTR, DWORD, LPCSTR); +BOOL ImmUnregisterWordW(HKL, LPCWSTR, DWORD, LPCWSTR); +UINT ImmGetRegisterWordStyleA(HKL, UINT, PSTYLEBUFA); +UINT ImmGetRegisterWordStyleW(HKL, UINT, PSTYLEBUFW); +UINT ImmEnumRegisterWordA(HKL, REGISTERWORDENUMPROCA, LPCSTR, DWORD, LPCSTR, PVOID); +UINT ImmEnumRegisterWordW(HKL, REGISTERWORDENUMPROCW, LPCWSTR, DWORD, LPCWSTR, PVOID); +BOOL EnableEUDC(BOOL); +BOOL ImmDisableIME(DWORD); +DWORD ImmGetImeMenuItemsA(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOA, LPIMEMENUITEMINFOA, DWORD); +DWORD ImmGetImeMenuItemsW(HIMC, DWORD, DWORD, LPIMEMENUITEMINFOW, LPIMEMENUITEMINFOW, DWORD); + +version(Unicode) { + alias ImmEnumRegisterWordW ImmEnumRegisterWord; + alias ImmGetRegisterWordStyleW ImmGetRegisterWordStyle; + alias ImmUnregisterWordW ImmUnregisterWord; + alias ImmRegisterWordW ImmRegisterWord; + alias ImmInstallIMEW ImmInstallIME; + alias ImmIsUIMessageW ImmIsUIMessage; + alias ImmGetConversionListW ImmGetConversionList; + alias ImmEscapeW ImmEscape; + alias ImmConfigureIMEW ImmConfigureIME; + alias ImmSetCompositionFontW ImmSetCompositionFont; + alias ImmGetCompositionFontW ImmGetCompositionFont; + alias ImmGetGuideLineW ImmGetGuideLine; + alias ImmGetCandidateListW ImmGetCandidateList; + alias ImmGetCandidateListCountW ImmGetCandidateListCount; + alias ImmSetCompositionStringW ImmSetCompositionString; + alias ImmGetCompositionStringW ImmGetCompositionString; + alias ImmGetDescriptionW ImmGetDescription; + alias ImmGetIMEFileNameW ImmGetIMEFileName; + alias ImmGetImeMenuItemsW ImmGetImeMenuItems; +} else { + alias ImmEnumRegisterWordA ImmEnumRegisterWord; + alias ImmGetRegisterWordStyleA ImmGetRegisterWordStyle; + alias ImmUnregisterWordA ImmUnregisterWord; + alias ImmRegisterWordA ImmRegisterWord; + alias ImmInstallIMEA ImmInstallIME; + alias ImmIsUIMessageA ImmIsUIMessage; + alias ImmGetConversionListA ImmGetConversionList; + alias ImmEscapeA ImmEscape; + alias ImmConfigureIMEA ImmConfigureIME; + alias ImmSetCompositionFontA ImmSetCompositionFont; + alias ImmGetCompositionFontA ImmGetCompositionFont; + alias ImmGetGuideLineA ImmGetGuideLine; + alias ImmGetCandidateListA ImmGetCandidateList; + alias ImmGetCandidateListCountA ImmGetCandidateListCount; + alias ImmSetCompositionStringA ImmSetCompositionString; + alias ImmGetCompositionStringA ImmGetCompositionString; + alias ImmGetDescriptionA ImmGetDescription; + alias ImmGetIMEFileNameA ImmGetIMEFileName; + alias ImmGetImeMenuItemsW ImmGetImeMenuItems; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/intshcut.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/intshcut.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,89 @@ +/***********************************************************************\ +* intshcut.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.intshcut; + +private import win32.unknwn, win32.windef; + +enum : SCODE { + E_FLAGS = 0x80041000, + // = MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x1000) + URL_E_INVALID_SYNTAX = 0x80041001, + // = MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x1001) + URL_E_UNREGISTERED_PROTOCOL = 0x80041002, // etc. + IS_E_EXEC_FAILED = 0x80042002 +} + +enum IURL_SETURL_FLAGS { + IURL_SETURL_FL_GUESS_PROTOCOL = 1, + IURL_SETURL_FL_USE_DEFAULT_PROTOCOL, + ALL_IURL_SETURL_FLAGS +} + +enum IURL_INVOKECOMMAND_FLAGS { + IURL_INVOKECOMMAND_FL_ALLOW_UI = 1, + IURL_INVOKECOMMAND_FL_USE_DEFAULT_VERB, + ALL_IURL_INVOKECOMMAND_FLAGS +} + +enum TRANSLATEURL_IN_FLAGS { + TRANSLATEURL_FL_GUESS_PROTOCOL = 1, + TRANSLATEURL_FL_USE_DEFAULT_PROTOCOL, + ALL_TRANSLATEURL_FLAGS +} + +enum URLASSOCIATIONDIALOG_IN_FLAGS { + URLASSOCDLG_FL_USE_DEFAULT_NAME = 1, + URLASSOCDLG_FL_REGISTER_ASSOC, + ALL_URLASSOCDLG_FLAGS +} + +enum MIMEASSOCIATIONDIALOG_IN_FLAGS { + MIMEASSOCDLG_FL_REGISTER_ASSOC = 1, + ALL_MIMEASSOCDLG_FLAGS = MIMEASSOCDLG_FL_REGISTER_ASSOC +} + +struct URLINVOKECOMMANDINFO { + DWORD dwcbSize = URLINVOKECOMMANDINFO.sizeof; + DWORD dwFlags; + HWND hwndParent; + PCSTR pcszVerb; +} +alias URLINVOKECOMMANDINFO CURLINVOKECOMMANDINFO; +alias URLINVOKECOMMANDINFO* PURLINVOKECOMMANDINFO, PCURLINVOKECOMMANDINFO; + +interface IUniformResourceLocator : IUnknown { + HRESULT SetURL(PCSTR, DWORD); + HRESULT GetURL(PSTR*); + HRESULT InvokeCommand(PURLINVOKECOMMANDINFO); +} +alias IUniformResourceLocator CIUniformResourceLocator; +alias IUniformResourceLocator* PIUniformResourceLocator, + PCIUniformResourceLocator; + +extern (Windows) { + BOOL InetIsOffline(DWORD); + HRESULT MIMEAssociationDialogA(HWND, DWORD, PCSTR, PCSTR, PSTR, UINT); + HRESULT MIMEAssociationDialogW(HWND, DWORD, PCWSTR, PCWSTR, PWSTR, UINT); + HRESULT TranslateURLA(PCSTR, DWORD, PSTR*); + HRESULT TranslateURLW(PCWSTR, DWORD, PWSTR*); + HRESULT URLAssociationDialogA(HWND, DWORD, PCSTR, PCSTR, PSTR, UINT); + HRESULT URLAssociationDialogW(HWND, DWORD, PCWSTR, PCWSTR, PWSTR, UINT); +} + +version (Unicode) { + alias TranslateURLW TranslateURL; + alias MIMEAssociationDialogW MIMEAssociationDialog; + alias URLAssociationDialogW URLAssociationDialog; +} else { + alias TranslateURLA TranslateURL; + alias MIMEAssociationDialogA MIMEAssociationDialog; + alias URLAssociationDialogA URLAssociationDialog; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ipexport.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ipexport.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,108 @@ +/***********************************************************************\ +* ipexport.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ipexport; + +private import win32.windef; + +const size_t MAX_ADAPTER_NAME = 128; + +// IP STATUS flags +enum : IP_STATUS { + IP_SUCCESS = 0, + IP_STATUS_BASE = 11000, + IP_BUF_TOO_SMALL, + IP_DEST_NET_UNREACHABLE, + IP_DEST_HOST_UNREACHABLE, + IP_DEST_PROT_UNREACHABLE, + IP_DEST_PORT_UNREACHABLE, + IP_NO_RESOURCES, + IP_BAD_OPTION, + IP_HW_ERROR, + IP_PACKET_TOO_BIG, + IP_REQ_TIMED_OUT, + IP_BAD_REQ, + IP_BAD_ROUTE, + IP_TTL_EXPIRED_TRANSIT, + IP_TTL_EXPIRED_REASSEM, + IP_PARAM_PROBLEM, + IP_SOURCE_QUENCH, + IP_OPTION_TOO_BIG, + IP_BAD_DESTINATION, + IP_ADDR_DELETED, + IP_SPEC_MTU_CHANGE, + IP_MTU_CHANGE, + IP_UNLOAD, // = IP_STATUS_BASE + 22 + IP_GENERAL_FAILURE = IP_STATUS_BASE + 50, + MAX_IP_STATUS = IP_GENERAL_FAILURE, + IP_PENDING = IP_STATUS_BASE + 255 +} + +// IP header Flags values +const byte IP_FLAG_DF = 2; + +// IP Option types +enum : ubyte { + IP_OPT_EOL = 0, + IP_OPT_NOP = 0x01, + IP_OPT_RR = 0x07, + IP_OPT_SECURITY = 0x82, + IP_OPT_LSRR = 0x83, + IP_OPT_SSRR = 0x89, + IP_OPT_TS = 0x44, + IP_OPT_SID = 0x88, + IP_OPT_ROUTER_ALERT = 0x94 +} + +const ubyte MAX_OPT_SIZE = 40; + +alias uint IPAddr, IPMask, IP_STATUS; + +struct IP_OPTION_INFORMATION { + ubyte Ttl; + ubyte Tos; + ubyte Flags; + ubyte OptionsSize; + ubyte* OptionsData; +} +alias IP_OPTION_INFORMATION* PIP_OPTION_INFORMATION; + +struct ICMP_ECHO_REPLY { + IPAddr Address; + uint Status; + uint RoundTripTime; + ushort DataSize; + ushort Reserved; + void* Data; + IP_OPTION_INFORMATION Options; +} +alias ICMP_ECHO_REPLY* PICMP_ECHO_REPLY; + +struct IP_ADAPTER_INDEX_MAP { + ULONG Index; + WCHAR[MAX_ADAPTER_NAME] Name; +} +alias IP_ADAPTER_INDEX_MAP* PIP_ADAPTER_INDEX_MAP; + +struct IP_INTERFACE_INFO { + LONG NumAdapters; + IP_ADAPTER_INDEX_MAP[1] _Adapter; + + IP_ADAPTER_INDEX_MAP* Adapter() { return _Adapter.ptr; } +} +alias IP_INTERFACE_INFO* PIP_INTERFACE_INFO; + +struct IP_UNIDIRECTIONAL_ADAPTER_ADDRESS { + ULONG NumAdapters; + IPAddr[1] _Address; + + IPAddr* Address() { return _Address.ptr; } +} +alias IP_UNIDIRECTIONAL_ADAPTER_ADDRESS* PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/iphlpapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/iphlpapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,62 @@ +/***********************************************************************\ +* iphlpapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.iphlpapi; + +import win32.ipexport, win32.iprtrmib, win32.iptypes; +private import win32.winbase, win32.windef; + +extern (Windows) { + DWORD AddIPAddress(IPAddr, IPMask, DWORD, PULONG, PULONG); + DWORD CreateIpForwardEntry(PMIB_IPFORWARDROW); + DWORD CreateIpNetEntry(PMIB_IPNETROW); + DWORD CreateProxyArpEntry(DWORD, DWORD, DWORD); + DWORD DeleteIPAddress(ULONG); + DWORD DeleteIpForwardEntry(PMIB_IPFORWARDROW); + DWORD DeleteIpNetEntry(PMIB_IPNETROW); + DWORD DeleteProxyArpEntry(DWORD, DWORD, DWORD); + DWORD EnableRouter(HANDLE*, OVERLAPPED*); + DWORD FlushIpNetTable(DWORD); + DWORD GetAdapterIndex(LPWSTR, PULONG); + DWORD GetAdaptersInfo(PIP_ADAPTER_INFO, PULONG); + DWORD GetBestInterface(IPAddr, PDWORD); + DWORD GetBestRoute(DWORD, DWORD, PMIB_IPFORWARDROW); + DWORD GetFriendlyIfIndex(DWORD); + DWORD GetIcmpStatistics(PMIB_ICMP); + DWORD GetIfEntry(PMIB_IFROW); + DWORD GetIfTable(PMIB_IFTABLE, PULONG, BOOL); + DWORD GetInterfaceInfo(PIP_INTERFACE_INFO, PULONG); + DWORD GetIpAddrTable(PMIB_IPADDRTABLE, PULONG, BOOL); + DWORD GetIpForwardTable(PMIB_IPFORWARDTABLE, PULONG, BOOL); + DWORD GetIpNetTable(PMIB_IPNETTABLE, PULONG, BOOL); + DWORD GetIpStatistics(PMIB_IPSTATS); + DWORD GetNetworkParams(PFIXED_INFO, PULONG); + DWORD GetNumberOfInterfaces(PDWORD); + DWORD GetPerAdapterInfo(ULONG, PIP_PER_ADAPTER_INFO, PULONG); + BOOL GetRTTAndHopCount(IPAddr, PULONG, ULONG, PULONG); + DWORD GetTcpStatistics(PMIB_TCPSTATS); + DWORD GetTcpTable(PMIB_TCPTABLE, PDWORD, BOOL); + DWORD GetUniDirectionalAdapterInfo(PIP_UNIDIRECTIONAL_ADAPTER_ADDRESS, + PULONG); + DWORD GetUdpStatistics(PMIB_UDPSTATS); + DWORD GetUdpTable(PMIB_UDPTABLE, PDWORD, BOOL); + DWORD IpReleaseAddress(PIP_ADAPTER_INDEX_MAP); + DWORD IpRenewAddress(PIP_ADAPTER_INDEX_MAP); + DWORD NotifyAddrChange(PHANDLE, LPOVERLAPPED); + DWORD NotifyRouteChange(PHANDLE, LPOVERLAPPED); + DWORD SendARP(IPAddr, IPAddr, PULONG, PULONG); + DWORD SetIfEntry(PMIB_IFROW); + DWORD SetIpForwardEntry(PMIB_IPFORWARDROW); + DWORD SetIpNetEntry(PMIB_IPNETROW); + DWORD SetIpStatistics(PMIB_IPSTATS); + DWORD SetIpTTL(UINT); + DWORD SetTcpEntry(PMIB_TCPROW); + DWORD UnenableRouter(OVERLAPPED*, LPDWORD); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ipifcons.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ipifcons.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,38 @@ +/***********************************************************************\ +* ipifcons.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ipifcons; + +// FIXME: check types of constants + +enum { + MIB_IF_ADMIN_STATUS_UP = 1, + MIB_IF_ADMIN_STATUS_DOWN, + MIB_IF_ADMIN_STATUS_TESTING, +} + +enum { + MIB_IF_OPER_STATUS_NON_OPERATIONAL, + MIB_IF_OPER_STATUS_UNREACHABLE, + MIB_IF_OPER_STATUS_DISCONNECTED, + MIB_IF_OPER_STATUS_CONNECTING, + MIB_IF_OPER_STATUS_CONNECTED, + MIB_IF_OPER_STATUS_OPERATIONAL // = 5 +} + +enum { + MIB_IF_TYPE_OTHER = 1, + MIB_IF_TYPE_ETHERNET = 6, + MIB_IF_TYPE_TOKENRING = 9, + MIB_IF_TYPE_FDDI = 15, + MIB_IF_TYPE_PPP = 23, + MIB_IF_TYPE_LOOPBACK = 24, + MIB_IF_TYPE_SLIP = 28 +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/iprtrmib.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/iprtrmib.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,267 @@ +/***********************************************************************\ +* iprtrmib.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.iprtrmib; + +import win32.ipifcons; +private import win32.windef; + +// FIXME: check types of constants + +const size_t + MAXLEN_PHYSADDR = 8, + MAXLEN_IFDESCR = 256, + MAX_INTERFACE_NAME_LEN = 256; + +enum { + MIB_IPNET_TYPE_OTHER = 1, + MIB_IPNET_TYPE_INVALID, + MIB_IPNET_TYPE_DYNAMIC, + MIB_IPNET_TYPE_STATIC +} + +enum { + MIB_TCP_RTO_OTHER = 1, + MIB_TCP_RTO_CONSTANT, + MIB_TCP_RTO_RSRE, + MIB_TCP_RTO_VANJ +} + +enum { + MIB_TCP_STATE_CLOSED = 1, + MIB_TCP_STATE_LISTEN, + MIB_TCP_STATE_SYN_SENT, + MIB_TCP_STATE_SYN_RCVD, + MIB_TCP_STATE_ESTAB, + MIB_TCP_STATE_FIN_WAIT1, + MIB_TCP_STATE_FIN_WAIT2, + MIB_TCP_STATE_CLOSE_WAIT, + MIB_TCP_STATE_CLOSING, + MIB_TCP_STATE_LAST_ACK, + MIB_TCP_STATE_TIME_WAIT, + MIB_TCP_STATE_DELETE_TCB // = 12 +} + +const DWORD + MIB_USE_CURRENT_TTL = -1, + MIB_USE_CURRENT_FORWARDING = -1, + MIB_TCP_MAXCONN_DYNAMIC = -1; + +struct MIB_IPADDRROW { + DWORD dwAddr; + DWORD dwIndex; + DWORD dwMask; + DWORD dwBCastAddr; + DWORD dwReasmSize; + ushort unused1; + ushort unused2; +} +alias MIB_IPADDRROW* PMIB_IPADDRROW; + +struct MIB_IPADDRTABLE { + DWORD dwNumEntries; + MIB_IPADDRROW[1] _table; + + MIB_IPADDRROW* table() { return _table.ptr; } +} +alias MIB_IPADDRTABLE* PMIB_IPADDRTABLE; + +struct MIB_IPFORWARDROW { + DWORD dwForwardDest; + DWORD dwForwardMask; + DWORD dwForwardPolicy; + DWORD dwForwardNextHop; + DWORD dwForwardIfIndex; + DWORD dwForwardType; + DWORD dwForwardProto; + DWORD dwForwardAge; + DWORD dwForwardNextHopAS; + DWORD dwForwardMetric1; + DWORD dwForwardMetric2; + DWORD dwForwardMetric3; + DWORD dwForwardMetric4; + DWORD dwForwardMetric5; +} +alias MIB_IPFORWARDROW* PMIB_IPFORWARDROW; + +struct MIB_IPFORWARDTABLE { + DWORD dwNumEntries; + MIB_IPFORWARDROW[1] _table; + + MIB_IPFORWARDROW* table() { return _table.ptr; } +} +alias MIB_IPFORWARDTABLE* PMIB_IPFORWARDTABLE; + +struct MIB_IPNETROW { + DWORD dwIndex; + DWORD dwPhysAddrLen; + BYTE[MAXLEN_PHYSADDR] bPhysAddr; + DWORD dwAddr; + DWORD dwType; +} +alias MIB_IPNETROW* PMIB_IPNETROW; + +struct MIB_IPNETTABLE { + DWORD dwNumEntries; + MIB_IPNETROW[1] _table; + + MIB_IPNETROW* table() { return _table.ptr; } +} +alias MIB_IPNETTABLE* PMIB_IPNETTABLE; + +struct MIBICMPSTATS { + DWORD dwMsgs; + DWORD dwErrors; + DWORD dwDestUnreachs; + DWORD dwTimeExcds; + DWORD dwParmProbs; + DWORD dwSrcQuenchs; + DWORD dwRedirects; + DWORD dwEchos; + DWORD dwEchoReps; + DWORD dwTimestamps; + DWORD dwTimestampReps; + DWORD dwAddrMasks; + DWORD dwAddrMaskReps; +} +alias MIBICMPSTATS* PMIBICMPSTATS; + +struct MIBICMPINFO { + MIBICMPSTATS icmpInStats; + MIBICMPSTATS icmpOutStats; +} +alias MIBICMPINFO* PMIBICMPINFO; + +struct MIB_ICMP { + MIBICMPINFO stats; +} +alias MIB_ICMP* PMIB_ICMP; + +struct MIB_IFROW { + WCHAR[MAX_INTERFACE_NAME_LEN] wszName; + DWORD dwIndex; + DWORD dwType; + DWORD dwMtu; + DWORD dwSpeed; + DWORD dwPhysAddrLen; + BYTE[MAXLEN_PHYSADDR] bPhysAddr; + DWORD dwAdminStatus; + DWORD dwOperStatus; + DWORD dwLastChange; + DWORD dwInOctets; + DWORD dwInUcastPkts; + DWORD dwInNUcastPkts; + DWORD dwInDiscards; + DWORD dwInErrors; + DWORD dwInUnknownProtos; + DWORD dwOutOctets; + DWORD dwOutUcastPkts; + DWORD dwOutNUcastPkts; + DWORD dwOutDiscards; + DWORD dwOutErrors; + DWORD dwOutQLen; + DWORD dwDescrLen; + BYTE[MAXLEN_IFDESCR] bDescr; +} +alias MIB_IFROW* PMIB_IFROW; + +struct MIB_IFTABLE { + DWORD dwNumEntries; + MIB_IFROW[1] _table; + + MIB_IFROW* table() { return _table.ptr; } +} +alias MIB_IFTABLE* PMIB_IFTABLE; + +struct MIB_IPSTATS { + DWORD dwForwarding; + DWORD dwDefaultTTL; + DWORD dwInReceives; + DWORD dwInHdrErrors; + DWORD dwInAddrErrors; + DWORD dwForwDatagrams; + DWORD dwInUnknownProtos; + DWORD dwInDiscards; + DWORD dwInDelivers; + DWORD dwOutRequests; + DWORD dwRoutingDiscards; + DWORD dwOutDiscards; + DWORD dwOutNoRoutes; + DWORD dwReasmTimeout; + DWORD dwReasmReqds; + DWORD dwReasmOks; + DWORD dwReasmFails; + DWORD dwFragOks; + DWORD dwFragFails; + DWORD dwFragCreates; + DWORD dwNumIf; + DWORD dwNumAddr; + DWORD dwNumRoutes; +} +alias MIB_IPSTATS* PMIB_IPSTATS; + +struct MIB_TCPSTATS { + DWORD dwRtoAlgorithm; + DWORD dwRtoMin; + DWORD dwRtoMax; + DWORD dwMaxConn; + DWORD dwActiveOpens; + DWORD dwPassiveOpens; + DWORD dwAttemptFails; + DWORD dwEstabResets; + DWORD dwCurrEstab; + DWORD dwInSegs; + DWORD dwOutSegs; + DWORD dwRetransSegs; + DWORD dwInErrs; + DWORD dwOutRsts; + DWORD dwNumConns; +} +alias MIB_TCPSTATS* PMIB_TCPSTATS; + +struct MIB_TCPROW { + DWORD dwState; + DWORD dwLocalAddr; + DWORD dwLocalPort; + DWORD dwRemoteAddr; + DWORD dwRemotePort; +} +alias MIB_TCPROW* PMIB_TCPROW; + +struct MIB_TCPTABLE { + DWORD dwNumEntries; + MIB_TCPROW[1] _table; + + MIB_TCPROW* table() { return _table.ptr; } +} +alias MIB_TCPTABLE* PMIB_TCPTABLE; + +struct MIB_UDPSTATS { + DWORD dwInDatagrams; + DWORD dwNoPorts; + DWORD dwInErrors; + DWORD dwOutDatagrams; + DWORD dwNumAddrs; +} +alias MIB_UDPSTATS* PMIB_UDPSTATS; + +struct MIB_UDPROW { + DWORD dwLocalAddr; + DWORD dwLocalPort; +} +alias MIB_UDPROW* PMIB_UDPROW; + +struct MIB_UDPTABLE { + DWORD dwNumEntries; + MIB_UDPROW[1] _table; + + MIB_UDPROW* table() { return _table.ptr; } +} +alias MIB_UDPTABLE* PMIB_UDPTABLE; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/iptypes.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/iptypes.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,100 @@ +/***********************************************************************\ +* iptypes.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.iptypes; + +import win32.windef; +version(Tango){ + private import tango.stdc.time; +}else{ + private import std.c.time; +} +//#include + +const size_t + DEFAULT_MINIMUM_ENTITIES = 32, + MAX_ADAPTER_ADDRESS_LENGTH = 8, + MAX_ADAPTER_DESCRIPTION_LENGTH = 128, + MAX_ADAPTER_NAME_LENGTH = 256, + MAX_DOMAIN_NAME_LEN = 128, + MAX_HOSTNAME_LEN = 128, + MAX_SCOPE_ID_LEN = 256; + +const UINT + BROADCAST_NODETYPE = 1, + PEER_TO_PEER_NODETYPE = 2, + MIXED_NODETYPE = 4, + HYBRID_NODETYPE = 8; + +enum : UINT { + IF_OTHER_ADAPTERTYPE, + IF_ETHERNET_ADAPTERTYPE, + IF_TOKEN_RING_ADAPTERTYPE, + IF_FDDI_ADAPTERTYPE, + IF_PPP_ADAPTERTYPE, + IF_LOOPBACK_ADAPTERTYPE // = 5 +} + +struct IP_ADDRESS_STRING { + char[16] String; +} +alias IP_ADDRESS_STRING IP_MASK_STRING; +alias IP_ADDRESS_STRING* PIP_ADDRESS_STRING, PIP_MASK_STRING; + +struct IP_ADDR_STRING { + IP_ADDR_STRING* Next; + IP_ADDRESS_STRING IpAddress; + IP_MASK_STRING IpMask; + DWORD Context; +} +alias IP_ADDR_STRING* PIP_ADDR_STRING; + +struct IP_ADAPTER_INFO { + IP_ADAPTER_INFO* Next; + DWORD ComboIndex; + char[MAX_ADAPTER_NAME_LENGTH+4] AdapterName; + char[MAX_ADAPTER_DESCRIPTION_LENGTH+4] Description; + UINT AddressLength; + BYTE[MAX_ADAPTER_ADDRESS_LENGTH] Address; + DWORD Index; + UINT Type; + UINT DhcpEnabled; + PIP_ADDR_STRING CurrentIpAddress; + IP_ADDR_STRING IpAddressList; + IP_ADDR_STRING GatewayList; + IP_ADDR_STRING DhcpServer; + BOOL HaveWins; + IP_ADDR_STRING PrimaryWinsServer; + IP_ADDR_STRING SecondaryWinsServer; + time_t LeaseObtained; + time_t LeaseExpires; +} +alias IP_ADAPTER_INFO* PIP_ADAPTER_INFO; + +struct IP_PER_ADAPTER_INFO { + UINT AutoconfigEnabled; + UINT AutoconfigActive; + PIP_ADDR_STRING CurrentDnsServer; + IP_ADDR_STRING DnsServerList; +} +alias IP_PER_ADAPTER_INFO* PIP_PER_ADAPTER_INFO; + +struct FIXED_INFO { + char[MAX_HOSTNAME_LEN+4] HostName; + char[MAX_DOMAIN_NAME_LEN+4] DomainName; + PIP_ADDR_STRING CurrentDnsServer; + IP_ADDR_STRING DnsServerList; + UINT NodeType; + char[MAX_SCOPE_ID_LEN+4] ScopeId; + UINT EnableRouting; + UINT EnableProxy; + UINT EnableDns; +} +alias FIXED_INFO* PFIXED_INFO; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/isguids.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/isguids.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,17 @@ +/***********************************************************************\ +* isguids.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.isguids; + +private import win32.basetyps; + +extern (C) extern const GUID + CLSID_InternetShortcut, + IID_IUniformResourceLocator; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lm.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lm.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,52 @@ +/***********************************************************************\ +* lm.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lm; + +version (WindowsVista) { + version = WIN32_WINNT_ONLY; +} else version (Windows2003) { + version = WIN32_WINNT_ONLY; +} else version (WindowsXP) { + version = WIN32_WINNT_ONLY; +} else version (WindowsNTonly) { + version = WIN32_WINNT_ONLY; +} + +public import win32.lmcons; +public import win32.lmaccess; +public import win32.lmalert; +public import win32.lmat; +public import win32.lmerr; +public import win32.lmshare; +public import win32.lmapibuf; +public import win32.lmremutl; +public import win32.lmrepl; +public import win32.lmuse; +public import win32.lmstats; + +version (WIN32_WINNT_ONLY) { + public import win32.lmwksta; + public import win32.lmserver; +} +version (WindowsVista) { + public import win32.lmmsg; +} else version (Windows2003) { + public import win32.lmmsg; +} else version (WindowsXP) { + public import win32.lmmsg; +} + +// FIXME: Everything in these next files seems to be deprecated! +import win32.lmaudit; +import win32.lmchdev; // can't find many docs for functions from this file. +import win32.lmconfig; +import win32.lmerrlog; +import win32.lmsvc; +import win32.lmsname; // in MinGW, this was publicly included by lm.lmsvc diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmaccess.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmaccess.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,759 @@ +/***********************************************************************\ +* lmaccess.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmaccess; +pragma(lib, "netapi32.lib"); + +/** + Changes relative to MinGW: + USER_POSIX_ID_PARMNUM and GROUP_POSIX_ID_PARMNUM aren't in MinGW or in + the Platform SDK docs, so they have been dropped from this file. +*/ + +private import win32.lmcons, win32.windef; + +const wchar[] + GROUP_SPECIALGRP_USERS = "USERS", + GROUP_SPECIALGRP_ADMINS = "ADMINS", + GROUP_SPECIALGRP_GUESTS = "GUESTS", + GROUP_SPECIALGRP_LOCAL = "LOCAL"; + +const ACCESS_LETTERS = "RWCXDAP "; + +const NETLOGON_CONTROL_QUERY=1; +const NETLOGON_CONTROL_REPLICATE=2; +const NETLOGON_CONTROL_SYNCHRONIZE=3; +const NETLOGON_CONTROL_PDC_REPLICATE=4; +const NETLOGON_CONTROL_REDISCOVER=5; +const NETLOGON_CONTROL_TC_QUERY=6; +const NETLOGON_CONTROL_BACKUP_CHANGE_LOG=65532; +const NETLOGON_CONTROL_TRUNCATE_LOG=65533; +const NETLOGON_CONTROL_SET_DBFLAG=65534; +const NETLOGON_CONTROL_BREAKPOINT=65535; + +const UF_SCRIPT=1; +const UF_ACCOUNTDISABLE=2; +const UF_HOMEDIR_REQUIRED=8; +const UF_LOCKOUT=16; +const UF_PASSWD_NOTREQD=32; +const UF_PASSWD_CANT_CHANGE=64; +const UF_TEMP_DUPLICATE_ACCOUNT=256; +const UF_NORMAL_ACCOUNT=512; +const UF_INTERDOMAIN_TRUST_ACCOUNT=2048; +const UF_WORKSTATION_TRUST_ACCOUNT=4096; +const UF_SERVER_TRUST_ACCOUNT=8192; +const UF_MNS_LOGON_ACCOUNT=131072; +const UF_MACHINE_ACCOUNT_MASK=UF_INTERDOMAIN_TRUST_ACCOUNT|UF_WORKSTATION_TRUST_ACCOUNT|UF_SERVER_TRUST_ACCOUNT; +const UF_ACCOUNT_TYPE_MASK=UF_TEMP_DUPLICATE_ACCOUNT|UF_NORMAL_ACCOUNT|UF_INTERDOMAIN_TRUST_ACCOUNT|UF_WORKSTATION_TRUST_ACCOUNT|UF_SERVER_TRUST_ACCOUNT; +const UF_DONT_EXPIRE_PASSWD=65536; +const UF_SETTABLE_BITS=UF_SCRIPT|UF_ACCOUNTDISABLE|UF_LOCKOUT|UF_HOMEDIR_REQUIRED|UF_PASSWD_NOTREQD|UF_PASSWD_CANT_CHANGE|UF_ACCOUNT_TYPE_MASK|UF_DONT_EXPIRE_PASSWD; + +const FILTER_TEMP_DUPLICATE_ACCOUNT=1; +const FILTER_NORMAL_ACCOUNT=2; +const FILTER_INTERDOMAIN_TRUST_ACCOUNT=8; +const FILTER_WORKSTATION_TRUST_ACCOUNT=16; +const FILTER_SERVER_TRUST_ACCOUNT=32; + +const LG_INCLUDE_INDIRECT=1; + +const AF_OP_PRINT=1; +const AF_OP_COMM=2; +const AF_OP_SERVER=4; +const AF_OP_ACCOUNTS=8; +const AF_SETTABLE_BITS=(AF_OP_PRINT|AF_OP_COMM|AF_OP_SERVER|AF_OP_ACCOUNTS); + +const UAS_ROLE_STANDALONE=0; +const UAS_ROLE_MEMBER=1; +const UAS_ROLE_BACKUP=2; +const UAS_ROLE_PRIMARY=3; + +const USER_NAME_PARMNUM=1; +const USER_PASSWORD_PARMNUM=3; +const USER_PASSWORD_AGE_PARMNUM=4; +const USER_PRIV_PARMNUM=5; +const USER_HOME_DIR_PARMNUM=6; +const USER_COMMENT_PARMNUM=7; +const USER_FLAGS_PARMNUM=8; +const USER_SCRIPT_PATH_PARMNUM=9; +const USER_AUTH_FLAGS_PARMNUM=10; +const USER_FULL_NAME_PARMNUM=11; +const USER_USR_COMMENT_PARMNUM=12; +const USER_PARMS_PARMNUM=13; +const USER_WORKSTATIONS_PARMNUM=14; +const USER_LAST_LOGON_PARMNUM=15; +const USER_LAST_LOGOFF_PARMNUM=16; +const USER_ACCT_EXPIRES_PARMNUM=17; +const USER_MAX_STORAGE_PARMNUM=18; +const USER_UNITS_PER_WEEK_PARMNUM=19; +const USER_LOGON_HOURS_PARMNUM=20; +const USER_PAD_PW_COUNT_PARMNUM=21; +const USER_NUM_LOGONS_PARMNUM=22; +const USER_LOGON_SERVER_PARMNUM=23; +const USER_COUNTRY_CODE_PARMNUM=24; +const USER_CODE_PAGE_PARMNUM=25; +const USER_PRIMARY_GROUP_PARMNUM=51; +const USER_PROFILE=52; +const USER_PROFILE_PARMNUM=52; +const USER_HOME_DIR_DRIVE_PARMNUM=53; + +const USER_NAME_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_NAME_PARMNUM; +const USER_PASSWORD_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_PASSWORD_PARMNUM; +const USER_PASSWORD_AGE_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_PASSWORD_AGE_PARMNUM; +const USER_PRIV_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_PRIV_PARMNUM; +const USER_HOME_DIR_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_HOME_DIR_PARMNUM; +const USER_COMMENT_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_COMMENT_PARMNUM; +const USER_FLAGS_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_FLAGS_PARMNUM; +const USER_SCRIPT_PATH_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_SCRIPT_PATH_PARMNUM; +const USER_AUTH_FLAGS_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_AUTH_FLAGS_PARMNUM; +const USER_FULL_NAME_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_FULL_NAME_PARMNUM; +const USER_USR_COMMENT_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_USR_COMMENT_PARMNUM; +const USER_PARMS_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_PARMS_PARMNUM; +const USER_WORKSTATIONS_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_WORKSTATIONS_PARMNUM; +const USER_LAST_LOGON_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_LAST_LOGON_PARMNUM; +const USER_LAST_LOGOFF_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_LAST_LOGOFF_PARMNUM; +const USER_ACCT_EXPIRES_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_ACCT_EXPIRES_PARMNUM; +const USER_MAX_STORAGE_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_MAX_STORAGE_PARMNUM; +const USER_UNITS_PER_WEEK_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_UNITS_PER_WEEK_PARMNUM; +const USER_LOGON_HOURS_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_LOGON_HOURS_PARMNUM; +const USER_PAD_PW_COUNT_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_PAD_PW_COUNT_PARMNUM; +const USER_NUM_LOGONS_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_NUM_LOGONS_PARMNUM; +const USER_LOGON_SERVER_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_LOGON_SERVER_PARMNUM; +const USER_COUNTRY_CODE_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_COUNTRY_CODE_PARMNUM; +const USER_CODE_PAGE_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_CODE_PAGE_PARMNUM; +const USER_PRIMARY_GROUP_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_PRIMARY_GROUP_PARMNUM; +// USER_POSIX_ID_PARMNUM isn't in MinGW or in the Platform SDK docs. +//const USER_POSIX_ID_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_POSIX_ID_PARMNUM; +const USER_HOME_DIR_DRIVE_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+USER_HOME_DIR_DRIVE_PARMNUM; + +const NULL_USERSETINFO_PASSWD=" "; +const ULONG TIMEQ_FOREVER=-1; +const ULONG USER_MAXSTORAGE_UNLIMITED=-1; +const ULONG USER_NO_LOGOFF=-1; +const UNITS_PER_DAY=24; +const UNITS_PER_WEEK=168; +const USER_PRIV_MASK=3; +const USER_PRIV_GUEST=0; +const USER_PRIV_USER=1; +const USER_PRIV_ADMIN=2; +const MAX_PASSWD_LEN=PWLEN; +const DEF_MIN_PWLEN=6; +const DEF_PWUNIQUENESS=5; +const DEF_MAX_PWHIST=8; +const DEF_MAX_PWAGE=TIMEQ_FOREVER; +const DEF_MIN_PWAGE=0; +const ULONG DEF_FORCE_LOGOFF=0xffffffff; +const DEF_MAX_BADPW=0; +const ONE_DAY=86400; +const VALIDATED_LOGON=0; +const PASSWORD_EXPIRED=2; +const NON_VALIDATED_LOGON=3; +const VALID_LOGOFF=1; + +const MODALS_MIN_PASSWD_LEN_PARMNUM=1; +const MODALS_MAX_PASSWD_AGE_PARMNUM=2; +const MODALS_MIN_PASSWD_AGE_PARMNUM=3; +const MODALS_FORCE_LOGOFF_PARMNUM=4; +const MODALS_PASSWD_HIST_LEN_PARMNUM=5; +const MODALS_ROLE_PARMNUM=6; +const MODALS_PRIMARY_PARMNUM=7; +const MODALS_DOMAIN_NAME_PARMNUM=8; +const MODALS_DOMAIN_ID_PARMNUM=9; +const MODALS_LOCKOUT_DURATION_PARMNUM=10; +const MODALS_LOCKOUT_OBSERVATION_WINDOW_PARMNUM=11; +const MODALS_LOCKOUT_THRESHOLD_PARMNUM=12; + +const MODALS_MIN_PASSWD_LEN_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+MODALS_MIN_PASSWD_LEN_PARMNUM); +const MODALS_MAX_PASSWD_AGE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+MODALS_MAX_PASSWD_AGE_PARMNUM); +const MODALS_MIN_PASSWD_AGE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+MODALS_MIN_PASSWD_AGE_PARMNUM); +const MODALS_FORCE_LOGOFF_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+MODALS_FORCE_LOGOFF_PARMNUM); +const MODALS_PASSWD_HIST_LEN_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+MODALS_PASSWD_HIST_LEN_PARMNUM); +const MODALS_ROLE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+MODALS_ROLE_PARMNUM); +const MODALS_PRIMARY_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+MODALS_PRIMARY_PARMNUM); +const MODALS_DOMAIN_NAME_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+MODALS_DOMAIN_NAME_PARMNUM); +const MODALS_DOMAIN_ID_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+MODALS_DOMAIN_ID_PARMNUM); + +const GROUPIDMASK=0x8000; +const GROUP_ALL_PARMNUM=0; +const GROUP_NAME_PARMNUM=1; +const GROUP_COMMENT_PARMNUM=2; +const GROUP_ATTRIBUTES_PARMNUM=3; + +const GROUP_ALL_INFOLEVEL = PARMNUM_BASE_INFOLEVEL + GROUP_ALL_PARMNUM; +const GROUP_NAME_INFOLEVEL = PARMNUM_BASE_INFOLEVEL + GROUP_NAME_PARMNUM; +const GROUP_COMMENT_INFOLEVEL = PARMNUM_BASE_INFOLEVEL + GROUP_COMMENT_PARMNUM; +const GROUP_ATTRIBUTES_INFOLEVEL = PARMNUM_BASE_INFOLEVEL + GROUP_ATTRIBUTES_PARMNUM; +// GROUP_POSIX_ID_PARMNUM isn't in MinGW or in the Platform SDK docs. +//const GROUP_POSIX_ID_INFOLEVEL = PARMNUM_BASE_INFOLEVEL + GROUP_POSIX_ID_PARMNUM; + +const LOCALGROUP_NAME_PARMNUM=1; +const LOCALGROUP_COMMENT_PARMNUM=2; +const MAXPERMENTRIES=64; +const ACCESS_NONE=0; +const ACCESS_READ=1; +const ACCESS_WRITE=2; +const ACCESS_CREATE=4; +const ACCESS_EXEC=8; +const ACCESS_DELETE=16; +const ACCESS_ATRIB=32; +const ACCESS_PERM=64; +const ACCESS_ALL = ACCESS_READ|ACCESS_WRITE|ACCESS_CREATE|ACCESS_EXEC|ACCESS_DELETE|ACCESS_ATRIB|ACCESS_PERM; +const ACCESS_GROUP=0x8000; +const ACCESS_AUDIT=1; +const ACCESS_SUCCESS_OPEN=16; +const ACCESS_SUCCESS_WRITE=32; +const ACCESS_SUCCESS_DELETE=64; +const ACCESS_SUCCESS_ACL=128; +const ACCESS_SUCCESS_MASK=240; +const ACCESS_FAIL_OPEN=256; +const ACCESS_FAIL_WRITE=512; +const ACCESS_FAIL_DELETE=1024; +const ACCESS_FAIL_ACL=2048; +const ACCESS_FAIL_MASK=3840; +const ACCESS_FAIL_SHIFT=4; +const ACCESS_RESOURCE_NAME_PARMNUM=1; +const ACCESS_ATTR_PARMNUM=2; +const ACCESS_COUNT_PARMNUM=3; +const ACCESS_ACCESS_LIST_PARMNUM=4; + +const ACCESS_RESOURCE_NAME_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+ACCESS_RESOURCE_NAME_PARMNUM); +const ACCESS_ATTR_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+ACCESS_ATTR_PARMNUM); +const ACCESS_COUNT_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+ACCESS_COUNT_PARMNUM); +const ACCESS_ACCESS_LIST_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+ACCESS_ACCESS_LIST_PARMNUM); + +const NETLOGON_REPLICATION_NEEDED=1; +const NETLOGON_REPLICATION_IN_PROGRESS=2; +const NETLOGON_FULL_SYNC_REPLICATION=4; +const NETLOGON_REDO_NEEDED=8; + +struct USER_INFO_0 { + LPWSTR usri0_name; +} +alias USER_INFO_0* PUSER_INFO_0, LPUSER_INFO_0; + +struct USER_INFO_1{ + LPWSTR usri1_name; + LPWSTR usri1_password; + DWORD usri1_password_age; + DWORD usri1_priv; + LPWSTR usri1_home_dir; + LPWSTR usri1_comment; + DWORD usri1_flags; + LPWSTR usri1_script_path; +} +alias USER_INFO_1* PUSER_INFO_1, LPUSER_INFO_1; + +struct USER_INFO_2{ + LPWSTR usri2_name; + LPWSTR usri2_password; + DWORD usri2_password_age; + DWORD usri2_priv; + LPWSTR usri2_home_dir; + LPWSTR usri2_comment; + DWORD usri2_flags; + LPWSTR usri2_script_path; + DWORD usri2_auth_flags; + LPWSTR usri2_full_name; + LPWSTR usri2_usr_comment; + LPWSTR usri2_parms; + LPWSTR usri2_workstations; + DWORD usri2_last_logon; + DWORD usri2_last_logoff; + DWORD usri2_acct_expires; + DWORD usri2_max_storage; + DWORD usri2_units_per_week; + PBYTE usri2_logon_hours; + DWORD usri2_bad_pw_count; + DWORD usri2_num_logons; + LPWSTR usri2_logon_server; + DWORD usri2_country_code; + DWORD usri2_code_page; +} +alias USER_INFO_2* PUSER_INFO_2, LPUSER_INFO_2; + +struct USER_INFO_3{ + LPWSTR usri3_name; + LPWSTR usri3_password; + DWORD usri3_password_age; + DWORD usri3_priv; + LPWSTR usri3_home_dir; + LPWSTR usri3_comment; + DWORD usri3_flags; + LPWSTR usri3_script_path; + DWORD usri3_auth_flags; + LPWSTR usri3_full_name; + LPWSTR usri3_usr_comment; + LPWSTR usri3_parms; + LPWSTR usri3_workstations; + DWORD usri3_last_logon; + DWORD usri3_last_logoff; + DWORD usri3_acct_expires; + DWORD usri3_max_storage; + DWORD usri3_units_per_week; + PBYTE usri3_logon_hours; + DWORD usri3_bad_pw_count; + DWORD usri3_num_logons; + LPWSTR usri3_logon_server; + DWORD usri3_country_code; + DWORD usri3_code_page; + DWORD usri3_user_id; + DWORD usri3_primary_group_id; + LPWSTR usri3_profile; + LPWSTR usri3_home_dir_drive; + DWORD usri3_password_expired; +} +alias USER_INFO_3* PUSER_INFO_3, LPUSER_INFO_3; + +struct USER_INFO_10{ + LPWSTR usri10_name; + LPWSTR usri10_comment; + LPWSTR usri10_usr_comment; + LPWSTR usri10_full_name; +} +alias USER_INFO_10* PUSER_INFO_10, LPUSER_INFO_10; + +struct USER_INFO_11{ + LPWSTR usri11_name; + LPWSTR usri11_comment; + LPWSTR usri11_usr_comment; + LPWSTR usri11_full_name; + DWORD usri11_priv; + DWORD usri11_auth_flags; + DWORD usri11_password_age; + LPWSTR usri11_home_dir; + LPWSTR usri11_parms; + DWORD usri11_last_logon; + DWORD usri11_last_logoff; + DWORD usri11_bad_pw_count; + DWORD usri11_num_logons; + LPWSTR usri11_logon_server; + DWORD usri11_country_code; + LPWSTR usri11_workstations; + DWORD usri11_max_storage; + DWORD usri11_units_per_week; + PBYTE usri11_logon_hours; + DWORD usri11_code_page; +} +alias USER_INFO_11* PUSER_INFO_11, LPUSER_INFO_11; + +struct USER_INFO_20 { + LPWSTR usri20_name; + LPWSTR usri20_full_name; + LPWSTR usri20_comment; + DWORD usri20_flags; + DWORD usri20_user_id; +} +alias USER_INFO_20* PUSER_INFO_20, LPUSER_INFO_20; + +struct USER_INFO_21 { + BYTE usri21_password[ENCRYPTED_PWLEN]; +} +alias USER_INFO_21* PUSER_INFO_21, LPUSER_INFO_21; + +struct USER_INFO_22{ + LPWSTR usri22_name; + BYTE usri22_password[ENCRYPTED_PWLEN]; + DWORD usri22_password_age; + DWORD usri22_priv; + LPWSTR usri22_home_dir; + LPWSTR usri22_comment; + DWORD usri22_flags; + LPWSTR usri22_script_path; + DWORD usri22_auth_flags; + LPWSTR usri22_full_name; + LPWSTR usri22_usr_comment; + LPWSTR usri22_parms; + LPWSTR usri22_workstations; + DWORD usri22_last_logon; + DWORD usri22_last_logoff; + DWORD usri22_acct_expires; + DWORD usri22_max_storage; + DWORD usri22_units_per_week; + PBYTE usri22_logon_hours; + DWORD usri22_bad_pw_count; + DWORD usri22_num_logons; + LPWSTR usri22_logon_server; + DWORD usri22_country_code; + DWORD usri22_code_page; +} +alias USER_INFO_22* PUSER_INFO_22, LPUSER_INFO_22; + +struct USER_INFO_1003{ + LPWSTR usri1003_password; +} +alias USER_INFO_1003* PUSER_INFO_1003, LPUSER_INFO_1003; + +struct USER_INFO_1005{ + DWORD usri1005_priv; +} +alias USER_INFO_1005* PUSER_INFO_1005, LPUSER_INFO_1005; + +struct USER_INFO_1006{ + LPWSTR usri1006_home_dir; +} +alias USER_INFO_1006* PUSER_INFO_1006, LPUSER_INFO_1006; + +struct USER_INFO_1007{ + LPWSTR usri1007_comment; +} +alias USER_INFO_1007* PUSER_INFO_1007, LPUSER_INFO_1007; + +struct USER_INFO_1008{ + DWORD usri1008_flags; +} +alias USER_INFO_1008* PUSER_INFO_1008, LPUSER_INFO_1008; + +struct USER_INFO_1009{ + LPWSTR usri1009_script_path; +} +alias USER_INFO_1009* PUSER_INFO_1009, LPUSER_INFO_1009; + +struct USER_INFO_1010{ + DWORD usri1010_auth_flags; +} +alias USER_INFO_1010* PUSER_INFO_1010, LPUSER_INFO_1010; + +struct USER_INFO_1011{ + LPWSTR usri1011_full_name; +} +alias USER_INFO_1011* PUSER_INFO_1011, LPUSER_INFO_1011; + +struct USER_INFO_1012{ + LPWSTR usri1012_usr_comment; +} +alias USER_INFO_1012* PUSER_INFO_1012, LPUSER_INFO_1012; + +struct USER_INFO_1013{ + LPWSTR usri1013_parms; +} +alias USER_INFO_1013* PUSER_INFO_1013, LPUSER_INFO_1013; + +struct USER_INFO_1014{ + LPWSTR usri1014_workstations; +} +alias USER_INFO_1014* PUSER_INFO_1014, LPUSER_INFO_1014; + +struct USER_INFO_1017{ + DWORD usri1017_acct_expires; +} +alias USER_INFO_1017* PUSER_INFO_1017, LPUSER_INFO_1017; + +struct USER_INFO_1018{ + DWORD usri1018_max_storage; +} +alias USER_INFO_1018* PUSER_INFO_1018, LPUSER_INFO_1018; + +struct USER_INFO_1020{ + DWORD usri1020_units_per_week; + PBYTE usri1020_logon_hours; +} +alias USER_INFO_1020* PUSER_INFO_1020, LPUSER_INFO_1020; + +struct USER_INFO_1023{ + LPWSTR usri1023_logon_server; +} +alias USER_INFO_1023* PUSER_INFO_1023, LPUSER_INFO_1023; + +struct USER_INFO_1024{ + DWORD usri1024_country_code; +} +alias USER_INFO_1024* PUSER_INFO_1024, LPUSER_INFO_1024; + +struct USER_INFO_1025{ + DWORD usri1025_code_page; +} +alias USER_INFO_1025* PUSER_INFO_1025, LPUSER_INFO_1025; + +struct USER_INFO_1051{ + DWORD usri1051_primary_group_id; +} +alias USER_INFO_1051* PUSER_INFO_1051, LPUSER_INFO_1051; + +struct USER_INFO_1052{ + LPWSTR usri1052_profile; +} +alias USER_INFO_1052* PUSER_INFO_1052, LPUSER_INFO_1052; + +struct USER_INFO_1053{ + LPWSTR usri1053_home_dir_drive; +} +alias USER_INFO_1053* PUSER_INFO_1053, LPUSER_INFO_1053; + +struct USER_MODALS_INFO_0{ + DWORD usrmod0_min_passwd_len; + DWORD usrmod0_max_passwd_age; + DWORD usrmod0_min_passwd_age; + DWORD usrmod0_force_logoff; + DWORD usrmod0_password_hist_len; +} +alias USER_MODALS_INFO_0* PUSER_MODALS_INFO_0, LPUSER_MODALS_INFO_0; + +struct USER_MODALS_INFO_1{ + DWORD usrmod1_role; + LPWSTR usrmod1_primary; +} +alias USER_MODALS_INFO_1* PUSER_MODALS_INFO_1, LPUSER_MODALS_INFO_1; + +struct USER_MODALS_INFO_2{ + LPWSTR usrmod2_domain_name; + PSID usrmod2_domain_id; +} +alias USER_MODALS_INFO_2* PUSER_MODALS_INFO_2, LPUSER_MODALS_INFO_2; + +struct USER_MODALS_INFO_3{ + DWORD usrmod3_lockout_duration; + DWORD usrmod3_lockout_observation_window; + DWORD usrmod3_lockout_threshold; +} +alias USER_MODALS_INFO_3* PUSER_MODALS_INFO_3, LPUSER_MODALS_INFO_3; + +struct USER_MODALS_INFO_1001{ + DWORD usrmod1001_min_passwd_len; +} +alias USER_MODALS_INFO_1001* PUSER_MODALS_INFO_1001, LPUSER_MODALS_INFO_1001; + +struct USER_MODALS_INFO_1002{ + DWORD usrmod1002_max_passwd_age; +} +alias USER_MODALS_INFO_1002* PUSER_MODALS_INFO_1002, LPUSER_MODALS_INFO_1002; + +struct USER_MODALS_INFO_1003{ + DWORD usrmod1003_min_passwd_age; +} +alias USER_MODALS_INFO_1003* PUSER_MODALS_INFO_1003, LPUSER_MODALS_INFO_1003; + +struct USER_MODALS_INFO_1004{ + DWORD usrmod1004_force_logoff; +} +alias USER_MODALS_INFO_1004* PUSER_MODALS_INFO_1004, LPUSER_MODALS_INFO_1004; + +struct USER_MODALS_INFO_1005{ + DWORD usrmod1005_password_hist_len; +} +alias USER_MODALS_INFO_1005* PUSER_MODALS_INFO_1005, LPUSER_MODALS_INFO_1005; + +struct USER_MODALS_INFO_1006{ + DWORD usrmod1006_role; +} +alias USER_MODALS_INFO_1006* PUSER_MODALS_INFO_1006, LPUSER_MODALS_INFO_1006; + +struct USER_MODALS_INFO_1007{ + LPWSTR usrmod1007_primary; +} +alias USER_MODALS_INFO_1007* PUSER_MODALS_INFO_1007, LPUSER_MODALS_INFO_1007; + +struct GROUP_INFO_0{ + LPWSTR grpi0_name; +} +alias GROUP_INFO_0* PGROUP_INFO_0, LPGROUP_INFO_0; + +struct GROUP_INFO_1{ + LPWSTR grpi1_name; + LPWSTR grpi1_comment; +} +alias GROUP_INFO_1* PGROUP_INFO_1, LPGROUP_INFO_1; + +struct GROUP_INFO_2{ + LPWSTR grpi2_name; + LPWSTR grpi2_comment; + DWORD grpi2_group_id; + DWORD grpi2_attributes; +} +alias GROUP_INFO_2* PGROUP_INFO_2; + +struct GROUP_INFO_1002{ + LPWSTR grpi1002_comment; +} +alias GROUP_INFO_1002* PGROUP_INFO_1002, LPGROUP_INFO_1002; + +struct GROUP_INFO_1005{ + DWORD grpi1005_attributes; +} +alias GROUP_INFO_1005* PGROUP_INFO_1005, LPGROUP_INFO_1005; + +struct GROUP_USERS_INFO_0{ + LPWSTR grui0_name; +} +alias GROUP_USERS_INFO_0* PGROUP_USERS_INFO_0, LPGROUP_USERS_INFO_0; + +struct GROUP_USERS_INFO_1{ + LPWSTR grui1_name; + DWORD grui1_attributes; +} +alias GROUP_USERS_INFO_1* PGROUP_USERS_INFO_1, LPGROUP_USERS_INFO_1; + +struct LOCALGROUP_INFO_0{ + LPWSTR lgrpi0_name; +} +alias LOCALGROUP_INFO_0* PLOCALGROUP_INFO_0, LPLOCALGROUP_INFO_0; + +struct LOCALGROUP_INFO_1{ + LPWSTR lgrpi1_name; + LPWSTR lgrpi1_comment; +} +alias LOCALGROUP_INFO_1* PLOCALGROUP_INFO_1, LPLOCALGROUP_INFO_1; + +struct LOCALGROUP_INFO_1002{ + LPWSTR lgrpi1002_comment; +} +alias LOCALGROUP_INFO_1002* PLOCALGROUP_INFO_1002, LPLOCALGROUP_INFO_1002; + +struct LOCALGROUP_MEMBERS_INFO_0{ + PSID lgrmi0_sid; +} +alias LOCALGROUP_MEMBERS_INFO_0* PLOCALGROUP_MEMBERS_INFO_0, LPLOCALGROUP_MEMBERS_INFO_0; + +struct LOCALGROUP_MEMBERS_INFO_1{ + PSID lgrmi1_sid; + SID_NAME_USE lgrmi1_sidusage; + LPWSTR lgrmi1_name; +} +alias LOCALGROUP_MEMBERS_INFO_1* PLOCALGROUP_MEMBERS_INFO_1, LPLOCALGROUP_MEMBERS_INFO_1; + +struct LOCALGROUP_MEMBERS_INFO_2{ + PSID lgrmi2_sid; + SID_NAME_USE lgrmi2_sidusage; + LPWSTR lgrmi2_domainandname; +} +alias LOCALGROUP_MEMBERS_INFO_2* PLOCALGROUP_MEMBERS_INFO_2, LPLOCALGROUP_MEMBERS_INFO_2; + +struct LOCALGROUP_MEMBERS_INFO_3{ + LPWSTR lgrmi3_domainandname; +} +alias LOCALGROUP_MEMBERS_INFO_3* PLOCALGROUP_MEMBERS_INFO_3, LPLOCALGROUP_MEMBERS_INFO_3; + +struct LOCALGROUP_USERS_INFO_0{ + LPWSTR lgrui0_name; +} +alias LOCALGROUP_USERS_INFO_0* PLOCALGROUP_USERS_INFO_0, LPLOCALGROUP_USERS_INFO_0; + +struct NET_DISPLAY_USER{ + LPWSTR usri1_name; + LPWSTR usri1_comment; + DWORD usri1_flags; + LPWSTR usri1_full_name; + DWORD usri1_user_id; + DWORD usri1_next_index; +} +alias NET_DISPLAY_USER* PNET_DISPLAY_USER; + +struct NET_DISPLAY_MACHINE{ + LPWSTR usri2_name; + LPWSTR usri2_comment; + DWORD usri2_flags; + DWORD usri2_user_id; + DWORD usri2_next_index; +} +alias NET_DISPLAY_MACHINE* PNET_DISPLAY_MACHINE; + +struct NET_DISPLAY_GROUP{ + LPWSTR grpi3_name; + LPWSTR grpi3_comment; + DWORD grpi3_group_id; + DWORD grpi3_attributes; + DWORD grpi3_next_index; +} +alias NET_DISPLAY_GROUP* PNET_DISPLAY_GROUP; + +struct ACCESS_INFO_0{ + LPTSTR acc0_resource_name; +} +alias ACCESS_INFO_0* PACCESS_INFO_0, LPACCESS_INFO_0; + +struct ACCESS_INFO_1{ + LPTSTR acc1_resource_name; + DWORD acc1_attr; + DWORD acc1_count; +} +alias ACCESS_INFO_1* PACCESS_INFO_1, LPACCESS_INFO_1; + +struct ACCESS_INFO_1002{ + DWORD acc1002_attr; +} +alias ACCESS_INFO_1002* PACCESS_INFO_1002, LPACCESS_INFO_1002; + +struct ACCESS_LIST{ + LPTSTR acl_ugname; + DWORD acl_access; +} +alias ACCESS_LIST* PACCESS_LIST, LPACCESS_LIST; + +struct NETLOGON_INFO_1{ + DWORD netlog1_flags; + NET_API_STATUS netlog1_pdc_connection_status; +} +alias NETLOGON_INFO_1* PNETLOGON_INFO_1; + +struct NETLOGON_INFO_2{ + DWORD netlog2_flags; + NET_API_STATUS netlog2_pdc_connection_status; + LPWSTR netlog2_trusted_dc_name; + NET_API_STATUS netlog2_tc_connection_status; +} +alias NETLOGON_INFO_2* PNETLOGON_INFO_2; + +struct NETLOGON_INFO_3{ + DWORD netlog3_flags; + DWORD netlog3_logon_attempts; + DWORD netlog3_reserved1; + DWORD netlog3_reserved2; + DWORD netlog3_reserved3; + DWORD netlog3_reserved4; + DWORD netlog3_reserved5; +} +alias NETLOGON_INFO_3* PNETLOGON_INFO_3; + +extern (Windows) { +deprecated { + /* These are obsolete */ + NET_API_STATUS NetAccessAdd(LPCWSTR,DWORD,PBYTE,PDWORD); + NET_API_STATUS NetAccessEnum(LPCWSTR,LPCWSTR,DWORD,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); + NET_API_STATUS NetAccessGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*); + NET_API_STATUS NetAccessSetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE,PDWORD); + NET_API_STATUS NetAccessDel(LPCWSTR,LPCWSTR); + NET_API_STATUS NetAccessGetUserPerms(LPCWSTR,LPCWSTR,LPCWSTR,PDWORD); +} +NET_API_STATUS NetUserAdd(LPCWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetUserEnum(LPCWSTR,DWORD,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetUserGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*); +NET_API_STATUS NetUserSetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetUserDel(LPCWSTR,LPCWSTR); +NET_API_STATUS NetUserGetGroups(LPCWSTR,LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD); +NET_API_STATUS NetUserSetGroups(LPCWSTR,LPCWSTR,DWORD,PBYTE,DWORD); +NET_API_STATUS NetUserGetLocalGroups(LPCWSTR,LPCWSTR,DWORD,DWORD,PBYTE*,DWORD,PDWORD,PDWORD); +NET_API_STATUS NetUserModalsGet(LPCWSTR,DWORD,PBYTE*); +NET_API_STATUS NetUserModalsSet(LPCWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetUserChangePassword(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR); +NET_API_STATUS NetGroupAdd(LPCWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetGroupAddUser(LPCWSTR,LPCWSTR,LPCWSTR); +NET_API_STATUS NetGroupEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetGroupGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*); +NET_API_STATUS NetGroupSetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetGroupDel(LPCWSTR,LPCWSTR); +NET_API_STATUS NetGroupDelUser(LPCWSTR,LPCWSTR,LPCWSTR); +NET_API_STATUS NetGroupGetUsers(LPCWSTR,LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetGroupSetUsers(LPCWSTR,LPCWSTR,DWORD,PBYTE,DWORD); +NET_API_STATUS NetLocalGroupAdd(LPCWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetLocalGroupAddMember(LPCWSTR,LPCWSTR,PSID); +NET_API_STATUS NetLocalGroupEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetLocalGroupGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*); +NET_API_STATUS NetLocalGroupSetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetLocalGroupDel(LPCWSTR,LPCWSTR); +NET_API_STATUS NetLocalGroupDelMember(LPCWSTR,LPCWSTR,PSID); +NET_API_STATUS NetLocalGroupGetMembers(LPCWSTR,LPCWSTR,DWORD,PBYTE*,DWORD, +PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetLocalGroupSetMembers(LPCWSTR,LPCWSTR,DWORD,PBYTE,DWORD); +NET_API_STATUS NetLocalGroupAddMembers(LPCWSTR,LPCWSTR,DWORD,PBYTE,DWORD); +NET_API_STATUS NetLocalGroupDelMembers(LPCWSTR,LPCWSTR,DWORD,PBYTE,DWORD); +NET_API_STATUS NetQueryDisplayInformation(LPCWSTR,DWORD,DWORD,DWORD,DWORD,PDWORD,PVOID*); +NET_API_STATUS NetGetDisplayInformationIndex(LPCWSTR,DWORD,LPCWSTR,PDWORD); +NET_API_STATUS NetGetDCName(LPCWSTR,LPCWSTR,PBYTE*); +NET_API_STATUS NetGetAnyDCName(LPCWSTR,LPCWSTR,PBYTE*); +NET_API_STATUS I_NetLogonControl(LPCWSTR,DWORD,DWORD,PBYTE*); +NET_API_STATUS I_NetLogonControl2(LPCWSTR,DWORD,DWORD,PBYTE,PBYTE*); +} \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmalert.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmalert.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,77 @@ +/***********************************************************************\ +* lmalert.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmalert; +pragma(lib, "netapi32.lib"); + +private import win32.lmcons, win32.windef; + +const TCHAR[] + ALERTER_MAILSLOT = `\\.\MAILSLOT\Alerter`, + ALERT_PRINT_EVENT = "PRINTING", + ALERT_MESSAGE_EVENT = "MESSAGE", + ALERT_ERRORLOG_EVENT = "ERRORLOG", + ALERT_ADMIN_EVENT = "ADMIN", + ALERT_USER_EVENT = "USER"; +//MACRO #define ALERT_OTHER_INFO(x) ((PBYTE)(x)+sizeof(STD_ALERT)) + +//MACRO #define ALERT_VAR_DATA(p) ((PBYTE)(p)+sizeof(*p)) + +const PRJOB_QSTATUS = 3; +const PRJOB_DEVSTATUS = 508; +const PRJOB_COMPLETE = 4; +const PRJOB_INTERV = 8; +const PRJOB_ = 16; +const PRJOB_DESTOFFLINE = 32; +const PRJOB_DESTPAUSED = 64; +const PRJOB_NOTIFY = 128; +const PRJOB_DESTNOPAPER = 256; +const PRJOB_DELETED = 32768; +const PRJOB_QS_QUEUED = 0; +const PRJOB_QS_PAUSED = 1; +const PRJOB_QS_SPOOLING = 2; +const PRJOB_QS_PRINTING = 3; + +struct ADMIN_OTHER_INFO{ + DWORD alrtad_errcode; + DWORD alrtad_numstrings; +} +alias ADMIN_OTHER_INFO* PADMIN_OTHER_INFO, LPADMIN_OTHER_INFO; + +struct STD_ALERT{ + DWORD alrt_timestamp; + TCHAR alrt_eventname[EVLEN+1]; + TCHAR alrt_servicename[SNLEN+1]; +} +alias STD_ALERT* PSTD_ALERT, LPSTD_ALERT; + +struct ERRLOG_OTHER_INFO{ + DWORD alrter_errcode; + DWORD alrter_offset; +} +alias ERRLOG_OTHER_INFO* PERRLOG_OTHER_INFO, LPERRLOG_OTHER_INFO; + +struct PRINT_OTHER_INFO{ + DWORD alrtpr_jobid; + DWORD alrtpr_status; + DWORD alrtpr_submitted; + DWORD alrtpr_size; +} +alias PRINT_OTHER_INFO* PPRINT_OTHER_INFO, LPPRINT_OTHER_INFO; + +struct USER_OTHER_INFO{ + DWORD alrtus_errcode; + DWORD alrtus_numstrings; +} +alias USER_OTHER_INFO* PUSER_OTHER_INFO, LPUSER_OTHER_INFO; + +extern (Windows) { +NET_API_STATUS NetAlertRaise(LPCWSTR,PVOID,DWORD); +NET_API_STATUS NetAlertRaiseEx(LPCWSTR,PVOID,DWORD,LPCWSTR); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmapibuf.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmapibuf.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,21 @@ +/***********************************************************************\ +* lmapibuf.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmapibuf; +pragma(lib, "netapi32.lib"); + +private import win32.lmcons, win32.windef; + +extern (Windows) { + NET_API_STATUS NetApiBufferAllocate(DWORD, PVOID*); + NET_API_STATUS NetApiBufferFree(PVOID); + NET_API_STATUS NetApiBufferReallocate(PVOID, DWORD, PVOID*); + NET_API_STATUS NetApiBufferSize(PVOID, PDWORD); + NET_API_STATUS NetapipBufferAllocate(DWORD, PVOID*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmat.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmat.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,50 @@ +/***********************************************************************\ +* lmat.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmat; +pragma(lib, "netapi32.lib"); + +private import win32.lmcons, win32.windef; + +const JOB_RUN_PERIODICALLY = 1; +const JOB_EXEC_ERROR = 2; +const JOB_RUNS_TODAY = 4; +const JOB_ADD_CURRENT_DATE = 8; +const JOB_NONINTERACTIVE = 16; +const JOB_INPUT_FLAGS = JOB_RUN_PERIODICALLY | JOB_ADD_CURRENT_DATE + | JOB_NONINTERACTIVE; +const JOB_OUTPUT_FLAGS = JOB_RUN_PERIODICALLY | JOB_EXEC_ERROR + | JOB_RUNS_TODAY | JOB_NONINTERACTIVE; + +struct AT_ENUM { + DWORD JobId; + DWORD JobTime; + DWORD DaysOfMonth; + UCHAR DaysOfWeek; + UCHAR Flags; + LPWSTR Command; +} +alias AT_ENUM* PAT_ENUM, LPAT_ENUM; + +struct AT_INFO { + DWORD JobTime; + DWORD DaysOfMonth; + UCHAR DaysOfWeek; + UCHAR Flags; + LPWSTR Command; +} +alias AT_INFO* PAT_INFO, LPAT_INFO; + +extern (Windows) { + NET_API_STATUS NetScheduleJobAdd(LPWSTR, PBYTE, LPDWORD); + NET_API_STATUS NetScheduleJobDel(LPWSTR, DWORD, DWORD); + NET_API_STATUS NetScheduleJobEnum(LPWSTR, PBYTE*, DWORD, PDWORD, PDWORD, + PDWORD); + NET_API_STATUS NetScheduleJobGetInfo(LPWSTR, DWORD, PBYTE*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmaudit.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmaudit.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,302 @@ +/***********************************************************************\ +* lmaudit.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +// COMMENT: This file may be deprecated. +module win32.lmaudit; + +private import win32.lmcons, win32.windef; + +const LOGFLAGS_FORWARD = 0; +const LOGFLAGS_BACKWARD = 1; +const LOGFLAGS_SEEK = 2; + +const ACTION_LOCKOUT = 0; +const ACTION_ADMINUNLOCK = 1; + +const AE_GUEST=0; +const AE_USER=1; +const AE_ADMIN=2; +const AE_NORMAL=0; +const AE_USERLIMIT=0; +const AE_GENERAL=0; +const AE_ERROR=1; +const AE_SESSDIS=1; +const AE_BADPW=1; +const AE_AUTODIS=2; +const AE_UNSHARE=2; +const AE_ADMINPRIVREQD=2; +const AE_ADMINDIS=3; +const AE_NOACCESSPERM=3; +const AE_ACCRESTRICT=4; +const AE_NORMAL_CLOSE=0; +const AE_SES_CLOSE=1; +const AE_ADMIN_CLOSE=2; +const AE_LIM_UNKNOWN=0; +const AE_LIM_LOGONHOURS=1; +const AE_LIM_EXPIRED=2; +const AE_LIM_INVAL_WKSTA=3; +const AE_LIM_DISABLED=4; +const AE_LIM_DELETED=5; +const AE_MOD=0; +const AE_DELETE=1; +const AE_ADD=2; + +const AE_UAS_USER = 0; +const AE_UAS_GROUP = 1; +const AE_UAS_MODALS = 2; + +const SVAUD_SERVICE = 1; +const SVAUD_GOODSESSLOGON = 6; +const SVAUD_BADSESSLOGON = 24; +const SVAUD_SESSLOGON = SVAUD_GOODSESSLOGON|SVAUD_BADSESSLOGON; +const SVAUD_GOODNETLOGON = 96; +const SVAUD_BADNETLOGON = 384; +const SVAUD_NETLOGON = SVAUD_GOODNETLOGON|SVAUD_BADNETLOGON; +const SVAUD_LOGON = SVAUD_NETLOGON|SVAUD_SESSLOGON; +const SVAUD_GOODUSE = 0x600; +const SVAUD_BADUSE = 0x1800; +const SVAUD_USE = SVAUD_GOODUSE|SVAUD_BADUSE; +const SVAUD_USERLIST = 8192; +const SVAUD_PERMISSIONS = 16384; +const SVAUD_RESOURCE = 32768; +const SVAUD_LOGONLIM = 65536; + +const AA_AUDIT_ALL=1; +const AA_A_OWNER=4; +const AA_CLOSE=8; +const AA_S_OPEN=16; +const AA_S_WRITE=32; +const AA_S_CREATE=32; +const AA_S_DELETE=64; +const AA_S_ACL=128; +const AA_S_ALL=253; +const AA_F_OPEN=256; +const AA_F_WRITE=512; +const AA_F_CREATE=512; +const AA_F_DELETE=1024; +const AA_F_ACL=2048; +const AA_F_ALL = AA_F_OPEN|AA_F_WRITE|AA_F_DELETE|AA_F_ACL; +const AA_A_OPEN=2048; +const AA_A_WRITE=4096; +const AA_A_CREATE=8192; +const AA_A_DELETE=16384; +const AA_A_ACL=32768; +const AA_A_ALL = AA_F_OPEN|AA_F_WRITE|AA_F_DELETE|AA_F_ACL; + +struct AUDIT_ENTRY{ + DWORD ae_len; + DWORD ae_reserved; + DWORD ae_time; + DWORD ae_type; + DWORD ae_data_offset; + DWORD ae_data_size; +} +alias AUDIT_ENTRY* PAUDIT_ENTRY, LPAUDIT_ENTRY; + +struct HLOG{ + DWORD time; + DWORD last_flags; + DWORD offset; + DWORD rec_offset; +} +alias HLOG* PHLOG, LPHLOG; + +struct AE_SRVSTATUS{ + DWORD ae_sv_status; +} +alias AE_SRVSTATUS* PAE_SRVSTATUS, LPAE_SRVSTATUS; + +struct AE_SESSLOGON{ + DWORD ae_so_compname; + DWORD ae_so_username; + DWORD ae_so_privilege; +} +alias AE_SESSLOGON* PAE_SESSLOGON, LPAE_SESSLOGON; + +struct AE_SESSLOGOFF{ + DWORD ae_sf_compname; + DWORD ae_sf_username; + DWORD ae_sf_reason; +} +alias AE_SESSLOGOFF* PAE_SESSLOGOFF, LPAE_SESSLOGOFF; + +struct AE_SESSPWERR{ + DWORD ae_sp_compname; + DWORD ae_sp_username; +} +alias AE_SESSPWERR* PAE_SESSPWERR, LPAE_SESSPWERR; + +struct AE_CONNSTART{ + DWORD ae_ct_compname; + DWORD ae_ct_username; + DWORD ae_ct_netname; + DWORD ae_ct_connid; +} +alias AE_CONNSTART* PAE_CONNSTART, LPAE_CONNSTART; + +struct AE_CONNSTOP{ + DWORD ae_cp_compname; + DWORD ae_cp_username; + DWORD ae_cp_netname; + DWORD ae_cp_connid; + DWORD ae_cp_reason; +} +alias AE_CONNSTOP* PAE_CONNSTOP, LPAE_CONNSTOP; + +struct AE_CONNREJ{ + DWORD ae_cr_compname; + DWORD ae_cr_username; + DWORD ae_cr_netname; + DWORD ae_cr_reason; +} +alias AE_CONNREJ* PAE_CONNREJ, LPAE_CONNREJ; + +struct AE_RESACCESS{ + DWORD ae_ra_compname; + DWORD ae_ra_username; + DWORD ae_ra_resname; + DWORD ae_ra_operation; + DWORD ae_ra_returncode; + DWORD ae_ra_restype; + DWORD ae_ra_fileid; +} +alias AE_RESACCESS* PAE_RESACCESS, LPAE_RESACCESS; + +struct AE_RESACCESSREJ{ + DWORD ae_rr_compname; + DWORD ae_rr_username; + DWORD ae_rr_resname; + DWORD ae_rr_operation; +} +alias AE_RESACCESSREJ* PAE_RESACCESSREJ, LPAE_RESACCESSREJ; + +struct AE_CLOSEFILE{ + DWORD ae_cf_compname; + DWORD ae_cf_username; + DWORD ae_cf_resname; + DWORD ae_cf_fileid; + DWORD ae_cf_duration; + DWORD ae_cf_reason; +} +alias AE_CLOSEFILE* PAE_CLOSEFILE, LPAE_CLOSEFILE; + +struct AE_SERVICESTAT{ + DWORD ae_ss_compname; + DWORD ae_ss_username; + DWORD ae_ss_svcname; + DWORD ae_ss_status; + DWORD ae_ss_code; + DWORD ae_ss_text; + DWORD ae_ss_returnval; +} +alias AE_SERVICESTAT* PAE_SERVICESTAT, LPAE_SERVICESTAT; + +struct AE_ACLMOD{ + DWORD ae_am_compname; + DWORD ae_am_username; + DWORD ae_am_resname; + DWORD ae_am_action; + DWORD ae_am_datalen; +} +alias AE_ACLMOD* PAE_ACLMOD, LPAE_ACLMOD; + +struct AE_UASMOD{ + DWORD ae_um_compname; + DWORD ae_um_username; + DWORD ae_um_resname; + DWORD ae_um_rectype; + DWORD ae_um_action; + DWORD ae_um_datalen; +} +alias AE_UASMOD* PAE_UASMOD, LPAE_UASMOD; + +struct AE_NETLOGON{ + DWORD ae_no_compname; + DWORD ae_no_username; + DWORD ae_no_privilege; + DWORD ae_no_authflags; +} +alias AE_NETLOGON* PAE_NETLOGON, LPAE_NETLOGON; + +struct AE_NETLOGOFF{ + DWORD ae_nf_compname; + DWORD ae_nf_username; + DWORD ae_nf_reserved1; + DWORD ae_nf_reserved2; +} +alias AE_NETLOGOFF* PAE_NETLOGOFF, LPAE_NETLOGOFF; + +struct AE_ACCLIM{ + DWORD ae_al_compname; + DWORD ae_al_username; + DWORD ae_al_resname; + DWORD ae_al_limit; +} +alias AE_ACCLIM* PAE_ACCLIM, LPAE_ACCLIM; + +struct AE_LOCKOUT{ + DWORD ae_lk_compname; + DWORD ae_lk_username; + DWORD ae_lk_action; + DWORD ae_lk_bad_pw_count; +} +alias AE_LOCKOUT* PAE_LOCKOUT, LPAE_LOCKOUT; + +struct AE_GENERIC{ + DWORD ae_ge_msgfile; + DWORD ae_ge_msgnum; + DWORD ae_ge_params; + DWORD ae_ge_param1; + DWORD ae_ge_param2; + DWORD ae_ge_param3; + DWORD ae_ge_param4; + DWORD ae_ge_param5; + DWORD ae_ge_param6; + DWORD ae_ge_param7; + DWORD ae_ge_param8; + DWORD ae_ge_param9; +} +alias AE_GENERIC* PAE_GENERIC, LPAE_GENERIC; + +extern (Windows) { +deprecated { +NET_API_STATUS NetAuditClear(LPCWSTR,LPCWSTR,LPCWSTR); +NET_API_STATUS NetAuditRead(LPTSTR,LPTSTR,LPHLOG,DWORD,PDWORD,DWORD,DWORD,PBYTE*,DWORD,PDWORD,PDWORD); +NET_API_STATUS NetAuditWrite(DWORD,PBYTE,DWORD,LPTSTR,PBYTE); +} +} + +/+ +/* MinGW: These conflict with struct typedefs, why? */ +const AE_SRVSTATUS=0; +const AE_SESSLOGON=1; +const AE_SESSLOGOFF=2; +const AE_SESSPWERR=3; +const AE_CONNSTART=4; +const AE_CONNSTOP=5; +const AE_CONNREJ=6; +const AE_RESACCESS=7; +const AE_RESACCESSREJ=8; +const AE_CLOSEFILE=9; +const AE_SERVICESTAT=11; +const AE_ACLMOD=12; +const AE_UASMOD=13; +const AE_NETLOGON=14; +const AE_NETLOGOFF=15; +const AE_NETLOGDENIED=16; +const AE_ACCLIMITEXCD=17; +const AE_RESACCESS2=18; +const AE_ACLMODFAIL=19; +const AE_LOCKOUT=20; +const AE_GENERIC_TYPE=21; +const AE_SRVSTART=0; +const AE_SRVPAUSED=1; +const AE_SRVCONT=2; +const AE_SRVSTOP=3; ++/ \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmbrowsr.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmbrowsr.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,85 @@ +/***********************************************************************\ +* lmbrowsr.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmbrowsr; + +private import win32.lmcons, win32.windef; + +const BROWSER_ROLE_PDC = 1; +const BROWSER_ROLE_BDC = 2; + +struct BROWSER_STATISTICS { + LARGE_INTEGER StatisticsStartTime; + LARGE_INTEGER NumberOfServerAnnouncements; + LARGE_INTEGER NumberOfDomainAnnouncements; + ULONG NumberOfElectionPackets; + ULONG NumberOfMailslotWrites; + ULONG NumberOfGetBrowserServerListRequests; + ULONG NumberOfServerEnumerations; + ULONG NumberOfDomainEnumerations; + ULONG NumberOfOtherEnumerations; + ULONG NumberOfMissedServerAnnouncements; + ULONG NumberOfMissedMailslotDatagrams; + ULONG NumberOfMissedGetBrowserServerListRequests; + ULONG NumberOfFailedServerAnnounceAllocations; + ULONG NumberOfFailedMailslotAllocations; + ULONG NumberOfFailedMailslotReceives; + ULONG NumberOfFailedMailslotWrites; + ULONG NumberOfFailedMailslotOpens; + ULONG NumberOfDuplicateMasterAnnouncements; + LARGE_INTEGER NumberOfIllegalDatagrams; +} +alias BROWSER_STATISTICS* PBROWSER_STATISTICS, LPBROWSER_STATISTICS; + +struct BROWSER_STATISTICS_100 { + LARGE_INTEGER StartTime; + LARGE_INTEGER NumberOfServerAnnouncements; + LARGE_INTEGER NumberOfDomainAnnouncements; + ULONG NumberOfElectionPackets; + ULONG NumberOfMailslotWrites; + ULONG NumberOfGetBrowserServerListRequests; + LARGE_INTEGER NumberOfIllegalDatagrams; +} +alias BROWSER_STATISTICS_100* PBROWSER_STATISTICS_100; + +struct BROWSER_STATISTICS_101 { + LARGE_INTEGER StartTime; + LARGE_INTEGER NumberOfServerAnnouncements; + LARGE_INTEGER NumberOfDomainAnnouncements; + ULONG NumberOfElectionPackets; + ULONG NumberOfMailslotWrites; + ULONG NumberOfGetBrowserServerListRequests; + LARGE_INTEGER NumberOfIllegalDatagrams; + ULONG NumberOfMissedServerAnnouncements; + ULONG NumberOfMissedMailslotDatagrams; + ULONG NumberOfMissedGetBrowserServerListRequests; + ULONG NumberOfFailedServerAnnounceAllocations; + ULONG NumberOfFailedMailslotAllocations; + ULONG NumberOfFailedMailslotReceives; + ULONG NumberOfFailedMailslotWrites; + ULONG NumberOfFailedMailslotOpens; + ULONG NumberOfDuplicateMasterAnnouncements; +} +alias BROWSER_STATISTICS_101* PBROWSER_STATISTICS_101; + +extern (Windows) { + NET_API_STATUS I_BrowserServerEnum(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, + PBYTE*, DWORD, PDWORD, PDWORD, DWORD, LPCWSTR, PDWORD); + NET_API_STATUS I_BrowserServerEnumEx(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, + PBYTE*, DWORD, PDWORD, PDWORD, DWORD, LPCWSTR, LPCWSTR); + NET_API_STATUS I_BrowserQueryEmulatedDomains(LPWSTR, PBYTE*, PDWORD); + NET_API_STATUS I_BrowserQueryOtherDomains(LPCWSTR, PBYTE*, PDWORD, PDWORD); + NET_API_STATUS I_BrowserResetNetlogonState(LPCWSTR); + NET_API_STATUS I_BrowserSetNetlogonState(LPWSTR, LPWSTR, LPWSTR, DWORD); + NET_API_STATUS I_BrowserQueryStatistics(LPCWSTR, LPBROWSER_STATISTICS*); + NET_API_STATUS I_BrowserResetStatistics(LPCWSTR); + WORD I_BrowserServerEnumForXactsrv(LPCWSTR, LPCWSTR, ULONG, USHORT, PVOID, + WORD, DWORD, PDWORD, PDWORD, DWORD, LPCWSTR, LPCWSTR, PWORD); + NET_API_STATUS I_BrowserDebugTrace(PWCHAR, PCHAR); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmchdev.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmchdev.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,90 @@ +/***********************************************************************\ +* lmchdev.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmchdev; + +// COMMENT: This file might be deprecated. + +private import win32.lmcons, win32.windef; + +const CHARDEVQ_NO_REQUESTS = -1; +const CHARDEV_CLOSE = 0; +const CHARDEVQ_MAX_PRIORITY = 1; +const CHARDEVQ_DEV_PARMNUM = 1; + +const HANDLE_INFO_LEVEL_1 = 1; +const HANDLE_CHARTIME_PARMNUM = 1; +const HANDLE_CHARCOUNT_PARMNUM = 2; + +const CHARDEV_STAT_OPENED = 2; +const CHARDEVQ_PRIORITY_PARMNUM = 2; +const CHARDEVQ_DEVS_PARMNUM = 3; +const CHARDEV_STAT_ERROR = 4; +const CHARDEVQ_NUMUSERS_PARMNUM = 4; +const CHARDEVQ_NUMAHEAD_PARMNUM = 5; +const CHARDEVQ_DEF_PRIORITY = 5; +const CHARDEVQ_PRIORITY_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+CHARDEVQ_PRIORITY_PARMNUM; +const CHARDEVQ_DEVS_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+CHARDEVQ_DEVS_PARMNUM; +const CHARDEVQ_MIN_PRIORITY = 9; + +struct CHARDEV_INFO_0 { + LPWSTR ch0_dev; +} +alias CHARDEV_INFO_0* PCHARDEV_INFO_0, LPCHARDEV_INFO_0; + +struct CHARDEV_INFO_1{ + LPWSTR ch1_dev; + DWORD ch1_status; + LPWSTR ch1_username; + DWORD ch1_time; +} +alias CHARDEV_INFO_1* PCHARDEV_INFO_1, LPCHARDEV_INFO_1; + +struct CHARDEVQ_INFO_0 { + LPWSTR cq0_dev; +} +alias CHARDEVQ_INFO_0* PCHARDEVQ_INFO_0, LPCHARDEVQ_INFO_0; + +struct CHARDEVQ_INFO_1{ + LPWSTR cq1_dev; + DWORD cq1_priority; + LPWSTR cq1_devs; + DWORD cq1_numusers; + DWORD cq1_numahead; +} +alias CHARDEVQ_INFO_1* PCHARDEVQ_INFO_1, LPCHARDEVQ_INFO_1; + +struct CHARDEVQ_INFO_1002 { + DWORD cq1002_priority; +} +alias CHARDEVQ_INFO_1002* PCHARDEVQ_INFO_1002, LPCHARDEVQ_INFO_1002; + +struct CHARDEVQ_INFO_1003 { + LPWSTR cq1003_devs; +} +alias CHARDEVQ_INFO_1003* PCHARDEVQ_INFO_1003, LPCHARDEVQ_INFO_1003; + +struct HANDLE_INFO_1{ + DWORD hdli1_chartime; + DWORD hdli1_charcount; +} +alias HANDLE_INFO_1* PHANDLE_INFO_1, LPHANDLE_INFO_1; + +extern (Windows) { + NET_API_STATUS NetCharDevEnum(LPCWSTR, DWORD, PBYTE*, DWORD, PDWORD, PDWORD, PDWORD); + NET_API_STATUS NetCharDevGetInfo(LPCWSTR, LPCWSTR, DWORD, PBYTE*); + NET_API_STATUS NetCharDevControl(LPCWSTR, LPCWSTR, DWORD); + NET_API_STATUS NetCharDevQEnum(LPCWSTR, LPCWSTR, DWORD, PBYTE*, DWORD, PDWORD, PDWORD, PDWORD); + NET_API_STATUS NetCharDevQGetInfo(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, PBYTE*); + NET_API_STATUS NetCharDevQSetInfo(LPCWSTR, LPCWSTR, DWORD, PBYTE, PDWORD); + NET_API_STATUS NetCharDevQPurge(LPCWSTR, LPCWSTR); + NET_API_STATUS NetCharDevQPurgeSelf(LPCWSTR, LPCWSTR, LPCWSTR); + NET_API_STATUS NetHandleGetInfo(HANDLE, DWORD, PBYTE*); + NET_API_STATUS NetHandleSetInfo(HANDLE, DWORD, PBYTE, DWORD, PDWORD); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmconfig.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmconfig.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,30 @@ +/***********************************************************************\ +* lmconfig.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmconfig; + +// All functions in this file are deprecated! + +private import win32.lmcons, win32.windef; + +deprecated { + struct CONFIG_INFO_0 { + LPWSTR cfgi0_key; + LPWSTR cfgi0_data; + } + + alias CONFIG_INFO_0* PCONFIG_INFO_0, LPCONFIG_INFO_0; + + extern (Windows) { + NET_API_STATUS NetConfigGet(LPCWSTR, LPCWSTR, LPCWSTR, PBYTE*); + NET_API_STATUS NetConfigGetAll(LPCWSTR, LPCWSTR, PBYTE*); + NET_API_STATUS NetConfigSet(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, DWORD, + PBYTE, DWORD); + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmcons.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmcons.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,86 @@ +/***********************************************************************\ +* lmcons.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmcons; + +private import win32.windef; +private import win32.lmerr; // for NERR_BASE + +const TCHAR[] + MESSAGE_FILENAME = "NETMSG", + OS2MSG_FILENAME = "BASE", + HELP_MSG_FILENAME = "NETH"; + +alias DWORD NET_API_STATUS, API_RET_TYPE; + +const MIN_LANMAN_MESSAGE_ID = NERR_BASE; +const MAX_LANMAN_MESSAGE_ID = 5799; + +const CNLEN = 15; /* also in nddeapi.h */ +const UNCLEN = CNLEN + 2; + +const DNLEN = 15; +const LM20_CNLEN = 15; +const LM20_DNLEN = 15; +const LM20_SNLEN = 15; +const LM20_STXTLEN = 63; +const LM20_UNCLEN = LM20_CNLEN + 2; +const LM20_NNLEN = 12; +const LM20_RMLEN = LM20_UNCLEN + 1 + LM20_NNLEN; +const NNLEN = 80; +const RMLEN = UNCLEN + 1 + NNLEN; +const SNLEN = 80; +const STXTLEN = 256; +const PATHLEN = 256; +const LM20_PATHLEN = 256; +const DEVLEN = 80; +const LM20_DEVLEN = 8; +const EVLEN = 16; +const UNLEN = 256; +const LM20_UNLEN = 20; +const GNLEN = UNLEN; +const LM20_GNLEN = LM20_UNLEN; +const PWLEN = 256; +const LM20_PWLEN = 14; +const SHPWLEN = 8; +const CLTYPE_LEN = 12; +const QNLEN = NNLEN; +const LM20_QNLEN = LM20_NNLEN; + +const MAXCOMMENTSZ = 256; +const LM20_MAXCOMMENTSZ = 48; +const ALERTSZ = 128; +const MAXDEVENTRIES = 32;// (sizeof(int)*8); +const NETBIOS_NAME_LEN = 16; +const DWORD MAX_PREFERRED_LENGTH = -1; +const CRYPT_KEY_LEN = 7; +const CRYPT_TXT_LEN = 8; +const ENCRYPTED_PWLEN = 16; +const SESSION_PWLEN = 24; +const SESSION_CRYPT_KLEN = 21; + +const PARMNUM_ALL = 0; +const DWORD PARM_ERROR_UNKNOWN = -1; +const PARM_ERROR_NONE = 0; +const PARMNUM_BASE_INFOLEVEL = 1000; + +const PLATFORM_ID_DOS = 300; +const PLATFORM_ID_OS2 = 400; +const PLATFORM_ID_NT = 500; +const PLATFORM_ID_OSF = 600; +const PLATFORM_ID_VMS = 700; + +// this is a new typedef in W2K, but it should be harmless for earlier Windows versions. +version (Unicode) { + alias LPWSTR LMSTR; + alias LPCWSTR LMCSTR; +} else { + alias LPSTR LMSTR; + alias LPCSTR LMCSTR; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmerr.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmerr.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,313 @@ +/***********************************************************************\ +* lmerr.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmerr; + +import win32.winerror; + +enum { + NERR_Success = 0, + NERR_BASE = 2100, + NERR_NetNotStarted = NERR_BASE + 2, + NERR_UnknownServer, + NERR_ShareMem, + NERR_NoNetworkResource, + NERR_RemoteOnly, + NERR_DevNotRedirected, + NERR_ServerNotStarted = NERR_BASE + 14, + NERR_ItemNotFound, + NERR_UnknownDevDir, + NERR_RedirectedPath, + NERR_DuplicateShare, + NERR_NoRoom, + NERR_TooManyItems = NERR_BASE + 21, + NERR_InvalidMaxUsers, + NERR_BufTooSmall, + NERR_RemoteErr = NERR_BASE + 27, + NERR_LanmanIniError = NERR_BASE + 31, + NERR_NetworkError = NERR_BASE + 36, + NERR_WkstaInconsistentState, + NERR_WkstaNotStarted, + NERR_BrowserNotStarted, + NERR_InternalError, + NERR_BadTransactConfig, + NERR_InvalidAPI, + NERR_BadEventName, + NERR_DupNameReboot, + NERR_CfgCompNotFound = NERR_BASE + 46, + NERR_CfgParamNotFound, + NERR_LineTooLong = NERR_BASE + 49, + NERR_QNotFound, + NERR_JobNotFound, + NERR_DestNotFound, + NERR_DestExists, + NERR_QExists, + NERR_QNoRoom, + NERR_JobNoRoom, + NERR_DestNoRoom, + NERR_DestIdle, + NERR_DestInvalidOp, + NERR_ProcNoRespond, + NERR_SpoolerNotLoaded, + NERR_DestInvalidState, + NERR_QInvalidState, + NERR_JobInvalidState, + NERR_SpoolNoMemory, + NERR_DriverNotFound, + NERR_DataTypeInvalid, + NERR_ProcNotFound, + NERR_ServiceTableLocked = NERR_BASE + 80, + NERR_ServiceTableFull, + NERR_ServiceInstalled, + NERR_ServiceEntryLocked, + NERR_ServiceNotInstalled, + NERR_BadServiceName, + NERR_ServiceCtlTimeout, + NERR_ServiceCtlBusy, + NERR_BadServiceProgName, + NERR_ServiceNotCtrl, + NERR_ServiceKillProc, + NERR_ServiceCtlNotValid, + NERR_NotInDispatchTbl, + NERR_BadControlRecv, + NERR_ServiceNotStarting, + NERR_AlreadyLoggedOn = NERR_BASE + 100, + NERR_NotLoggedOn, + NERR_BadUsername, + NERR_BadPassword, + NERR_UnableToAddName_W, + NERR_UnableToAddName_F, + NERR_UnableToDelName_W, + NERR_UnableToDelName_F, + NERR_LogonsPaused = NERR_BASE + 109, + NERR_LogonServerConflict, + NERR_LogonNoUserPath, + NERR_LogonScriptError, + NERR_StandaloneLogon = NERR_BASE + 114, + NERR_LogonServerNotFound, + NERR_LogonDomainExists, + NERR_NonValidatedLogon, + NERR_ACFNotFound = NERR_BASE + 119, + NERR_GroupNotFound, + NERR_UserNotFound, + NERR_ResourceNotFound, + NERR_GroupExists, + NERR_UserExists, + NERR_ResourceExists, + NERR_NotPrimary, + NERR_ACFNotLoaded, + NERR_ACFNoRoom, + NERR_ACFFileIOFail, + NERR_ACFTooManyLists, + NERR_UserLogon, + NERR_ACFNoParent, + NERR_CanNotGrowSegment, + NERR_SpeGroupOp, + NERR_NotInCache, + NERR_UserInGroup, + NERR_UserNotInGroup, + NERR_AccountUndefined, + NERR_AccountExpired, + NERR_InvalidWorkstation, + NERR_InvalidLogonHours, + NERR_PasswordExpired, + NERR_PasswordCantChange, + NERR_PasswordHistConflict, + NERR_PasswordTooShort, + NERR_PasswordTooRecent, + NERR_InvalidDatabase, + NERR_DatabaseUpToDate, + NERR_SyncRequired, + NERR_UseNotFound, + NERR_BadAsgType, + NERR_DeviceIsShared, + NERR_NoComputerName = NERR_BASE + 170, + NERR_MsgAlreadyStarted, + NERR_MsgInitFailed, + NERR_NameNotFound, + NERR_AlreadyForwarded, + NERR_AddForwarded, + NERR_AlreadyExists, + NERR_TooManyNames, + NERR_DelComputerName, + NERR_LocalForward, + NERR_GrpMsgProcessor, + NERR_PausedRemote, + NERR_BadReceive, + NERR_NameInUse, + NERR_MsgNotStarted, + NERR_NotLocalName, + NERR_NoForwardName, + NERR_RemoteFull, + NERR_NameNotForwarded, + NERR_TruncatedBroadcast, + NERR_InvalidDevice = NERR_BASE + 194, + NERR_WriteFault, + NERR_DuplicateName = NERR_BASE + 197, + NERR_DeleteLater, + NERR_IncompleteDel, + NERR_MultipleNets, + NERR_NetNameNotFound = NERR_BASE + 210, + NERR_DeviceNotShared, + NERR_ClientNameNotFound, + NERR_FileIdNotFound = NERR_BASE + 214, + NERR_ExecFailure, + NERR_TmpFile, + NERR_TooMuchData, + NERR_DeviceShareConflict, + NERR_BrowserTableIncomplete, + NERR_NotLocalDomain, + NERR_DevInvalidOpCode = NERR_BASE + 231, + NERR_DevNotFound, + NERR_DevNotOpen, + NERR_BadQueueDevString, + NERR_BadQueuePriority, + NERR_NoCommDevs = NERR_BASE + 237, + NERR_QueueNotFound, + NERR_BadDevString = NERR_BASE + 240, + NERR_BadDev, + NERR_InUseBySpooler, + NERR_CommDevInUse, + NERR_InvalidComputer = NERR_BASE + 251, + NERR_MaxLenExceeded = NERR_BASE + 254, + NERR_BadComponent = NERR_BASE + 256, + NERR_CantType, + NERR_TooManyEntries = NERR_BASE + 262, + NERR_ProfileFileTooBig = NERR_BASE + 270, + NERR_ProfileOffset, + NERR_ProfileCleanup, + NERR_ProfileUnknownCmd, + NERR_ProfileLoadErr, + NERR_ProfileSaveErr, + NERR_LogOverflow = NERR_BASE + 277, + NERR_LogFileChanged, + NERR_LogFileCorrupt, + NERR_SourceIsDir, + NERR_BadSource, + NERR_BadDest, + NERR_DifferentServers, + NERR_RunSrvPaused = NERR_BASE + 285, + NERR_ErrCommRunSrv = NERR_BASE + 289, + NERR_ErrorExecingGhost = NERR_BASE + 291, + NERR_ShareNotFound, + NERR_InvalidLana = NERR_BASE + 300, + NERR_OpenFiles, + NERR_ActiveConns, + NERR_BadPasswordCore, + NERR_DevInUse, + NERR_LocalDrive, + NERR_AlertExists = NERR_BASE + 330, + NERR_TooManyAlerts, + NERR_NoSuchAlert, + NERR_BadRecipient, + NERR_AcctLimitExceeded, + NERR_InvalidLogSeek = NERR_BASE + 340, + NERR_BadUasConfig = NERR_BASE + 350, + NERR_InvalidUASOp, + NERR_LastAdmin, + NERR_DCNotFound, + NERR_LogonTrackingError, + NERR_NetlogonNotStarted, + NERR_CanNotGrowUASFile, + NERR_TimeDiffAtDC, + NERR_PasswordMismatch, + NERR_NoSuchServer = NERR_BASE + 360, + NERR_NoSuchSession, + NERR_NoSuchConnection, + NERR_TooManyServers, + NERR_TooManySessions, + NERR_TooManyConnections, + NERR_TooManyFiles, + NERR_NoAlternateServers, + NERR_TryDownLevel = NERR_BASE + 370, + NERR_UPSDriverNotStarted = NERR_BASE + 380, + NERR_UPSInvalidConfig, + NERR_UPSInvalidCommPort, + NERR_UPSSignalAsserted, + NERR_UPSShutdownFailed, + NERR_BadDosRetCode = NERR_BASE + 400, + NERR_ProgNeedsExtraMem, + NERR_BadDosFunction, + NERR_RemoteBootFailed, + NERR_BadFileCheckSum, + NERR_NoRplBootSystem, + NERR_RplLoadrNetBiosErr, + NERR_RplLoadrDiskErr, + NERR_ImageParamErr, + NERR_TooManyImageParams, + NERR_NonDosFloppyUsed, + NERR_RplBootRestart, + NERR_RplSrvrCallFailed, + NERR_CantConnectRplSrvr, + NERR_CantOpenImageFile, + NERR_CallingRplSrvr, + NERR_StartingRplBoot, + NERR_RplBootServiceTerm, + NERR_RplBootStartFailed, + NERR_RPL_CONNECTED, + NERR_BrowserConfiguredToNotRun = NERR_BASE + 450, + NERR_RplNoAdaptersStarted = NERR_BASE + 510, + NERR_RplBadRegistry, + NERR_RplBadDatabase, + NERR_RplRplfilesShare, + NERR_RplNotRplServer, + NERR_RplCannotEnum, + NERR_RplWkstaInfoCorrupted, + NERR_RplWkstaNotFound, + NERR_RplWkstaNameUnavailable, + NERR_RplProfileInfoCorrupted, + NERR_RplProfileNotFound, + NERR_RplProfileNameUnavailable, + NERR_RplProfileNotEmpty, + NERR_RplConfigInfoCorrupted, + NERR_RplConfigNotFound, + NERR_RplAdapterInfoCorrupted, + NERR_RplInternal, + NERR_RplVendorInfoCorrupted, + NERR_RplBootInfoCorrupted, + NERR_RplWkstaNeedsUserAcct, + NERR_RplNeedsRPLUSERAcct, + NERR_RplBootNotFound, + NERR_RplIncompatibleProfile, + NERR_RplAdapterNameUnavailable, + NERR_RplConfigNotEmpty, + NERR_RplBootInUse, + NERR_RplBackupDatabase, + NERR_RplAdapterNotFound, + NERR_RplVendorNotFound, + NERR_RplVendorNameUnavailable, + NERR_RplBootNameUnavailable, + NERR_RplConfigNameUnavailable, + NERR_DfsInternalCorruption = NERR_BASE + 560, + NERR_DfsVolumeDataCorrupt, + NERR_DfsNoSuchVolume, + NERR_DfsVolumeAlreadyExists, + NERR_DfsAlreadyShared, + NERR_DfsNoSuchShare, + NERR_DfsNotALeafVolume, + NERR_DfsLeafVolume, + NERR_DfsVolumeHasMultipleServers, + NERR_DfsCantCreateJunctionPoint, + NERR_DfsServerNotDfsAware, + NERR_DfsBadRenamePath, + NERR_DfsVolumeIsOffline, + NERR_DfsNoSuchServer, + NERR_DfsCyclicalName, + NERR_DfsNotSupportedInServerDfs, + NERR_DfsDuplicateService, + NERR_DfsCantRemoveLastServerShare, + NERR_DfsVolumeIsInterDfs, + NERR_DfsInconsistent, + NERR_DfsServerUpgraded, + NERR_DfsDataIsIdentical, + NERR_DfsCantRemoveDfsRoot, + NERR_DfsChildOrParentInDfs, + NERR_DfsInternalError = NERR_BASE + 590, + MAX_NERR = NERR_BASE + 899 +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmerrlog.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmerrlog.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,222 @@ +/***********************************************************************\ +* lmerrlog.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmerrlog; + +// COMMENT: This appears to be only for Win16. All functions are deprecated. + +private import win32.lmcons, win32.windef; +private import win32.lmaudit; // for LPHLOG + +const ERRLOG_BASE=3100; +const ERRLOG2_BASE=5700; +const LOGFLAGS_FORWARD=0; +const LOGFLAGS_BACKWARD=1; +const LOGFLAGS_SEEK=2; +const NELOG_Internal_Error=ERRLOG_BASE; +const NELOG_Resource_Shortage=(ERRLOG_BASE+1); +const NELOG_Unable_To_Lock_Segment=(ERRLOG_BASE+2); +const NELOG_Unable_To_Unlock_Segment=(ERRLOG_BASE+3); +const NELOG_Uninstall_Service=(ERRLOG_BASE+4); +const NELOG_Init_Exec_Fail=(ERRLOG_BASE+5); +const NELOG_Ncb_Error=(ERRLOG_BASE+6); +const NELOG_Net_Not_Started=(ERRLOG_BASE+7); +const NELOG_Ioctl_Error=(ERRLOG_BASE+8); +const NELOG_System_Semaphore=(ERRLOG_BASE+9); +const NELOG_Init_OpenCreate_Err=(ERRLOG_BASE+10); +const NELOG_NetBios=(ERRLOG_BASE+11); +const NELOG_SMB_Illegal=(ERRLOG_BASE+12); +const NELOG_Service_Fail=(ERRLOG_BASE+13); +const NELOG_Entries_Lost=(ERRLOG_BASE+14); +const NELOG_Init_Seg_Overflow=(ERRLOG_BASE+20); +const NELOG_Srv_No_Mem_Grow=(ERRLOG_BASE+21); +const NELOG_Access_File_Bad=(ERRLOG_BASE+22); +const NELOG_Srvnet_Not_Started=(ERRLOG_BASE+23); +const NELOG_Init_Chardev_Err=(ERRLOG_BASE+24); +const NELOG_Remote_API=(ERRLOG_BASE+25); +const NELOG_Ncb_TooManyErr=(ERRLOG_BASE+26); +const NELOG_Mailslot_err=(ERRLOG_BASE+27); +const NELOG_ReleaseMem_Alert=(ERRLOG_BASE+28); +const NELOG_AT_cannot_write=(ERRLOG_BASE+29); +const NELOG_Cant_Make_Msg_File=(ERRLOG_BASE+30); +const NELOG_Exec_Netservr_NoMem=(ERRLOG_BASE+31); +const NELOG_Server_Lock_Failure=(ERRLOG_BASE+32); +const NELOG_Msg_Shutdown=(ERRLOG_BASE+40); +const NELOG_Msg_Sem_Shutdown=(ERRLOG_BASE+41); +const NELOG_Msg_Log_Err=(ERRLOG_BASE+50); +const NELOG_VIO_POPUP_ERR=(ERRLOG_BASE+51); +const NELOG_Msg_Unexpected_SMB_Type=(ERRLOG_BASE+52); +const NELOG_Wksta_Infoseg=(ERRLOG_BASE+60); +const NELOG_Wksta_Compname=(ERRLOG_BASE+61); +const NELOG_Wksta_BiosThreadFailure=(ERRLOG_BASE+62); +const NELOG_Wksta_IniSeg=(ERRLOG_BASE+63); +const NELOG_Wksta_HostTab_Full=(ERRLOG_BASE+64); +const NELOG_Wksta_Bad_Mailslot_SMB=(ERRLOG_BASE+65); +const NELOG_Wksta_UASInit=(ERRLOG_BASE+66); +const NELOG_Wksta_SSIRelogon=(ERRLOG_BASE+67); +const NELOG_Build_Name=(ERRLOG_BASE+70); +const NELOG_Name_Expansion=(ERRLOG_BASE+71); +const NELOG_Message_Send=(ERRLOG_BASE+72); +const NELOG_Mail_Slt_Err=(ERRLOG_BASE+73); +const NELOG_AT_cannot_read=(ERRLOG_BASE+74); +const NELOG_AT_sched_err=(ERRLOG_BASE+75); +const NELOG_AT_schedule_file_created=(ERRLOG_BASE+76); +const NELOG_Srvnet_NB_Open=(ERRLOG_BASE+77); +const NELOG_AT_Exec_Err=(ERRLOG_BASE+78); +const NELOG_Lazy_Write_Err=(ERRLOG_BASE+80); +const NELOG_HotFix=(ERRLOG_BASE+81); +const NELOG_HardErr_From_Server=(ERRLOG_BASE+82); +const NELOG_LocalSecFail1=(ERRLOG_BASE+83); +const NELOG_LocalSecFail2=(ERRLOG_BASE+84); +const NELOG_LocalSecFail3=(ERRLOG_BASE+85); +const NELOG_LocalSecGeneralFail=(ERRLOG_BASE+86); +const NELOG_NetWkSta_Internal_Error=(ERRLOG_BASE+90); +const NELOG_NetWkSta_No_Resource=(ERRLOG_BASE+91); +const NELOG_NetWkSta_SMB_Err=(ERRLOG_BASE+92); +const NELOG_NetWkSta_VC_Err=(ERRLOG_BASE+93); +const NELOG_NetWkSta_Stuck_VC_Err=(ERRLOG_BASE+94); +const NELOG_NetWkSta_NCB_Err=(ERRLOG_BASE+95); +const NELOG_NetWkSta_Write_Behind_Err=(ERRLOG_BASE+96); +const NELOG_NetWkSta_Reset_Err=(ERRLOG_BASE+97); +const NELOG_NetWkSta_Too_Many=(ERRLOG_BASE+98); +const NELOG_Srv_Thread_Failure=(ERRLOG_BASE+104); +const NELOG_Srv_Close_Failure=(ERRLOG_BASE+105); +const NELOG_ReplUserCurDir=(ERRLOG_BASE+106); +const NELOG_ReplCannotMasterDir=(ERRLOG_BASE+107); +const NELOG_ReplUpdateError=(ERRLOG_BASE+108); +const NELOG_ReplLostMaster=(ERRLOG_BASE+109); +const NELOG_NetlogonAuthDCFail=(ERRLOG_BASE+110); +const NELOG_ReplLogonFailed=(ERRLOG_BASE+111); +const NELOG_ReplNetErr=(ERRLOG_BASE+112); +const NELOG_ReplMaxFiles=(ERRLOG_BASE+113); +const NELOG_ReplMaxTreeDepth=(ERRLOG_BASE+114); +const NELOG_ReplBadMsg=(ERRLOG_BASE+115); +const NELOG_ReplSysErr=(ERRLOG_BASE+116); +const NELOG_ReplUserLoged=(ERRLOG_BASE+117); +const NELOG_ReplBadImport=(ERRLOG_BASE+118); +const NELOG_ReplBadExport=(ERRLOG_BASE+119); +const NELOG_ReplSignalFileErr=(ERRLOG_BASE+120); +const NELOG_DiskFT=(ERRLOG_BASE+121); +const NELOG_ReplAccessDenied=(ERRLOG_BASE+122); +const NELOG_NetlogonFailedPrimary=(ERRLOG_BASE+123); +const NELOG_NetlogonPasswdSetFailed=(ERRLOG_BASE+124); +const NELOG_NetlogonTrackingError=(ERRLOG_BASE+125); +const NELOG_NetlogonSyncError=(ERRLOG_BASE+126); +const NELOG_UPS_PowerOut=(ERRLOG_BASE+130); +const NELOG_UPS_Shutdown=(ERRLOG_BASE+131); +const NELOG_UPS_CmdFileError=(ERRLOG_BASE+132); +const NELOG_UPS_CannotOpenDriver=(ERRLOG_BASE+133); +const NELOG_UPS_PowerBack=(ERRLOG_BASE+134); +const NELOG_UPS_CmdFileConfig=(ERRLOG_BASE+135); +const NELOG_UPS_CmdFileExec=(ERRLOG_BASE+136); +const NELOG_Missing_Parameter=(ERRLOG_BASE+150); +const NELOG_Invalid_Config_Line=(ERRLOG_BASE+151); +const NELOG_Invalid_Config_File=(ERRLOG_BASE+152); +const NELOG_File_Changed=(ERRLOG_BASE+153); +const NELOG_Files_Dont_Fit=(ERRLOG_BASE+154); +const NELOG_Wrong_DLL_Version=(ERRLOG_BASE+155); +const NELOG_Error_in_DLL=(ERRLOG_BASE+156); +const NELOG_System_Error=(ERRLOG_BASE+157); +const NELOG_FT_ErrLog_Too_Large=(ERRLOG_BASE+158); +const NELOG_FT_Update_In_Progress=(ERRLOG_BASE+159); +const NELOG_OEM_Code=(ERRLOG_BASE+199); +const NELOG_NetlogonSSIInitError=ERRLOG2_BASE; +const NELOG_NetlogonFailedToUpdateTrustList=(ERRLOG2_BASE+1); +const NELOG_NetlogonFailedToAddRpcInterface=(ERRLOG2_BASE+2); +const NELOG_NetlogonFailedToReadMailslot=(ERRLOG2_BASE+3); +const NELOG_NetlogonFailedToRegisterSC=(ERRLOG2_BASE+4); +const NELOG_NetlogonChangeLogCorrupt=(ERRLOG2_BASE+5); +const NELOG_NetlogonFailedToCreateShare=(ERRLOG2_BASE+6); +const NELOG_NetlogonDownLevelLogonFailed=(ERRLOG2_BASE+7); +const NELOG_NetlogonDownLevelLogoffFailed=(ERRLOG2_BASE+8); +const NELOG_NetlogonNTLogonFailed=(ERRLOG2_BASE+9); +const NELOG_NetlogonNTLogoffFailed=(ERRLOG2_BASE+10); +const NELOG_NetlogonPartialSyncCallSuccess=(ERRLOG2_BASE+11); +const NELOG_NetlogonPartialSyncCallFailed=(ERRLOG2_BASE+12); +const NELOG_NetlogonFullSyncCallSuccess=(ERRLOG2_BASE+13); +const NELOG_NetlogonFullSyncCallFailed=(ERRLOG2_BASE+14); +const NELOG_NetlogonPartialSyncSuccess=(ERRLOG2_BASE+15); +const NELOG_NetlogonPartialSyncFailed=(ERRLOG2_BASE+16); +const NELOG_NetlogonFullSyncSuccess=(ERRLOG2_BASE+17); +const NELOG_NetlogonFullSyncFailed=(ERRLOG2_BASE+18); +const NELOG_NetlogonAuthNoDomainController=(ERRLOG2_BASE+19); +const NELOG_NetlogonAuthNoTrustLsaSecret=(ERRLOG2_BASE+20); +const NELOG_NetlogonAuthNoTrustSamAccount=(ERRLOG2_BASE+21); +const NELOG_NetlogonServerAuthFailed=(ERRLOG2_BASE+22); +const NELOG_NetlogonServerAuthNoTrustSamAccount=(ERRLOG2_BASE+23); +const NELOG_FailedToRegisterSC=(ERRLOG2_BASE+24); +const NELOG_FailedToSetServiceStatus=(ERRLOG2_BASE+25); +const NELOG_FailedToGetComputerName=(ERRLOG2_BASE+26); +const NELOG_DriverNotLoaded=(ERRLOG2_BASE+27); +const NELOG_NoTranportLoaded=(ERRLOG2_BASE+28); +const NELOG_NetlogonFailedDomainDelta=(ERRLOG2_BASE+29); +const NELOG_NetlogonFailedGlobalGroupDelta=(ERRLOG2_BASE+30); +const NELOG_NetlogonFailedLocalGroupDelta=(ERRLOG2_BASE+31); +const NELOG_NetlogonFailedUserDelta=(ERRLOG2_BASE+32); +const NELOG_NetlogonFailedPolicyDelta=(ERRLOG2_BASE+33); +const NELOG_NetlogonFailedTrustedDomainDelta=(ERRLOG2_BASE+34); +const NELOG_NetlogonFailedAccountDelta=(ERRLOG2_BASE+35); +const NELOG_NetlogonFailedSecretDelta=(ERRLOG2_BASE+36); +const NELOG_NetlogonSystemError=(ERRLOG2_BASE+37); +const NELOG_NetlogonDuplicateMachineAccounts=(ERRLOG2_BASE+38); +const NELOG_NetlogonTooManyGlobalGroups=(ERRLOG2_BASE+39); +const NELOG_NetlogonBrowserDriver=(ERRLOG2_BASE+40); +const NELOG_NetlogonAddNameFailure=(ERRLOG2_BASE+41); +const NELOG_RplMessages=(ERRLOG2_BASE+42); +const NELOG_RplXnsBoot=(ERRLOG2_BASE+43); +const NELOG_RplSystem=(ERRLOG2_BASE+44); +const NELOG_RplWkstaTimeout=(ERRLOG2_BASE+45); +const NELOG_RplWkstaFileOpen=(ERRLOG2_BASE+46); +const NELOG_RplWkstaFileRead=(ERRLOG2_BASE+47); +const NELOG_RplWkstaMemory=(ERRLOG2_BASE+48); +const NELOG_RplWkstaFileChecksum=(ERRLOG2_BASE+49); +const NELOG_RplWkstaFileLineCount=(ERRLOG2_BASE+50); +const NELOG_RplWkstaBbcFile=(ERRLOG2_BASE+51); +const NELOG_RplWkstaFileSize=(ERRLOG2_BASE+52); +const NELOG_RplWkstaInternal=(ERRLOG2_BASE+53); +const NELOG_RplWkstaWrongVersion=(ERRLOG2_BASE+54); +const NELOG_RplWkstaNetwork=(ERRLOG2_BASE+55); +const NELOG_RplAdapterResource=(ERRLOG2_BASE+56); +const NELOG_RplFileCopy=(ERRLOG2_BASE+57); +const NELOG_RplFileDelete=(ERRLOG2_BASE+58); +const NELOG_RplFilePerms=(ERRLOG2_BASE+59); +const NELOG_RplCheckConfigs=(ERRLOG2_BASE+60); +const NELOG_RplCreateProfiles=(ERRLOG2_BASE+61); +const NELOG_RplRegistry=(ERRLOG2_BASE+62); +const NELOG_RplReplaceRPLDISK=(ERRLOG2_BASE+63); +const NELOG_RplCheckSecurity=(ERRLOG2_BASE+64); +const NELOG_RplBackupDatabase=(ERRLOG2_BASE+65); +const NELOG_RplInitDatabase=(ERRLOG2_BASE+66); +const NELOG_RplRestoreDatabaseFailure=(ERRLOG2_BASE+67); +const NELOG_RplRestoreDatabaseSuccess=(ERRLOG2_BASE+68); +const NELOG_RplInitRestoredDatabase=(ERRLOG2_BASE+69); +const NELOG_NetlogonSessionTypeWrong=(ERRLOG2_BASE+70); + +struct ERROR_LOG { + DWORD el_len; + DWORD el_reserved; + DWORD el_time; + DWORD el_error; + LPWSTR el_name; + LPWSTR el_text; + LPBYTE el_data; + DWORD el_data_size; + DWORD el_nstrings; +} +alias ERROR_LOG* PERROR_LOG, LPERROR_LOG; + +extern (Windows) { + deprecated { + NET_API_STATUS NetErrorLogClear(LPCWSTR, LPCWSTR, LPBYTE); + NET_API_STATUS NetErrorLogRead(LPCWSTR, LPWSTR, LPHLOG, DWORD, + LPDWORD, DWORD, DWORD, LPBYTE*, DWORD, LPDWORD, LPDWORD); + NET_API_STATUS NetErrorLogWrite(LPBYTE, DWORD, LPCWSTR, LPBYTE, + DWORD, LPBYTE, DWORD, LPBYTE); + } +} \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmmsg.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmmsg.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,43 @@ +/***********************************************************************\ +* lmmsg.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmmsg; +pragma(lib, "netapi32.lib"); + +private import win32.lmcons, win32.windef, win32.w32api; + +static assert (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x501, + "win32.lmmsg is available only if version WindowsXP, Windows2003 " + "or WindowsVista is set"); + +const MSGNAME_NOT_FORWARDED = 0; +const MSGNAME_FORWARDED_TO = 4; +const MSGNAME_FORWARDED_FROM = 16; + +struct MSG_INFO_0 { + LPWSTR msgi0_name; +} +alias MSG_INFO_0* PMSG_INFO_0, LPMSG_INFO_0; + +struct MSG_INFO_1 { + LPWSTR msgi1_name; + DWORD msgi1_forward_flag; + LPWSTR msgi1_forward; +} +alias MSG_INFO_1* PMSG_INFO_1, LPMSG_INFO_1; + +extern (Windows) { + NET_API_STATUS NetMessageBufferSend(LPCWSTR, LPCWSTR, LPCWSTR, PBYTE, + DWORD); + NET_API_STATUS NetMessageNameAdd(LPCWSTR, LPCWSTR); + NET_API_STATUS NetMessageNameDel(LPCWSTR, LPCWSTR); + NET_API_STATUS NetMessageNameEnum(LPCWSTR, DWORD, PBYTE*, DWORD, PDWORD, + PDWORD, PDWORD); + NET_API_STATUS NetMessageNameGetInfo(LPCWSTR, LPCWSTR, DWORD, PBYTE*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmremutl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmremutl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,60 @@ +/***********************************************************************\ +* lmremutl.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmremutl; +pragma(lib, "netapi32.lib"); + +// D Conversion Note: DESC_CHAR is defined as TCHAR. + +private import win32.lmcons, win32.windef; + +const SUPPORTS_REMOTE_ADMIN_PROTOCOL = 2; +const SUPPORTS_RPC = 4; +const SUPPORTS_SAM_PROTOCOL = 8; +const SUPPORTS_UNICODE = 16; +const SUPPORTS_LOCAL = 32; +const SUPPORTS_ANY = 0xFFFFFFFF; + +const NO_PERMISSION_REQUIRED = 1; +const ALLOCATE_RESPONSE = 2; +const USE_SPECIFIC_TRANSPORT = 0x80000000; + +//[Yes] #ifndef DESC_CHAR_UNICODE +//alias CHAR DESC_CHAR; +//} else { +//[No] #else +//[No] typedef WCHAR DESC_CHAR; +//[No] #endif +// FIXME (D): Is this OK? +alias TCHAR DESC_CHAR; + +alias DESC_CHAR* LPDESC; + +struct TIME_OF_DAY_INFO { + DWORD tod_elapsedt; + DWORD tod_msecs; + DWORD tod_hours; + DWORD tod_mins; + DWORD tod_secs; + DWORD tod_hunds; + LONG tod_timezone; + DWORD tod_tinterval; + DWORD tod_day; + DWORD tod_month; + DWORD tod_year; + DWORD tod_weekday; +} +alias TIME_OF_DAY_INFO* PTIME_OF_DAY_INFO, LPTIME_OF_DAY_INFO; + +extern (Windows) { + NET_API_STATUS NetRemoteTOD(LPCWSTR, PBYTE*); + NET_API_STATUS NetRemoteComputerSupports(LPCWSTR, DWORD, PDWORD); + NET_API_STATUS RxRemoteApi(DWORD, LPCWSTR, LPDESC, LPDESC, LPDESC, + LPDESC, LPDESC, LPDESC, LPDESC, DWORD, ...); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmrepl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmrepl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,134 @@ +/***********************************************************************\ +* lmrepl.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmrepl; +pragma(lib, "netapi32.lib"); + +private import win32.lmcons, win32.windef; + +const REPL_ROLE_EXPORT=1; +const REPL_ROLE_IMPORT=2; +const REPL_ROLE_BOTH=3; + +const REPL_INTERVAL_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+0; +const REPL_PULSE_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+1; +const REPL_GUARDTIME_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+2; +const REPL_RANDOM_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+3; + +const REPL_UNLOCK_NOFORCE=0; +const REPL_UNLOCK_FORCE=1; +const REPL_STATE_OK=0; +const REPL_STATE_NO_MASTER=1; +const REPL_STATE_NO_SYNC=2; +const REPL_STATE_NEVER_REPLICATED=3; +const REPL_INTEGRITY_FILE=1; +const REPL_INTEGRITY_TREE=2; +const REPL_EXTENT_FILE=1; +const REPL_EXTENT_TREE=2; + +const REPL_EXPORT_INTEGRITY_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+0; +const REPL_EXPORT_EXTENT_INFOLEVEL = PARMNUM_BASE_INFOLEVEL+1; + +struct REPL_INFO_0 { + DWORD rp0_role; + LPWSTR rp0_exportpath; + LPWSTR rp0_exportlist; + LPWSTR rp0_importpath; + LPWSTR rp0_importlist; + LPWSTR rp0_logonusername; + DWORD rp0_interval; + DWORD rp0_pulse; + DWORD rp0_guardtime; + DWORD rp0_random; +} +alias REPL_INFO_0* PREPL_INFO_0, LPREPL_INFO_0; + +struct REPL_INFO_1000 { + DWORD rp1000_interval; +} +alias REPL_INFO_1000* PREPL_INFO_1000, LPREPL_INFO_1000; + +struct REPL_INFO_1001 { + DWORD rp1001_pulse; +} +alias REPL_INFO_1001* PREPL_INFO_1001, LPREPL_INFO_1001; + +struct REPL_INFO_1002 { + DWORD rp1002_guardtime; +} +alias REPL_INFO_1002* PREPL_INFO_1002, LPREPL_INFO_1002; + +struct REPL_INFO_1003 { + DWORD rp1003_random; +} +alias REPL_INFO_1003* PREPL_INFO_1003, LPREPL_INFO_1003; + +struct REPL_EDIR_INFO_0 { + LPWSTR rped0_dirname; +} +alias REPL_EDIR_INFO_0* PREPL_EDIR_INFO_0, LPREPL_EDIR_INFO_0; + +struct REPL_EDIR_INFO_1 { + LPWSTR rped1_dirname; + DWORD rped1_integrity; + DWORD rped1_extent; +} +alias REPL_EDIR_INFO_1* PREPL_EDIR_INFO_1, LPREPL_EDIR_INFO_1; + +struct REPL_EDIR_INFO_2 { + LPWSTR rped2_dirname; + DWORD rped2_integrity; + DWORD rped2_extent; + DWORD rped2_lockcount; + DWORD rped2_locktime; +} +alias REPL_EDIR_INFO_2* PREPL_EDIR_INFO_2, LPREPL_EDIR_INFO_2; + +struct REPL_EDIR_INFO_1000 { + DWORD rped1000_integrity; +} +alias REPL_EDIR_INFO_1000* PREPL_EDIR_INFO_1000, LPREPL_EDIR_INFO_1000; + +struct REPL_EDIR_INFO_1001 { + DWORD rped1001_extent; +} +alias REPL_EDIR_INFO_1001* PREPL_EDIR_INFO_1001, LPREPL_EDIR_INFO_1001; + +struct REPL_IDIR_INFO_0 { + LPWSTR rpid0_dirname; +} +alias REPL_IDIR_INFO_0* PREPL_IDIR_INFO_0, LPREPL_IDIR_INFO_0; + +struct REPL_IDIR_INFO_1 { + LPWSTR rpid1_dirname; + DWORD rpid1_state; + LPWSTR rpid1_mastername; + DWORD rpid1_last_update_time; + DWORD rpid1_lockcount; + DWORD rpid1_locktime; +} +alias REPL_IDIR_INFO_1* PREPL_IDIR_INFO_1, LPREPL_IDIR_INFO_1; + +extern (Windows) { +NET_API_STATUS NetReplGetInfo(LPCWSTR,DWORD,PBYTE*); +NET_API_STATUS NetReplSetInfo(LPCWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetReplExportDirAdd(LPCWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetReplExportDirDel(LPCWSTR,LPCWSTR); +NET_API_STATUS NetReplExportDirEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetReplExportDirGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*); +NET_API_STATUS NetReplExportDirSetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetReplExportDirLock(LPCWSTR,LPCWSTR); +NET_API_STATUS NetReplExportDirUnlock(LPCWSTR,LPCWSTR,DWORD); +NET_API_STATUS NetReplImportDirAdd(LPCWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetReplImportDirDel(LPCWSTR,LPCWSTR); +NET_API_STATUS NetReplImportDirEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetReplImportDirGetInfo(LPCWSTR,LPCWSTR,DWORD,PBYTE*); +NET_API_STATUS NetReplImportDirLock(LPCWSTR,LPCWSTR); +NET_API_STATUS NetReplImportDirUnlock(LPCWSTR,LPCWSTR,DWORD); +} \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmserver.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmserver.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,941 @@ +/***********************************************************************\ +* lmserver.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmserver; + +import win32.winsvc; +private import win32.lmcons, win32.windef; + +struct SERVER_INFO_100 { + DWORD sv100_platform_id; + LPWSTR sv100_name; +} +alias SERVER_INFO_100* PSERVER_INFO_100, LPSERVER_INFO_100; + +struct SERVER_INFO_101 { + DWORD sv101_platform_id; + LPWSTR sv101_name; + DWORD sv101_version_major; + DWORD sv101_version_minor; + DWORD sv101_type; + LPWSTR sv101_comment; +} +alias SERVER_INFO_101* PSERVER_INFO_101, LPSERVER_INFO_101; + +struct SERVER_INFO_102 { + DWORD sv102_platform_id; + LPWSTR sv102_name; + DWORD sv102_version_major; + DWORD sv102_version_minor; + DWORD sv102_type; + LPWSTR sv102_comment; + DWORD sv102_users; + LONG sv102_disc; + BOOL sv102_hidden; + DWORD sv102_announce; + DWORD sv102_anndelta; + DWORD sv102_licenses; + LPWSTR sv102_userpath; +} +alias SERVER_INFO_102* PSERVER_INFO_102, LPSERVER_INFO_102; + +struct SERVER_INFO_402 { + DWORD sv402_ulist_mtime; + DWORD sv402_glist_mtime; + DWORD sv402_alist_mtime; + LPWSTR sv402_alerts; + DWORD sv402_security; + DWORD sv402_numadmin; + DWORD sv402_lanmask; + LPWSTR sv402_guestacct; + DWORD sv402_chdevs; + DWORD sv402_chdevq; + DWORD sv402_chdevjobs; + DWORD sv402_connections; + DWORD sv402_shares; + DWORD sv402_openfiles; + DWORD sv402_sessopens; + DWORD sv402_sessvcs; + DWORD sv402_sessreqs; + DWORD sv402_opensearch; + DWORD sv402_activelocks; + DWORD sv402_numreqbuf; + DWORD sv402_sizreqbuf; + DWORD sv402_numbigbuf; + DWORD sv402_numfiletasks; + DWORD sv402_alertsched; + DWORD sv402_erroralert; + DWORD sv402_logonalert; + DWORD sv402_accessalert; + DWORD sv402_diskalert; + DWORD sv402_netioalert; + DWORD sv402_maxauditsz; + LPWSTR sv402_srvheuristics; +} +alias SERVER_INFO_402* PSERVER_INFO_402, LPSERVER_INFO_402; + +struct SERVER_INFO_403 { + DWORD sv403_ulist_mtime; + DWORD sv403_glist_mtime; + DWORD sv403_alist_mtime; + LPWSTR sv403_alerts; + DWORD sv403_security; + DWORD sv403_numadmin; + DWORD sv403_lanmask; + LPWSTR sv403_guestacct; + DWORD sv403_chdevs; + DWORD sv403_chdevq; + DWORD sv403_chdevjobs; + DWORD sv403_connections; + DWORD sv403_shares; + DWORD sv403_openfiles; + DWORD sv403_sessopens; + DWORD sv403_sessvcs; + DWORD sv403_sessreqs; + DWORD sv403_opensearch; + DWORD sv403_activelocks; + DWORD sv403_numreqbuf; + DWORD sv403_sizreqbuf; + DWORD sv403_numbigbuf; + DWORD sv403_numfiletasks; + DWORD sv403_alertsched; + DWORD sv403_erroralert; + DWORD sv403_logonalert; + DWORD sv403_accessalert; + DWORD sv403_diskalert; + DWORD sv403_netioalert; + DWORD sv403_maxauditsz; + LPWSTR sv403_srvheuristics; + DWORD sv403_auditedevents; + DWORD sv403_autoprofile; + LPWSTR sv403_autopath; +} +alias SERVER_INFO_403* PSERVER_INFO_403, LPSERVER_INFO_403; + +struct SERVER_INFO_502 { + DWORD sv502_sessopens; + DWORD sv502_sessvcs; + DWORD sv502_opensearch; + DWORD sv502_sizreqbuf; + DWORD sv502_initworkitems; + DWORD sv502_maxworkitems; + DWORD sv502_rawworkitems; + DWORD sv502_irpstacksize; + DWORD sv502_maxrawbuflen; + DWORD sv502_sessusers; + DWORD sv502_sessconns; + DWORD sv502_maxpagedmemoryusage; + DWORD sv502_maxnonpagedmemoryusage; + BOOL sv502_enablesoftcompat; + BOOL sv502_enableforcedlogoff; + BOOL sv502_timesource; + BOOL sv502_acceptdownlevelapis; + BOOL sv502_lmannounce; +} +alias SERVER_INFO_502* PSERVER_INFO_502, LPSERVER_INFO_502; + +struct SERVER_INFO_503 { + DWORD sv503_sessopens; + DWORD sv503_sessvcs; + DWORD sv503_opensearch; + DWORD sv503_sizreqbuf; + DWORD sv503_initworkitems; + DWORD sv503_maxworkitems; + DWORD sv503_rawworkitems; + DWORD sv503_irpstacksize; + DWORD sv503_maxrawbuflen; + DWORD sv503_sessusers; + DWORD sv503_sessconns; + DWORD sv503_maxpagedmemoryusage; + DWORD sv503_maxnonpagedmemoryusage; + BOOL sv503_enablesoftcompat; + BOOL sv503_enableforcedlogoff; + BOOL sv503_timesource; + BOOL sv503_acceptdownlevelapis; + BOOL sv503_lmannounce; + LPWSTR sv503_domain; + DWORD sv503_maxcopyreadlen; + DWORD sv503_maxcopywritelen; + DWORD sv503_minkeepsearch; + DWORD sv503_maxkeepsearch; + DWORD sv503_minkeepcomplsearch; + DWORD sv503_maxkeepcomplsearch; + DWORD sv503_threadcountadd; + DWORD sv503_numblockthreads; + DWORD sv503_scavtimeout; + DWORD sv503_minrcvqueue; + DWORD sv503_minfreeworkitems; + DWORD sv503_xactmemsize; + DWORD sv503_threadpriority; + DWORD sv503_maxmpxct; + DWORD sv503_oplockbreakwait; + DWORD sv503_oplockbreakresponsewait; + BOOL sv503_enableoplocks; + BOOL sv503_enableoplockforceclose; + BOOL sv503_enablefcbopens; + BOOL sv503_enableraw; + BOOL sv503_enablesharednetdrives; + DWORD sv503_minfreeconnections; + DWORD sv503_maxfreeconnections; +} +alias SERVER_INFO_503* PSERVER_INFO_503, LPSERVER_INFO_503; + +struct SERVER_INFO_599 { + DWORD sv599_sessopens; + DWORD sv599_sessvcs; + DWORD sv599_opensearch; + DWORD sv599_sizreqbuf; + DWORD sv599_initworkitems; + DWORD sv599_maxworkitems; + DWORD sv599_rawworkitems; + DWORD sv599_irpstacksize; + DWORD sv599_maxrawbuflen; + DWORD sv599_sessusers; + DWORD sv599_sessconns; + DWORD sv599_maxpagedmemoryusage; + DWORD sv599_maxnonpagedmemoryusage; + BOOL sv599_enablesoftcompat; + BOOL sv599_enableforcedlogoff; + BOOL sv599_timesource; + BOOL sv599_acceptdownlevelapis; + BOOL sv599_lmannounce; + LPWSTR sv599_domain; + DWORD sv599_maxcopyreadlen; + DWORD sv599_maxcopywritelen; + DWORD sv599_minkeepsearch; + DWORD sv599_maxkeepsearch; + DWORD sv599_minkeepcomplsearch; + DWORD sv599_maxkeepcomplsearch; + DWORD sv599_threadcountadd; + DWORD sv599_numblockthreads; + DWORD sv599_scavtimeout; + DWORD sv599_minrcvqueue; + DWORD sv599_minfreeworkitems; + DWORD sv599_xactmemsize; + DWORD sv599_threadpriority; + DWORD sv599_maxmpxct; + DWORD sv599_oplockbreakwait; + DWORD sv599_oplockbreakresponsewait; + BOOL sv599_enableoplocks; + BOOL sv599_enableoplockforceclose; + BOOL sv599_enablefcbopens; + BOOL sv599_enableraw; + BOOL sv599_enablesharednetdrives; + DWORD sv599_minfreeconnections; + DWORD sv599_maxfreeconnections; + DWORD sv599_initsesstable; + DWORD sv599_initconntable; + DWORD sv599_initfiletable; + DWORD sv599_initsearchtable; + DWORD sv599_alertschedule; + DWORD sv599_errorthreshold; + DWORD sv599_networkerrorthreshold; + DWORD sv599_diskspacethreshold; + DWORD sv599_reserved; + DWORD sv599_maxlinkdelay; + DWORD sv599_minlinkthroughput; + DWORD sv599_linkinfovalidtime; + DWORD sv599_scavqosinfoupdatetime; + DWORD sv599_maxworkitemidletime; +} +alias SERVER_INFO_599* PSERVER_INFO_599, LPSERVER_INFO_599; + +struct SERVER_INFO_598 { + DWORD sv598_maxrawworkitems; + DWORD sv598_maxthreadsperqueue; + DWORD sv598_producttype; + DWORD sv598_serversize; + DWORD sv598_connectionlessautodisc; + DWORD sv598_sharingviolationretries; + DWORD sv598_sharingviolationdelay; + DWORD sv598_maxglobalopensearch; + DWORD sv598_removeduplicatesearches; + DWORD sv598_lockviolationoffset; + DWORD sv598_lockviolationdelay; + DWORD sv598_mdlreadswitchover; + DWORD sv598_cachedopenlimit; + DWORD sv598_otherqueueaffinity; + BOOL sv598_restrictnullsessaccess; + BOOL sv598_enablewfw311directipx; + DWORD sv598_queuesamplesecs; + DWORD sv598_balancecount; + DWORD sv598_preferredaffinity; + DWORD sv598_maxfreerfcbs; + DWORD sv598_maxfreemfcbs; + DWORD sv598_maxfreelfcbs; + DWORD sv598_maxfreepagedpoolchunks; + DWORD sv598_minpagedpoolchunksize; + DWORD sv598_maxpagedpoolchunksize; + BOOL sv598_sendsfrompreferredprocessor; +} +alias SERVER_INFO_598* PSERVER_INFO_598, LPSERVER_INFO_598; + +struct SERVER_INFO_1005 { + LPWSTR sv1005_comment; +} +alias SERVER_INFO_1005* PSERVER_INFO_1005, LPSERVER_INFO_1005; + +struct SERVER_INFO_1107 { + DWORD sv1107_users; +} +alias SERVER_INFO_1107* PSERVER_INFO_1107, LPSERVER_INFO_1107; + +struct SERVER_INFO_1010 { + LONG sv1010_disc; +} +alias SERVER_INFO_1010* PSERVER_INFO_1010, LPSERVER_INFO_1010; + +struct SERVER_INFO_1016 { + BOOL sv1016_hidden; +} +alias SERVER_INFO_1016* PSERVER_INFO_1016, LPSERVER_INFO_1016; + +struct SERVER_INFO_1017 { + DWORD sv1017_announce; +} +alias SERVER_INFO_1017* PSERVER_INFO_1017, LPSERVER_INFO_1017; + +struct SERVER_INFO_1018 { + DWORD sv1018_anndelta; +} +alias SERVER_INFO_1018* PSERVER_INFO_1018, LPSERVER_INFO_1018; + +struct SERVER_INFO_1501 { + DWORD sv1501_sessopens; +} +alias SERVER_INFO_1501* PSERVER_INFO_1501, LPSERVER_INFO_1501; + +struct SERVER_INFO_1502 { + DWORD sv1502_sessvcs; +} +alias SERVER_INFO_1502* PSERVER_INFO_1502, LPSERVER_INFO_1502; + +struct SERVER_INFO_1503 { + DWORD sv1503_opensearch; +} +alias SERVER_INFO_1503* PSERVER_INFO_1503, LPSERVER_INFO_1503; + +struct SERVER_INFO_1506 { + DWORD sv1506_maxworkitems; +} +alias SERVER_INFO_1506* PSERVER_INFO_1506, LPSERVER_INFO_1506; + +struct SERVER_INFO_1509 { + DWORD sv1509_maxrawbuflen; +} +alias SERVER_INFO_1509* PSERVER_INFO_1509, LPSERVER_INFO_1509; + +struct SERVER_INFO_1510 { + DWORD sv1510_sessusers; +} +alias SERVER_INFO_1510* PSERVER_INFO_1510, LPSERVER_INFO_1510; + +struct SERVER_INFO_1511 { + DWORD sv1511_sessconns; +} alias SERVER_INFO_1511* PSERVER_INFO_1511, LPSERVER_INFO_1511; + +struct SERVER_INFO_1512 { + DWORD sv1512_maxnonpagedmemoryusage; +} +alias SERVER_INFO_1512* PSERVER_INFO_1512, LPSERVER_INFO_1512; + +struct SERVER_INFO_1513 { + DWORD sv1513_maxpagedmemoryusage; +} +alias SERVER_INFO_1513* PSERVER_INFO_1513, LPSERVER_INFO_1513; + +struct SERVER_INFO_1514 { + BOOL sv1514_enablesoftcompat; +} +alias SERVER_INFO_1514* PSERVER_INFO_1514, LPSERVER_INFO_1514; + +struct SERVER_INFO_1515 { + BOOL sv1515_enableforcedlogoff; +} +alias SERVER_INFO_1515* PSERVER_INFO_1515, LPSERVER_INFO_1515; + +struct SERVER_INFO_1516 { + BOOL sv1516_timesource; +} +alias SERVER_INFO_1516* PSERVER_INFO_1516, LPSERVER_INFO_1516; + +struct SERVER_INFO_1518 { + BOOL sv1518_lmannounce; +} +alias SERVER_INFO_1518* PSERVER_INFO_1518, LPSERVER_INFO_1518; + +struct SERVER_INFO_1520 { + DWORD sv1520_maxcopyreadlen; +} +alias SERVER_INFO_1520* PSERVER_INFO_1520, LPSERVER_INFO_1520; + +struct SERVER_INFO_1521 { + DWORD sv1521_maxcopywritelen; +} +alias SERVER_INFO_1521* PSERVER_INFO_1521, LPSERVER_INFO_1521; + +struct SERVER_INFO_1522 { + DWORD sv1522_minkeepsearch; +} +alias SERVER_INFO_1522* PSERVER_INFO_1522, LPSERVER_INFO_1522; + +struct SERVER_INFO_1523 { + DWORD sv1523_maxkeepsearch; +} +alias SERVER_INFO_1523* PSERVER_INFO_1523, LPSERVER_INFO_1523; + +struct SERVER_INFO_1524 { + DWORD sv1524_minkeepcomplsearch; +} +alias SERVER_INFO_1524* PSERVER_INFO_1524, LPSERVER_INFO_1524; + +struct SERVER_INFO_1525 { + DWORD sv1525_maxkeepcomplsearch; +} +alias SERVER_INFO_1525* PSERVER_INFO_1525, LPSERVER_INFO_1525; + +struct SERVER_INFO_1528 { + DWORD sv1528_scavtimeout; +} +alias SERVER_INFO_1528* PSERVER_INFO_1528, LPSERVER_INFO_1528; + +struct SERVER_INFO_1529 { + DWORD sv1529_minrcvqueue; +} +alias SERVER_INFO_1529* PSERVER_INFO_1529, LPSERVER_INFO_1529; + +struct SERVER_INFO_1530 { + DWORD sv1530_minfreeworkitems; +} +alias SERVER_INFO_1530* PSERVER_INFO_1530, LPSERVER_INFO_1530; + +struct SERVER_INFO_1533 { + DWORD sv1533_maxmpxct; +} +alias SERVER_INFO_1533* PSERVER_INFO_1533, LPSERVER_INFO_1533; + +struct SERVER_INFO_1534 { + DWORD sv1534_oplockbreakwait; +} +alias SERVER_INFO_1534* PSERVER_INFO_1534, LPSERVER_INFO_1534; + +struct SERVER_INFO_1535 { + DWORD sv1535_oplockbreakresponsewait; +} +alias SERVER_INFO_1535* PSERVER_INFO_1535, LPSERVER_INFO_1535; + +struct SERVER_INFO_1536 { + BOOL sv1536_enableoplocks; +} +alias SERVER_INFO_1536* PSERVER_INFO_1536, LPSERVER_INFO_1536; + +struct SERVER_INFO_1537 { + BOOL sv1537_enableoplockforceclose; +} +alias SERVER_INFO_1537* PSERVER_INFO_1537, LPSERVER_INFO_1537; + +struct SERVER_INFO_1538 { + BOOL sv1538_enablefcbopens; +} +alias SERVER_INFO_1538* PSERVER_INFO_1538, LPSERVER_INFO_1538; + +struct SERVER_INFO_1539 { + BOOL sv1539_enableraw; +} +alias SERVER_INFO_1539* PSERVER_INFO_1539, LPSERVER_INFO_1539; + +struct SERVER_INFO_1540 { + BOOL sv1540_enablesharednetdrives; +} +alias SERVER_INFO_1540* PSERVER_INFO_1540, LPSERVER_INFO_1540; + +struct SERVER_INFO_1541 { + BOOL sv1541_minfreeconnections; +} +alias SERVER_INFO_1541* PSERVER_INFO_1541, LPSERVER_INFO_1541; + +struct SERVER_INFO_1542 { + BOOL sv1542_maxfreeconnections; +} +alias SERVER_INFO_1542* PSERVER_INFO_1542, LPSERVER_INFO_1542; + +struct SERVER_INFO_1543 { + DWORD sv1543_initsesstable; +} +alias SERVER_INFO_1543* PSERVER_INFO_1543, LPSERVER_INFO_1543; + +struct SERVER_INFO_1544 { + DWORD sv1544_initconntable; +} +alias SERVER_INFO_1544* PSERVER_INFO_1544, LPSERVER_INFO_1544; + +struct SERVER_INFO_1545 { + DWORD sv1545_initfiletable; +} +alias SERVER_INFO_1545* PSERVER_INFO_1545, LPSERVER_INFO_1545; + +struct SERVER_INFO_1546 { + DWORD sv1546_initsearchtable; +} +alias SERVER_INFO_1546* PSERVER_INFO_1546, LPSERVER_INFO_1546; + +struct SERVER_INFO_1547 { + DWORD sv1547_alertschedule; +} +alias SERVER_INFO_1547* PSERVER_INFO_1547, LPSERVER_INFO_1547; + +struct SERVER_INFO_1548 { + DWORD sv1548_errorthreshold; +} +alias SERVER_INFO_1548* PSERVER_INFO_1548, LPSERVER_INFO_1548; + +struct SERVER_INFO_1549 { + DWORD sv1549_networkerrorthreshold; +} +alias SERVER_INFO_1549* PSERVER_INFO_1549, LPSERVER_INFO_1549; + +struct SERVER_INFO_1550 { + DWORD sv1550_diskspacethreshold; +} +alias SERVER_INFO_1550* PSERVER_INFO_1550, LPSERVER_INFO_1550; + +struct SERVER_INFO_1552 { + DWORD sv1552_maxlinkdelay; +} +alias SERVER_INFO_1552* PSERVER_INFO_1552, LPSERVER_INFO_1552; + +struct SERVER_INFO_1553 { + DWORD sv1553_minlinkthroughput; +} +alias SERVER_INFO_1553* PSERVER_INFO_1553, LPSERVER_INFO_1553; + +struct SERVER_INFO_1554 { + DWORD sv1554_linkinfovalidtime; +} +alias SERVER_INFO_1554* PSERVER_INFO_1554, LPSERVER_INFO_1554; + +struct SERVER_INFO_1555 { + DWORD sv1555_scavqosinfoupdatetime; +} +alias SERVER_INFO_1555* PSERVER_INFO_1555, LPSERVER_INFO_1555; + +struct SERVER_INFO_1556 { + DWORD sv1556_maxworkitemidletime; +} +alias SERVER_INFO_1556* PSERVER_INFO_1556, LPSERVER_INFO_1556; + +struct SERVER_INFO_1557 { + DWORD sv1557_maxrawworkitems; +} +alias SERVER_INFO_1557* PSERVER_INFO_1557, LPSERVER_INFO_1557; + +struct SERVER_INFO_1560 { + DWORD sv1560_producttype; +} +alias SERVER_INFO_1560* PSERVER_INFO_1560, LPSERVER_INFO_1560; + +struct SERVER_INFO_1561 { + DWORD sv1561_serversize; +} +alias SERVER_INFO_1561* PSERVER_INFO_1561, LPSERVER_INFO_1561; + +struct SERVER_INFO_1562 { + DWORD sv1562_connectionlessautodisc; +} +alias SERVER_INFO_1562* PSERVER_INFO_1562, LPSERVER_INFO_1562; + +struct SERVER_INFO_1563 { + DWORD sv1563_sharingviolationretries; +} +alias SERVER_INFO_1563* PSERVER_INFO_1563, LPSERVER_INFO_1563; + +struct SERVER_INFO_1564 { + DWORD sv1564_sharingviolationdelay; +} +alias SERVER_INFO_1564* PSERVER_INFO_1564, LPSERVER_INFO_1564; + +struct SERVER_INFO_1565 { + DWORD sv1565_maxglobalopensearch; +} +alias SERVER_INFO_1565* PSERVER_INFO_1565, LPSERVER_INFO_1565; + +struct SERVER_INFO_1566 { + BOOL sv1566_removeduplicatesearches; +} +alias SERVER_INFO_1566* PSERVER_INFO_1566, LPSERVER_INFO_1566; + +struct SERVER_INFO_1567 { + DWORD sv1567_lockviolationretries; +} +alias SERVER_INFO_1567* PSERVER_INFO_1567, LPSERVER_INFO_1567; + +struct SERVER_INFO_1568 { + DWORD sv1568_lockviolationoffset; +} +alias SERVER_INFO_1568* PSERVER_INFO_1568, LPSERVER_INFO_1568; + +struct SERVER_INFO_1569 { + DWORD sv1569_lockviolationdelay; +} +alias SERVER_INFO_1569* PSERVER_INFO_1569, LPSERVER_INFO_1569; + +struct SERVER_INFO_1570 { + DWORD sv1570_mdlreadswitchover; +} +alias SERVER_INFO_1570* PSERVER_INFO_1570, LPSERVER_INFO_1570; + +struct SERVER_INFO_1571 { + DWORD sv1571_cachedopenlimit; +} +alias SERVER_INFO_1571* PSERVER_INFO_1571, LPSERVER_INFO_1571; + +struct SERVER_INFO_1572 { + DWORD sv1572_criticalthreads; +} +alias SERVER_INFO_1572* PSERVER_INFO_1572, LPSERVER_INFO_1572; + +struct SERVER_INFO_1573 { + DWORD sv1573_restrictnullsessaccess; +} +alias SERVER_INFO_1573* PSERVER_INFO_1573, LPSERVER_INFO_1573; + +struct SERVER_INFO_1574 { + DWORD sv1574_enablewfw311directipx; +} +alias SERVER_INFO_1574* PSERVER_INFO_1574, LPSERVER_INFO_1574; + +struct SERVER_INFO_1575 { + DWORD sv1575_otherqueueaffinity; +} +alias SERVER_INFO_1575* PSERVER_INFO_1575, LPSERVER_INFO_1575; + +struct SERVER_INFO_1576 { + DWORD sv1576_queuesamplesecs; +} +alias SERVER_INFO_1576* PSERVER_INFO_1576, LPSERVER_INFO_1576; + +struct SERVER_INFO_1577 { + DWORD sv1577_balancecount; +} +alias SERVER_INFO_1577* PSERVER_INFO_1577, LPSERVER_INFO_1577; + +struct SERVER_INFO_1578 { + DWORD sv1578_preferredaffinity; +} +alias SERVER_INFO_1578* PSERVER_INFO_1578, LPSERVER_INFO_1578; + +struct SERVER_INFO_1579 { + DWORD sv1579_maxfreerfcbs; +} +alias SERVER_INFO_1579* PSERVER_INFO_1579, LPSERVER_INFO_1579; + +struct SERVER_INFO_1580 { + DWORD sv1580_maxfreemfcbs; +} +alias SERVER_INFO_1580* PSERVER_INFO_1580, LPSERVER_INFO_1580; + +struct SERVER_INFO_1581 { + DWORD sv1581_maxfreemlcbs; +} +alias SERVER_INFO_1581* PSERVER_INFO_1581, LPSERVER_INFO_1581; + +struct SERVER_INFO_1582 { + DWORD sv1582_maxfreepagedpoolchunks; +} +alias SERVER_INFO_1582* PSERVER_INFO_1582, LPSERVER_INFO_1582; + +struct SERVER_INFO_1583 { + DWORD sv1583_minpagedpoolchunksize; +} +alias SERVER_INFO_1583* PSERVER_INFO_1583, LPSERVER_INFO_1583; + +struct SERVER_INFO_1584 { + DWORD sv1584_maxpagedpoolchunksize; +} +alias SERVER_INFO_1584* PSERVER_INFO_1584, LPSERVER_INFO_1584; + +struct SERVER_INFO_1585 { + BOOL sv1585_sendsfrompreferredprocessor; +} +alias SERVER_INFO_1585* PSERVER_INFO_1585, LPSERVER_INFO_1585; + +struct SERVER_INFO_1586 { + BOOL sv1586_maxthreadsperqueue; +} +alias SERVER_INFO_1586* PSERVER_INFO_1586, LPSERVER_INFO_1586; + +struct SERVER_TRANSPORT_INFO_0 { + DWORD svti0_numberofvcs; + LPWSTR svti0_transportname; + PBYTE svti0_transportaddress; + DWORD svti0_transportaddresslength; + LPWSTR svti0_networkaddress; +} +alias SERVER_TRANSPORT_INFO_0* PSERVER_TRANSPORT_INFO_0, + LPSERVER_TRANSPORT_INFO_0; + +extern (Windows): +NET_API_STATUS NetServerEnum(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,DWORD,LPCWSTR,PDWORD); +NET_API_STATUS NetServerEnumEx(LPCWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,DWORD,LPCWSTR,LPCWSTR); +NET_API_STATUS NetServerGetInfo(LPWSTR,DWORD,PBYTE*); +NET_API_STATUS NetServerSetInfo(LPWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetServerSetInfoCommandLine(WORD,LPWSTR*); +NET_API_STATUS NetServerDiskEnum(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetServerComputerNameAdd(LPWSTR,LPWSTR,LPWSTR); +NET_API_STATUS NetServerComputerNameDel(LPWSTR,LPWSTR); +NET_API_STATUS NetServerTransportAdd(LPWSTR,DWORD,PBYTE); +NET_API_STATUS NetServerTransportAddEx(LPWSTR,DWORD,PBYTE); +NET_API_STATUS NetServerTransportDel(LPWSTR,DWORD,PBYTE); +NET_API_STATUS NetServerTransportEnum(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +BOOL SetServiceBits(SERVICE_STATUS_HANDLE,DWORD,BOOL,BOOL); + +const SVI1_NUM_ELEMENTS=5; +const SVI2_NUM_ELEMENTS=40; +const SVI3_NUM_ELEMENTS=44; +const SV_MAX_CMD_LEN=PATHLEN; +const SW_AUTOPROF_LOAD_MASK=1; +const SW_AUTOPROF_SAVE_MASK=2; +const SV_MAX_SRV_HEUR_LEN=32; +const SV_USERS_PER_LICENSE=5; +const SV_PLATFORM_ID_OS2=400; +const SV_PLATFORM_ID_NT=500; +const MAJOR_VERSION_MASK=15; +const SV_TYPE_WORKSTATION=1; +const SV_TYPE_SERVER=2; +const SV_TYPE_SQLSERVER=4; +const SV_TYPE_DOMAIN_CTRL=8; +const SV_TYPE_DOMAIN_BAKCTRL=16; +const SV_TYPE_TIME_SOURCE=32; +const SV_TYPE_AFP=64; +const SV_TYPE_NOVELL=128; +const SV_TYPE_DOMAIN_MEMBER=256; +const SV_TYPE_PRINTQ_SERVER=512; +const SV_TYPE_DIALIN_SERVER=1024; +const SV_TYPE_XENIX_SERVER=2048; +const SV_TYPE_SERVER_UNIX=SV_TYPE_XENIX_SERVER; +const SV_TYPE_NT=4096; +const SV_TYPE_WFW=8192; +const SV_TYPE_SERVER_MFPN=16384; +const SV_TYPE_SERVER_NT=32768; +const SV_TYPE_POTENTIAL_BROWSER=65536; +const SV_TYPE_BACKUP_BROWSER=0x20000; +const SV_TYPE_MASTER_BROWSER=0x40000; +const SV_TYPE_DOMAIN_MASTER=0x80000; +const SV_TYPE_SERVER_OSF=0x100000; +const SV_TYPE_SERVER_VMS=0x200000; +const SV_TYPE_WINDOWS=0x400000; +const SV_TYPE_ALTERNATE_XPORT=0x20000000; +const SV_TYPE_LOCAL_LIST_ONLY=0x40000000; +const SV_TYPE_DOMAIN_ENUM=0x80000000; +const SV_TYPE_ALL=0xFFFFFFFF; +const SV_NODISC=(-1); +const SV_USERSECURITY=1; +const SV_SHARESECURITY=0; +const SV_HIDDEN=1; +const SV_VISIBLE=0; +const SV_PLATFORM_ID_PARMNUM=101; +const SV_NAME_PARMNUM=102; +const SV_VERSION_MAJOR_PARMNUM=103; +const SV_VERSION_MINOR_PARMNUM=104; +const SV_TYPE_PARMNUM=105; +const SV_COMMENT_PARMNUM=5; +const SV_USERS_PARMNUM=107; +const SV_DISC_PARMNUM=10; +const SV_HIDDEN_PARMNUM=16; +const SV_ANNOUNCE_PARMNUM=17; +const SV_ANNDELTA_PARMNUM=18; +const SV_USERPATH_PARMNUM=112; +const SV_ULIST_MTIME_PARMNUM=401; +const SV_GLIST_MTIME_PARMNUM=402; +const SV_ALIST_MTIME_PARMNUM=403; +const SV_ALERTS_PARMNUM=11; +const SV_SECURITY_PARMNUM=405; +const SV_NUMADMIN_PARMNUM=406; +const SV_LANMASK_PARMNUM=407; +const SV_GUESTACC_PARMNUM=408; +const SV_CHDEVQ_PARMNUM=410; +const SV_CHDEVJOBS_PARMNUM=411; +const SV_CONNECTIONS_PARMNUM=412; +const SV_SHARES_PARMNUM=413; +const SV_OPENFILES_PARMNUM=414; +const SV_SESSREQS_PARMNUM=417; +const SV_ACTIVELOCKS_PARMNUM=419; +const SV_NUMREQBUF_PARMNUM=420; +const SV_NUMBIGBUF_PARMNUM=422; +const SV_NUMFILETASKS_PARMNUM=423; +const SV_ALERTSCHED_PARMNUM=37; +const SV_ERRORALERT_PARMNUM=38; +const SV_LOGONALERT_PARMNUM=39; +const SV_ACCESSALERT_PARMNUM=40; +const SV_DISKALERT_PARMNUM=41; +const SV_NETIOALERT_PARMNUM=42; +const SV_MAXAUDITSZ_PARMNUM=43; +const SV_SRVHEURISTICS_PARMNUM=431; +const SV_SESSOPENS_PARMNUM=501; +const SV_SESSVCS_PARMNUM=502; +const SV_OPENSEARCH_PARMNUM=503; +const SV_SIZREQBUF_PARMNUM=504; +const SV_INITWORKITEMS_PARMNUM=505; +const SV_MAXWORKITEMS_PARMNUM=506; +const SV_RAWWORKITEMS_PARMNUM=507; +const SV_IRPSTACKSIZE_PARMNUM=508; +const SV_MAXRAWBUFLEN_PARMNUM=509; +const SV_SESSUSERS_PARMNUM=510; +const SV_SESSCONNS_PARMNUM=511; +const SV_MAXNONPAGEDMEMORYUSAGE_PARMNUM=512; +const SV_MAXPAGEDMEMORYUSAGE_PARMNUM=513; +const SV_ENABLESOFTCOMPAT_PARMNUM=514; +const SV_ENABLEFORCEDLOGOFF_PARMNUM=515; +const SV_TIMESOURCE_PARMNUM=516; +const SV_ACCEPTDOWNLEVELAPIS_PARMNUM=517; +const SV_LMANNOUNCE_PARMNUM=518; +const SV_DOMAIN_PARMNUM=519; +const SV_MAXCOPYREADLEN_PARMNUM=520; +const SV_MAXCOPYWRITELEN_PARMNUM=521; +const SV_MINKEEPSEARCH_PARMNUM=522; +const SV_MAXKEEPSEARCH_PARMNUM=523; +const SV_MINKEEPCOMPLSEARCH_PARMNUM=524; +const SV_MAXKEEPCOMPLSEARCH_PARMNUM=525; +const SV_THREADCOUNTADD_PARMNUM=526; +const SV_NUMBLOCKTHREADS_PARMNUM=527; +const SV_SCAVTIMEOUT_PARMNUM=528; +const SV_MINRCVQUEUE_PARMNUM=529; +const SV_MINFREEWORKITEMS_PARMNUM=530; +const SV_XACTMEMSIZE_PARMNUM=531; +const SV_THREADPRIORITY_PARMNUM=532; +const SV_MAXMPXCT_PARMNUM=533; +const SV_OPLOCKBREAKWAIT_PARMNUM=534; +const SV_OPLOCKBREAKRESPONSEWAIT_PARMNUM=535; +const SV_ENABLEOPLOCKS_PARMNUM=536; +const SV_ENABLEOPLOCKFORCECLOSE_PARMNUM=537; +const SV_ENABLEFCBOPENS_PARMNUM=538; +const SV_ENABLERAW_PARMNUM=539; +const SV_ENABLESHAREDNETDRIVES_PARMNUM=540; +const SV_MINFREECONNECTIONS_PARMNUM=541; +const SV_MAXFREECONNECTIONS_PARMNUM=542; +const SV_INITSESSTABLE_PARMNUM=543; +const SV_INITCONNTABLE_PARMNUM=544; +const SV_INITFILETABLE_PARMNUM=545; +const SV_INITSEARCHTABLE_PARMNUM=546; +const SV_ALERTSCHEDULE_PARMNUM=547; +const SV_ERRORTHRESHOLD_PARMNUM=548; +const SV_NETWORKERRORTHRESHOLD_PARMNUM=549; +const SV_DISKSPACETHRESHOLD_PARMNUM=550; +const SV_MAXLINKDELAY_PARMNUM=552; +const SV_MINLINKTHROUGHPUT_PARMNUM=553; +const SV_LINKINFOVALIDTIME_PARMNUM=554; +const SV_SCAVQOSINFOUPDATETIME_PARMNUM=555; +const SV_MAXWORKITEMIDLETIME_PARMNUM=556; +const SV_MAXRAWWORKITEMS_PARMNUM=557; +const SV_PRODUCTTYPE_PARMNUM=560; +const SV_SERVERSIZE_PARMNUM=561; +const SV_CONNECTIONLESSAUTODISC_PARMNUM=562; +const SV_SHARINGVIOLATIONRETRIES_PARMNUM=563; +const SV_SHARINGVIOLATIONDELAY_PARMNUM=564; +const SV_MAXGLOBALOPENSEARCH_PARMNUM=565; +const SV_REMOVEDUPLICATESEARCHES_PARMNUM=566; +const SV_LOCKVIOLATIONRETRIES_PARMNUM=567; +const SV_LOCKVIOLATIONOFFSET_PARMNUM=568; +const SV_LOCKVIOLATIONDELAY_PARMNUM=569; +const SV_MDLREADSWITCHOVER_PARMNUM=570; +const SV_CACHEDOPENLIMIT_PARMNUM=571; +const SV_CRITICALTHREADS_PARMNUM=572; +const SV_RESTRICTNULLSESSACCESS_PARMNUM=573; +const SV_ENABLEWFW311DIRECTIPX_PARMNUM=574; +const SV_OTHERQUEUEAFFINITY_PARMNUM=575; +const SV_QUEUESAMPLESECS_PARMNUM=576; +const SV_BALANCECOUNT_PARMNUM=577; +const SV_PREFERREDAFFINITY_PARMNUM=578; +const SV_MAXFREERFCBS_PARMNUM=579; +const SV_MAXFREEMFCBS_PARMNUM=580; +const SV_MAXFREELFCBS_PARMNUM=581; +const SV_MAXFREEPAGEDPOOLCHUNKS_PARMNUM=582; +const SV_MINPAGEDPOOLCHUNKSIZE_PARMNUM=583; +const SV_MAXPAGEDPOOLCHUNKSIZE_PARMNUM=584; +const SV_SENDSFROMPREFERREDPROCESSOR_PARMNUM=585; +const SV_MAXTHREADSPERQUEUE_PARMNUM=586; +const SV_COMMENT_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_COMMENT_PARMNUM); +const SV_USERS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_USERS_PARMNUM); +const SV_DISC_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_DISC_PARMNUM); +const SV_HIDDEN_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_HIDDEN_PARMNUM); +const SV_ANNOUNCE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ANNOUNCE_PARMNUM); +const SV_ANNDELTA_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ANNDELTA_PARMNUM); +const SV_SESSOPENS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_SESSOPENS_PARMNUM); +const SV_SESSVCS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_SESSVCS_PARMNUM); +const SV_OPENSEARCH_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_OPENSEARCH_PARMNUM); +const SV_MAXWORKITEMS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXWORKITEMS_PARMNUM); +const SV_MAXRAWBUFLEN_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXRAWBUFLEN_PARMNUM); +const SV_SESSUSERS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_SESSUSERS_PARMNUM); +const SV_SESSCONNS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_SESSCONNS_PARMNUM); +const SV_MAXNONPAGEDMEMORYUSAGE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXNONPAGEDMEMORYUSAGE_PARMNUM); +const SV_MAXPAGEDMEMORYUSAGE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXPAGEDMEMORYUSAGE_PARMNUM); +const SV_ENABLESOFTCOMPAT_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ENABLESOFTCOMPAT_PARMNUM); +const SV_ENABLEFORCEDLOGOFF_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ENABLEFORCEDLOGOFF_PARMNUM); +const SV_TIMESOURCE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_TIMESOURCE_PARMNUM); +const SV_LMANNOUNCE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_LMANNOUNCE_PARMNUM); +const SV_MAXCOPYREADLEN_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXCOPYREADLEN_PARMNUM); +const SV_MAXCOPYWRITELEN_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXCOPYWRITELEN_PARMNUM); +const SV_MINKEEPSEARCH_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MINKEEPSEARCH_PARMNUM); +const SV_MAXKEEPSEARCH_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXKEEPSEARCH_PARMNUM); +const SV_MINKEEPCOMPLSEARCH_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MINKEEPCOMPLSEARCH_PARMNUM); +const SV_MAXKEEPCOMPLSEARCH_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXKEEPCOMPLSEARCH_PARMNUM); +const SV_SCAVTIMEOUT_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_SCAVTIMEOUT_PARMNUM); +const SV_MINRCVQUEUE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MINRCVQUEUE_PARMNUM); +const SV_MINFREEWORKITEMS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MINFREEWORKITEMS_PARMNUM); +const SV_MAXMPXCT_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXMPXCT_PARMNUM); +const SV_OPLOCKBREAKWAIT_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_OPLOCKBREAKWAIT_PARMNUM); +const SV_OPLOCKBREAKRESPONSEWAIT_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_OPLOCKBREAKRESPONSEWAIT_PARMNUM); +const SV_ENABLEOPLOCKS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ENABLEOPLOCKS_PARMNUM); +const SV_ENABLEOPLOCKFORCECLOSE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ENABLEOPLOCKFORCECLOSE_PARMNUM); +const SV_ENABLEFCBOPENS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ENABLEFCBOPENS_PARMNUM); +const SV_ENABLERAW_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ENABLERAW_PARMNUM); +const SV_ENABLESHAREDNETDRIVES_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ENABLESHAREDNETDRIVES_PARMNUM); +const SV_MINFREECONNECTIONS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MINFREECONNECTIONS_PARMNUM); +const SV_MAXFREECONNECTIONS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXFREECONNECTIONS_PARMNUM); +const SV_INITSESSTABLE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_INITSESSTABLE_PARMNUM); +const SV_INITCONNTABLE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_INITCONNTABLE_PARMNUM); +const SV_INITFILETABLE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_INITFILETABLE_PARMNUM); +const SV_INITSEARCHTABLE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_INITSEARCHTABLE_PARMNUM); +const SV_ALERTSCHEDULE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ALERTSCHEDULE_PARMNUM); +const SV_ERRORTHRESHOLD_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ERRORTHRESHOLD_PARMNUM); +const SV_NETWORKERRORTHRESHOLD_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_NETWORKERRORTHRESHOLD_PARMNUM); +const SV_DISKSPACETHRESHOLD_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_DISKSPACETHRESHOLD_PARMNUM); +const SV_MAXLINKDELAY_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXLINKDELAY_PARMNUM); +const SV_MINLINKTHROUGHPUT_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MINLINKTHROUGHPUT_PARMNUM); +const SV_LINKINFOVALIDTIME_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_LINKINFOVALIDTIME_PARMNUM); +const SV_SCAVQOSINFOUPDATETIME_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_SCAVQOSINFOUPDATETIME_PARMNUM); +const SV_MAXWORKITEMIDLETIME_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXWORKITEMIDLETIME_PARMNUM); +const SV_MAXRAWWORKITEMS_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXRAWWORKITEMS_PARMNUM); +const SV_PRODUCTTYPE_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_PRODUCTTYPE_PARMNUM); +const SV_SERVERSIZE_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_SERVERSIZE_PARMNUM); +const SV_CONNECTIONLESSAUTODISC_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_CONNECTIONLESSAUTODISC_PARMNUM); +const SV_SHARINGVIOLATIONRETRIES_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_SHARINGVIOLATIONRETRIES_PARMNUM); +const SV_SHARINGVIOLATIONDELAY_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_SHARINGVIOLATIONDELAY_PARMNUM); +const SV_MAXGLOBALOPENSEARCH_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXGLOBALOPENSEARCH_PARMNUM); +const SV_REMOVEDUPLICATESEARCHES_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_REMOVEDUPLICATESEARCHES_PARMNUM); +const SV_LOCKVIOLATIONRETRIES_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_LOCKVIOLATIONRETRIES_PARMNUM); +const SV_LOCKVIOLATIONOFFSET_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_LOCKVIOLATIONOFFSET_PARMNUM); +const SV_LOCKVIOLATIONDELAY_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_LOCKVIOLATIONDELAY_PARMNUM); +const SV_MDLREADSWITCHOVER_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MDLREADSWITCHOVER_PARMNUM); +const SV_CACHEDOPENLIMIT_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_CACHEDOPENLIMIT_PARMNUM); +const SV_CRITICALTHREADS_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_CRITICALTHREADS_PARMNUM); +const SV_RESTRICTNULLSESSACCESS_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_RESTRICTNULLSESSACCESS_PARMNUM); +const SV_ENABLEWFW311DIRECTIPX_INFOLOEVEL=(PARMNUM_BASE_INFOLEVEL+SV_ENABLEWFW311DIRECTIPX_PARMNUM); +const SV_OTHERQUEUEAFFINITY_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_OTHERQUEUEAFFINITY_PARMNUM); +const SV_QUEUESAMPLESECS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_QUEUESAMPLESECS_PARMNUM); +const SV_BALANCECOUNT_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_BALANCECOUNT_PARMNUM); +const SV_PREFERREDAFFINITY_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_PREFERREDAFFINITY_PARMNUM); +const SV_MAXFREERFCBS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXFREERFCBS_PARMNUM); +const SV_MAXFREEMFCBS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXFREEMFCBS_PARMNUM); +const SV_MAXFREELFCBS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXFREELFCBS_PARMNUM); +const SV_MAXFREEPAGEDPOOLCHUNKS_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXFREEPAGEDPOOLCHUNKS_PARMNUM); +const SV_MINPAGEDPOOLCHUNKSIZE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MINPAGEDPOOLCHUNKSIZE_PARMNUM); +const SV_MAXPAGEDPOOLCHUNKSIZE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXPAGEDPOOLCHUNKSIZE_PARMNUM); +const SV_SENDSFROMPREFERREDPROCESSOR_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_SENDSFROMPREFERREDPROCESSOR_PARMNUM); +const SV_MAXTHREADSPERQUEUE_INFOLEVEL=(PARMNUM_BASE_INFOLEVEL+SV_MAXTHREADSPERQUEUE_PARMNUM); diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmshare.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmshare.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,204 @@ +/***********************************************************************\ +* lmshare.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmshare; + +import win32.lmcons; +private import win32.w32api, win32.windef; + +static if (_WIN32_WINNT_ONLY) { + pragma(lib, "netapi.lib"); +} +/* else { +// only for WinME, 98, 95. + pragma(lib, "svrapi.lib") +} +*/ + +const SHARE_NETNAME_PARMNUM = 1; +const SHARE_TYPE_PARMNUM = 3; +const SHARE_REMARK_PARMNUM = 4; +const SHARE_PERMISSIONS_PARMNUM = 5; +const SHARE_MAX_USES_PARMNUM = 6; +const SHARE_CURRENT_USES_PARMNUM = 7; +const SHARE_PATH_PARMNUM = 8; +const SHARE_PASSWD_PARMNUM = 9; +const SHARE_FILE_SD_PARMNUM = 501; +const SHARE_REMARK_INFOLEVEL = PARMNUM_BASE_INFOLEVEL + SHARE_REMARK_PARMNUM; +const SHARE_MAX_USES_INFOLEVEL = PARMNUM_BASE_INFOLEVEL + SHARE_MAX_USES_PARMNUM; +const SHARE_FILE_SD_INFOLEVEL = PARMNUM_BASE_INFOLEVEL + SHARE_FILE_SD_PARMNUM; + +const SHI1_NUM_ELEMENTS = 4; +const SHI2_NUM_ELEMENTS = 10; + +const STYPE_DISKTREE = 0; +const STYPE_PRINTQ = 1; +const STYPE_DEVICE = 2; +const STYPE_IPC = 3; +const STYPE_DFS = 100; +const STYPE_SPECIAL = 0x80000000; + +const DWORD SHI_USES_UNLIMITED = -1; + +const SESS_GUEST = 1; +const SESS_NOENCRYPTION = 2; +const SESI1_NUM_ELEMENTS = 8; +const SESI2_NUM_ELEMENTS = 9; + +const PERM_FILE_READ = 1; +const PERM_FILE_WRITE = 2; +const PERM_FILE_CREATE = 4; + +struct FILE_INFO_2 { + DWORD fi2_id; +} +alias FILE_INFO_2* PFILE_INFO_2, LPFILE_INFO_2; + +struct FILE_INFO_3 { + DWORD fi3_id; + DWORD fi3_permissions; + DWORD fi3_num_locks; + LPTSTR fi3_pathname; + LPTSTR fi3_username; +} +alias FILE_INFO_3* PFILE_INFO_3, LPFILE_INFO_3; + +struct SHARE_INFO_0 { + LPTSTR shi0_netname; +} +alias SHARE_INFO_0* PSHARE_INFO_0, LPSHARE_INFO_0; + +struct SHARE_INFO_1 { + LPTSTR shi1_netname; + DWORD shi1_type; + LPTSTR shi1_remark; +} +alias SHARE_INFO_1* PSHARE_INFO_1, LPSHARE_INFO_1; + +struct SHARE_INFO_2 { + LPTSTR shi2_netname; + DWORD shi2_type; + LPTSTR shi2_remark; + DWORD shi2_permissions; + DWORD shi2_max_uses; + DWORD shi2_current_uses; + LPTSTR shi2_path; + LPTSTR shi2_passwd; +} +alias SHARE_INFO_2* PSHARE_INFO_2, LPSHARE_INFO_2; + +struct SHARE_INFO_502 { + LPTSTR shi502_netname; + DWORD shi502_type; + LPTSTR shi502_remark; + DWORD shi502_permissions; + DWORD shi502_max_uses; + DWORD shi502_current_uses; + LPTSTR shi502_path; + LPTSTR shi502_passwd; + DWORD shi502_reserved; + PSECURITY_DESCRIPTOR shi502_security_descriptor; +} +alias SHARE_INFO_502* PSHARE_INFO_502, LPSHARE_INFO_502; + +struct SHARE_INFO_1004 { + LPTSTR shi1004_remark; +} +alias SHARE_INFO_1004* PSHARE_INFO_1004, LPSHARE_INFO_1004; + +struct SHARE_INFO_1006 { + DWORD shi1006_max_uses; +} +alias SHARE_INFO_1006* PSHARE_INFO_1006, LPSHARE_INFO_1006; + +struct SHARE_INFO_1501 { + DWORD shi1501_reserved; + PSECURITY_DESCRIPTOR shi1501_security_descriptor; +} +alias SHARE_INFO_1501* PSHARE_INFO_1501, LPSHARE_INFO_1501; + +struct SESSION_INFO_0 { + LPWSTR sesi0_cname; +} +alias SESSION_INFO_0* PSESSION_INFO_0, LPSESSION_INFO_0; + +struct SESSION_INFO_1 { + LPTSTR sesi1_cname; + LPTSTR sesi1_username; + DWORD sesi1_num_opens; + DWORD sesi1_time; + DWORD sesi1_idle_time; + DWORD sesi1_user_flags; +} +alias SESSION_INFO_1* PSESSION_INFO_1, LPSESSION_INFO_1; + +struct SESSION_INFO_2 { + LPTSTR sesi2_cname; + LPTSTR sesi2_username; + DWORD sesi2_num_opens; + DWORD sesi2_time; + DWORD sesi2_idle_time; + DWORD sesi2_user_flags; + LPWSTR sesi2_cltype_name; +} +alias SESSION_INFO_2* PSESSION_INFO_2, LPSESSION_INFO_2; + +struct SESSION_INFO_10 { + LPWSTR sesi10_cname; + LPWSTR sesi10_username; + DWORD sesi10_time; + DWORD sesi10_idle_time; +} +alias SESSION_INFO_10* PSESSION_INFO_10, LPSESSION_INFO_10; + +struct SESSION_INFO_502 { + LPWSTR sesi502_cname; + LPWSTR sesi502_username; + DWORD sesi502_num_opens; + DWORD sesi502_time; + DWORD sesi502_idle_time; + DWORD sesi502_user_flags; + LPWSTR sesi502_cltype_name; + LPWSTR sesi502_transport; +} +alias SESSION_INFO_502* PSESSION_INFO_502, LPSESSION_INFO_502; + +struct CONNECTION_INFO_0 { + DWORD coni0_id; +} +alias CONNECTION_INFO_0* PCONNECTION_INFO_0, LPCONNECTION_INFO_0; + +struct CONNECTION_INFO_1 { + DWORD coni1_id; + DWORD coni1_type; + DWORD coni1_num_opens; + DWORD coni1_num_users; + DWORD coni1_time; + LPWSTR coni1_username; + LPWSTR coni1_netname; +} +alias CONNECTION_INFO_1* PCONNECTION_INFO_1, LPCONNECTION_INFO_1; + +extern (Windows) { +NET_API_STATUS NetShareAdd(LPWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetShareEnum(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetShareEnumSticky(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD resume_handle); +NET_API_STATUS NetShareGetInfo(LPWSTR,LPWSTR,DWORD,PBYTE*); +NET_API_STATUS NetShareSetInfo(LPWSTR,LPWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetShareDel(LPWSTR,LPWSTR,DWORD); +NET_API_STATUS NetShareDelSticky(LPWSTR,LPWSTR,DWORD); +NET_API_STATUS NetShareCheck(LPWSTR,LPWSTR,PDWORD); +NET_API_STATUS NetSessionEnum(LPWSTR,LPWSTR,LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetSessionDel(LPWSTR,LPWSTR,LPWSTR); +NET_API_STATUS NetSessionGetInfo(LPWSTR,LPWSTR,LPWSTR,DWORD,PBYTE*); +NET_API_STATUS NetConnectionEnum(LPWSTR,LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetFileClose(LPWSTR,DWORD); +NET_API_STATUS NetFileEnum(LPWSTR,LPWSTR,LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetFileGetInfo(LPWSTR,DWORD,DWORD,PBYTE*); +} \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmsname.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmsname.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,65 @@ +/***********************************************************************\ +* lmsname.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmsname; + +private import win32.windef; + +const TCHAR[] + SERVICE_WORKSTATION = "LanmanWorkstation", + SERVICE_LM20_WORKSTATION = "WORKSTATION", + WORKSTATION_DISPLAY_NAME = "Workstation", + SERVICE_SERVER = "LanmanServer", + SERVICE_LM20_SERVER = "SERVER", + SERVER_DISPLAY_NAME = "Server", + SERVICE_BROWSER = "BROWSER", + SERVICE_LM20_BROWSER = SERVICE_BROWSER, + SERVICE_MESSENGER = "MESSENGER", + SERVICE_LM20_MESSENGER = SERVICE_MESSENGER, + SERVICE_NETRUN = "NETRUN", + SERVICE_LM20_NETRUN = SERVICE_NETRUN, + SERVICE_SPOOLER = "SPOOLER", + SERVICE_LM20_SPOOLER = SERVICE_SPOOLER, + SERVICE_ALERTER = "ALERTER", + SERVICE_LM20_ALERTER = SERVICE_ALERTER, + SERVICE_NETLOGON = "NETLOGON", + SERVICE_LM20_NETLOGON = SERVICE_NETLOGON, + SERVICE_NETPOPUP = "NETPOPUP", + SERVICE_LM20_NETPOPUP = SERVICE_NETPOPUP, + SERVICE_SQLSERVER = "SQLSERVER", + SERVICE_LM20_SQLSERVER = SERVICE_SQLSERVER, + SERVICE_REPL = "REPLICATOR", + SERVICE_LM20_REPL = SERVICE_REPL, + SERVICE_RIPL = "REMOTEBOOT", + SERVICE_LM20_RIPL = SERVICE_RIPL, + SERVICE_TIMESOURCE = "TIMESOURCE", + SERVICE_LM20_TIMESOURCE = SERVICE_TIMESOURCE, + SERVICE_AFP = "AFP", + SERVICE_LM20_AFP = SERVICE_AFP, + SERVICE_UPS = "UPS", + SERVICE_LM20_UPS = SERVICE_UPS, + SERVICE_XACTSRV = "XACTSRV", + SERVICE_LM20_XACTSRV = SERVICE_XACTSRV, + SERVICE_TCPIP = "TCPIP", + SERVICE_LM20_TCPIP = SERVICE_TCPIP, + SERVICE_NBT = "NBT", + SERVICE_LM20_NBT = SERVICE_NBT, + SERVICE_LMHOSTS = "LMHOSTS", + SERVICE_LM20_LMHOSTS = SERVICE_LMHOSTS, + SERVICE_TELNET = "Telnet", + SERVICE_LM20_TELNET = SERVICE_TELNET, + SERVICE_SCHEDULE = "Schedule", + SERVICE_LM20_SCHEDULE = SERVICE_SCHEDULE, + SERVICE_NTLMSSP = "NtLmSsp", + SERVICE_DHCP = "DHCP", + SERVICE_LM20_DHCP = SERVICE_DHCP, + SERVICE_NWSAP = "NwSapAgent", + SERVICE_LM20_NWSAP = SERVICE_NWSAP, + NWSAP_DISPLAY_NAME = "NW Sap Agent", + SERVICE_NWCS = "NWCWorkstation"; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmstats.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmstats.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,121 @@ +/***********************************************************************\ +* lmstats.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmstats; +pragma(lib, "netapi32.lib"); + +private import win32.lmcons, win32.windef; + +const ULONG + STATSOPT_CLR = 1, + STATS_NO_VALUE = -1, + STATS_OVERFLOW = -2; + +struct STAT_SERVER_0{ + DWORD sts0_start; + DWORD sts0_fopens; + DWORD sts0_devopens; + DWORD sts0_jobsqueued; + DWORD sts0_sopens; + DWORD sts0_stimedout; + DWORD sts0_serrorout; + DWORD sts0_pwerrors; + DWORD sts0_permerrors; + DWORD sts0_syserrors; + DWORD sts0_bytessent_low; + DWORD sts0_bytessent_high; + DWORD sts0_bytesrcvd_low; + DWORD sts0_bytesrcvd_high; + DWORD sts0_avresponse; + DWORD sts0_reqbufneed; + DWORD sts0_bigbufneed; +} +alias STAT_SERVER_0* PSTAT_SERVER_0, LPSTAT_SERVER_0; + +// #ifdef LM20_WORKSTATION_STATISTICS +// typedef struct _STAT_WORKSTATION_0 { +// DWORD stw0_start; +// DWORD stw0_numNCB_r; +// DWORD stw0_numNCB_s; +// DWORD stw0_numNCB_a; +// DWORD stw0_fiNCB_r; +// DWORD stw0_fiNCB_s; +// DWORD stw0_fiNCB_a; +// DWORD stw0_fcNCB_r; +// DWORD stw0_fcNCB_s; +// DWORD stw0_fcNCB_a; +// DWORD stw0_sesstart; +// DWORD stw0_sessfailcon; +// DWORD stw0_sessbroke; +// DWORD stw0_uses; +// DWORD stw0_usefail; +// DWORD stw0_autorec; +// DWORD stw0_bytessent_r_lo; +// DWORD stw0_bytessent_r_hi; +// DWORD stw0_bytesrcvd_r_lo; +// DWORD stw0_bytesrcvd_r_hi; +// DWORD stw0_bytessent_s_lo; +// DWORD stw0_bytessent_s_hi; +// DWORD stw0_bytesrcvd_s_lo; +// DWORD stw0_bytesrcvd_s_hi; +// DWORD stw0_bytessent_a_lo; +// DWORD stw0_bytessent_a_hi; +// DWORD stw0_bytesrcvd_a_lo; +// DWORD stw0_bytesrcvd_a_hi; +// DWORD stw0_reqbufneed; +// DWORD stw0_bigbufneed; +// } STAT_WORKSTATION_0,*PSTAT_WORKSTATION_0,*LPSTAT_WORKSTATION_0; +// #else + +struct STAT_WORKSTATION_0{ + LARGE_INTEGER StatisticsStartTime; + LARGE_INTEGER BytesReceived; + LARGE_INTEGER SmbsReceived; + LARGE_INTEGER PagingReadBytesRequested; + LARGE_INTEGER NonPagingReadBytesRequested; + LARGE_INTEGER CacheReadBytesRequested; + LARGE_INTEGER NetworkReadBytesRequested; + LARGE_INTEGER BytesTransmitted; + LARGE_INTEGER SmbsTransmitted; + LARGE_INTEGER PagingWriteBytesRequested; + LARGE_INTEGER NonPagingWriteBytesRequested; + LARGE_INTEGER CacheWriteBytesRequested; + LARGE_INTEGER NetworkWriteBytesRequested; + DWORD InitiallyFailedOperations; + DWORD FailedCompletionOperations; + DWORD ReadOperations; + DWORD RandomReadOperations; + DWORD ReadSmbs; + DWORD LargeReadSmbs; + DWORD SmallReadSmbs; + DWORD WriteOperations; + DWORD RandomWriteOperations; + DWORD WriteSmbs; + DWORD LargeWriteSmbs; + DWORD SmallWriteSmbs; + DWORD RawReadsDenied; + DWORD RawWritesDenied; + DWORD NetworkErrors; + DWORD Sessions; + DWORD FailedSessions; + DWORD Reconnects; + DWORD CoreConnects; + DWORD Lanman20Connects; + DWORD Lanman21Connects; + DWORD LanmanNtConnects; + DWORD ServerDisconnects; + DWORD HungSessions; + DWORD UseCount; + DWORD FailedUseCount; + DWORD CurrentCommands; +} +alias STAT_WORKSTATION_0* PSTAT_WORKSTATION_0, LPSTAT_WORKSTATION_0; + +extern (Windows): +NET_API_STATUS NetStatisticsGet(LPWSTR,LPWSTR,DWORD,DWORD,PBYTE*); diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmsvc.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmsvc.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,156 @@ +/***********************************************************************\ +* lmsvc.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmsvc; + +// FIXME: Is this file deprecated? All of the functions are only for Win16. +/** + Changes relative to MinGW: + lmsname is not imported publicly (instead, win32.lm imports it directly). +*/ +// TODO: 5 macros + +private import win32.lmcons, win32.lmsname, win32.windef; + +const TCHAR[] SERVICE_DOS_ENCRYPTION = "ENCRYPT"; + +const SERVICE_UNINSTALLED=0; +const SERVICE_INSTALL_PENDING=1; +const SERVICE_UNINSTALL_PENDING=2; +const SERVICE_INSTALLED=3; +const SERVICE_INSTALL_STATE=3; +const SERVICE_PAUSE_STATE=18; +const LM20_SERVICE_ACTIVE=0; +const LM20_SERVICE_CONTINUE_PENDING=4; +const LM20_SERVICE_PAUSE_PENDING=8; +const LM20_SERVICE_PAUSED=18; +const SERVICE_NOT_UNINSTALLABLE=0; +const SERVICE_UNINSTALLABLE=16; +const SERVICE_NOT_PAUSABLE=0; +const SERVICE_PAUSABLE=32; +const SERVICE_REDIR_PAUSED=0x700; +const SERVICE_REDIR_DISK_PAUSED=256; +const SERVICE_REDIR_PRINT_PAUSED=512; +const SERVICE_REDIR_COMM_PAUSED=1024; +const SERVICE_CTRL_INTERROGATE=0; +const SERVICE_CTRL_PAUSE=1; +const SERVICE_CTRL_CONTINUE=2; +const SERVICE_CTRL_UNINSTALL=3; +const SERVICE_CTRL_REDIR_DISK=1; +const SERVICE_CTRL_REDIR_PRINT=2; +const SERVICE_CTRL_REDIR_COMM=4; +const SERVICE_IP_NO_HINT=0; +const SERVICE_CCP_NO_HINT=0; +const SERVICE_IP_QUERY_HINT=0x10000; +const SERVICE_CCP_QUERY_HINT=0x10000; +const SERVICE_IP_CHKPT_NUM=255; +const SERVICE_CCP_CHKPT_NUM=255; +const SERVICE_IP_WAIT_TIME=0xFF00; +const SERVICE_CCP_WAIT_TIME=0xFF00; +const SERVICE_IP_WAITTIME_SHIFT=8; +const SERVICE_NTIP_WAITTIME_SHIFT=12; +const UPPER_HINT_MASK=0xFF00; +const LOWER_HINT_MASK=255; +const UPPER_GET_HINT_MASK=0xFF00000; +const LOWER_GET_HINT_MASK=0xFF00; +const SERVICE_NT_MAXTIME=0xFFFF; +const SERVICE_RESRV_MASK=0x1FFFF; +const SERVICE_MAXTIME=255; +const SERVICE_BASE=3050; +const SERVICE_UIC_NORMAL=0; + +const SERVICE_UIC_BADPARMVAL = SERVICE_BASE+1; +const SERVICE_UIC_MISSPARM = SERVICE_BASE+2; +const SERVICE_UIC_UNKPARM = SERVICE_BASE+3; +const SERVICE_UIC_RESOURCE = SERVICE_BASE+4; +const SERVICE_UIC_CONFIG = SERVICE_BASE+5; +const SERVICE_UIC_SYSTEM = SERVICE_BASE+6; +const SERVICE_UIC_INTERNAL = SERVICE_BASE+7; +const SERVICE_UIC_AMBIGPARM = SERVICE_BASE+8; +const SERVICE_UIC_DUPPARM = SERVICE_BASE+9; +const SERVICE_UIC_KILL = SERVICE_BASE+10; +const SERVICE_UIC_EXEC = SERVICE_BASE+11; +const SERVICE_UIC_SUBSERV = SERVICE_BASE+12; +const SERVICE_UIC_CONFLPARM = SERVICE_BASE+13; +const SERVICE_UIC_FILE = SERVICE_BASE+14; +const SERVICE_UIC_M_NULL=0; +const SERVICE_UIC_M_MEMORY = SERVICE_BASE+20; +const SERVICE_UIC_M_DISK = SERVICE_BASE+21; +const SERVICE_UIC_M_THREADS = SERVICE_BASE+22; +const SERVICE_UIC_M_PROCESSES = SERVICE_BASE+23; +const SERVICE_UIC_M_SECURITY = SERVICE_BASE+24; +const SERVICE_UIC_M_LANROOT = SERVICE_BASE+25; +const SERVICE_UIC_M_REDIR = SERVICE_BASE+26; +const SERVICE_UIC_M_SERVER = SERVICE_BASE+27; +const SERVICE_UIC_M_SEC_FILE_ERR = SERVICE_BASE+28; +const SERVICE_UIC_M_FILES = SERVICE_BASE+29; +const SERVICE_UIC_M_LOGS = SERVICE_BASE+30; +const SERVICE_UIC_M_LANGROUP = SERVICE_BASE+31; +const SERVICE_UIC_M_MSGNAME = SERVICE_BASE+32; +const SERVICE_UIC_M_ANNOUNCE = SERVICE_BASE+33; +const SERVICE_UIC_M_UAS = SERVICE_BASE+34; +const SERVICE_UIC_M_SERVER_SEC_ERR = SERVICE_BASE+35; +const SERVICE_UIC_M_WKSTA = SERVICE_BASE+37; +const SERVICE_UIC_M_ERRLOG = SERVICE_BASE+38; +const SERVICE_UIC_M_FILE_UW = SERVICE_BASE+39; +const SERVICE_UIC_M_ADDPAK = SERVICE_BASE+40; +const SERVICE_UIC_M_LAZY = SERVICE_BASE+41; +const SERVICE_UIC_M_UAS_MACHINE_ACCT = SERVICE_BASE+42; +const SERVICE_UIC_M_UAS_SERVERS_NMEMB = SERVICE_BASE+43; +const SERVICE_UIC_M_UAS_SERVERS_NOGRP = SERVICE_BASE+44; +const SERVICE_UIC_M_UAS_INVALID_ROLE = SERVICE_BASE+45; +const SERVICE_UIC_M_NETLOGON_NO_DC = SERVICE_BASE+46; +const SERVICE_UIC_M_NETLOGON_DC_CFLCT = SERVICE_BASE+47; +const SERVICE_UIC_M_NETLOGON_AUTH = SERVICE_BASE+48; +const SERVICE_UIC_M_UAS_PROLOG = SERVICE_BASE+49; +const SERVICE2_BASE=5600; +const SERVICE_UIC_M_NETLOGON_MPATH = SERVICE2_BASE+0; +const SERVICE_UIC_M_LSA_MACHINE_ACCT = SERVICE2_BASE+1; +const SERVICE_UIC_M_DATABASE_ERROR = SERVICE2_BASE+2; + +struct SERVICE_INFO_0 { + LPWSTR svci0_name; +} +alias SERVICE_INFO_0* PSERVICE_INFO_0, LPSERVICE_INFO_0; + +struct SERVICE_INFO_1 { + LPWSTR svci1_name; + DWORD svci1_status; + DWORD svci1_code; + DWORD svci1_pid; +} +alias SERVICE_INFO_1* PSERVICE_INFO_1, LPSERVICE_INFO_1; + +struct SERVICE_INFO_2 { + LPWSTR svci2_name; + DWORD svci2_status; + DWORD svci2_code; + DWORD svci2_pid; + LPWSTR svci2_text; + DWORD svci2_specific_error; + LPWSTR svci2_display_name; +} +alias SERVICE_INFO_2* PSERVICE_INFO_2, LPSERVICE_INFO_2; + +extern (Windows) { + deprecated { + NET_API_STATUS NetServiceControl(LPCWSTR, LPCWSTR, DWORD, DWORD, + PBYTE*); + NET_API_STATUS NetServiceEnum(LPCWSTR, DWORD, PBYTE*, DWORD, PDWORD, + PDWORD, PDWORD); + NET_API_STATUS NetServiceGetInfo(LPCWSTR, LPCWSTR, DWORD, PBYTE*); + NET_API_STATUS NetServiceInstall(LPCWSTR, LPCWSTR, DWORD, LPCWSTR*, + PBYTE*); + } +} +//MACRO #define SERVICE_IP_CODE(t, n) ((long)SERVICE_IP_QUERY_HINT|(long)(n|(t<>SERVICE_NTIP_WAITTIME_SHIFT)|(((c)&LOWER_GET_HINT_MASK)>>SERVICE_IP_WAITTIME_SHIFT)) diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmuse.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmuse.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,80 @@ +/***********************************************************************\ +* lmuse.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmuse; +pragma(lib, "netapi32.lib"); + +import win32.lmuseflg; +private import win32.lmcons, win32.windef; + +enum { + USE_LOCAL_PARMNUM = 1, + USE_REMOTE_PARMNUM, + USE_PASSWORD_PARMNUM, + USE_ASGTYPE_PARMNUM, + USE_USERNAME_PARMNUM, + USE_DOMAINNAME_PARMNUM +} + +enum { + USE_OK, + USE_PAUSED, + USE_SESSLOST, + USE_DISCONN = USE_SESSLOST, + USE_NETERR, + USE_CONN, + USE_RECONN +} + +const DWORD USE_WILDCARD = -1; + +enum { + USE_DISKDEV, + USE_SPOOLDEV, + USE_CHARDEV, + USE_IPC +} + +struct USE_INFO_0 { + LPWSTR ui0_local; + LPWSTR ui0_remote; +} +alias USE_INFO_0* PUSE_INFO_0, LPUSE_INFO_0; + +struct USE_INFO_1 { + LPWSTR ui1_local; + LPWSTR ui1_remote; + LPWSTR ui1_password; + DWORD ui1_status; + DWORD ui1_asg_type; + DWORD ui1_refcount; + DWORD ui1_usecount; +} +alias USE_INFO_1* PUSE_INFO_1, LPUSE_INFO_1; + +struct USE_INFO_2 { + LPWSTR ui2_local; + LPWSTR ui2_remote; + LPWSTR ui2_password; + DWORD ui2_status; + DWORD ui2_asg_type; + DWORD ui2_refcount; + DWORD ui2_usecount; + LPWSTR ui2_username; + LPWSTR ui2_domainname; +} +alias USE_INFO_2* PUSE_INFO_2, LPUSE_INFO_2; + +extern (Windows) { + NET_API_STATUS NetUseAdd(LPWSTR, DWORD, PBYTE, PDWORD); + NET_API_STATUS NetUseDel(LPWSTR, LPWSTR, DWORD); + NET_API_STATUS NetUseEnum(LPWSTR, DWORD, PBYTE*, DWORD, PDWORD, PDWORD, + PDWORD); + NET_API_STATUS NetUseGetInfo(LPWSTR, LPWSTR, DWORD, PBYTE*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmuseflg.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmuseflg.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,16 @@ +/***********************************************************************\ +* lmuseflg.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmuseflg; + +enum : uint { + USE_NOFORCE = 0, + USE_FORCE, + USE_LOTS_OF_FORCE // = 2 +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lmwksta.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lmwksta.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,390 @@ +/***********************************************************************\ +* lmwksta.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lmwksta; +pragma(lib, "netapi32.lib"); + +import win32.lmuseflg; +private import win32.lmcons, win32.windef; + +pragma(lib, "Netapi32.lib"); + +enum { + WKSTA_COMPUTERNAME_PARMNUM = 1, + WKSTA_LANGROUP_PARMNUM, // = 2 + WKSTA_VER_MAJOR_PARMNUM = 4, + WKSTA_VER_MINOR_PARMNUM, + WKSTA_LOGGED_ON_USERS_PARMNUM, + WKSTA_LANROOT_PARMNUM, + WKSTA_LOGON_DOMAIN_PARMNUM, + WKSTA_LOGON_SERVER_PARMNUM, + WKSTA_CHARWAIT_PARMNUM, + WKSTA_CHARTIME_PARMNUM, + WKSTA_CHARCOUNT_PARMNUM, + WKSTA_KEEPCONN_PARMNUM, + WKSTA_KEEPSEARCH_PARMNUM, + WKSTA_MAXCMDS_PARMNUM, + WKSTA_NUMWORKBUF_PARMNUM, + WKSTA_MAXWRKCACHE_PARMNUM, + WKSTA_SESSTIMEOUT_PARMNUM, + WKSTA_SIZERROR_PARMNUM, + WKSTA_NUMALERTS_PARMNUM, + WKSTA_NUMSERVICES_PARMNUM, + WKSTA_NUMCHARBUF_PARMNUM, + WKSTA_SIZCHARBUF_PARMNUM, // = 23 + WKSTA_ERRLOGSZ_PARMNUM = 27, + WKSTA_PRINTBUFTIME_PARMNUM, + WKSTA_SIZWORKBUF_PARMNUM, + WKSTA_MAILSLOTS_PARMNUM, + WKSTA_NUMDGRAMBUF_PARMNUM, + WKSTA_WRKHEURISTICS_PARMNUM, + WKSTA_MAXTHREADS_PARMNUM, // = 33 + WKSTA_LOCKQUOTA_PARMNUM = 41, + WKSTA_LOCKINCREMENT_PARMNUM, + WKSTA_LOCKMAXIMUM_PARMNUM, + WKSTA_PIPEINCREMENT_PARMNUM, + WKSTA_PIPEMAXIMUM_PARMNUM, + WKSTA_DORMANTFILELIMIT_PARMNUM, + WKSTA_CACHEFILETIMEOUT_PARMNUM, + WKSTA_USEOPPORTUNISTICLOCKING_PARMNUM, + WKSTA_USEUNLOCKBEHIND_PARMNUM, + WKSTA_USECLOSEBEHIND_PARMNUM, + WKSTA_BUFFERNAMEDPIPES_PARMNUM, + WKSTA_USELOCKANDREADANDUNLOCK_PARMNUM, + WKSTA_UTILIZENTCACHING_PARMNUM, + WKSTA_USERAWREAD_PARMNUM, + WKSTA_USERAWWRITE_PARMNUM, + WKSTA_USEWRITERAWWITHDATA_PARMNUM, + WKSTA_USEENCRYPTION_PARMNUM, + WKSTA_BUFFILESWITHDENYWRITE_PARMNUM, + WKSTA_BUFFERREADONLYFILES_PARMNUM, + WKSTA_FORCECORECREATEMODE_PARMNUM, + WKSTA_USE512BYTESMAXTRANSFER_PARMNUM, + WKSTA_READAHEADTHRUPUT_PARMNUM, // = 62 + WKSTA_PLATFORM_ID_PARMNUM = 100, + WKSTA_OTH_DOMAINS_PARMNUM = 101, + TRANSPORT_QUALITYOFSERVICE_PARMNUM = 201, + TRANSPORT_NAME_PARMNUM = 202 +} + +struct WKSTA_INFO_100{ + DWORD wki100_platform_id; + LPWSTR wki100_computername; + LPWSTR wki100_langroup; + DWORD wki100_ver_major; + DWORD wki100_ver_minor; +} +alias WKSTA_INFO_100* PWKSTA_INFO_100, LPWKSTA_INFO_100; + +struct WKSTA_INFO_101{ + DWORD wki101_platform_id; + LPWSTR wki101_computername; + LPWSTR wki101_langroup; + DWORD wki101_ver_major; + DWORD wki101_ver_minor; + LPWSTR wki101_lanroot; +} +alias WKSTA_INFO_101* PWKSTA_INFO_101, LPWKSTA_INFO_101; + +struct WKSTA_INFO_102{ + DWORD wki102_platform_id; + LPWSTR wki102_computername; + LPWSTR wki102_langroup; + DWORD wki102_ver_major; + DWORD wki102_ver_minor; + LPWSTR wki102_lanroot; + DWORD wki102_logged_on_users; +} +alias WKSTA_INFO_102* PWKSTA_INFO_102, LPWKSTA_INFO_102; + +struct WKSTA_INFO_302{ + DWORD wki302_char_wait; + DWORD wki302_collection_time; + DWORD wki302_maximum_collection_count; + DWORD wki302_keep_conn; + DWORD wki302_keep_search; + DWORD wki302_max_cmds; + DWORD wki302_num_work_buf; + DWORD wki302_siz_work_buf; + DWORD wki302_max_wrk_cache; + DWORD wki302_sess_timeout; + DWORD wki302_siz_error; + DWORD wki302_num_alerts; + DWORD wki302_num_services; + DWORD wki302_errlog_sz; + DWORD wki302_print_buf_time; + DWORD wki302_num_char_buf; + DWORD wki302_siz_char_buf; + LPWSTR wki302_wrk_heuristics; + DWORD wki302_mailslots; + DWORD wki302_num_dgram_buf; +} +alias WKSTA_INFO_302* PWKSTA_INFO_302, LPWKSTA_INFO_302; + +struct WKSTA_INFO_402{ + DWORD wki402_char_wait; + DWORD wki402_collection_time; + DWORD wki402_maximum_collection_count; + DWORD wki402_keep_conn; + DWORD wki402_keep_search; + DWORD wki402_max_cmds; + DWORD wki402_num_work_buf; + DWORD wki402_siz_work_buf; + DWORD wki402_max_wrk_cache; + DWORD wki402_sess_timeout; + DWORD wki402_siz_error; + DWORD wki402_num_alerts; + DWORD wki402_num_services; + DWORD wki402_errlog_sz; + DWORD wki402_print_buf_time; + DWORD wki402_num_char_buf; + DWORD wki402_siz_char_buf; + LPWSTR wki402_wrk_heuristics; + DWORD wki402_mailslots; + DWORD wki402_num_dgram_buf; + DWORD wki402_max_threads; +} +alias WKSTA_INFO_402* PWKSTA_INFO_402, LPWKSTA_INFO_402; + +struct WKSTA_INFO_502{ + DWORD wki502_char_wait; + DWORD wki502_collection_time; + DWORD wki502_maximum_collection_count; + DWORD wki502_keep_conn; + DWORD wki502_max_cmds; + DWORD wki502_sess_timeout; + DWORD wki502_siz_char_buf; + DWORD wki502_max_threads; + DWORD wki502_lock_quota; + DWORD wki502_lock_increment; + DWORD wki502_lock_maximum; + DWORD wki502_pipe_increment; + DWORD wki502_pipe_maximum; + DWORD wki502_cache_file_timeout; + DWORD wki502_dormant_file_limit; + DWORD wki502_read_ahead_throughput; + DWORD wki502_num_mailslot_buffers; + DWORD wki502_num_srv_announce_buffers; + DWORD wki502_max_illegal_datagram_events; + DWORD wki502_illegal_datagram_event_reset_frequency; + BOOL wki502_log_election_packets; + BOOL wki502_use_opportunistic_locking; + BOOL wki502_use_unlock_behind; + BOOL wki502_use_close_behind; + BOOL wki502_buf_named_pipes; + BOOL wki502_use_lock_read_unlock; + BOOL wki502_utilize_nt_caching; + BOOL wki502_use_raw_read; + BOOL wki502_use_raw_write; + BOOL wki502_use_write_raw_data; + BOOL wki502_use_encryption; + BOOL wki502_buf_files_deny_write; + BOOL wki502_buf_read_only_files; + BOOL wki502_force_core_create_mode; + BOOL wki502_use_512_byte_max_transfer; +} +alias WKSTA_INFO_502* PWKSTA_INFO_502, LPWKSTA_INFO_502; + +struct WKSTA_INFO_1010 { + DWORD wki1010_char_wait; +} +alias WKSTA_INFO_1010* PWKSTA_INFO_1010, LPWKSTA_INFO_1010; + +struct WKSTA_INFO_1011 { + DWORD wki1011_collection_time; +} +alias WKSTA_INFO_1011* PWKSTA_INFO_1011, LPWKSTA_INFO_1011; + +struct WKSTA_INFO_1012 { + DWORD wki1012_maximum_collection_count; +} +alias WKSTA_INFO_1012* PWKSTA_INFO_1012, LPWKSTA_INFO_1012; + +struct WKSTA_INFO_1027 { + DWORD wki1027_errlog_sz; +} +alias WKSTA_INFO_1027* PWKSTA_INFO_1027, LPWKSTA_INFO_1027; + +struct WKSTA_INFO_1028 { + DWORD wki1028_print_buf_time; +} +alias WKSTA_INFO_1028* PWKSTA_INFO_1028, LPWKSTA_INFO_1028; + +struct WKSTA_INFO_1032 { + DWORD wki1032_wrk_heuristics; +} +alias WKSTA_INFO_1032* PWKSTA_INFO_1032, LPWKSTA_INFO_1032; + +struct WKSTA_INFO_1013 { + DWORD wki1013_keep_conn; +} +alias WKSTA_INFO_1013* PWKSTA_INFO_1013, LPWKSTA_INFO_1013; + +struct WKSTA_INFO_1018 { + DWORD wki1018_sess_timeout; +} +alias WKSTA_INFO_1018* PWKSTA_INFO_1018, LPWKSTA_INFO_1018; + +struct WKSTA_INFO_1023 { + DWORD wki1023_siz_char_buf; +} +alias WKSTA_INFO_1023* PWKSTA_INFO_1023, LPWKSTA_INFO_1023; + +struct WKSTA_INFO_1033 { + DWORD wki1033_max_threads; +} +alias WKSTA_INFO_1033* PWKSTA_INFO_1033, LPWKSTA_INFO_1033; + +struct WKSTA_INFO_1041 { + DWORD wki1041_lock_quota; +} +alias WKSTA_INFO_1041* PWKSTA_INFO_1041, LPWKSTA_INFO_1041; + +struct WKSTA_INFO_1042 { + DWORD wki1042_lock_increment; +} +alias WKSTA_INFO_1042* PWKSTA_INFO_1042, LPWKSTA_INFO_1042; + +struct WKSTA_INFO_1043 { + DWORD wki1043_lock_maximum; +} +alias WKSTA_INFO_1043* PWKSTA_INFO_1043, LPWKSTA_INFO_1043; + +struct WKSTA_INFO_1044 { + DWORD wki1044_pipe_increment; +} +alias WKSTA_INFO_1044* PWKSTA_INFO_1044, LPWKSTA_INFO_1044; + +struct WKSTA_INFO_1045 { + DWORD wki1045_pipe_maximum; +} +alias WKSTA_INFO_1045* PWKSTA_INFO_1045, LPWKSTA_INFO_1045; + +struct WKSTA_INFO_1046 { + DWORD wki1046_dormant_file_limit; +} +alias WKSTA_INFO_1046* PWKSTA_INFO_1046, LPWKSTA_INFO_1046; + +struct WKSTA_INFO_1047 { + DWORD wki1047_cache_file_timeout; +} +alias WKSTA_INFO_1047* PWKSTA_INFO_1047, LPWKSTA_INFO_1047; + +struct WKSTA_INFO_1048 { + BOOL wki1048_use_opportunistic_locking; +} +alias WKSTA_INFO_1048* PWKSTA_INFO_1048, LPWKSTA_INFO_1048; + +struct WKSTA_INFO_1049 { + BOOL wki1049_use_unlock_behind; +} +alias WKSTA_INFO_1049* PWKSTA_INFO_1049, LPWKSTA_INFO_1049; + +struct WKSTA_INFO_1050 { + BOOL wki1050_use_close_behind; +} +alias WKSTA_INFO_1050* PWKSTA_INFO_1050, LPWKSTA_INFO_1050; + +struct WKSTA_INFO_1051 { + BOOL wki1051_buf_named_pipes; +} +alias WKSTA_INFO_1051* PWKSTA_INFO_1051, LPWKSTA_INFO_1051; + +struct WKSTA_INFO_1052 { + BOOL wki1052_use_lock_read_unlock; +} +alias WKSTA_INFO_1052* PWKSTA_INFO_1052, LPWKSTA_INFO_1052; + +struct WKSTA_INFO_1053 { + BOOL wki1053_utilize_nt_caching; +} +alias WKSTA_INFO_1053* PWKSTA_INFO_1053, LPWKSTA_INFO_1053; + +struct WKSTA_INFO_1054 { + BOOL wki1054_use_raw_read; +} +alias WKSTA_INFO_1054* PWKSTA_INFO_1054, LPWKSTA_INFO_1054; + +struct WKSTA_INFO_1055 { + BOOL wki1055_use_raw_write; +} +alias WKSTA_INFO_1055* PWKSTA_INFO_1055, LPWKSTA_INFO_1055; + +struct WKSTA_INFO_1056 { + BOOL wki1056_use_write_raw_data; +} +alias WKSTA_INFO_1056* PWKSTA_INFO_1056, LPWKSTA_INFO_1056; + +struct WKSTA_INFO_1057 { + BOOL wki1057_use_encryption; +} +alias WKSTA_INFO_1057* PWKSTA_INFO_1057, LPWKSTA_INFO_1057; + +struct WKSTA_INFO_1058 { + BOOL wki1058_buf_files_deny_write; +} +alias WKSTA_INFO_1058* PWKSTA_INFO_1058, LPWKSTA_INFO_1058; + +struct WKSTA_INFO_1059 { + BOOL wki1059_buf_read_only_files; +} +alias WKSTA_INFO_1059* PWKSTA_INFO_1059, LPWKSTA_INFO_1059; + +struct WKSTA_INFO_1060 { + BOOL wki1060_force_core_create_mode; +} +alias WKSTA_INFO_1060* PWKSTA_INFO_1060, LPWKSTA_INFO_1060; + +struct WKSTA_INFO_1061 { + BOOL wki1061_use_512_byte_max_transfer; +} +alias WKSTA_INFO_1061* PWKSTA_INFO_1061, LPWKSTA_INFO_1061; + +struct WKSTA_INFO_1062 { + DWORD wki1062_read_ahead_throughput; +} +alias WKSTA_INFO_1062* PWKSTA_INFO_1062, LPWKSTA_INFO_1062; + +struct WKSTA_USER_INFO_0 { + LPWSTR wkui0_username; +} +alias WKSTA_USER_INFO_0* PWKSTA_USER_INFO_0, LPWKSTA_USER_INFO_0; + +struct WKSTA_USER_INFO_1{ + LPWSTR wkui1_username; + LPWSTR wkui1_logon_domain; + LPWSTR wkui1_oth_domains; + LPWSTR wkui1_logon_server; +} +alias WKSTA_USER_INFO_1* PWKSTA_USER_INFO_1, LPWKSTA_USER_INFO_1; + +struct WKSTA_USER_INFO_1101 { + LPWSTR wkui1101_oth_domains; +} +alias WKSTA_USER_INFO_1101* PWKSTA_USER_INFO_1101, LPWKSTA_USER_INFO_1101; + +struct WKSTA_TRANSPORT_INFO_0{ + DWORD wkti0_quality_of_service; + DWORD wkti0_number_of_vcs; + LPWSTR wkti0_transport_name; + LPWSTR wkti0_transport_address; + BOOL wkti0_wan_ish; +} +alias WKSTA_TRANSPORT_INFO_0* PWKSTA_TRANSPORT_INFO_0, LPWKSTA_TRANSPORT_INFO_0; + +extern (Windows) { +NET_API_STATUS NetWkstaGetInfo(LPWSTR,DWORD,PBYTE*); +NET_API_STATUS NetWkstaSetInfo(LPWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetWkstaUserGetInfo(LPWSTR,DWORD,PBYTE*); +NET_API_STATUS NetWkstaUserSetInfo(LPWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetWkstaUserEnum(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +NET_API_STATUS NetWkstaTransportAdd(LPWSTR,DWORD,PBYTE,PDWORD); +NET_API_STATUS NetWkstaTransportDel(LPWSTR,LPWSTR,DWORD); +NET_API_STATUS NetWkstaTransportEnum(LPWSTR,DWORD,PBYTE*,DWORD,PDWORD,PDWORD,PDWORD); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/lzexpand.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/lzexpand.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,48 @@ +/***********************************************************************\ +* lzexpand.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.lzexpand; +pragma(lib, "lz32.lib"); + +private import win32.winbase, win32.windef; + +enum : LONG { + LZERROR_BADINHANDLE = -1, + LZERROR_BADOUTHANDLE = -2, + LZERROR_READ = -3, + LZERROR_WRITE = -4, + LZERROR_GLOBALLOC = -5, + LZERROR_GLOBLOCK = -6, + LZERROR_BADVALUE = -7, + LZERROR_UNKNOWNALG = -8 +} + +extern (Windows): +deprecated { + LONG CopyLZFile(INT, INT); + void LZDone(); + INT LZStart(); +} +INT GetExpandedNameA(LPSTR, LPSTR); +INT GetExpandedNameW(LPWSTR, LPWSTR); +void LZClose(INT); +LONG LZCopy(INT, INT); +INT LZInit(INT); +INT LZOpenFileA(LPSTR, LPOFSTRUCT, WORD); +INT LZOpenFileW(LPWSTR, LPOFSTRUCT, WORD); +INT LZRead(INT, LPSTR, INT); +LONG LZSeek(INT, LONG, INT); + +version (Unicode) { + alias GetExpandedNameW GetExpandedName; + alias LZOpenFileW LZOpenFile; +} else { + alias GetExpandedNameA GetExpandedName; + alias LZOpenFileA LZOpenFile; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/makefile --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/makefile Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,30 @@ +# Makefile for the Windows API project +# Uses GNU Make-specific extensions + +DC := dmd.exe + +DFLAGS := -inline -O -release -w +#DFLAGS := -debug -gc -unittest -w + +DFLAGS += -version=Unicode -version=WindowsVista + +######################################## + +SUBDIRS := directx + +EXCLUSIONS := winsock.d + +######################################## + +SOURCES := $(wildcard *.d $(addsuffix /*.d, $(SUBDIRS))) +SOURCES := $(filter-out $(EXCLUSIONS), $(SOURCES)) + +######################################## + +win32.lib : $(SOURCES) + $(DC) $^ -lib -of$@ $(DFLAGS) + +clean : + -del win32.lib + +.PHONY : clean diff -r 586e4a649642 -r 4a9dcbd9e54f win32/mapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/mapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,168 @@ +/***********************************************************************\ +* mapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.mapi; + +private import win32.windef; + +// FIXME: check types and grouping of constants + +enum { + SUCCESS_SUCCESS, + MAPI_USER_ABORT, + MAPI_E_USER_ABORT = MAPI_USER_ABORT, + MAPI_E_FAILURE, + MAPI_E_LOGIN_FAILURE, + MAPI_E_LOGON_FAILURE = MAPI_E_LOGIN_FAILURE, + MAPI_E_DISK_FULL = 4, + MAPI_E_INSUFFICIENT_MEMORY, + MAPI_E_ACCESS_DENIED, + MAPI_E_BLK_TOO_SMALL = MAPI_E_ACCESS_DENIED, // = 6 + MAPI_E_TOO_MANY_SESSIONS = 8, + MAPI_E_TOO_MANY_FILES, + MAPI_E_TOO_MANY_RECIPIENTS, + MAPI_E_ATTACHMENT_NOT_FOUND, + MAPI_E_ATTACHMENT_OPEN_FAILURE, + MAPI_E_ATTACHMENT_WRITE_FAILURE, + MAPI_E_UNKNOWN_RECIPIENT, + MAPI_E_BAD_RECIPTYPE, + MAPI_E_NO_MESSAGES, + MAPI_E_INVALID_MESSAGE, + MAPI_E_TEXT_TOO_LARGE, + MAPI_E_INVALID_SESSION, + MAPI_E_TYPE_NOT_SUPPORTED, + MAPI_E_AMBIGUOUS_RECIPIENT, + MAPI_E_AMBIGUOUS_RECIP = MAPI_E_AMBIGUOUS_RECIPIENT, + MAPI_E_MESSAGE_IN_USE, + MAPI_E_NETWORK_FAILURE, + MAPI_E_INVALID_EDITFIELDS, + MAPI_E_INVALID_RECIPS, + MAPI_E_NOT_SUPPORTED // = 26 +} + +enum { + MAPI_ORIG, + MAPI_TO, + MAPI_CC, + MAPI_BCC +} + +const MAPI_LOGON_UI = 0x0001; +const MAPI_NEW_SESSION = 0x0002; +const MAPI_FORCE_DOWNLOAD = 0x1000; +const MAPI_LOGOFF_SHARED = 0x0001; +const MAPI_LOGOFF_UI = 0x0002; +const MAPI_DIALOG = 0x0008; +const MAPI_UNREAD_ONLY = 0x0020; +const MAPI_LONG_MSGID = 0x4000; +const MAPI_GUARANTEE_FIFO = 0x0100; +const MAPI_ENVELOPE_ONLY = 0x0040; +const MAPI_PEEK = 0x0080; +const MAPI_BODY_AS_FILE = 0x0200; +const MAPI_SUPPRESS_ATTACH = 0x0800; +const MAPI_AB_NOMODIFY = 0x0400; +const MAPI_OLE = 0x0001; +const MAPI_OLE_STATIC = 0x0002; +const MAPI_UNREAD = 0x0001; +const MAPI_RECEIPT_REQUESTED = 0x0002; +const MAPI_SENT = 0x0004; + +alias uint FLAGS, LHANDLE; +alias uint* LPLHANDLE, LPULONG; + +struct MapiRecipDesc { + ULONG ulReserved; + ULONG ulRecipClass; + LPSTR lpszName; + LPSTR lpszAddress; + ULONG ulEIDSize; + LPVOID lpEntryID; +} +alias MapiRecipDesc* lpMapiRecipDesc; + +struct MapiFileDesc { + ULONG ulReserved; + ULONG flFlags; + ULONG nPosition; + LPSTR lpszPathName; + LPSTR lpszFileName; + LPVOID lpFileType; +} +alias MapiFileDesc* lpMapiFileDesc; + +struct MapiFileTagExt { + ULONG ulReserved; + ULONG cbTag; + LPBYTE lpTag; + ULONG cbEncoding; + LPBYTE lpEncoding; +} +alias MapiFileTagExt* lpMapiFileTagExt; + +struct MapiMessage { + ULONG ulReserved; + LPSTR lpszSubject; + LPSTR lpszNoteText; + LPSTR lpszMessageType; + LPSTR lpszDateReceived; + LPSTR lpszConversationID; + FLAGS flFlags; + lpMapiRecipDesc lpOriginator; + ULONG nRecipCount; + lpMapiRecipDesc lpRecips; + ULONG nFileCount; + lpMapiFileDesc lpFiles; +} +alias MapiMessage* lpMapiMessage; + +extern (Pascal) { + ULONG MAPILogon(ULONG, LPSTR, LPSTR, FLAGS, ULONG, LPLHANDLE); + ULONG MAPISendMail(LHANDLE, ULONG, lpMapiMessage, FLAGS, ULONG); + ULONG MAPISendDocuments(ULONG, LPSTR, LPSTR, LPSTR, ULONG); + ULONG MAPIReadMail(LHANDLE, ULONG, LPSTR, FLAGS, ULONG, lpMapiMessage*); + ULONG MAPIFindNext(LHANDLE, ULONG, LPSTR, LPSTR, FLAGS, ULONG, LPSTR); + ULONG MAPIResolveName(LHANDLE, ULONG, LPSTR, FLAGS, ULONG, + lpMapiRecipDesc*); + ULONG MAPIAddress(LHANDLE, ULONG, LPSTR, ULONG, LPSTR, ULONG, + lpMapiRecipDesc, FLAGS, ULONG, LPULONG, lpMapiRecipDesc*); + ULONG MAPIFreeBuffer(LPVOID); + ULONG MAPIDetails(LHANDLE, ULONG, lpMapiRecipDesc, FLAGS, ULONG); + ULONG MAPISaveMail(LHANDLE, ULONG, lpMapiMessage lpszMessage, FLAGS, + ULONG, LPSTR); + ULONG MAPIDeleteMail(LHANDLE lpSession, ULONG, LPSTR, FLAGS, ULONG); + ULONG MAPILogoff(LHANDLE, ULONG, FLAGS, ULONG); + // Netscape extensions + ULONG MAPIGetNetscapeVersion(); + ULONG MAPI_NSCP_SynchronizeClient(LHANDLE, ULONG); + + // Handles for use with GetProcAddress + alias ULONG function(ULONG, LPSTR, LPSTR, FLAGS, ULONG, LPLHANDLE) + LPMAPILOGON; + alias ULONG function(LHANDLE, ULONG, lpMapiMessage, FLAGS, ULONG) + LPMAPISENDMAIL; + alias ULONG function(ULONG, LPSTR, LPSTR, LPSTR, ULONG) + LPMAPISENDDOCUMENTS; + alias ULONG function(LHANDLE, ULONG, LPSTR, FLAGS, ULONG, lpMapiMessage*) + LPMAPIREADMAIL; + alias ULONG function(LHANDLE, ULONG, LPSTR, LPSTR, FLAGS, ULONG, LPSTR) + LPMAPIFINDNEXT; + alias ULONG function(LHANDLE, ULONG, LPSTR, FLAGS, ULONG, + lpMapiRecipDesc*) LPMAPIRESOLVENAME; + alias ULONG function(LHANDLE, ULONG, LPSTR, ULONG, LPSTR, ULONG, + lpMapiRecipDesc, FLAGS, ULONG, LPULONG, lpMapiRecipDesc*) LPMAPIADDRESS; + alias ULONG function(LPVOID lpv) LPMAPIFREEBUFFER; + alias ULONG function(LHANDLE, ULONG, lpMapiRecipDesc, FLAGS, ULONG) + LPMAPIDETAILS; + alias ULONG function(LHANDLE, ULONG, lpMapiMessage, FLAGS, ULONG, LPSTR) + LPMAPISAVEMAIL; + alias ULONG function(LHANDLE lpSession, ULONG, LPSTR, FLAGS, ULONG) + LPMAPIDELETEMAIL; + alias ULONG function(LHANDLE, ULONG, FLAGS, ULONG) LPMAPILOGOFF; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/mciavi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/mciavi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,40 @@ +/***********************************************************************\ +* mciavi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.mciavi; + +private import win32.mmsystem; + +// FIXME: check types and grouping of constants + +const MCI_MCIAVI_PLAY_WINDOW = 0x01000000; +const MCI_MCIAVI_PLAY_FULLSCREEN = 0x02000000; +const MCI_MCIAVI_PLAY_FULLBY2 = 0x04000000; + +enum { + MCI_AVI_STATUS_FRAMES_SKIPPED = 0x00008001, + MCI_AVI_STATUS_LAST_PLAY_SPEED = 0x00008002, + MCI_AVI_STATUS_AUDIO_BREAKS = 0x00008003, + MCI_AVI_SETVIDEO_DRAW_PROCEDURE = 0x00008000, + MCI_AVI_SETVIDEO_PALETTE_COLOR = 0x00008100, + MCI_AVI_SETVIDEO_PALETTE_HALFTONE = 0x0000FFFF +} + +enum { + MCIERR_AVI_OLDAVIFORMAT = MCIERR_CUSTOM_DRIVER_BASE + 100, + MCIERR_AVI_NOTINTERLEAVED, + MCIERR_AVI_NODISPDIB, + MCIERR_AVI_CANTPLAYFULLSCREEN, + MCIERR_AVI_TOOBIGFORVGA, + MCIERR_AVI_NOCOMPRESSOR, + MCIERR_AVI_DISPLAYERROR, + MCIERR_AVI_AUDIOERROR, + MCIERR_AVI_BADPALETTE // = MCIERR_CUSTOM_DRIVER_BASE + 108 +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/mcx.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/mcx.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,99 @@ +/***********************************************************************\ +* mcx.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.mcx; + +private import win32.windef; + +const DWORD + DIALOPTION_BILLING = 64, + DIALOPTION_QUIET = 128, + DIALOPTION_DIALTONE = 256; + +const DWORD + MDMVOLFLAG_LOW = 1, + MDMVOLFLAG_MEDIUM = 2, + MDMVOLFLAG_HIGH = 4; + +enum : DWORD { + MDMVOL_LOW = 0, + MDMVOL_MEDIUM = 1, + MDMVOL_HIGH = 2 +} + +const DWORD + MDMSPKRFLAG_OFF = 1, + MDMSPKRFLAG_DIAL = 2, + MDMSPKRFLAG_ON = 4, + MDMSPKRFLAG_CALLSETUP = 8; + +enum : DWORD { + MDMSPKR_OFF, + MDMSPKR_DIAL, + MDMSPKR_ON, + MDMSPKR_CALLSETUP +} + +const DWORD + MDM_COMPRESSION = 0x0001, + MDM_ERROR_CONTROL = 0x0002, + MDM_FORCED_EC = 0x0004, + MDM_CELLULAR = 0x0008, + MDM_FLOWCONTROL_HARD = 0x0010, + MDM_FLOWCONTROL_SOFT = 0x0020, + MDM_CCITT_OVERRIDE = 0x0040, + MDM_SPEED_ADJUST = 0x0080, + MDM_TONE_DIAL = 0x0100, + MDM_BLIND_DIAL = 0x0200, + MDM_V23_OVERRIDE = 0x0400; + +struct MODEMDEVCAPS { + DWORD dwActualSize; + DWORD dwRequiredSize; + DWORD dwDevSpecificOffset; + DWORD dwDevSpecificSize; + DWORD dwModemProviderVersion; + DWORD dwModemManufacturerOffset; + DWORD dwModemManufacturerSize; + DWORD dwModemModelOffset; + DWORD dwModemModelSize; + DWORD dwModemVersionOffset; + DWORD dwModemVersionSize; + DWORD dwDialOptions; + DWORD dwCallSetupFailTimer; + DWORD dwInactivityTimeout; + DWORD dwSpeakerVolume; + DWORD dwSpeakerMode; + DWORD dwModemOptions; + DWORD dwMaxDTERate; + DWORD dwMaxDCERate; + BYTE _abVariablePortion; + + BYTE* abVariablePortion() { return &_abVariablePortion; } +} +alias MODEMDEVCAPS* PMODEMDEVCAPS, LPMODEMDEVCAPS; + +struct MODEMSETTINGS { + DWORD dwActualSize; + DWORD dwRequiredSize; + DWORD dwDevSpecificOffset; + DWORD dwDevSpecificSize; + DWORD dwCallSetupFailTimer; + DWORD dwInactivityTimeout; + DWORD dwSpeakerVolume; + DWORD dwSpeakerMode; + DWORD dwPreferredModemOptions; + DWORD dwNegotiatedModemOptions; + DWORD dwNegotiatedDCERate; + BYTE _abVariablePortion; + + BYTE* abVariablePortion() { return &_abVariablePortion; } +} +alias MODEMSETTINGS* PMODEMSETTINGS, LPMODEMSETTINGS; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/mgmtapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/mgmtapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,47 @@ +/***********************************************************************\ +* mgmtapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.mgmtapi; + +import win32.snmp; +private import win32.windef; + +enum { + SNMP_MGMTAPI_TIMEOUT = 40, + SNMP_MGMTAPI_SELECT_FDERRORS, + SNMP_MGMTAPI_TRAP_ERRORS, + SNMP_MGMTAPI_TRAP_DUPINIT, + SNMP_MGMTAPI_NOTRAPS, + SNMP_MGMTAPI_AGAIN, + SNMP_MGMTAPI_INVALID_CTL, + SNMP_MGMTAPI_INVALID_SESSION, + SNMP_MGMTAPI_INVALID_BUFFER // = 48 +} + +const MGMCTL_SETAGENTPORT = 1; + +alias PVOID LPSNMP_MGR_SESSION; + +extern (Windows) { + BOOL SnmpMgrClose(LPSNMP_MGR_SESSION); + BOOL SnmpMgrCtl(LPSNMP_MGR_SESSION, DWORD, LPVOID, DWORD, LPVOID, DWORD, + LPDWORD); + BOOL SnmpMgrGetTrap(AsnObjectIdentifier*, AsnNetworkAddress*, + AsnInteger*, AsnInteger*, AsnTimeticks*, SnmpVarBindList*); + BOOL SnmpMgrGetTrapEx(AsnObjectIdentifier*, AsnNetworkAddress*, + AsnNetworkAddress*, AsnInteger*, AsnInteger*, AsnOctetString*, + AsnTimeticks*, SnmpVarBindList*); + BOOL SnmpMgrOidToStr(AsnObjectIdentifier*, LPSTR*); + LPSNMP_MGR_SESSION SnmpMgrOpen(LPSTR, LPSTR, INT, INT); + INT SnmpMgrRequest(LPSNMP_MGR_SESSION, BYTE, SnmpVarBindList*, + AsnInteger*, AsnInteger*); + BOOL SnmpMgrStrToOid(LPSTR, AsnObjectIdentifier*); + BOOL SnmpMgrTrapListen(HANDLE*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/mmsystem.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/mmsystem.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,2269 @@ +/***********************************************************************\ +* mmsystem.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.mmsystem; +pragma(lib, "winmm.lib"); + +/* The #defines MAKEFOURCC, mmioFOURCC, sndAlias are used to define + * compile-time constants, so they are implemented as templates. + */ + +private import win32.w32api, win32.windef, win32.winver; + +align(1): + +const MAXPNAMELEN = 32; +const MAXERRORLENGTH = 256; +const MAX_JOYSTICKOEMVXDNAME = 260; + +const TIME_MS = 1; +const TIME_SAMPLES = 2; +const TIME_BYTES = 4; +const TIME_SMPTE = 8; +const TIME_MIDI = 16; +const TIME_TICKS = 32; + +template MAKEFOURCC(char c0, char c1, char c2, char c3) +{ + const DWORD MAKEFOURCC = c0 | (c1<<8) | (c2<<16) | (cast(DWORD)c3 <<24); +} + +template mmioFOURCC(char c0, char c1, char c2, char c3) +{ + const DWORD mmioFOURCC = c0 | (c1<<8) | (c2<<16) | (cast(DWORD)c3 <<24); +} + +enum { + MM_JOY1MOVE = 0x3A0, + MM_JOY2MOVE, + MM_JOY1ZMOVE, + MM_JOY2ZMOVE, // = 0x3A3 + MM_JOY1BUTTONDOWN = 0x3B5, + MM_JOY2BUTTONDOWN, + MM_JOY1BUTTONUP, + MM_JOY2BUTTONUP, + MM_MCINOTIFY, // = 0x3B9 + MM_WOM_OPEN = 0x3BB, + MM_WOM_CLOSE, + MM_WOM_DONE, + MM_WIM_OPEN, + MM_WIM_CLOSE, + MM_WIM_DATA, + MM_MIM_OPEN, + MM_MIM_CLOSE, + MM_MIM_DATA, + MM_MIM_LONGDATA, + MM_MIM_ERROR, + MM_MIM_LONGERROR, + MM_MOM_OPEN, + MM_MOM_CLOSE, + MM_MOM_DONE, // = 0x3C9 + MM_DRVM_OPEN = 0x3D0, + MM_DRVM_CLOSE, + MM_DRVM_DATA, + MM_DRVM_ERROR, + MM_STREAM_OPEN, + MM_STREAM_CLOSE, + MM_STREAM_DONE, + MM_STREAM_ERROR, // = 0x3D7 + MM_MOM_POSITIONCB = 0x3CA, + MM_MCISIGNAL, + MM_MIM_MOREDATA, // = 0x3CC + MM_MIXM_LINE_CHANGE = 0x3D0, + MM_MIXM_CONTROL_CHANGE = 0x3D1 +} + +const MMSYSERR_BASE = 0; +const WAVERR_BASE = 32; +const MIDIERR_BASE = 64; +const TIMERR_BASE = 96; +const JOYERR_BASE = 160; +const MCIERR_BASE = 256; +const MIXERR_BASE = 1024; +const MCI_STRING_OFFSET = 512; +const MCI_VD_OFFSET = 1024; +const MCI_CD_OFFSET = 1088; +const MCI_WAVE_OFFSET = 1152; +const MCI_SEQ_OFFSET = 1216; + +enum { + MMSYSERR_NOERROR = 0, + MMSYSERR_ERROR = MMSYSERR_BASE+1, + MMSYSERR_BADDEVICEID, + MMSYSERR_NOTENABLED, + MMSYSERR_ALLOCATED, + MMSYSERR_INVALHANDLE, + MMSYSERR_NODRIVER, + MMSYSERR_NOMEM, + MMSYSERR_NOTSUPPORTED, + MMSYSERR_BADERRNUM, + MMSYSERR_INVALFLAG, + MMSYSERR_INVALPARAM, + MMSYSERR_HANDLEBUSY, + MMSYSERR_INVALIDALIAS, + MMSYSERR_BADDB, + MMSYSERR_KEYNOTFOUND, + MMSYSERR_READERROR, + MMSYSERR_WRITEERROR, + MMSYSERR_DELETEERROR, + MMSYSERR_VALNOTFOUND, + MMSYSERR_NODRIVERCB, // = MMSYSERR_BASE+20 + MMSYSERR_LASTERROR = MMSYSERR_NODRIVERCB +} + +enum { + DRV_LOAD = 1, + DRV_ENABLE, + DRV_OPEN, + DRV_CLOSE, + DRV_DISABLE, + DRV_FREE, + DRV_CONFIGURE, + DRV_QUERYCONFIGURE, + DRV_INSTALL, + DRV_REMOVE, + DRV_EXITSESSION, + DRV_POWER +} + +const DRV_RESERVED = 0x800; +const DRV_USER = 0x4000; + +const DRVCNF_CANCEL = 0; +const DRVCNF_OK = 1; +const DRVCNF_RESTART = 2; +const DRV_CANCEL = DRVCNF_CANCEL; +const DRV_OK = DRVCNF_OK; +const DRV_RESTART = DRVCNF_RESTART; +const DRV_MCI_FIRST = DRV_RESERVED; +const DRV_MCI_LAST = DRV_RESERVED + 0xFFF; + +const CALLBACK_TYPEMASK = 0x70000; +const CALLBACK_NULL = 0; +const CALLBACK_WINDOW = 0x10000; +const CALLBACK_TASK = 0x20000; +const CALLBACK_FUNCTION = 0x30000; +const CALLBACK_THREAD = CALLBACK_TASK; +const CALLBACK_EVENT = 0x50000; + +const SND_SYNC=0; +const SND_ASYNC=1; +const SND_NODEFAULT=2; +const SND_MEMORY=4; +const SND_LOOP=8; +const SND_NOSTOP=16; +const SND_NOWAIT=0x2000; +const SND_ALIAS=0x10000; +const SND_ALIAS_ID=0x110000; +const SND_FILENAME=0x20000; +const SND_RESOURCE=0x40004; +const SND_PURGE=0x40; +const SND_APPLICATION=0x80; +const SND_ALIAS_START=0; + +template sndAlias(char c0, char c1) +{ + const DWORD sndAlias = SND_ALIAS_START + c0 | (c1<<8); +} + +const SND_ALIAS_SYSTEMASTERISK = sndAlias!('S','*'); +const SND_ALIAS_SYSTEMQUESTION = sndAlias!('S','?'); +const SND_ALIAS_SYSTEMHAND = sndAlias!('S','H'); +const SND_ALIAS_SYSTEMEXIT = sndAlias!('S','E'); +const SND_ALIAS_SYSTEMSTART = sndAlias!('S','S'); +const SND_ALIAS_SYSTEMWELCOME = sndAlias!('S','W'); +const SND_ALIAS_SYSTEMEXCLAMATION = sndAlias!('S','!'); +const SND_ALIAS_SYSTEMDEFAULT = sndAlias!('S','D'); + +enum { + WAVERR_BADFORMAT = (WAVERR_BASE + 0), + WAVERR_STILLPLAYING, + WAVERR_UNPREPARED, + WAVERR_SYNC, // = WAVERR_BASE + 3; + WAVERR_LASTERROR = WAVERR_SYNC +} + +const WOM_OPEN = MM_WOM_OPEN; +const WOM_CLOSE = MM_WOM_CLOSE; +const WOM_DONE = MM_WOM_DONE; +const WIM_OPEN = MM_WIM_OPEN; +const WIM_CLOSE = MM_WIM_CLOSE; +const WIM_DATA = MM_WIM_DATA; + +const UINT WAVE_MAPPER= -1; // FIXME: This doesn't make sense! +const WAVE_FORMAT_QUERY=1; +const WAVE_ALLOWSYNC=2; +const WAVE_MAPPED=4; +const WAVE_FORMAT_DIRECT=8; +const WAVE_FORMAT_DIRECT_QUERY=(WAVE_FORMAT_QUERY|WAVE_FORMAT_DIRECT); +const WHDR_DONE=1; +const WHDR_PREPARED=2; +const WHDR_BEGINLOOP=4; +const WHDR_ENDLOOP=8; +const WHDR_INQUEUE=16; + +const WAVECAPS_PITCH=1; +const WAVECAPS_PLAYBACKRATE=2; +const WAVECAPS_VOLUME=4; +const WAVECAPS_LRVOLUME=8; +const WAVECAPS_SYNC=16; +const WAVECAPS_SAMPLEACCURATE=32; +const WAVECAPS_DIRECTSOUND=64; + +const WAVE_INVALIDFORMAT=0; +const WAVE_FORMAT_1M08=1; +const WAVE_FORMAT_1S08=2; +const WAVE_FORMAT_1M16=4; +const WAVE_FORMAT_1S16=8; +const WAVE_FORMAT_2M08=16; +const WAVE_FORMAT_2S08=32; +const WAVE_FORMAT_2M16=64; +const WAVE_FORMAT_2S16=128; +const WAVE_FORMAT_4M08=256; +const WAVE_FORMAT_4S08=512; +const WAVE_FORMAT_4M16=1024; +const WAVE_FORMAT_4S16=2048; +const WAVE_FORMAT_PCM=1; + +enum { + MIDIERR_UNPREPARED = MIDIERR_BASE, + MIDIERR_STILLPLAYING, + MIDIERR_NOMAP, + MIDIERR_NOTREADY, + MIDIERR_NODEVICE, + MIDIERR_INVALIDSETUP, + MIDIERR_BADOPENMODE, + MIDIERR_DONT_CONTINUE, // = MIDIERR_BASE+7 + MIDIERR_LASTERROR = MIDIERR_DONT_CONTINUE +} + +const MIDIPATCHSIZE=128; + +const MIM_OPEN=MM_MIM_OPEN; +const MIM_CLOSE=MM_MIM_CLOSE; +const MIM_DATA=MM_MIM_DATA; +const MIM_LONGDATA=MM_MIM_LONGDATA; +const MIM_ERROR=MM_MIM_ERROR; +const MIM_LONGERROR=MM_MIM_LONGERROR; +const MOM_OPEN=MM_MOM_OPEN; +const MOM_CLOSE=MM_MOM_CLOSE; +const MOM_DONE=MM_MOM_DONE; +const MIM_MOREDATA=MM_MIM_MOREDATA; +const MOM_POSITIONCB=MM_MOM_POSITIONCB; + +const UINT MIDIMAPPER= -1; // FIXME: uint is nonsense for this! +const UINT MIDI_MAPPER= -1; // FIXME: uint is nonsense for this! +const MIDI_IO_STATUS=32; +const MIDI_CACHE_ALL=1; +const MIDI_CACHE_BESTFIT=2; +const MIDI_CACHE_QUERY=3; +const MIDI_UNCACHE=4; +const MOD_MIDIPORT=1; +const MOD_SYNTH=2; +const MOD_SQSYNTH=3; +const MOD_FMSYNTH=4; +const MOD_MAPPER=5; +const MIDICAPS_VOLUME=1; +const MIDICAPS_LRVOLUME=2; +const MIDICAPS_CACHE=4; +const MIDICAPS_STREAM=8; +const MHDR_DONE=1; +const MHDR_PREPARED=2; +const MHDR_INQUEUE=4; +const MHDR_ISSTRM=8; +const MEVT_F_SHORT=0; +const MEVT_F_LONG=0x80000000; +const MEVT_F_CALLBACK=0x40000000; + +BYTE MEVT_EVENTTYPE(DWORD x) { return cast(BYTE)((x>>24) &0xFF); } +DWORD MEVT_EVENTPARM(DWORD x) { return x & 0xFFFFFF; } + +const MEVT_SHORTMSG=0; +const MEVT_TEMPO=1; +const MEVT_NOP=2; + +const BYTE MEVT_LONGMSG = 0x80; +const BYTE MEVT_COMMENT = 0x82; +const BYTE MEVT_VERSION = 0x84; + +const MIDISTRM_ERROR = -2; + +const MIDIPROP_SET = 0x80000000; +const MIDIPROP_GET = 0x40000000; +const MIDIPROP_TIMEDIV = 1; +const MIDIPROP_TEMPO = 2; + +const UINT AUX_MAPPER = -1; + +const AUXCAPS_CDAUDIO=1; +const AUXCAPS_AUXIN=2; +const AUXCAPS_VOLUME=1; +const AUXCAPS_LRVOLUME=2; +const MIXER_SHORT_NAME_CHARS=16; +const MIXER_LONG_NAME_CHARS=64; +const MIXERR_INVALLINE=MIXERR_BASE; +const MIXERR_INVALCONTROL=(MIXERR_BASE+1); +const MIXERR_INVALVALUE=(MIXERR_BASE+2); +const MIXERR_LASTERROR=(MIXERR_BASE+2); + +const MIXER_OBJECTF_HANDLE=0x80000000; +const MIXER_OBJECTF_MIXER=0; +const MIXER_OBJECTF_HMIXER=(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIXER); +const MIXER_OBJECTF_WAVEOUT=0x10000000; +const MIXER_OBJECTF_HWAVEOUT=(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEOUT); +const MIXER_OBJECTF_WAVEIN=0x20000000; +const MIXER_OBJECTF_HWAVEIN=(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_WAVEIN); +const MIXER_OBJECTF_MIDIOUT=0x30000000; +const MIXER_OBJECTF_HMIDIOUT=(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIOUT); +const MIXER_OBJECTF_MIDIIN=0x40000000; +const MIXER_OBJECTF_HMIDIIN=(MIXER_OBJECTF_HANDLE|MIXER_OBJECTF_MIDIIN); +const MIXER_OBJECTF_AUX=0x50000000; + +const MIXERLINE_LINEF_ACTIVE=1; +const MIXERLINE_LINEF_DISCONNECTED=0x8000; +const MIXERLINE_LINEF_SOURCE=0x80000000; + +const MIXERLINE_COMPONENTTYPE_DST_FIRST=0; +const MIXERLINE_COMPONENTTYPE_DST_UNDEFINED=MIXERLINE_COMPONENTTYPE_DST_FIRST; +const MIXERLINE_COMPONENTTYPE_DST_DIGITAL=(MIXERLINE_COMPONENTTYPE_DST_FIRST+1); +const MIXERLINE_COMPONENTTYPE_DST_LINE=(MIXERLINE_COMPONENTTYPE_DST_FIRST+2); +const MIXERLINE_COMPONENTTYPE_DST_MONITOR=(MIXERLINE_COMPONENTTYPE_DST_FIRST+3); +const MIXERLINE_COMPONENTTYPE_DST_SPEAKERS=(MIXERLINE_COMPONENTTYPE_DST_FIRST+4); +const MIXERLINE_COMPONENTTYPE_DST_HEADPHONES=(MIXERLINE_COMPONENTTYPE_DST_FIRST+5); +const MIXERLINE_COMPONENTTYPE_DST_TELEPHONE=(MIXERLINE_COMPONENTTYPE_DST_FIRST+6); +const MIXERLINE_COMPONENTTYPE_DST_WAVEIN=(MIXERLINE_COMPONENTTYPE_DST_FIRST+7); +const MIXERLINE_COMPONENTTYPE_DST_VOICEIN=(MIXERLINE_COMPONENTTYPE_DST_FIRST+8); +const MIXERLINE_COMPONENTTYPE_DST_LAST=(MIXERLINE_COMPONENTTYPE_DST_FIRST+8); +const MIXERLINE_COMPONENTTYPE_SRC_FIRST=0x1000; +const MIXERLINE_COMPONENTTYPE_SRC_UNDEFINED=MIXERLINE_COMPONENTTYPE_SRC_FIRST; +const MIXERLINE_COMPONENTTYPE_SRC_DIGITAL=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+1); +const MIXERLINE_COMPONENTTYPE_SRC_LINE=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+2); +const MIXERLINE_COMPONENTTYPE_SRC_MICROPHONE=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+3); +const MIXERLINE_COMPONENTTYPE_SRC_SYNTHESIZER=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+4); +const MIXERLINE_COMPONENTTYPE_SRC_COMPACTDISC=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+5); +const MIXERLINE_COMPONENTTYPE_SRC_TELEPHONE=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+6); +const MIXERLINE_COMPONENTTYPE_SRC_PCSPEAKER=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+7); +const MIXERLINE_COMPONENTTYPE_SRC_WAVEOUT=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+8); +const MIXERLINE_COMPONENTTYPE_SRC_AUXILIARY=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+9); +const MIXERLINE_COMPONENTTYPE_SRC_ANALOG=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+10); +const MIXERLINE_COMPONENTTYPE_SRC_LAST=(MIXERLINE_COMPONENTTYPE_SRC_FIRST+10); + +enum { + MIXERLINE_TARGETTYPE_UNDEFINED = 0, + MIXERLINE_TARGETTYPE_WAVEOUT, + MIXERLINE_TARGETTYPE_WAVEIN, + MIXERLINE_TARGETTYPE_MIDIOUT, + MIXERLINE_TARGETTYPE_MIDIIN, + MIXERLINE_TARGETTYPE_AUX // =5 +} + +const MIXER_GETLINEINFOF_DESTINATION=0; +const MIXER_GETLINEINFOF_SOURCE=1; +const MIXER_GETLINEINFOF_LINEID=2; +const MIXER_GETLINEINFOF_COMPONENTTYPE=3; +const MIXER_GETLINEINFOF_TARGETTYPE=4; +const MIXER_GETLINEINFOF_QUERYMASK=15; + +const MIXERCONTROL_CONTROLF_UNIFORM=1; +const MIXERCONTROL_CONTROLF_MULTIPLE=2; +const MIXERCONTROL_CONTROLF_DISABLED=0x80000000; +const MIXERCONTROL_CT_CLASS_MASK=0xF0000000; +const MIXERCONTROL_CT_CLASS_CUSTOM=0; +const MIXERCONTROL_CT_CLASS_METER=0x10000000; +const MIXERCONTROL_CT_CLASS_SWITCH=0x20000000; +const MIXERCONTROL_CT_CLASS_NUMBER=0x30000000; +const MIXERCONTROL_CT_CLASS_SLIDER=0x40000000; +const MIXERCONTROL_CT_CLASS_FADER=0x50000000; +const MIXERCONTROL_CT_CLASS_TIME=0x60000000; +const MIXERCONTROL_CT_CLASS_LIST=0x70000000; +const MIXERCONTROL_CT_SUBCLASS_MASK=0xF000000; +const MIXERCONTROL_CT_SC_SWITCH_BOOLEAN=0; +const MIXERCONTROL_CT_SC_SWITCH_BUTTON=0x1000000; +const MIXERCONTROL_CT_SC_METER_POLLED=0; +const MIXERCONTROL_CT_SC_TIME_MICROSECS=0; +const MIXERCONTROL_CT_SC_TIME_MILLISECS=0x1000000; +const MIXERCONTROL_CT_SC_LIST_SINGLE=0; +const MIXERCONTROL_CT_SC_LIST_MULTIPLE=0x1000000; +const MIXERCONTROL_CT_UNITS_MASK=0xFF0000; +const MIXERCONTROL_CT_UNITS_CUSTOM=0; +const MIXERCONTROL_CT_UNITS_BOOLEAN=0x10000; +const MIXERCONTROL_CT_UNITS_SIGNED=0x20000; +const MIXERCONTROL_CT_UNITS_UNSIGNED=0x30000; +const MIXERCONTROL_CT_UNITS_DECIBELS=0x40000; +const MIXERCONTROL_CT_UNITS_PERCENT=0x50000; + +const MIXERCONTROL_CONTROLTYPE_CUSTOM=(MIXERCONTROL_CT_CLASS_CUSTOM|MIXERCONTROL_CT_UNITS_CUSTOM); +const MIXERCONTROL_CONTROLTYPE_BOOLEANMETER=(MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_BOOLEAN); +const MIXERCONTROL_CONTROLTYPE_SIGNEDMETER=(MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_SIGNED); +const MIXERCONTROL_CONTROLTYPE_PEAKMETER=(MIXERCONTROL_CONTROLTYPE_SIGNEDMETER+1); +const MIXERCONTROL_CONTROLTYPE_UNSIGNEDMETER=(MIXERCONTROL_CT_CLASS_METER|MIXERCONTROL_CT_SC_METER_POLLED|MIXERCONTROL_CT_UNITS_UNSIGNED); +const MIXERCONTROL_CONTROLTYPE_BOOLEAN=(MIXERCONTROL_CT_CLASS_SWITCH|MIXERCONTROL_CT_SC_SWITCH_BOOLEAN|MIXERCONTROL_CT_UNITS_BOOLEAN); +const MIXERCONTROL_CONTROLTYPE_ONOFF=(MIXERCONTROL_CONTROLTYPE_BOOLEAN+1); +const MIXERCONTROL_CONTROLTYPE_MUTE=(MIXERCONTROL_CONTROLTYPE_BOOLEAN+2); +const MIXERCONTROL_CONTROLTYPE_MONO=(MIXERCONTROL_CONTROLTYPE_BOOLEAN+3); +const MIXERCONTROL_CONTROLTYPE_LOUDNESS=(MIXERCONTROL_CONTROLTYPE_BOOLEAN+4); +const MIXERCONTROL_CONTROLTYPE_STEREOENH=(MIXERCONTROL_CONTROLTYPE_BOOLEAN+5); +const MIXERCONTROL_CONTROLTYPE_BUTTON=(MIXERCONTROL_CT_CLASS_SWITCH|MIXERCONTROL_CT_SC_SWITCH_BUTTON|MIXERCONTROL_CT_UNITS_BOOLEAN); +const MIXERCONTROL_CONTROLTYPE_DECIBELS=(MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_DECIBELS); +const MIXERCONTROL_CONTROLTYPE_SIGNED=(MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_SIGNED); +const MIXERCONTROL_CONTROLTYPE_UNSIGNED=(MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_UNSIGNED); +const MIXERCONTROL_CONTROLTYPE_PERCENT=(MIXERCONTROL_CT_CLASS_NUMBER|MIXERCONTROL_CT_UNITS_PERCENT); +const MIXERCONTROL_CONTROLTYPE_SLIDER=(MIXERCONTROL_CT_CLASS_SLIDER|MIXERCONTROL_CT_UNITS_SIGNED); +const MIXERCONTROL_CONTROLTYPE_PAN=(MIXERCONTROL_CONTROLTYPE_SLIDER+1); +const MIXERCONTROL_CONTROLTYPE_QSOUNDPAN=(MIXERCONTROL_CONTROLTYPE_SLIDER+2); +const MIXERCONTROL_CONTROLTYPE_FADER=(MIXERCONTROL_CT_CLASS_FADER|MIXERCONTROL_CT_UNITS_UNSIGNED); +const MIXERCONTROL_CONTROLTYPE_VOLUME=(MIXERCONTROL_CONTROLTYPE_FADER+1); +const MIXERCONTROL_CONTROLTYPE_BASS=(MIXERCONTROL_CONTROLTYPE_FADER+2); +const MIXERCONTROL_CONTROLTYPE_TREBLE=(MIXERCONTROL_CONTROLTYPE_FADER+3); +const MIXERCONTROL_CONTROLTYPE_EQUALIZER=(MIXERCONTROL_CONTROLTYPE_FADER+4); +const MIXERCONTROL_CONTROLTYPE_SINGLESELECT=(MIXERCONTROL_CT_CLASS_LIST|MIXERCONTROL_CT_SC_LIST_SINGLE|MIXERCONTROL_CT_UNITS_BOOLEAN); +const MIXERCONTROL_CONTROLTYPE_MUX=(MIXERCONTROL_CONTROLTYPE_SINGLESELECT+1); +const MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT=(MIXERCONTROL_CT_CLASS_LIST|MIXERCONTROL_CT_SC_LIST_MULTIPLE|MIXERCONTROL_CT_UNITS_BOOLEAN); +const MIXERCONTROL_CONTROLTYPE_MIXER=(MIXERCONTROL_CONTROLTYPE_MULTIPLESELECT+1); +const MIXERCONTROL_CONTROLTYPE_MICROTIME=(MIXERCONTROL_CT_CLASS_TIME|MIXERCONTROL_CT_SC_TIME_MICROSECS|MIXERCONTROL_CT_UNITS_UNSIGNED); +const MIXERCONTROL_CONTROLTYPE_MILLITIME=(MIXERCONTROL_CT_CLASS_TIME|MIXERCONTROL_CT_SC_TIME_MILLISECS|MIXERCONTROL_CT_UNITS_UNSIGNED); + +const MIXER_GETLINECONTROLSF_ALL=0; +const MIXER_GETLINECONTROLSF_ONEBYID=1; +const MIXER_GETLINECONTROLSF_ONEBYTYPE=2; +const MIXER_GETLINECONTROLSF_QUERYMASK=15; +const MIXER_GETCONTROLDETAILSF_VALUE=0; +const MIXER_GETCONTROLDETAILSF_LISTTEXT=1; +const MIXER_GETCONTROLDETAILSF_QUERYMASK=15; +const MIXER_SETCONTROLDETAILSF_VALUE=0; +const MIXER_SETCONTROLDETAILSF_CUSTOM=1; +const MIXER_SETCONTROLDETAILSF_QUERYMASK=15; + +const TIMERR_NOERROR=0; +const TIMERR_NOCANDO=(TIMERR_BASE+1); +const TIMERR_STRUCT=(TIMERR_BASE+33); +const TIME_ONESHOT=0; +const TIME_PERIODIC=1; +const TIME_CALLBACK_FUNCTION=0; +const TIME_CALLBACK_EVENT_SET=16; +const TIME_CALLBACK_EVENT_PULSE=32; + +static if (WINVER >= 0x0501) { + +const TIME_KILL_SYNCHRONOUS=0x0100; + +} + +const JOYERR_NOERROR = 0; +const JOYERR_PARMS=(JOYERR_BASE+5); +const JOYERR_NOCANDO=(JOYERR_BASE+6); +const JOYERR_UNPLUGGED=(JOYERR_BASE+7); + +const JOY_BUTTON1=1; +const JOY_BUTTON2=2; +const JOY_BUTTON3=4; +const JOY_BUTTON4=8; +const JOY_BUTTON1CHG=256; +const JOY_BUTTON2CHG=512; +const JOY_BUTTON3CHG=1024; +const JOY_BUTTON4CHG=2048; +const JOY_BUTTON5=257; +const JOY_BUTTON6=513; +const JOY_BUTTON7=1025; +const JOY_BUTTON8=2049; +const JOY_BUTTON9=256; +const JOY_BUTTON10=512; +const JOY_BUTTON11=1024; +const JOY_BUTTON12=2048; +const JOY_BUTTON13=4096; +const JOY_BUTTON14=8192; +const JOY_BUTTON15=16384; +const JOY_BUTTON16=32768; +const JOY_BUTTON17=65536; +const JOY_BUTTON18=0x20000; +const JOY_BUTTON19=0x40000; +const JOY_BUTTON20=0x80000; +const JOY_BUTTON21=0x100000; +const JOY_BUTTON22=0x200000; +const JOY_BUTTON23=0x400000; +const JOY_BUTTON24=0x800000; +const JOY_BUTTON25=0x1000000; +const JOY_BUTTON26=0x2000000; +const JOY_BUTTON27=0x4000000; +const JOY_BUTTON28=0x8000000; +const JOY_BUTTON29=0x10000000; +const JOY_BUTTON30=0x20000000; +const JOY_BUTTON31=0x40000000; +const JOY_BUTTON32=0x80000000; + +enum : DWORD { + JOY_POVCENTERED = -1, + JOY_POVFORWARD = 0, + JOY_POVBACKWARD = 18000, + JOY_POVLEFT = 27000, + JOY_POVRIGHT = 9000 +} + +const DWORD + JOY_RETURNX = 0x00000001, + JOY_RETURNY = 0x00000002, + JOY_RETURNZ = 0x00000004, + JOY_RETURNR = 0x00000008, + JOY_RETURNU = 0x00000010, + JOY_RETURNV = 0x00000020, + JOY_RETURNPOV = 0x00000040, + JOY_RETURNBUTTONS = 0x00000080, + JOY_RETURNRAWDATA = 0x00000100, + JOY_RETURNPOVCTS = 0x00000200, + JOY_RETURNCENTERED = 0x00000400, + JOY_USEDEADZONE = 0x00000800, + JOY_RETURNALL = JOY_RETURNX | JOY_RETURNY | JOY_RETURNZ | JOY_RETURNR + | JOY_RETURNU | JOY_RETURNV | JOY_RETURNPOV + | JOY_RETURNBUTTONS, + JOY_CAL_READALWAYS = 0x00010000, + JOY_CAL_READXYONLY = 0x00020000, + JOY_CAL_READ3 = 0x00040000, + JOY_CAL_READ4 = 0x00080000, + JOY_CAL_READXONLY = 0x00100000, + JOY_CAL_READYONLY = 0x00200000, + JOY_CAL_READ5 = 0x00400000, + JOY_CAL_READ6 = 0x00800000, + JOY_CAL_READZONLY = 0x01000000, + JOY_CAL_READRONLY = 0x02000000, + JOY_CAL_READUONLY = 0x04000000, + JOY_CAL_READVONLY = 0x08000000; + +const JOYSTICKID1=0; +const JOYSTICKID2=1; + +const JOYCAPS_HASZ=1; +const JOYCAPS_HASR=2; +const JOYCAPS_HASU=4; +const JOYCAPS_HASV=8; +const JOYCAPS_HASPOV=16; +const JOYCAPS_POV4DIR=32; +const JOYCAPS_POVCTS=64; + +const MMIOERR_BASE=256; +const MMIOERR_FILENOTFOUND=(MMIOERR_BASE+1); +const MMIOERR_OUTOFMEMORY=(MMIOERR_BASE+2); +const MMIOERR_CANNOTOPEN=(MMIOERR_BASE+3); +const MMIOERR_CANNOTCLOSE=(MMIOERR_BASE+4); +const MMIOERR_CANNOTREAD=(MMIOERR_BASE+5); +const MMIOERR_CANNOTWRITE=(MMIOERR_BASE+6); +const MMIOERR_CANNOTSEEK=(MMIOERR_BASE+7); +const MMIOERR_CANNOTEXPAND=(MMIOERR_BASE+8); +const MMIOERR_CHUNKNOTFOUND=(MMIOERR_BASE+9); +const MMIOERR_UNBUFFERED=(MMIOERR_BASE+10); +const MMIOERR_PATHNOTFOUND=(MMIOERR_BASE+11); +const MMIOERR_ACCESSDENIED=(MMIOERR_BASE+12); +const MMIOERR_SHARINGVIOLATION=(MMIOERR_BASE+13); +const MMIOERR_NETWORKERROR=(MMIOERR_BASE+14); +const MMIOERR_TOOMANYOPENFILES=(MMIOERR_BASE+15); +const MMIOERR_INVALIDFILE=(MMIOERR_BASE+16); + +const CFSEPCHAR='+'; + +const MMIO_RWMODE=3; +const MMIO_SHAREMODE=0x70; +const MMIO_CREATE=0x1000; +const MMIO_PARSE=256; +const MMIO_DELETE=512; +const MMIO_EXIST=0x4000; +const MMIO_ALLOCBUF=0x10000; +const MMIO_GETTEMP=0x20000; +const MMIO_DIRTY=0x10000000; +const MMIO_READ=0; +const MMIO_WRITE=1; +const MMIO_READWRITE=2; +const MMIO_COMPAT=0; +const MMIO_EXCLUSIVE=16; +const MMIO_DENYWRITE=32; +const MMIO_DENYREAD=0x30; +const MMIO_DENYNONE=64; +const MMIO_FHOPEN=16; +const MMIO_EMPTYBUF=16; +const MMIO_TOUPPER=16; +const MMIO_INSTALLPROC=0x10000; +const MMIO_GLOBALPROC=0x10000000; +const MMIO_REMOVEPROC=0x20000; +const MMIO_UNICODEPROC=0x1000000; +const MMIO_FINDPROC=0x40000; +const MMIO_FINDCHUNK=16; +const MMIO_FINDRIFF=32; +const MMIO_FINDLIST=64; +const MMIO_CREATERIFF=32; +const MMIO_CREATELIST=64; +const MMIOM_READ=MMIO_READ; +const MMIOM_WRITE=MMIO_WRITE; +const MMIOM_SEEK=2; +const MMIOM_OPEN=3; +const MMIOM_CLOSE=4; +const MMIOM_WRITEFLUSH=5; +const MMIOM_RENAME=6; +const MMIOM_USER=0x8000; + +const FOURCC_RIFF = mmioFOURCC!('R', 'I', 'F', 'F'); +const FOURCC_LIST = mmioFOURCC!('L', 'I', 'S', 'T'); +const FOURCC_DOS = mmioFOURCC!('D', 'O', 'S', ' '); +const FOURCC_MEM = mmioFOURCC!('M', 'E', 'M', ' '); + +const MMIO_DEFAULTBUFFER=8192; + +enum { + MCIERR_INVALID_DEVICE_ID = MCIERR_BASE + 1, + MCIERR_UNRECOGNIZED_KEYWORD = MCIERR_BASE + 3, + MCIERR_UNRECOGNIZED_COMMAND = MCIERR_BASE + 5, + MCIERR_HARDWARE, + MCIERR_INVALID_DEVICE_NAME, + MCIERR_OUT_OF_MEMORY, + MCIERR_DEVICE_OPEN, + MCIERR_CANNOT_LOAD_DRIVER, + MCIERR_MISSING_COMMAND_STRING, + MCIERR_PARAM_OVERFLOW, + MCIERR_MISSING_STRING_ARGUMENT, + MCIERR_BAD_INTEGER, + MCIERR_PARSER_INTERNAL, + MCIERR_DRIVER_INTERNAL, + MCIERR_MISSING_PARAMETER, + MCIERR_UNSUPPORTED_FUNCTION, + MCIERR_FILE_NOT_FOUND, + MCIERR_DEVICE_NOT_READY, + MCIERR_INTERNAL, + MCIERR_DRIVER, + MCIERR_CANNOT_USE_ALL, + MCIERR_MULTIPLE, + MCIERR_EXTENSION_NOT_FOUND, + MCIERR_OUTOFRANGE, // = MCIERR_BASE+26 + MCIERR_FLAGS_NOT_COMPATIBLE = MCIERR_BASE + 28, + MCIERR_FILE_NOT_SAVED = MCIERR_BASE + 30, + MCIERR_DEVICE_TYPE_REQUIRED, + MCIERR_DEVICE_LOCKED, + MCIERR_DUPLICATE_ALIAS, + MCIERR_BAD_CONSTANT, + MCIERR_MUST_USE_SHAREABLE, + MCIERR_MISSING_DEVICE_NAME, + MCIERR_BAD_TIME_FORMAT, + MCIERR_NO_CLOSING_QUOTE, + MCIERR_DUPLICATE_FLAGS, + MCIERR_INVALID_FILE, + MCIERR_NULL_PARAMETER_BLOCK, + MCIERR_UNNAMED_RESOURCE, + MCIERR_NEW_REQUIRES_ALIAS, + MCIERR_NOTIFY_ON_AUTO_OPEN, + MCIERR_NO_ELEMENT_ALLOWED, + MCIERR_NONAPPLICABLE_FUNCTION, + MCIERR_ILLEGAL_FOR_AUTO_OPEN, + MCIERR_FILENAME_REQUIRED, + MCIERR_EXTRA_CHARACTERS, + MCIERR_DEVICE_NOT_INSTALLED, + MCIERR_GET_CD, + MCIERR_SET_CD, + MCIERR_SET_DRIVE, + MCIERR_DEVICE_LENGTH, + MCIERR_DEVICE_ORD_LENGTH, + MCIERR_NO_INTEGER, // = MCIERR_BASE + 56 + MCIERR_WAVE_OUTPUTSINUSE = MCIERR_BASE + 64, + MCIERR_WAVE_SETOUTPUTINUSE, + MCIERR_WAVE_INPUTSINUSE, + MCIERR_WAVE_SETINPUTINUSE, + MCIERR_WAVE_OUTPUTUNSPECIFIED, + MCIERR_WAVE_INPUTUNSPECIFIED, + MCIERR_WAVE_OUTPUTSUNSUITABLE, + MCIERR_WAVE_SETOUTPUTUNSUITABLE, + MCIERR_WAVE_INPUTSUNSUITABLE, + MCIERR_WAVE_SETINPUTUNSUITABLE, // = MCIERR_BASE + 73 + MCIERR_SEQ_DIV_INCOMPATIBLE = MCIERR_BASE + 80, + MCIERR_SEQ_PORT_INUSE, + MCIERR_SEQ_PORT_NONEXISTENT, + MCIERR_SEQ_PORT_MAPNODEVICE, + MCIERR_SEQ_PORT_MISCERROR, + MCIERR_SEQ_TIMER, + MCIERR_SEQ_PORTUNSPECIFIED, + MCIERR_SEQ_NOMIDIPRESENT, // = MCIERR_BASE + 87 + MCIERR_NO_WINDOW = MCIERR_BASE + 90, + MCIERR_CREATEWINDOW, + MCIERR_FILE_READ, + MCIERR_FILE_WRITE, + MCIERR_NO_IDENTITY // = MCIERR_BASE + 94 +} +const MCIERR_CUSTOM_DRIVER_BASE = MCIERR_BASE + 256; + +const MCI_FIRST=DRV_MCI_FIRST; +const MCI_OPEN=0x803; +const MCI_CLOSE=0x804; +const MCI_ESCAPE=0x805; +const MCI_PLAY=0x806; +const MCI_SEEK=0x807; +const MCI_STOP=0x808; +const MCI_PAUSE=0x809; +const MCI_INFO=0x80A; +const MCI_GETDEVCAPS=0x80B; +const MCI_SPIN=0x80C; +const MCI_SET=0x80D; +const MCI_STEP=0x80E; +const MCI_RECORD=0x80F; +const MCI_SYSINFO=0x810; +const MCI_BREAK=0x811; +const MCI_SAVE=0x813; +const MCI_STATUS=0x814; +const MCI_CUE=0x830; +const MCI_REALIZE=0x840; +const MCI_WINDOW=0x841; +const MCI_PUT=0x842; +const MCI_WHERE=0x843; +const MCI_FREEZE=0x844; +const MCI_UNFREEZE=0x845; +const MCI_LOAD=0x850; +const MCI_CUT=0x851; +const MCI_COPY=0x852; +const MCI_PASTE=0x853; +const MCI_UPDATE=0x854; +const MCI_RESUME=0x855; +const MCI_DELETE=0x856; +const MCI_USER_MESSAGES=(DRV_MCI_FIRST+0x400); +const MCI_LAST=0xFFF; + +const MCIDEVICEID MCI_ALL_DEVICE_ID = -1; + +const MCI_DEVTYPE_VCR=513; +const MCI_DEVTYPE_VIDEODISC=514; +const MCI_DEVTYPE_OVERLAY=515; +const MCI_DEVTYPE_CD_AUDIO=516; +const MCI_DEVTYPE_DAT=517; +const MCI_DEVTYPE_SCANNER=518; +const MCI_DEVTYPE_ANIMATION=519; +const MCI_DEVTYPE_DIGITAL_VIDEO=520; +const MCI_DEVTYPE_OTHER=521; +const MCI_DEVTYPE_WAVEFORM_AUDIO=522; +const MCI_DEVTYPE_SEQUENCER=523; +const MCI_DEVTYPE_FIRST=MCI_DEVTYPE_VCR; +const MCI_DEVTYPE_LAST=MCI_DEVTYPE_SEQUENCER; +const MCI_DEVTYPE_FIRST_USER=0x1000; +const MCI_MODE_NOT_READY=(MCI_STRING_OFFSET+12); +const MCI_MODE_STOP=(MCI_STRING_OFFSET+13); +const MCI_MODE_PLAY=(MCI_STRING_OFFSET+14); +const MCI_MODE_RECORD=(MCI_STRING_OFFSET+15); +const MCI_MODE_SEEK=(MCI_STRING_OFFSET+16); +const MCI_MODE_PAUSE=(MCI_STRING_OFFSET+17); +const MCI_MODE_OPEN=(MCI_STRING_OFFSET+18); +const MCI_FORMAT_MILLISECONDS=0; +const MCI_FORMAT_HMS=1; +const MCI_FORMAT_MSF=2; +const MCI_FORMAT_FRAMES=3; +const MCI_FORMAT_SMPTE_24=4; +const MCI_FORMAT_SMPTE_25=5; +const MCI_FORMAT_SMPTE_30=6; +const MCI_FORMAT_SMPTE_30DROP=7; +const MCI_FORMAT_BYTES=8; +const MCI_FORMAT_SAMPLES=9; +const MCI_FORMAT_TMSF=10; + + + + +// Macros +BYTE MCI_HMS_HOUR(DWORD t) { return cast(BYTE)(t); } +BYTE MCI_HMS_MINUTE(DWORD t) { return cast(BYTE)(t>>>8); } +BYTE MCI_HMS_SECOND(DWORD t) { return cast(BYTE)( t>>>16); } +DWORD MCI_MAKE_HMS(BYTE h, BYTE m, BYTE s) { return h |(m<<8)|(cast(DWORD)(s)<<16); } +DWORD MCI_MAKE_MSF(BYTE m, BYTE s, BYTE f) { return m |(s<<8)|(cast(DWORD)(f)<<16); } +DWORD MCI_MAKE_TMSF(BYTE t, BYTE m, BYTE s, BYTE f) { + return t |(m<<8)|(s<<16)|(cast(DWORD)(f)<< 24); } + +BYTE MCI_MSF_MINUTE(DWORD t) { return cast(BYTE)(t); } +BYTE MCI_MSF_SECOND(DWORD t) { return cast(BYTE)(t >>> 8); } +BYTE MCI_MSF_FRAME(DWORD t) { return cast(BYTE)(t >>> 16); } + +BYTE MCI_TMSF_TRACK(DWORD t) { return cast(BYTE)(t); } +BYTE MCI_TMSF_MINUTE(DWORD t) { return cast(BYTE)(t>>8); } +BYTE MCI_TMSF_SECOND(DWORD t) { return cast(BYTE)(t>>16); } +BYTE MCI_TMSF_FRAME(DWORD t) { return cast(BYTE)(t>>24); } + + +const MCI_NOTIFY_SUCCESSFUL=1; +const MCI_NOTIFY_SUPERSEDED=2; +const MCI_NOTIFY_ABORTED=4; +const MCI_NOTIFY_FAILURE=8; +const MCI_NOTIFY=1; +const MCI_WAIT=2; +const MCI_FROM=4; +const MCI_TO=8; +const MCI_TRACK=16; +const MCI_OPEN_SHAREABLE=256; +const MCI_OPEN_ELEMENT=512; +const MCI_OPEN_ALIAS=1024; +const MCI_OPEN_ELEMENT_ID=2048; +const MCI_OPEN_TYPE_ID=0x1000; +const MCI_OPEN_TYPE=0x2000; +const MCI_SEEK_TO_START=256; +const MCI_SEEK_TO_END=512; +const MCI_STATUS_ITEM=256; +const MCI_STATUS_START=512; +const MCI_STATUS_LENGTH=1; +const MCI_STATUS_POSITION=2; +const MCI_STATUS_NUMBER_OF_TRACKS=3; +const MCI_STATUS_MODE=4; +const MCI_STATUS_MEDIA_PRESENT=5; +const MCI_STATUS_TIME_FORMAT=6; +const MCI_STATUS_READY=7; +const MCI_STATUS_CURRENT_TRACK=8; +const MCI_INFO_PRODUCT=256; +const MCI_INFO_FILE=512; +const MCI_INFO_MEDIA_UPC=1024; +const MCI_INFO_MEDIA_IDENTITY=2048; +const MCI_INFO_NAME=0x1000; +const MCI_INFO_COPYRIGHT=0x2000; + +const MCI_GETDEVCAPS_ITEM=256; +const MCI_GETDEVCAPS_CAN_RECORD=1; +const MCI_GETDEVCAPS_HAS_AUDIO=2; +const MCI_GETDEVCAPS_HAS_VIDEO=3; +const MCI_GETDEVCAPS_DEVICE_TYPE=4; +const MCI_GETDEVCAPS_USES_FILES=5; +const MCI_GETDEVCAPS_COMPOUND_DEVICE=6; +const MCI_GETDEVCAPS_CAN_EJECT=7; +const MCI_GETDEVCAPS_CAN_PLAY=8; +const MCI_GETDEVCAPS_CAN_SAVE=9; + +const MCI_SYSINFO_QUANTITY=256; +const MCI_SYSINFO_OPEN=512; +const MCI_SYSINFO_NAME=1024; +const MCI_SYSINFO_INSTALLNAME=2048; +const MCI_SET_DOOR_OPEN=256; +const MCI_SET_DOOR_CLOSED=512; +const MCI_SET_TIME_FORMAT=1024; +const MCI_SET_AUDIO=2048; +const MCI_SET_VIDEO=0x1000; +const MCI_SET_ON=0x2000; +const MCI_SET_OFF=0x4000; + +const MCI_SET_AUDIO_ALL=0; +const MCI_SET_AUDIO_LEFT=1; +const MCI_SET_AUDIO_RIGHT=2; + +const MCI_BREAK_KEY=256; +const MCI_BREAK_HWND=512; +const MCI_BREAK_OFF=1024; + +const MCI_RECORD_INSERT=256; +const MCI_RECORD_OVERWRITE=512; +const MCI_SAVE_FILE=256; +const MCI_LOAD_FILE=256; + +const MCI_VD_MODE_PARK=(MCI_VD_OFFSET+1); +const MCI_VD_MEDIA_CLV=(MCI_VD_OFFSET+2); +const MCI_VD_MEDIA_CAV=(MCI_VD_OFFSET+3); +const MCI_VD_MEDIA_OTHER=(MCI_VD_OFFSET+4); + +const MCI_VD_FORMAT_TRACK=0x4001; +const MCI_VD_PLAY_REVERSE=0x10000; +const MCI_VD_PLAY_FAST=0x20000; +const MCI_VD_PLAY_SPEED=0x40000; +const MCI_VD_PLAY_SCAN=0x80000; +const MCI_VD_PLAY_SLOW=0x100000; +const MCI_VD_SEEK_REVERSE=0x10000; +const MCI_VD_STATUS_SPEED=0x4002; +const MCI_VD_STATUS_FORWARD=0x4003; +const MCI_VD_STATUS_MEDIA_TYPE=0x4004; +const MCI_VD_STATUS_SIDE=0x4005; +const MCI_VD_STATUS_DISC_SIZE=0x4006; +const MCI_VD_GETDEVCAPS_CLV=0x10000; +const MCI_VD_GETDEVCAPS_CAV=0x20000; +const MCI_VD_SPIN_UP=0x10000; +const MCI_VD_SPIN_DOWN=0x20000; +const MCI_VD_GETDEVCAPS_CAN_REVERSE=0x4002; +const MCI_VD_GETDEVCAPS_FAST_RATE=0x4003; +const MCI_VD_GETDEVCAPS_SLOW_RATE=0x4004; +const MCI_VD_GETDEVCAPS_NORMAL_RATE=0x4005; +const MCI_VD_STEP_FRAMES=0x10000; +const MCI_VD_STEP_REVERSE=0x20000; +const MCI_VD_ESCAPE_STRING=256; + +const MCI_CDA_STATUS_TYPE_TRACK=0x4001; +const MCI_CDA_TRACK_AUDIO=MCI_CD_OFFSET; +const MCI_CDA_TRACK_OTHER=(MCI_CD_OFFSET+1); + +const MCI_WAVE_PCM=MCI_WAVE_OFFSET; +const MCI_WAVE_MAPPER=(MCI_WAVE_OFFSET+1); +const MCI_WAVE_OPEN_BUFFER=0x10000; +const MCI_WAVE_SET_FORMATTAG=0x10000; +const MCI_WAVE_SET_CHANNELS=0x20000; +const MCI_WAVE_SET_SAMPLESPERSEC=0x40000; +const MCI_WAVE_SET_AVGBYTESPERSEC=0x80000; +const MCI_WAVE_SET_BLOCKALIGN=0x100000; +const MCI_WAVE_SET_BITSPERSAMPLE=0x200000; +const MCI_WAVE_INPUT=0x400000; +const MCI_WAVE_OUTPUT=0x800000; +const MCI_WAVE_STATUS_FORMATTAG=0x4001; +const MCI_WAVE_STATUS_CHANNELS=0x4002; +const MCI_WAVE_STATUS_SAMPLESPERSEC=0x4003; +const MCI_WAVE_STATUS_AVGBYTESPERSEC=0x4004; +const MCI_WAVE_STATUS_BLOCKALIGN=0x4005; +const MCI_WAVE_STATUS_BITSPERSAMPLE=0x4006; +const MCI_WAVE_STATUS_LEVEL=0x4007; +const MCI_WAVE_SET_ANYINPUT=0x4000000; +const MCI_WAVE_SET_ANYOUTPUT=0x8000000; +const MCI_WAVE_GETDEVCAPS_INPUTS=0x4001; +const MCI_WAVE_GETDEVCAPS_OUTPUTS=0x4002; + +const MCI_SEQ_DIV_PPQN=MCI_SEQ_OFFSET; +const MCI_SEQ_DIV_SMPTE_24=(MCI_SEQ_OFFSET+1); +const MCI_SEQ_DIV_SMPTE_25=(MCI_SEQ_OFFSET+2); +const MCI_SEQ_DIV_SMPTE_30DROP=(MCI_SEQ_OFFSET+3); +const MCI_SEQ_DIV_SMPTE_30=(MCI_SEQ_OFFSET+4); +const MCI_SEQ_FORMAT_SONGPTR=0x4001; +const MCI_SEQ_FILE=0x4002; +const MCI_SEQ_MIDI=0x4003; +const MCI_SEQ_SMPTE=0x4004; +const MCI_SEQ_NONE=65533; +const MCI_SEQ_MAPPER=65535; + +const MCI_SEQ_STATUS_TEMPO=0x4002; +const MCI_SEQ_STATUS_PORT=0x4003; +const MCI_SEQ_STATUS_SLAVE=0x4007; +const MCI_SEQ_STATUS_MASTER=0x4008; +const MCI_SEQ_STATUS_OFFSET=0x4009; +const MCI_SEQ_STATUS_DIVTYPE=0x400A; +const MCI_SEQ_STATUS_NAME=0x400B; +const MCI_SEQ_STATUS_COPYRIGHT=0x400C; + +const MCI_SEQ_SET_TEMPO=0x10000; +const MCI_SEQ_SET_PORT=0x20000; +const MCI_SEQ_SET_SLAVE=0x40000; +const MCI_SEQ_SET_MASTER=0x80000; +const MCI_SEQ_SET_OFFSET=0x1000000; + +const MCI_ANIM_OPEN_WS=0x10000; +const MCI_ANIM_OPEN_PARENT=0x20000; +const MCI_ANIM_OPEN_NOSTATIC=0x40000; +const MCI_ANIM_PLAY_SPEED=0x10000; +const MCI_ANIM_PLAY_REVERSE=0x20000; +const MCI_ANIM_PLAY_FAST=0x40000; +const MCI_ANIM_PLAY_SLOW=0x80000; +const MCI_ANIM_PLAY_SCAN=0x100000; +const MCI_ANIM_STEP_REVERSE=0x10000; +const MCI_ANIM_STEP_FRAMES=0x20000; +const MCI_ANIM_STATUS_SPEED=0x4001; +const MCI_ANIM_STATUS_FORWARD=0x4002; +const MCI_ANIM_STATUS_HWND=0x4003; +const MCI_ANIM_STATUS_HPAL=0x4004; +const MCI_ANIM_STATUS_STRETCH=0x4005; +const MCI_ANIM_INFO_TEXT=0x10000; + +const MCI_ANIM_GETDEVCAPS_CAN_REVERSE=0x4001; +const MCI_ANIM_GETDEVCAPS_FAST_RATE=0x4002; +const MCI_ANIM_GETDEVCAPS_SLOW_RATE=0x4003; +const MCI_ANIM_GETDEVCAPS_NORMAL_RATE=0x4004; +const MCI_ANIM_GETDEVCAPS_PALETTES=0x4006; +const MCI_ANIM_GETDEVCAPS_CAN_STRETCH=0x4007; +const MCI_ANIM_GETDEVCAPS_MAX_WINDOWS=0x4008; + +const MCI_ANIM_REALIZE_NORM=0x10000; +const MCI_ANIM_REALIZE_BKGD=0x20000; + +const MCI_ANIM_WINDOW_HWND=0x10000; +const MCI_ANIM_WINDOW_STATE=0x40000; +const MCI_ANIM_WINDOW_TEXT=0x80000; +const MCI_ANIM_WINDOW_ENABLE_STRETCH=0x100000; +const MCI_ANIM_WINDOW_DISABLE_STRETCH=0x200000; +const MCI_ANIM_WINDOW_DEFAULT=0x0; + +const MCI_ANIM_RECT=0x10000; +const MCI_ANIM_PUT_SOURCE=0x20000; +const MCI_ANIM_PUT_DESTINATION=0x40000; +const MCI_ANIM_WHERE_SOURCE=0x20000; +const MCI_ANIM_WHERE_DESTINATION=0x40000; +const MCI_ANIM_UPDATE_HDC=0x20000; + +const MCI_OVLY_OPEN_WS=0x10000; +const MCI_OVLY_OPEN_PARENT=0x20000; +const MCI_OVLY_STATUS_HWND=0x4001; +const MCI_OVLY_STATUS_STRETCH=0x4002; +const MCI_OVLY_INFO_TEXT=0x10000; +const MCI_OVLY_GETDEVCAPS_CAN_STRETCH=0x4001; +const MCI_OVLY_GETDEVCAPS_CAN_FREEZE=0x4002; +const MCI_OVLY_GETDEVCAPS_MAX_WINDOWS=0x4003; +const MCI_OVLY_WINDOW_HWND=0x10000; +const MCI_OVLY_WINDOW_STATE=0x40000; +const MCI_OVLY_WINDOW_TEXT=0x80000; +const MCI_OVLY_WINDOW_ENABLE_STRETCH=0x100000; +const MCI_OVLY_WINDOW_DISABLE_STRETCH=0x200000; +const MCI_OVLY_WINDOW_DEFAULT=0x0; +const MCI_OVLY_RECT=0x10000; +const MCI_OVLY_PUT_SOURCE=0x20000; +const MCI_OVLY_PUT_DESTINATION=0x40000; +const MCI_OVLY_PUT_FRAME=0x80000; +const MCI_OVLY_PUT_VIDEO=0x100000; +const MCI_OVLY_WHERE_SOURCE=0x20000; +const MCI_OVLY_WHERE_DESTINATION=0x40000; +const MCI_OVLY_WHERE_FRAME=0x80000; +const MCI_OVLY_WHERE_VIDEO=0x100000; + +const NEWTRANSPARENT=3; +const QUERYROPSUPPORT=40; +const SELECTDIB=41; + +LONG DIBINDEX(WORD n) { + return MAKELONG(n,0x10FF); +} +const CAPS1=94; +const C1_TRANSPARENT=1; + +const SEEK_SET=0; +const SEEK_CUR=1; +const SEEK_END=2; + +alias DWORD MCIERROR; +alias UINT MCIDEVICEID; +alias UINT function (MCIDEVICEID,DWORD) YIELDPROC; +alias UINT MMVERSION; +alias UINT MMRESULT; + +struct MMTIME { + UINT wType; + union { + DWORD ms; + DWORD sample; + DWORD cb; + DWORD ticks; + struct smpte { + BYTE hour; + BYTE min; + BYTE sec; + BYTE frame; + BYTE fps; + BYTE dummy; + BYTE pad[2]; + }; + struct midi { + DWORD songptrpos; + } + } +} +alias MMTIME* PMMTIME, LPMMTIME; + +typedef HANDLE HDRVR; + +struct DRVCONFIGINFO { + DWORD dwDCISize; + LPCWSTR lpszDCISectionName; + LPCWSTR lpszDCIAliasName; +} +alias DRVCONFIGINFO * PDRVCONFIGINFO, LPDRVCONFIGINFO; + +struct DRVCONFIGINFOEX { + DWORD dwDCISize; + LPCWSTR lpszDCISectionName; + LPCWSTR lpszDCIAliasName; + DWORD dnDevNode; +} +alias DRVCONFIGINFOEX* PDRVCONFIGINFOEX, LPDRVCONFIGINFOEX; + +extern(Windows): + +/+FIXME: I couldn't find these in MSDN. +alias void function (HDRVR,UINT,DWORD,DWORD,DWORD) DRVCALLBACK; +LRESULT DRIVERPROC (DWORD,HDRVR,UINT,LPARAM,LPARAM); +alias DRVCALLBACK* LPDRVCALLBACK, PDRVCALLBACK; + +alias DRVCALLBACK WAVECALLBACK; +alias WAVECALLBACK* LPWAVECALLBACK; + +alias DRVCALLBACK MIDICALLBACK; +alias MIDICALLBACK* LPMIDICALLBACK; + ++/ + +typedef HANDLE HWAVE; +typedef HANDLE HWAVEIN; +typedef HANDLE HWAVEOUT; + +alias HWAVEIN* LPHWAVEIN; +alias HWAVEOUT* LPHWAVEOUT; + +struct WAVEHDR { + LPSTR lpData; + DWORD dwBufferLength; + DWORD dwBytesRecorded; + DWORD dwUser; + DWORD dwFlags; + DWORD dwLoops; + WAVEHDR *lpNext; + DWORD reserved; +} +alias WAVEHDR* PWAVEHDR, LPWAVEHDR; + +struct WAVEOUTCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; + DWORD dwSupport; +} +alias WAVEOUTCAPSA* PWAVEOUTCAPSA, LPWAVEOUTCAPSA; + +struct WAVEOUTCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; + DWORD dwSupport; +} +alias WAVEOUTCAPSW* PWAVEOUTCAPSW, LPWAVEOUTCAPSW; + +struct WAVEINCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; +} +alias WAVEINCAPSA* PWAVEINCAPSA, LPWAVEINCAPSA; + +struct WAVEINCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD dwFormats; + WORD wChannels; + WORD wReserved1; +} +alias WAVEINCAPSW* PWAVEINCAPSW, LPWAVEINCAPSW; + +struct WAVEFORMAT { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; +} +alias WAVEFORMAT* PWAVEFORMAT, LPWAVEFORMAT; + +struct PCMWAVEFORMAT { + WAVEFORMAT wf; + WORD wBitsPerSample; +} +alias PCMWAVEFORMAT* PPCMWAVEFORMAT, LPPCMWAVEFORMAT; + +struct WAVEFORMATEX { + WORD wFormatTag; + WORD nChannels; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; + WORD wBitsPerSample; + WORD cbSize; +} +alias WAVEFORMATEX* PWAVEFORMATEX, LPWAVEFORMATEX; +alias WAVEFORMATEX* LPCWAVEFORMATEX; + +typedef HANDLE HMIDI; +typedef HANDLE HMIDIIN; +typedef HANDLE HMIDIOUT; +typedef HANDLE HMIDISTRM; + +alias HMIDI* LPHMIDI; +alias HMIDIIN* LPHMIDIIN; +alias HMIDIOUT* LPHMIDIOUT; +alias HMIDISTRM* LPHMIDISTRM; + +alias WORD PATCHARRAY[MIDIPATCHSIZE]; +alias WORD* LPPATCHARRAY; +alias WORD KEYARRAY[MIDIPATCHSIZE]; +alias WORD* LPKEYARRAY; + +struct MIDIOUTCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wVoices; + WORD wNotes; + WORD wChannelMask; + DWORD dwSupport; +} +alias MIDIOUTCAPSA* PMIDIOUTCAPSA, LPMIDIOUTCAPSA; + +struct MIDIOUTCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wVoices; + WORD wNotes; + WORD wChannelMask; + DWORD dwSupport; +} +alias MIDIOUTCAPSW* PMIDIOUTCAPSW, LPMIDIOUTCAPSW; + +struct MIDIINCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD dwSupport; +} +alias MIDIINCAPSA* PMIDIINCAPSA, LPMIDIINCAPSA; + +struct MIDIINCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD dwSupport; +} +alias MIDIINCAPSW* PMIDIINCAPSW, LPMIDIINCAPSW; + +struct MIDIHDR { + LPSTR lpData; + DWORD dwBufferLength; + DWORD dwBytesRecorded; + DWORD dwUser; + DWORD dwFlags; + MIDIHDR *lpNext; + DWORD reserved; + DWORD dwOffset; + DWORD dwReserved[8]; +} +alias MIDIHDR* PMIDIHDR, LPMIDIHDR; + +struct MIDIEVENT { + DWORD dwDeltaTime; + DWORD dwStreamID; + DWORD dwEvent; + DWORD dwParms[1]; +} + +struct MIDISTRMBUFFVER { + DWORD dwVersion; + DWORD dwMid; + DWORD dwOEMVersion; +} + +struct MIDIPROPTIMEDIV { + DWORD cbStruct; + DWORD dwTimeDiv; +} +alias MIDIPROPTIMEDIV* LPMIDIPROPTIMEDIV; + +struct MIDIPROPTEMPO { + DWORD cbStruct; + DWORD dwTempo; +} +alias MIDIPROPTEMPO* LPMIDIPROPTEMPO; + +struct AUXCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wReserved1; + DWORD dwSupport; +} +alias AUXCAPSA* PAUXCAPSA, LPAUXCAPSA; + +struct AUXCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + WORD wTechnology; + WORD wReserved1; + DWORD dwSupport; +} +alias AUXCAPSW* PAUXCAPSW, LPAUXCAPSW; + +typedef HANDLE HMIXEROBJ; +alias HMIXEROBJ* LPHMIXEROBJ; + +typedef HANDLE HMIXER; +alias HMIXER* LPHMIXER; + +struct MIXERCAPSA { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + DWORD fdwSupport; + DWORD cDestinations; +} +alias MIXERCAPSA* PMIXERCAPSA, LPMIXERCAPSA; + +struct MIXERCAPSW { + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + DWORD fdwSupport; + DWORD cDestinations; +} +alias MIXERCAPSW* PMIXERCAPSW, LPMIXERCAPSW; + +struct MIXERLINEA { + DWORD cbStruct; + DWORD dwDestination; + DWORD dwSource; + DWORD dwLineID; + DWORD fdwLine; + DWORD dwUser; + DWORD dwComponentType; + DWORD cChannels; + DWORD cConnections; + DWORD cControls; + CHAR szShortName[MIXER_SHORT_NAME_CHARS]; + CHAR szName[MIXER_LONG_NAME_CHARS]; + struct Target { + DWORD dwType; + DWORD dwDeviceID; + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + CHAR szPname[MAXPNAMELEN]; + } +} +alias MIXERLINEA* PMIXERLINEA, LPMIXERLINEA; + +struct MIXERLINEW { + DWORD cbStruct; + DWORD dwDestination; + DWORD dwSource; + DWORD dwLineID; + DWORD fdwLine; + DWORD dwUser; + DWORD dwComponentType; + DWORD cChannels; + DWORD cConnections; + DWORD cControls; + WCHAR szShortName[MIXER_SHORT_NAME_CHARS]; + WCHAR szName[MIXER_LONG_NAME_CHARS]; + struct Target { + DWORD dwType; + DWORD dwDeviceID; + WORD wMid; + WORD wPid; + MMVERSION vDriverVersion; + WCHAR szPname[MAXPNAMELEN]; + } +} +alias MIXERLINEW* PMIXERLINEW, LPMIXERLINEW; + +struct MIXERCONTROLA { + DWORD cbStruct; + DWORD dwControlID; + DWORD dwControlType; + DWORD fdwControl; + DWORD cMultipleItems; + CHAR szShortName[MIXER_SHORT_NAME_CHARS]; + CHAR szName[MIXER_LONG_NAME_CHARS]; + union _Bounds { + struct { + LONG lMinimum; + LONG lMaximum; + } + struct { + DWORD dwMinimum; + DWORD dwMaximum; + } + DWORD dwReserved[6]; + } + _Bounds Bounds; + union _Metrics { + DWORD cSteps; + DWORD cbCustomData; + DWORD dwReserved[6]; + } + _Metrics Metrics; +} +alias MIXERCONTROLA* PMIXERCONTROLA, LPMIXERCONTROLA; + +struct MIXERCONTROLW { + DWORD cbStruct; + DWORD dwControlID; + DWORD dwControlType; + DWORD fdwControl; + DWORD cMultipleItems; + WCHAR szShortName[MIXER_SHORT_NAME_CHARS]; + WCHAR szName[MIXER_LONG_NAME_CHARS]; + union _Bounds { + struct { + LONG lMinimum; + LONG lMaximum; + } + struct { + DWORD dwMinimum; + DWORD dwMaximum; + } + DWORD dwReserved[6]; + } + _Bounds Bounds; + union _Metrics { + DWORD cSteps; + DWORD cbCustomData; + DWORD dwReserved[6]; + } + _Metrics Metrics; +} + +alias MIXERCONTROLW* PMIXERCONTROLW, LPMIXERCONTROLW; + +struct MIXERLINECONTROLSA { + DWORD cbStruct; + DWORD dwLineID; + union { + DWORD dwControlID; + DWORD dwControlType; + } + DWORD cControls; + DWORD cbmxctrl; + LPMIXERCONTROLA pamxctrl; +} +alias MIXERLINECONTROLSA* PMIXERLINECONTROLSA, LPMIXERLINECONTROLSA; + +struct MIXERLINECONTROLSW { + DWORD cbStruct; + DWORD dwLineID; + union { + DWORD dwControlID; + DWORD dwControlType; + } + DWORD cControls; + DWORD cbmxctrl; + LPMIXERCONTROLW pamxctrl; +} +alias MIXERLINECONTROLSW* PMIXERLINECONTROLSW, LPMIXERLINECONTROLSW; + +struct MIXERCONTROLDETAILS { + DWORD cbStruct; + DWORD dwControlID; + DWORD cChannels; + union { + HWND hwndOwner; + DWORD cMultipleItems; + } + DWORD cbDetails; + PVOID paDetails; +} +alias MIXERCONTROLDETAILS* PMIXERCONTROLDETAILS, LPMIXERCONTROLDETAILS; + +struct MIXERCONTROLDETAILS_LISTTEXTA { + DWORD dwParam1; + DWORD dwParam2; + CHAR szName[MIXER_LONG_NAME_CHARS]; +} +alias MIXERCONTROLDETAILS_LISTTEXTA* PMIXERCONTROLDETAILS_LISTTEXTA,LPMIXERCONTROLDETAILS_LISTTEXTA; + +struct MIXERCONTROLDETAILS_LISTTEXTW { + DWORD dwParam1; + DWORD dwParam2; + WCHAR szName[MIXER_LONG_NAME_CHARS]; +} +alias MIXERCONTROLDETAILS_LISTTEXTW* PMIXERCONTROLDETAILS_LISTTEXTW,LPMIXERCONTROLDETAILS_LISTTEXTW; + +struct MIXERCONTROLDETAILS_BOOLEAN { + LONG fValue; +} +alias MIXERCONTROLDETAILS_BOOLEAN* PMIXERCONTROLDETAILS_BOOLEAN, LPMIXERCONTROLDETAILS_BOOLEAN; + +struct MIXERCONTROLDETAILS_SIGNED { + LONG lValue; +} +alias MIXERCONTROLDETAILS_SIGNED* PMIXERCONTROLDETAILS_SIGNED, LPMIXERCONTROLDETAILS_SIGNED; + +struct MIXERCONTROLDETAILS_UNSIGNED { + DWORD dwValue; +} +alias MIXERCONTROLDETAILS_UNSIGNED* PMIXERCONTROLDETAILS_UNSIGNED, LPMIXERCONTROLDETAILS_UNSIGNED; + +alias void function (UINT,UINT,DWORD,DWORD,DWORD) LPTIMECALLBACK; + +struct TIMECAPS { + UINT wPeriodMin; + UINT wPeriodMax; +} +alias TIMECAPS* PTIMECAPS, LPTIMECAPS; + +struct JOYCAPSA { + WORD wMid; + WORD wPid; + CHAR szPname[MAXPNAMELEN]; + UINT wXmin; + UINT wXmax; + UINT wYmin; + UINT wYmax; + UINT wZmin; + UINT wZmax; + UINT wNumButtons; + UINT wPeriodMin; + UINT wPeriodMax; + UINT wRmin; + UINT wRmax; + UINT wUmin; + UINT wUmax; + UINT wVmin; + UINT wVmax; + UINT wCaps; + UINT wMaxAxes; + UINT wNumAxes; + UINT wMaxButtons; + CHAR szRegKey[MAXPNAMELEN]; + CHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; +} +alias JOYCAPSA* PJOYCAPSA, LPJOYCAPSA; + +struct JOYCAPSW { + WORD wMid; + WORD wPid; + WCHAR szPname[MAXPNAMELEN]; + UINT wXmin; + UINT wXmax; + UINT wYmin; + UINT wYmax; + UINT wZmin; + UINT wZmax; + UINT wNumButtons; + UINT wPeriodMin; + UINT wPeriodMax; + UINT wRmin; + UINT wRmax; + UINT wUmin; + UINT wUmax; + UINT wVmin; + UINT wVmax; + UINT wCaps; + UINT wMaxAxes; + UINT wNumAxes; + UINT wMaxButtons; + WCHAR szRegKey[MAXPNAMELEN]; + WCHAR szOEMVxD[MAX_JOYSTICKOEMVXDNAME]; +} +alias JOYCAPSW* PJOYCAPSW, LPJOYCAPSW; + +struct JOYINFO { + UINT wXpos; + UINT wYpos; + UINT wZpos; + UINT wButtons; +} +alias JOYINFO* PJOYINFO, LPJOYINFO; + +struct JOYINFOEX { + DWORD dwSize; + DWORD dwFlags; + DWORD dwXpos; + DWORD dwYpos; + DWORD dwZpos; + DWORD dwRpos; + DWORD dwUpos; + DWORD dwVpos; + DWORD dwButtons; + DWORD dwButtonNumber; + DWORD dwPOV; + DWORD dwReserved1; + DWORD dwReserved2; +} +alias JOYINFOEX* PJOYINFOEX, LPJOYINFOEX; + +alias DWORD FOURCC; +alias char* HPSTR; + +typedef HANDLE HMMIO; + +alias LRESULT function (LPSTR,UINT,LPARAM,LPARAM) LPMMIOPROC; + +struct MMIOINFO { + DWORD dwFlags; + FOURCC fccIOProc; + LPMMIOPROC pIOProc; + UINT wErrorRet; + HTASK htask; + LONG cchBuffer; + HPSTR pchBuffer; + HPSTR pchNext; + HPSTR pchEndRead; + HPSTR pchEndWrite; + LONG lBufOffset; + LONG lDiskOffset; + DWORD adwInfo[3]; + DWORD dwReserved1; + DWORD dwReserved2; + HMMIO hmmio; +} +alias MMIOINFO* PMMIOINFO, LPMMIOINFO; +alias MMIOINFO* LPCMMIOINFO; + +struct MMCKINFO { + FOURCC ckid; + DWORD cksize; + FOURCC fccType; + DWORD dwDataOffset; + DWORD dwFlags; +} +alias MMCKINFO* PMMCKINFO, LPMMCKINFO; +alias MMCKINFO* LPCMMCKINFO; + +struct MCI_GENERIC_PARMS { + DWORD dwCallback; +} +alias MCI_GENERIC_PARMS* PMCI_GENERIC_PARMS, LPMCI_GENERIC_PARMS; + +struct MCI_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; +} +alias MCI_OPEN_PARMSA* PMCI_OPEN_PARMSA, LPMCI_OPEN_PARMSA; + +struct MCI_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; +} +alias MCI_OPEN_PARMSW* PMCI_OPEN_PARMSW, LPMCI_OPEN_PARMSW; + +struct MCI_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} +alias MCI_PLAY_PARMS* PMCI_PLAY_PARMS, LPMCI_PLAY_PARMS; + +struct MCI_SEEK_PARMS { + DWORD dwCallback; + DWORD dwTo; +} +alias MCI_SEEK_PARMS* PMCI_SEEK_PARMS, LPMCI_SEEK_PARMS; + +struct MCI_STATUS_PARMS { + DWORD dwCallback; + DWORD dwReturn; + DWORD dwItem; + DWORD dwTrack; +} +alias MCI_STATUS_PARMS* PMCI_STATUS_PARMS, LPMCI_STATUS_PARMS; + +struct MCI_INFO_PARMSA { + DWORD dwCallback; + LPSTR lpstrReturn; + DWORD dwRetSize; +} +alias MCI_INFO_PARMSA* LPMCI_INFO_PARMSA; + +struct MCI_INFO_PARMSW { + DWORD dwCallback; + LPWSTR lpstrReturn; + DWORD dwRetSize; +} +alias MCI_INFO_PARMSW* LPMCI_INFO_PARMSW; + +struct MCI_GETDEVCAPS_PARMS { + DWORD dwCallback; + DWORD dwReturn; + DWORD dwItem; +} +alias MCI_GETDEVCAPS_PARMS* PMCI_GETDEVCAPS_PARMS, LPMCI_GETDEVCAPS_PARMS; + +struct MCI_SYSINFO_PARMSA { + DWORD dwCallback; + LPSTR lpstrReturn; + DWORD dwRetSize; + DWORD dwNumber; + UINT wDeviceType; +} +alias MCI_SYSINFO_PARMSA* PMCI_SYSINFO_PARMSA, LPMCI_SYSINFO_PARMSA; + +struct MCI_SYSINFO_PARMSW { + DWORD dwCallback; + LPWSTR lpstrReturn; + DWORD dwRetSize; + DWORD dwNumber; + UINT wDeviceType; +} +alias MCI_SYSINFO_PARMSW* PMCI_SYSINFO_PARMSW, LPMCI_SYSINFO_PARMSW; + +struct MCI_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; +} +alias MCI_SET_PARMS* PMCI_SET_PARMS, LPMCI_SET_PARMS; + +struct MCI_BREAK_PARMS { + DWORD dwCallback; + int nVirtKey; + HWND hwndBreak; +} +alias MCI_BREAK_PARMS* PMCI_BREAK_PARMS, LPMCI_BREAK_PARMS; + +struct MCI_SAVE_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; +} +alias MCI_SAVE_PARMSA* PMCI_SAVE_PARMSA, LPMCI_SAVE_PARMSA; + +struct MCI_SAVE_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; +} +alias MCI_SAVE_PARMSW* PMCI_SAVE_PARMSW, LPMCI_SAVE_PARMSW; + +struct MCI_LOAD_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; +} +alias MCI_LOAD_PARMSA* PMCI_LOAD_PARMSA, LPMCI_LOAD_PARMSA; + +struct MCI_LOAD_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; +} +alias MCI_LOAD_PARMSW* PMCI_LOAD_PARMSW, LPMCI_LOAD_PARMSW; + +struct MCI_RECORD_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} +alias MCI_RECORD_PARMS* LPMCI_RECORD_PARMS; + +struct MCI_VD_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; + DWORD dwSpeed; +} +alias MCI_VD_PLAY_PARMS* PMCI_VD_PLAY_PARMS, LPMCI_VD_PLAY_PARMS; + +struct MCI_VD_STEP_PARMS { + DWORD dwCallback; + DWORD dwFrames; +} +alias MCI_VD_STEP_PARMS* PMCI_VD_STEP_PARMS, LPMCI_VD_STEP_PARMS; + +struct MCI_VD_ESCAPE_PARMSA { + DWORD dwCallback; + LPCSTR lpstrCommand; +} +alias MCI_VD_ESCAPE_PARMSA* PMCI_VD_ESCAPE_PARMSA, LPMCI_VD_ESCAPE_PARMSA; + +struct MCI_VD_ESCAPE_PARMSW { + DWORD dwCallback; + LPCWSTR lpstrCommand; +} +alias MCI_VD_ESCAPE_PARMSW* PMCI_VD_ESCAPE_PARMSW, LPMCI_VD_ESCAPE_PARMSW; + +struct MCI_WAVE_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwBufferSeconds; +} +alias MCI_WAVE_OPEN_PARMSA* PMCI_WAVE_OPEN_PARMSA, LPMCI_WAVE_OPEN_PARMSA; + +struct MCI_WAVE_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwBufferSeconds; +} +alias MCI_WAVE_OPEN_PARMSW* PMCI_WAVE_OPEN_PARMSW, LPMCI_WAVE_OPEN_PARMSW; + +struct MCI_WAVE_DELETE_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; +} +alias MCI_WAVE_DELETE_PARMS* PMCI_WAVE_DELETE_PARMS, LPMCI_WAVE_DELETE_PARMS; + +struct MCI_WAVE_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; + UINT wInput; + UINT wOutput; + WORD wFormatTag; + WORD wReserved2; + WORD nChannels; + WORD wReserved3; + DWORD nSamplesPerSec; + DWORD nAvgBytesPerSec; + WORD nBlockAlign; + WORD wReserved4; + WORD wBitsPerSample; + WORD wReserved5; +} +alias MCI_WAVE_SET_PARMS* PMCI_WAVE_SET_PARMS, LPMCI_WAVE_SET_PARMS; + +extern (Windows): +LRESULT CloseDriver(HDRVR,LONG,LONG); +HDRVR OpenDriver(LPCWSTR,LPCWSTR,LONG); +LRESULT SendDriverMessage(HDRVR,UINT,LONG,LONG); +HMODULE DrvGetModuleHandle(HDRVR); +HMODULE GetDriverModuleHandle(HDRVR); +LRESULT DefDriverProc(DWORD,HDRVR,UINT,LPARAM,LPARAM); +UINT mmsystemGetVersion(); +// FIXME: I believe this next line is a mistake +//alias OutputDebugString OutputDebugStr; +BOOL sndPlaySoundA(LPCSTR,UINT); +BOOL sndPlaySoundW(LPCWSTR,UINT); +BOOL PlaySoundA(LPCSTR,HMODULE,DWORD); +BOOL PlaySoundW(LPCWSTR,HMODULE,DWORD); +UINT waveOutGetNumDevs(); +MMRESULT waveOutGetDevCapsA(UINT,LPWAVEOUTCAPSA,UINT); +MMRESULT waveOutGetDevCapsW(UINT,LPWAVEOUTCAPSW,UINT); +MMRESULT waveOutGetVolume(HWAVEOUT,PDWORD); +MMRESULT waveOutSetVolume(HWAVEOUT,DWORD); +MMRESULT waveOutGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT waveOutGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT waveOutOpen(LPHWAVEOUT,UINT,LPCWAVEFORMATEX,DWORD,DWORD,DWORD); +MMRESULT waveOutClose(HWAVEOUT); +MMRESULT waveOutPrepareHeader(HWAVEOUT,LPWAVEHDR,UINT); +MMRESULT waveOutUnprepareHeader(HWAVEOUT,LPWAVEHDR,UINT); +MMRESULT waveOutWrite(HWAVEOUT,LPWAVEHDR,UINT); +MMRESULT waveOutPause(HWAVEOUT); +MMRESULT waveOutRestart(HWAVEOUT); +MMRESULT waveOutReset(HWAVEOUT); +MMRESULT waveOutBreakLoop(HWAVEOUT); +MMRESULT waveOutGetPosition(HWAVEOUT,LPMMTIME,UINT); +MMRESULT waveOutGetPitch(HWAVEOUT,PDWORD); +MMRESULT waveOutSetPitch(HWAVEOUT,DWORD); +MMRESULT waveOutGetPlaybackRate(HWAVEOUT,PDWORD); +MMRESULT waveOutSetPlaybackRate(HWAVEOUT,DWORD); +MMRESULT waveOutGetID(HWAVEOUT,LPUINT); +MMRESULT waveOutMessage(HWAVEOUT,UINT,DWORD,DWORD); +UINT waveInGetNumDevs(); +MMRESULT waveInGetDevCapsA(UINT,LPWAVEINCAPSA,UINT); +MMRESULT waveInGetDevCapsW(UINT,LPWAVEINCAPSW,UINT); +MMRESULT waveInGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT waveInGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT waveInOpen(LPHWAVEIN,UINT,LPCWAVEFORMATEX,DWORD,DWORD,DWORD); +MMRESULT waveInClose(HWAVEIN); +MMRESULT waveInPrepareHeader(HWAVEIN,LPWAVEHDR,UINT); +MMRESULT waveInUnprepareHeader(HWAVEIN,LPWAVEHDR,UINT); +MMRESULT waveInAddBuffer(HWAVEIN,LPWAVEHDR,UINT); +MMRESULT waveInStart(HWAVEIN); +MMRESULT waveInStop(HWAVEIN); +MMRESULT waveInReset(HWAVEIN); +MMRESULT waveInGetPosition(HWAVEIN,LPMMTIME,UINT); +MMRESULT waveInGetID(HWAVEIN,LPUINT); +MMRESULT waveInMessage(HWAVEIN,UINT,DWORD,DWORD); +UINT midiOutGetNumDevs(); +MMRESULT midiStreamOpen(LPHMIDISTRM,LPUINT,DWORD,DWORD,DWORD,DWORD); +MMRESULT midiStreamClose(HMIDISTRM); +MMRESULT midiStreamProperty(HMIDISTRM,LPBYTE,DWORD); +MMRESULT midiStreamPosition(HMIDISTRM,LPMMTIME,UINT); +MMRESULT midiStreamOut(HMIDISTRM,LPMIDIHDR,UINT); +MMRESULT midiStreamPause(HMIDISTRM); +MMRESULT midiStreamRestart(HMIDISTRM); +MMRESULT midiStreamStop(HMIDISTRM); +MMRESULT midiConnect(HMIDI,HMIDIOUT,PVOID); +MMRESULT midiDisconnect(HMIDI,HMIDIOUT,PVOID); +MMRESULT midiOutGetDevCapsA(UINT,LPMIDIOUTCAPSA,UINT); +MMRESULT midiOutGetDevCapsW(UINT,LPMIDIOUTCAPSW,UINT); +MMRESULT midiOutGetVolume(HMIDIOUT,PDWORD); +MMRESULT midiOutSetVolume(HMIDIOUT,DWORD); +MMRESULT midiOutGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT midiOutGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT midiOutOpen(LPHMIDIOUT,UINT,DWORD,DWORD,DWORD); +MMRESULT midiOutClose(HMIDIOUT); +MMRESULT midiOutPrepareHeader(HMIDIOUT,LPMIDIHDR,UINT); +MMRESULT midiOutUnprepareHeader(HMIDIOUT,LPMIDIHDR,UINT); +MMRESULT midiOutShortMsg(HMIDIOUT,DWORD); +MMRESULT midiOutLongMsg(HMIDIOUT,LPMIDIHDR,UINT); +MMRESULT midiOutReset(HMIDIOUT); +MMRESULT midiOutCachePatches(HMIDIOUT,UINT,LPWORD,UINT); +MMRESULT midiOutCacheDrumPatches(HMIDIOUT,UINT,LPWORD,UINT); +MMRESULT midiOutGetID(HMIDIOUT,LPUINT); +MMRESULT midiOutMessage(HMIDIOUT,UINT,DWORD,DWORD); +UINT midiInGetNumDevs(); +MMRESULT midiInGetDevCapsA(UINT,LPMIDIINCAPSA,UINT); +MMRESULT midiInGetDevCapsW(UINT,LPMIDIINCAPSW,UINT); +MMRESULT midiInGetErrorTextA(MMRESULT,LPSTR,UINT); +MMRESULT midiInGetErrorTextW(MMRESULT,LPWSTR,UINT); +MMRESULT midiInOpen(LPHMIDIIN,UINT,DWORD,DWORD,DWORD); +MMRESULT midiInClose(HMIDIIN); +MMRESULT midiInPrepareHeader(HMIDIIN,LPMIDIHDR,UINT); +MMRESULT midiInUnprepareHeader(HMIDIIN,LPMIDIHDR,UINT); +MMRESULT midiInAddBuffer(HMIDIIN,LPMIDIHDR,UINT); +MMRESULT midiInStart(HMIDIIN); +MMRESULT midiInStop(HMIDIIN); +MMRESULT midiInReset(HMIDIIN); +MMRESULT midiInGetID(HMIDIIN,LPUINT); +MMRESULT midiInMessage(HMIDIIN,UINT,DWORD,DWORD); +UINT auxGetNumDevs(); +MMRESULT auxGetDevCapsA(UINT,LPAUXCAPSA,UINT); +MMRESULT auxGetDevCapsW(UINT,LPAUXCAPSW,UINT); +MMRESULT auxSetVolume(UINT,DWORD); +MMRESULT auxGetVolume(UINT,PDWORD); +MMRESULT auxOutMessage(UINT,UINT,DWORD,DWORD); +UINT mixerGetNumDevs(); +MMRESULT mixerGetDevCapsA(UINT,LPMIXERCAPSA,UINT); +MMRESULT mixerGetDevCapsW(UINT,LPMIXERCAPSW,UINT); +MMRESULT mixerOpen(LPHMIXER,UINT,DWORD,DWORD,DWORD); +MMRESULT mixerClose(HMIXER); +DWORD mixerMessage(HMIXER,UINT,DWORD,DWORD); +MMRESULT mixerGetLineInfoA(HMIXEROBJ,LPMIXERLINEA,DWORD); +MMRESULT mixerGetLineInfoW(HMIXEROBJ,LPMIXERLINEW,DWORD); +MMRESULT mixerGetID(HMIXEROBJ,PUINT,DWORD); +MMRESULT mixerGetLineControlsA(HMIXEROBJ,LPMIXERLINECONTROLSA,DWORD); +MMRESULT mixerGetLineControlsW(HMIXEROBJ,LPMIXERLINECONTROLSW,DWORD); +MMRESULT mixerGetControlDetailsA(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); +MMRESULT mixerGetControlDetailsW(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); +MMRESULT mixerSetControlDetails(HMIXEROBJ,LPMIXERCONTROLDETAILS,DWORD); +MMRESULT timeGetSystemTime(LPMMTIME,UINT); +DWORD timeGetTime(); +MMRESULT timeSetEvent(UINT,UINT,LPTIMECALLBACK,DWORD,UINT); +MMRESULT timeKillEvent(UINT); +MMRESULT timeGetDevCaps(LPTIMECAPS,UINT); +MMRESULT timeBeginPeriod(UINT); +MMRESULT timeEndPeriod(UINT); +UINT joyGetNumDevs(); +MMRESULT joyGetDevCapsA(UINT,LPJOYCAPSA,UINT); +MMRESULT joyGetDevCapsW(UINT,LPJOYCAPSW,UINT); +MMRESULT joyGetPos(UINT,LPJOYINFO); +MMRESULT joyGetPosEx(UINT,LPJOYINFOEX); +MMRESULT joyGetThreshold(UINT,LPUINT); +MMRESULT joyReleaseCapture(UINT); +MMRESULT joySetCapture(HWND,UINT,UINT,BOOL); +MMRESULT joySetThreshold(UINT,UINT); +FOURCC mmioStringToFOURCCA(LPCSTR,UINT); +FOURCC mmioStringToFOURCCW(LPCWSTR,UINT); +LPMMIOPROC mmioInstallIOProcA(FOURCC,LPMMIOPROC,DWORD); +LPMMIOPROC mmioInstallIOProcW(FOURCC,LPMMIOPROC,DWORD); +HMMIO mmioOpenA(LPSTR,LPMMIOINFO,DWORD); +HMMIO mmioOpenW(LPWSTR,LPMMIOINFO,DWORD); +MMRESULT mmioRenameA(LPCSTR,LPCSTR,LPCMMIOINFO,DWORD); +MMRESULT mmioRenameW(LPCWSTR,LPCWSTR,LPCMMIOINFO,DWORD); +MMRESULT mmioClose(HMMIO,UINT); +LONG mmioRead(HMMIO,HPSTR,LONG); +LONG mmioWrite(HMMIO,LPCSTR,LONG); +LONG mmioSeek(HMMIO,LONG,int); +MMRESULT mmioGetInfo(HMMIO,LPMMIOINFO,UINT); +MMRESULT mmioSetInfo(HMMIO,LPCMMIOINFO,UINT); +MMRESULT mmioSetBuffer(HMMIO,LPSTR,LONG,UINT); +MMRESULT mmioFlush(HMMIO,UINT); +MMRESULT mmioAdvance(HMMIO,LPMMIOINFO,UINT); +LRESULT mmioSendMessage(HMMIO,UINT,LPARAM,LPARAM); +MMRESULT mmioDescend(HMMIO,LPMMCKINFO, MMCKINFO*,UINT); +MMRESULT mmioAscend(HMMIO,LPMMCKINFO,UINT); +MMRESULT mmioCreateChunk(HMMIO,LPMMCKINFO,UINT); +MCIERROR mciSendCommandA(MCIDEVICEID,UINT,DWORD,DWORD); +MCIERROR mciSendCommandW(MCIDEVICEID,UINT,DWORD,DWORD); +MCIERROR mciSendStringA(LPCSTR,LPSTR,UINT,HWND); +MCIERROR mciSendStringW(LPCWSTR,LPWSTR,UINT,HWND); +MCIDEVICEID mciGetDeviceIDA(LPCSTR); +MCIDEVICEID mciGetDeviceIDW(LPCWSTR); +MCIDEVICEID mciGetDeviceIDFromElementIDA(DWORD,LPCSTR); +MCIDEVICEID mciGetDeviceIDFromElementIDW(DWORD,LPCWSTR); +BOOL mciGetErrorStringA(MCIERROR,LPSTR,UINT); +BOOL mciGetErrorStringW(MCIERROR,LPWSTR,UINT); +BOOL mciSetYieldProc(MCIDEVICEID,YIELDPROC,DWORD); +HTASK mciGetCreatorTask(MCIDEVICEID); +YIELDPROC mciGetYieldProc(MCIDEVICEID,PDWORD); + +struct MCI_SEQ_SET_PARMS { + DWORD dwCallback; + DWORD dwTimeFormat; + DWORD dwAudio; + DWORD dwTempo; + DWORD dwPort; + DWORD dwSlave; + DWORD dwMaster; + DWORD dwOffset; +} +alias MCI_SEQ_SET_PARMS* PMCI_SEQ_SET_PARMS, LPMCI_SEQ_SET_PARMS; + +struct MCI_ANIM_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} +alias MCI_ANIM_OPEN_PARMSA* PMCI_ANIM_OPEN_PARMSA, LPMCI_ANIM_OPEN_PARMSA; + +struct MCI_ANIM_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} +alias MCI_ANIM_OPEN_PARMSW* PMCI_ANIM_OPEN_PARMSW, LPMCI_ANIM_OPEN_PARMSW; + +struct MCI_ANIM_PLAY_PARMS { + DWORD dwCallback; + DWORD dwFrom; + DWORD dwTo; + DWORD dwSpeed; +} +alias MCI_ANIM_PLAY_PARMS* PMCI_ANIM_PLAY_PARMS, LPMCI_ANIM_PLAY_PARMS; + +struct MCI_ANIM_STEP_PARMS { + DWORD dwCallback; + DWORD dwFrames; +} +alias MCI_ANIM_STEP_PARMS* PMCI_ANIM_STEP_PARMS, LPMCI_ANIM_STEP_PARMS; + +struct MCI_ANIM_WINDOW_PARMSA { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCSTR lpstrText; +} +alias MCI_ANIM_WINDOW_PARMSA* PMCI_ANIM_WINDOW_PARMSA, LPMCI_ANIM_WINDOW_PARMSA; + +struct MCI_ANIM_WINDOW_PARMSW { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCWSTR lpstrText; +} +alias MCI_ANIM_WINDOW_PARMSW* PMCI_ANIM_WINDOW_PARMSW, LPMCI_ANIM_WINDOW_PARMSW; + +struct MCI_ANIM_RECT_PARMS { + DWORD dwCallback; + //#ifdef MCI_USE_OFFEXT + // POINT ptOffset; + // POINT ptExtent; + //#else + RECT rc; + //#endif +} +alias MCI_ANIM_RECT_PARMS* PMCI_ANIM_RECT_PARMS, LPMCI_ANIM_RECT_PARMS; + +struct MCI_ANIM_UPDATE_PARMS { + DWORD dwCallback; + RECT rc; + HDC hDC; +} +alias MCI_ANIM_UPDATE_PARMS* PMCI_ANIM_UPDATE_PARMS, LPMCI_ANIM_UPDATE_PARMS; + +struct MCI_OVLY_OPEN_PARMSA { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCSTR lpstrDeviceType; + LPCSTR lpstrElementName; + LPCSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} +alias MCI_OVLY_OPEN_PARMSA* PMCI_OVLY_OPEN_PARMSA, LPMCI_OVLY_OPEN_PARMSA; + +struct MCI_OVLY_OPEN_PARMSW { + DWORD dwCallback; + MCIDEVICEID wDeviceID; + LPCWSTR lpstrDeviceType; + LPCWSTR lpstrElementName; + LPCWSTR lpstrAlias; + DWORD dwStyle; + HWND hWndParent; +} +alias MCI_OVLY_OPEN_PARMSW* PMCI_OVLY_OPEN_PARMSW, LPMCI_OVLY_OPEN_PARMSW; + +struct MCI_OVLY_WINDOW_PARMSA { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCSTR lpstrText; +} +alias MCI_OVLY_WINDOW_PARMSA* PMCI_OVLY_WINDOW_PARMSA, LPMCI_OVLY_WINDOW_PARMSA; + +struct MCI_OVLY_WINDOW_PARMSW { + DWORD dwCallback; + HWND hWnd; + UINT nCmdShow; + LPCWSTR lpstrText; +} +alias MCI_OVLY_WINDOW_PARMSW* PMCI_OVLY_WINDOW_PARMSW, LPMCI_OVLY_WINDOW_PARMSW; + +struct MCI_OVLY_RECT_PARMS { + DWORD dwCallback; + //#ifdef MCI_USE_OFFEXT + // POINT ptOffset; + // POINT ptExtent; + //#else + RECT rc; + //#endif +} +alias MCI_OVLY_RECT_PARMS* PMCI_OVLY_RECT_PARMS, LPMCI_OVLY_RECT_PARMS; + +struct MCI_OVLY_SAVE_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; + RECT rc; +} +alias MCI_OVLY_SAVE_PARMSA* PMCI_OVLY_SAVE_PARMSA, LPMCI_OVLY_SAVE_PARMSA; + +struct MCI_OVLY_SAVE_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; + RECT rc; +} +alias MCI_OVLY_SAVE_PARMSW* PMCI_OVLY_SAVE_PARMSW, LPMCI_OVLY_SAVE_PARMSW; + +struct MCI_OVLY_LOAD_PARMSA { + DWORD dwCallback; + LPCSTR lpfilename; + RECT rc; +} +alias MCI_OVLY_LOAD_PARMSA* PMCI_OVLY_LOAD_PARMSA, LPMCI_OVLY_LOAD_PARMSA; + +struct MCI_OVLY_LOAD_PARMSW { + DWORD dwCallback; + LPCWSTR lpfilename; + RECT rc; +} +alias MCI_OVLY_LOAD_PARMSW* PMCI_OVLY_LOAD_PARMSW, LPMCI_OVLY_LOAD_PARMSW; + +version(Unicode) { + alias WAVEOUTCAPSW WAVEOUTCAPS; + alias WAVEINCAPSW WAVEINCAPS; + alias MIDIOUTCAPSW MIDIOUTCAPS; + alias MIDIINCAPSW MIDIINCAPS; + alias AUXCAPSW AUXCAPS; + alias MIXERCAPSW MIXERCAPS; + alias MIXERLINEW MIXERLINE; + alias MIXERCONTROLA MIXERCONTROL; + alias MIXERLINECONTROLSW MIXERLINECONTROLS; + alias MIXERCONTROLDETAILS_LISTTEXTW MIXERCONTROLDETAILS_LISTTEXT; + alias JOYCAPSW JOYCAPS; + alias MCI_OPEN_PARMSW MCI_OPEN_PARMS; + alias MCI_INFO_PARMSW MCI_INFO_PARMS; + alias MCI_SYSINFO_PARMSW MCI_SYSINFO_PARMS; + alias MCI_SAVE_PARMSW MCI_SAVE_PARMS; + alias MCI_LOAD_PARMSW MCI_LOAD_PARMS; + alias MCI_VD_ESCAPE_PARMSW MCI_VD_ESCAPE_PARMS; + alias MCI_WAVE_OPEN_PARMSW MCI_WAVE_OPEN_PARMS; + alias MCI_ANIM_OPEN_PARMSW MCI_ANIM_OPEN_PARMS; + alias MCI_ANIM_WINDOW_PARMSW MCI_ANIM_WINDOW_PARMS; + alias MCI_OVLY_OPEN_PARMSW MCI_OVLY_OPEN_PARMS; + alias MCI_OVLY_WINDOW_PARMSW MCI_OVLY_WINDOW_PARMS; + alias MCI_OVLY_SAVE_PARMSW MCI_OVLY_SAVE_PARMS; + + alias sndPlaySoundW sndPlaySound; + alias PlaySoundW PlaySound; + alias waveOutGetDevCapsW waveOutGetDevCaps; + alias waveOutGetErrorTextW waveOutGetErrorText; + alias waveInGetDevCapsW waveInGetDevCaps; + alias waveInGetErrorTextW waveInGetErrorText; + alias midiOutGetDevCapsW midiOutGetDevCaps; + alias midiOutGetErrorTextW midiOutGetErrorText; + alias midiInGetDevCapsW midiInGetDevCaps; + alias midiInGetErrorTextW midiInGetErrorText; + alias auxGetDevCapsW auxGetDevCaps; + alias mixerGetDevCapsW mixerGetDevCaps; + alias mixerGetLineInfoW mixerGetLineInfo; + alias mixerGetLineControlsW mixerGetLineControls; + alias mixerGetControlDetailsW mixerGetControlDetails; + alias joyGetDevCapsW joyGetDevCaps; + alias mmioInstallIOProcW mmioInstallIOProc; + alias mmioStringToFOURCCW mmioStringToFOURCC; + alias mmioOpenW mmioOpen; + alias mmioRenameW mmioRename; + alias mciSendCommandW mciSendCommand; + alias mciSendStringW mciSendString; + alias mciGetDeviceIDW mciGetDeviceID; + alias mciGetDeviceIDFromElementIDW mciGetDeviceIDFromElementID; + alias mciGetErrorStringW mciGetErrorString; + +} else { + alias WAVEOUTCAPSA WAVEOUTCAPS; + alias WAVEINCAPSA WAVEINCAPS; + alias MIDIOUTCAPSA MIDIOUTCAPS; + alias MIDIINCAPSA MIDIINCAPS; + alias AUXCAPSA AUXCAPS; + alias MIXERCAPSA MIXERCAPS; + alias MIXERLINEA MIXERLINE; + alias MIXERCONTROLA MIXERCONTROL; + alias MIXERLINECONTROLSA MIXERLINECONTROLS; + alias MIXERCONTROLDETAILS_LISTTEXTA MIXERCONTROLDETAILS_LISTTEXT; + alias JOYCAPSA JOYCAPS; + alias MCI_OPEN_PARMSA MCI_OPEN_PARMS; + alias MCI_INFO_PARMSA MCI_INFO_PARMS; + alias MCI_SYSINFO_PARMSA MCI_SYSINFO_PARMS; + alias MCI_SAVE_PARMSA MCI_SAVE_PARMS; + alias MCI_LOAD_PARMSA MCI_LOAD_PARMS; + alias MCI_VD_ESCAPE_PARMSA MCI_VD_ESCAPE_PARMS; + alias MCI_WAVE_OPEN_PARMSA MCI_WAVE_OPEN_PARMS; + alias MCI_ANIM_OPEN_PARMSA MCI_ANIM_OPEN_PARMS; + alias MCI_ANIM_WINDOW_PARMSA MCI_ANIM_WINDOW_PARMS; + alias MCI_OVLY_OPEN_PARMSA MCI_OVLY_OPEN_PARMS; + alias MCI_OVLY_WINDOW_PARMSA MCI_OVLY_WINDOW_PARMS; + alias MCI_OVLY_SAVE_PARMSA MCI_OVLY_SAVE_PARMS; + + alias sndPlaySoundA sndPlaySound; + alias PlaySoundA PlaySound; + alias waveOutGetDevCapsA waveOutGetDevCaps; + alias waveOutGetErrorTextA waveOutGetErrorText; + alias waveInGetDevCapsA waveInGetDevCaps; + alias waveInGetErrorTextA waveInGetErrorText; + alias midiOutGetDevCapsA midiOutGetDevCaps; + alias midiOutGetErrorTextA midiOutGetErrorText; + alias midiInGetDevCapsA midiInGetDevCaps; + alias midiInGetErrorTextA midiInGetErrorText; + alias auxGetDevCapsA auxGetDevCaps; + alias mixerGetDevCapsA mixerGetDevCaps; + alias mixerGetLineInfoA mixerGetLineInfo; + alias mixerGetLineControlsA mixerGetLineControls; + alias mixerGetControlDetailsA mixerGetControlDetails; + alias joyGetDevCapsA joyGetDevCaps; + alias mmioInstallIOProcA mmioInstallIOProc; + alias mmioStringToFOURCCA mmioStringToFOURCC; + alias mmioOpenA mmioOpen; + alias mmioRenameA mmioRename; + alias mciSendCommandA mciSendCommand; + alias mciSendStringA mciSendString; + alias mciGetDeviceIDA mciGetDeviceID; + alias mciGetDeviceIDFromElementIDA mciGetDeviceIDFromElementID; + alias mciGetErrorStringA mciGetErrorString; +} + +alias WAVEOUTCAPS* PWAVEOUTCAPS, LPWAVEOUTCAPS; +alias WAVEINCAPS* PWAVEINCAPS, LPWAVEINCAPS; +alias MIDIOUTCAPS* PMIDIOUTCAPS, LPMIDIOUTCAPS; +alias MIDIINCAPS* PMIDIINCAPS, LPMIDIINCAPS; +alias AUXCAPS* PAUXCAPS, LPAUXCAPS; +alias MIXERCAPS* PMIXERCAPS, LPMIXERCAPS; +alias MIXERLINE* PMIXERLINE, LPMIXERLINE; +alias MIXERCONTROL* PMIXERCONTROL, LPMIXERCONTROL; +alias MIXERLINECONTROLS* PMIXERLINECONTROLS, LPMIXERLINECONTROLS; +alias MIXERCONTROLDETAILS_LISTTEXT* PMIXERCONTROLDETAILS_LISTTEXT, LPMIXERCONTROLDETAILS_LISTTEXT; +alias JOYCAPS* PJOYCAPS, LPJOYCAPS; +alias MCI_OPEN_PARMS* PMCI_OPEN_PARMS, LPMCI_OPEN_PARMS; +alias MCI_INFO_PARMS* LPMCI_INFO_PARMS; +alias MCI_SYSINFO_PARMS* PMCI_SYSINFO_PARMS, LPMCI_SYSINFO_PARMS; +alias MCI_SAVE_PARMS* PMCI_SAVE_PARMS, LPMCI_SAVE_PARMS; +alias MCI_LOAD_PARMS* PMCI_LOAD_PARMS, LPMCI_LOAD_PARMS; +alias MCI_VD_ESCAPE_PARMS* PMCI_VD_ESCAPE_PARMS, LPMCI_VD_ESCAPE_PARMS; +alias MCI_WAVE_OPEN_PARMS* PMCI_WAVE_OPEN_PARMS, LPMCI_WAVE_OPEN_PARMS; +alias MCI_ANIM_OPEN_PARMS* PMCI_ANIM_OPEN_PARMS, LPMCI_ANIM_OPEN_PARMS; +alias MCI_ANIM_WINDOW_PARMS* PMCI_ANIM_WINDOW_PARMS, LPMCI_ANIM_WINDOW_PARMS; +alias MCI_OVLY_OPEN_PARMS* PMCI_OVLY_OPEN_PARMS, LPMCI_OVLY_OPEN_PARMS; +alias MCI_OVLY_WINDOW_PARMS* PMCI_OVLY_WINDOW_PARMS, LPMCI_OVLY_WINDOW_PARMS; +alias MCI_OVLY_SAVE_PARMS* PMCI_OVLY_SAVE_PARMS, LPMCI_OVLY_SAVE_PARMS; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/msacm.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/msacm.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,172 @@ +/***********************************************************************\ +* msacm.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.msacm; + +private import win32.basetsd, win32.mmsystem, win32.windef; + +alias HANDLE HACMDRIVERID, HACMDRIVER; +alias HANDLE* LPHACMDRIVER; + +/* Comment from MinGW + found through experimentation + */ +const size_t + ACMDRIVERDETAILS_SHORTNAME_CHARS = 32, + ACMDRIVERDETAILS_LONGNAME_CHARS = 128, + ACMDRIVERDETAILS_COPYRIGHT_CHARS = 80, + ACMDRIVERDETAILS_LICENSING_CHARS = 128; + +/* Comment from MinGW + I don't know the right values for these macros + */ +const size_t + ACMFORMATDETAILS_FORMAT_CHARS = 256, + ACMFORMATTAGDETAILS_FORMATTAG_CHARS = 256, + ACMDRIVERDETAILS_FEATURES_CHARS = 256; + +struct ACMFORMATDETAILSA { + DWORD cbStruct = ACMFORMATDETAILSA.sizeof; // are they? + DWORD dwFormatIndex; + DWORD dwFormatTag; + DWORD fdwSupport; + LPWAVEFORMATEX pwfx; + DWORD cbwfx; + char[ACMFORMATDETAILS_FORMAT_CHARS] szFormat; +} +alias ACMFORMATDETAILSA* LPACMFORMATDETAILSA; + +struct ACMFORMATDETAILSW { + DWORD cbStruct = ACMFORMATDETAILSW.sizeof; + DWORD dwFormatIndex; + DWORD dwFormatTag; + DWORD fdwSupport; + LPWAVEFORMATEX pwfx; + DWORD cbwfx; + WCHAR[ACMFORMATDETAILS_FORMAT_CHARS] szFormat; +} +alias ACMFORMATDETAILSW* LPACMFORMATDETAILSW; + +struct ACMFORMATTAGDETAILSA { + DWORD cbStruct = ACMFORMATTAGDETAILSA.sizeof; + DWORD dwFormatTagIndex; + DWORD dwFormatTag; + DWORD cbFormatSize; + DWORD fdwSupport; + DWORD cStandardFormats; + char[ACMFORMATTAGDETAILS_FORMATTAG_CHARS] szFormatTag; +} +alias ACMFORMATTAGDETAILSA* LPACMFORMATTAGDETAILSA; + +struct ACMFORMATTAGDETAILSW { + DWORD cbStruct = ACMFORMATTAGDETAILSW.sizeof; + DWORD dwFormatTagIndex; + DWORD dwFormatTag; + DWORD cbFormatSize; + DWORD fdwSupport; + DWORD cStandardFormats; + WCHAR[ACMFORMATTAGDETAILS_FORMATTAG_CHARS] szFormatTag; +} +alias ACMFORMATTAGDETAILSW* LPACMFORMATTAGDETAILSW; + +struct ACMDRIVERDETAILSA { + DWORD cbStruct = ACMDRIVERDETAILSA.sizeof; + FOURCC fccType; + FOURCC fccComp; + WORD wMid; + WORD wPid; + DWORD vdwACM; + DWORD vdwDriver; + DWORD fdwSupport; + DWORD cFormatTags; + DWORD cFilterTags; + HICON hicon; + char[ACMDRIVERDETAILS_SHORTNAME_CHARS] szShortName; + char[ACMDRIVERDETAILS_LONGNAME_CHARS] szLongName; + char[ACMDRIVERDETAILS_COPYRIGHT_CHARS] szCopyright; + char[ACMDRIVERDETAILS_LICENSING_CHARS] szLicensing; + char[ACMDRIVERDETAILS_FEATURES_CHARS] szFeatures; +} +alias ACMDRIVERDETAILSA* LPACMDRIVERDETAILSA; + +struct ACMDRIVERDETAILSW { + DWORD cbStruct = ACMDRIVERDETAILSW.sizeof; + FOURCC fccType; + FOURCC fccComp; + WORD wMid; + WORD wPid; + DWORD vdwACM; + DWORD vdwDriver; + DWORD fdwSupport; + DWORD cFormatTags; + DWORD cFilterTags; + HICON hicon; + WCHAR[ACMDRIVERDETAILS_SHORTNAME_CHARS] szShortName; + WCHAR[ACMDRIVERDETAILS_LONGNAME_CHARS] szLongName; + WCHAR[ACMDRIVERDETAILS_COPYRIGHT_CHARS] szCopyright; + WCHAR[ACMDRIVERDETAILS_LICENSING_CHARS] szLicensing; + WCHAR[ACMDRIVERDETAILS_FEATURES_CHARS] szFeatures; +} +alias ACMDRIVERDETAILSW* LPACMDRIVERDETAILSW; + +extern (Windows) { + alias BOOL function(HACMDRIVERID hadid, LPACMFORMATDETAILSA pafd, + DWORD_PTR dwInstance, DWORD fdwSupport) ACMFORMATENUMCBA; + alias BOOL function(HACMDRIVERID hadid, LPACMFORMATDETAILSW pafd, + DWORD_PTR dwInstance, DWORD fdwSupport) ACMFORMATENUMCBW; + alias BOOL function(HACMDRIVERID hadid, LPACMFORMATTAGDETAILSA paftd, + DWORD_PTR dwInstance, DWORD fdwSupport) ACMFORMATTAGENUMCBA; + alias BOOL function(HACMDRIVERID hadid, LPACMFORMATTAGDETAILSW paftd, + DWORD_PTR dwInstance, DWORD fdwSupport) ACMFORMATTAGENUMCBW; + alias BOOL function(HACMDRIVERID hadid, DWORD_PTR dwInstance, + DWORD fdwSupport) ACMDRIVERENUMCB; + + MMRESULT acmDriverOpen(LPHACMDRIVER phad, HACMDRIVERID hadid, + DWORD fdwOpen); + MMRESULT acmDriverEnum(ACMDRIVERENUMCB fnCallback, DWORD_PTR dwInstance, + DWORD fdwEnum); + MMRESULT acmFormatEnumA(HACMDRIVER had, LPACMFORMATDETAILSA pafd, + ACMFORMATENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum); + MMRESULT acmFormatEnumW(HACMDRIVER had, LPACMFORMATDETAILSW pafd, + ACMFORMATENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum); + MMRESULT acmDriverClose(HACMDRIVER had, DWORD fdwClose); + MMRESULT acmDriverDetailsA(HACMDRIVERID hadid, LPACMDRIVERDETAILSA padd, + DWORD fdwDetails); + MMRESULT acmDriverDetailsW(HACMDRIVERID hadid, LPACMDRIVERDETAILSW padd, + DWORD fdwDetails); + MMRESULT acmFormatTagEnumA(HACMDRIVER had, LPACMFORMATTAGDETAILSA paftd, + ACMFORMATTAGENUMCBA fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum); + MMRESULT acmFormatTagEnumW(HACMDRIVER had, LPACMFORMATTAGDETAILSW paftd, + ACMFORMATTAGENUMCBW fnCallback, DWORD_PTR dwInstance, DWORD fdwEnum); +} + +version (Unicode) { + alias ACMFORMATDETAILSW ACMFORMATDETAILS; + alias ACMFORMATTAGDETAILSW ACMFORMATTAGDETAILS; + alias ACMDRIVERDETAILSW ACMDRIVERDETAILS; + alias ACMFORMATENUMCBW ACMFORMATENUMCB; + alias ACMFORMATTAGENUMCBW ACMFORMATTAGENUMCB; + alias acmFormatEnumW acmFormatEnum; + alias acmDriverDetailsW acmDriverDetails; + alias acmFormatTagEnumW acmFormatTagEnum; +} else { + alias ACMFORMATDETAILSA ACMFORMATDETAILS; + alias ACMFORMATTAGDETAILSA ACMFORMATTAGDETAILS; + alias ACMDRIVERDETAILSA ACMDRIVERDETAILS; + alias ACMFORMATENUMCBA ACMFORMATENUMCB; + alias ACMFORMATTAGENUMCBA ACMFORMATTAGENUMCB; + alias acmFormatEnumA acmFormatEnum; + alias acmDriverDetailsA acmDriverDetails; + alias acmFormatTagEnumA acmFormatTagEnum; +} + +alias ACMFORMATDETAILS* LPACMFORMATDETAILS; +alias ACMFORMATTAGDETAILS* LPACMFORMATTAGDETAILS; +alias ACMDRIVERDETAILS* LPACMDRIVERDETAILS; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/mshtml.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/mshtml.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,536 @@ +/***********************************************************************\ +* mshtml.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.mshtml; + +private import win32.basetyps, win32.oaidl, win32.unknwn, + win32.windef, win32.wtypes; + +// These are used in this file, but not defined in MinGW. +interface IHTMLStyleSheet {}; +alias IHTMLStyle LPHTMLSTYLE; +alias IHTMLStyleSheet LPHTMLSTYLESHEET; +interface IHTMLLocation {}; +alias IHTMLLocation LPHTMLLOCATION; +interface IHTMLFramesCollection {}; +alias IHTMLFramesCollection LPHTMLFRAMESCOLLECTION; +interface IHTMLStyleSheetsCollection {}; +alias IHTMLStyleSheetsCollection LPHTMLSTYLESHEETSCOLLECTION; +interface IHTMLStyle {}; +interface IHTMLFiltersCollection {}; +alias IHTMLFiltersCollection LPHTMLFILTERSCOLLECTION; +interface IOmHistory : IDispatch { + HRESULT get_length(short* p); + HRESULT back(VARIANT*); + HRESULT forward(VARIANT*); + HRESULT go(VARIANT*); +}; +alias IOmHistory LPOMHISTORY; +interface IOmNavigator {}; +alias IOmNavigator LPOMNAVIGATOR; +interface IHTMLImageElementFactory {}; +alias IHTMLImageElementFactory LPHTMLIMAGEELEMENTFACTORY; +interface IHTMLEventObj {}; +alias IHTMLEventObj LPHTMLEVENTOBJ; +interface IHTMLScreen {}; +alias IHTMLScreen LPHTMLSCREEN; +interface IHTMLOptionElementFactory {}; +alias IHTMLOptionElementFactory LPHTMLOPTIONELEMENTFACTORY; + +interface IHTMLLinkElement : public IDispatch { + HRESULT put_href(BSTR); + HRESULT get_href(BSTR*); + HRESULT put_rel(BSTR); + HRESULT get_rel(BSTR*); + HRESULT put_rev(BSTR); + HRESULT get_rev(BSTR*); + HRESULT put_type(BSTR); + HRESULT get_type(BSTR*); + HRESULT get_readyState(BSTR*); + HRESULT put_onreadystatechange(VARIANT); + HRESULT get_onreadystatechange(VARIANT*); + HRESULT put_onload(VARIANT); + HRESULT get_onload(VARIANT*); + HRESULT put_onerror(VARIANT); + HRESULT get_onerror(VARIANT*); + HRESULT get_styleSheet(LPHTMLSTYLESHEET*); + HRESULT put_disabled(VARIANT_BOOL); + HRESULT get_disabled(VARIANT_BOOL*); + HRESULT put_media(BSTR); + HRESULT get_media(BSTR*); +} +alias IHTMLLinkElement LPHTMLLINKELEMENT; + +interface IHTMLImgElement : public IDispatch { + HRESULT put_isMap(VARIANT_BOOL); + HRESULT get_isMap(VARIANT_BOOL*); + HRESULT put_useMap(BSTR); + HRESULT get_useMap(BSTR*); + HRESULT get_mimeType(BSTR*); + HRESULT get_fileSize(BSTR*); + HRESULT get_fileCreatedDate(BSTR*); + HRESULT get_fileModifiedDate(BSTR*); + HRESULT get_fileUpdatedDate(BSTR*); + HRESULT get_protocol(BSTR*); + HRESULT get_href(BSTR*); + HRESULT get_nameProp(BSTR*); + HRESULT put_border(VARIANT); + HRESULT get_border(VARIANT*); + HRESULT put_vspace(LONG); + HRESULT get_vspace(LONG*); + HRESULT put_hspace(LONG); + HRESULT get_hspace(LONG*); + HRESULT put_alt(BSTR); + HRESULT get_alt(BSTR*); + HRESULT put_src(BSTR); + HRESULT get_src(BSTR*); + HRESULT put_lowsrc(BSTR); + HRESULT get_lowsrc(BSTR*); + HRESULT put_vrml(BSTR); + HRESULT get_vrml(BSTR*); + HRESULT put_dynsrc(BSTR); + HRESULT get_dynsrc(BSTR*); + HRESULT get_readyState(BSTR*); + HRESULT get_complete(VARIANT_BOOL*); + HRESULT put_loop(VARIANT); + HRESULT get_loop(VARIANT*); + HRESULT put_align(BSTR); + HRESULT get_align(BSTR*); + HRESULT put_onload(VARIANT); + HRESULT get_onload(VARIANT*); + HRESULT put_onerror(VARIANT); + HRESULT get_onerror(VARIANT*); + HRESULT put_onabort(VARIANT); + HRESULT get_onabort(VARIANT*); + HRESULT put_name(BSTR); + HRESULT get_name(BSTR*); + HRESULT put_width(LONG); + HRESULT get_width(LONG*); + HRESULT put_height(LONG); + HRESULT get_height(LONG*); + HRESULT put_start(BSTR); + HRESULT get_start(BSTR*); +} +alias IHTMLImgElement LPHTMLIMGELEMENT; + +interface IHTMLElementCollection : public IDispatch { + HRESULT toString(BSTR*); + HRESULT put_length(LONG); + HRESULT get_length(LONG*); + HRESULT get__newEnum(IUnknown*); + HRESULT item(VARIANT,VARIANT,IDispatch* pDisp); + HRESULT tags(VARIANT,IDispatch* pdisp); +} +alias IHTMLElementCollection LPHTMLELEMENTCOLLECTION; + +interface IHTMLDocument : public IDispatch { + HRESULT get_Script(IDispatch*); +} + +interface IHTMLDocument2 : public IHTMLDocument { + HRESULT get_all(LPHTMLELEMENTCOLLECTION*); + HRESULT get_body(LPHTMLELEMENT*); + HRESULT get_activeElement(LPHTMLELEMENT*); + HRESULT get_images(LPHTMLELEMENTCOLLECTION*); + HRESULT get_applets(LPHTMLELEMENTCOLLECTION*); + HRESULT get_links(LPHTMLELEMENTCOLLECTION*); + HRESULT get_forms(LPHTMLELEMENTCOLLECTION*); + HRESULT get_anchors(LPHTMLELEMENTCOLLECTION*); + HRESULT put_title(BSTR); + HRESULT get_title(BSTR*); + HRESULT get_scripts(LPHTMLELEMENTCOLLECTION*); + HRESULT put_designMode(BSTR); + HRESULT get_designMode(BSTR*); + HRESULT get_selection(LPHTMLSELECTIONOBJECT*); + HRESULT get_readyState(BSTR*); + HRESULT get_frames(IHTMLFramesCollection2*); + HRESULT get_embeds(LPHTMLELEMENTCOLLECTION*); + HRESULT get_plugins(LPHTMLELEMENTCOLLECTION*); + HRESULT put_alinkColor(VARIANT); + HRESULT get_alinkColor(VARIANT*); + HRESULT put_bgColor(VARIANT); + HRESULT get_bgColor(VARIANT*); + HRESULT put_fgColor(VARIANT); + HRESULT get_fgColor(VARIANT*); + HRESULT put_linkColor(VARIANT); + HRESULT get_linkColor(VARIANT*); + HRESULT put_vlinkColor(VARIANT); + HRESULT get_vlinkColor(VARIANT*); + HRESULT get_referrer(BSTR*); + HRESULT get_location(LPHTMLLOCATION*); + HRESULT get_lastModified(BSTR*); + HRESULT put_url(BSTR); + HRESULT get_url(BSTR*); + HRESULT put_domain(BSTR); + HRESULT get_domain(BSTR*); + HRESULT put_cookie(BSTR); + HRESULT get_cookie(BSTR*); + HRESULT put_expands(VARIANT_BOOL); + HRESULT get_expands(VARIANT_BOOL*); + HRESULT put_charset(BSTR); + HRESULT get_charset(BSTR*); + HRESULT put_defaultCharset(BSTR); + HRESULT get_defaultCharset(BSTR*); + HRESULT get_mimeType(BSTR*); + HRESULT get_fileSize(BSTR*); + HRESULT get_fileCreatedDate(BSTR*); + HRESULT get_fileModifiedDate(BSTR*); + HRESULT get_fileUpdatedDate(BSTR*); + HRESULT get_security(BSTR*); + HRESULT get_protocol(BSTR*); + HRESULT get_nameProp(BSTR*); + HRESULT write(SAFEARRAY*); + HRESULT writeln(SAFEARRAY*); + HRESULT open(BSTR,VARIANT,VARIANT,VARIANT,IDispatch*); + HRESULT close(); + HRESULT clear(); + HRESULT queryCommandSupported(BSTR,VARIANT_BOOL*); + HRESULT queryCommandEnabled(BSTR,VARIANT_BOOL*); + HRESULT queryCommandState(BSTR,VARIANT_BOOL*); + HRESULT queryCommandIndeterm(BSTR,VARIANT_BOOL*); + HRESULT queryCommandText(BSTR,BSTR*); + HRESULT queryCommandValue(BSTR,VARIANT*); + HRESULT execCommand(BSTR,VARIANT_BOOL,VARIANT,VARIANT_BOOL*); + HRESULT execCommandShowHelp(BSTR,VARIANT_BOOL*); + HRESULT createElement(BSTR,LPHTMLELEMENT*); + HRESULT put_onhelp(VARIANT); + HRESULT get_onhelp(VARIANT*); + HRESULT put_onclick(VARIANT); + HRESULT get_onclick(VARIANT*); + HRESULT put_ondblclick(VARIANT); + HRESULT get_ondblclick(VARIANT*); + HRESULT put_onkeyup(VARIANT); + HRESULT get_onkeyup(VARIANT*); + HRESULT put_onkeydown(VARIANT); + HRESULT get_onkeydown(VARIANT*); + HRESULT put_onkeypress(VARIANT); + HRESULT get_onkeypress(VARIANT*); + HRESULT put_onmouseup(VARIANT); + HRESULT get_onmouseup(VARIANT*); + HRESULT put_onmousedown(VARIANT); + HRESULT get_onmousedown(VARIANT*); + HRESULT put_onmousemove(VARIANT); + HRESULT get_onmousemove(VARIANT*); + HRESULT put_onmouseout(VARIANT); + HRESULT get_onmouseout(VARIANT*); + HRESULT put_onmouseover(VARIANT); + HRESULT get_onmouseover(VARIANT*); + HRESULT put_onreadystatechange(VARIANT); + HRESULT get_onreadystatechange(VARIANT*); + HRESULT put_onafterupdate(VARIANT); + HRESULT get_onafterupdate(VARIANT*); + HRESULT put_onrowexit(VARIANT); + HRESULT get_onrowexit(VARIANT*); + HRESULT put_onrowenter(VARIANT); + HRESULT get_onrowenter(VARIANT*); + HRESULT put_ondragstart(VARIANT); + HRESULT get_ondragstart(VARIANT*); + HRESULT put_onselectstart(VARIANT); + HRESULT get_onselectstart(VARIANT*); + HRESULT elementFromPoint(LONG,LONG,LPHTMLELEMENT*); + HRESULT get_parentWindow(LPHTMLWINDOW2*); + HRESULT get_styleSheets(LPHTMLSTYLESHEETSCOLLECTION*); + HRESULT put_onbeforeupdate(VARIANT); + HRESULT get_onbeforeupdate(VARIANT*); + HRESULT put_onerrorupdate(VARIANT); + HRESULT get_onerrorupdate(VARIANT*); + HRESULT toString(BSTR*); + HRESULT createStyleSheet(BSTR,LONG,LPHTMLSTYLESHEET*); +} + +interface IHTMLSelectionObject : public IDispatch { + HRESULT createRange(IDispatch*); + HRESULT empty(); + HRESULT clear(); + HRESULT get_type(BSTR*); +} +alias IHTMLSelectionObject LPHTMLSELECTIONOBJECT; + +interface IHTMLTxtRange : public IDispatch { + HRESULT get_htmlText(BSTR*); + HRESULT put_text(BSTR); + HRESULT get_text(BSTR*); + HRESULT parentElement(LPHTMLELEMENT*); + HRESULT duplicate(IHTMLTxtRange*); + HRESULT inRange(IHTMLTxtRange,VARIANT_BOOL*); + HRESULT isEqual(IHTMLTxtRange,VARIANT_BOOL*); + HRESULT scrollIntoView(VARIANT_BOOL); + HRESULT collapse(VARIANT_BOOL); + HRESULT expand(BSTR,VARIANT_BOOL*); + HRESULT move(BSTR,LONG,LONG*); + HRESULT moveStart(BSTR,LONG,LONG*); + HRESULT moveEnd(BSTR,LONG,LONG*); + HRESULT select(); + HRESULT pasteHTML(BSTR); + HRESULT moveToElementText(LPHTMLELEMENT); + HRESULT setEndPoint(BSTR,IHTMLTxtRange); + HRESULT compareEndPoints(BSTR,IHTMLTxtRange,LONG*); + HRESULT findText(BSTR,LONG,LONG,VARIANT_BOOL*); + HRESULT moveToPoint(LONG,LONG); + HRESULT getBookmark(BSTR*); + HRESULT moveToBookbark(BSTR,VARIANT_BOOL*); + HRESULT queryCommandSupported(BSTR,VARIANT_BOOL*); + HRESULT queryCommandEnabled(BSTR,VARIANT_BOOL*); + HRESULT queryCommandState(BSTR,VARIANT_BOOL*); + HRESULT queryCommandIndeterm(BSTR,VARIANT_BOOL*); + HRESULT queryCommandText(BSTR,BSTR*); + HRESULT queryCommandValue(BSTR,VARIANT*); + HRESULT execCommand(BSTR,VARIANT_BOOL,VARIANT,VARIANT_BOOL*); + HRESULT execCommandShowHelp(BSTR,VARIANT_BOOL*); +} + +interface IHTMLElement : public IDispatch { + HRESULT setAttribute(BSTR,VARIANT,LONG); + HRESULT getAttribute(BSTR,LONG,VARIANT*); + HRESULT removeAttribute(BSTR,LONG,VARIANT_BOOL*); + HRESULT put_className(BSTR); + HRESULT get_className(ref BSTR); + HRESULT put_id(BSTR); + HRESULT get_id(ref BSTR); + HRESULT get_tagName(ref BSTR); + HRESULT get_parentElement(LPHTMLELEMENT*); + HRESULT get_style(LPHTMLSTYLE*); + HRESULT put_onhelp(VARIANT); + HRESULT get_onhelp(VARIANT*); + HRESULT put_onclick(VARIANT); + HRESULT get_onclick(VARIANT*); + HRESULT put_ondblclick(VARIANT); + HRESULT get_ondblclick(VARIANT*); + HRESULT put_onkeydown(VARIANT); + HRESULT get_onkeydown(VARIANT*); + HRESULT put_onkeyup(VARIANT); + HRESULT get_onkeyup(VARIANT*); + HRESULT put_onkeypress(VARIANT); + HRESULT get_onkeypress(VARIANT*); + HRESULT put_onmouseout(VARIANT); + HRESULT get_onmouseout(VARIANT*); + HRESULT put_onmouseover(VARIANT); + HRESULT get_onmouseover(VARIANT*); + HRESULT put_onmousemove(VARIANT); + HRESULT get_onmousemove(VARIANT*); + HRESULT put_onmousedown(VARIANT); + HRESULT get_onmousedown(VARIANT*); + HRESULT put_onmouseup(VARIANT); + HRESULT get_onmouseup(VARIANT*); + HRESULT get_document(IDispatch*); + HRESULT put_title(BSTR); + HRESULT get_title(ref BSTR); + HRESULT put_language(BSTR); + HRESULT get_language(ref BSTR); + HRESULT put_onselectstart(VARIANT); + HRESULT get_onselectstart(VARIANT*); + HRESULT scrollIntoView(VARIANT); + HRESULT contains(LPHTMLELEMENT,VARIANT_BOOL*); + HRESULT get_source3Index(LONG*); + HRESULT get_recordNumber(VARIANT*); + HRESULT put_lang(BSTR); + HRESULT get_lang(ref BSTR); + HRESULT get_offsetLeft(LONG*); + HRESULT get_offsetTop(LONG*); + HRESULT get_offsetWidth(LONG*); + HRESULT get_offsetHeight(LONG*); + HRESULT get_offsetParent(LPHTMLELEMENT*); + HRESULT put_innerHTML(BSTR); + HRESULT get_innerHTML(ref BSTR); + HRESULT put_innerText(BSTR); + HRESULT get_innerText(ref BSTR); + HRESULT put_outerHTML(BSTR); + HRESULT get_outerHTML(ref BSTR); + HRESULT put_outerText(BSTR); + HRESULT get_outerText(ref BSTR); + HRESULT insertAdjacentHTML(BSTR,BSTR); + HRESULT insertAdjacentText(BSTR,BSTR); + HRESULT get_parentTextEdit(LPHTMLELEMENT*); + HRESULT isTextEdit(VARIANT_BOOL*); + HRESULT click(); + HRESULT get_filters(LPHTMLFILTERSCOLLECTION*); + HRESULT put_ondragstart(VARIANT); + HRESULT get_ondragstart(VARIANT*); + HRESULT toString(BSTR*); + HRESULT put_onbeforeupdate(VARIANT); + HRESULT get_onbeforeupdate(VARIANT*); + HRESULT put_onafterupdate(VARIANT); + HRESULT get_onafterupdate(VARIANT*); + HRESULT put_onerrorupdate(VARIANT); + HRESULT get_onerrorupdate(VARIANT*); + HRESULT put_onrowexit(VARIANT); + HRESULT get_onrowexit(VARIANT*); + HRESULT put_onrowenter(VARIANT); + HRESULT get_onrowenter(VARIANT*); + HRESULT put_ondatasetchanged(VARIANT); + HRESULT get_ondatasetchanged(VARIANT*); + HRESULT put_ondataavailable(VARIANT); + HRESULT get_ondataavailable(VARIANT*); + HRESULT put_ondatasetcomplete(VARIANT); + HRESULT get_ondatasetcomplete(VARIANT*); + HRESULT put_onfilterchange(VARIANT); + HRESULT get_onfilterchange(VARIANT*); + HRESULT get_children(IDispatch*); + HRESULT get_all(IDispatch*); +} +alias IHTMLElement LPHTMLELEMENT; + +interface IHTMLFramesCollection2 : public IDispatch { + HRESULT item(VARIANT*,VARIANT*); + HRESULT get_length(LONG*); +} + +interface IHTMLWindow2 : public IHTMLFramesCollection2 { + HRESULT get_frames(IHTMLFramesCollection2*); + HRESULT put_defaultStatus(BSTR); + HRESULT get_defaultStatus(BSTR*); + HRESULT put_status(BSTR); + HRESULT get_status(BSTR*); + HRESULT setTimeout(BSTR,LONG,VARIANT*,LONG*); + HRESULT clearTimeout(LONG); + HRESULT alert(BSTR); + HRESULT confirm(BSTR,VARIANT_BOOL*); + HRESULT prompt(BSTR,BSTR,VARIANT*); + HRESULT get_Image(LPHTMLIMAGEELEMENTFACTORY*); + HRESULT get_location(LPHTMLLOCATION*); + HRESULT get_history(LPOMHISTORY*); + HRESULT close(); + HRESULT put_opener(VARIANT); + HRESULT get_opener(VARIANT*); + HRESULT get_navigator(LPOMNAVIGATOR*); + HRESULT put_name(BSTR); + HRESULT get_name(BSTR*); + HRESULT get_parent(LPHTMLWINDOW2*); + HRESULT open(BSTR,BSTR,BSTR,VARIANT_BOOL,LPHTMLWINDOW2*); + HRESULT get_self(LPHTMLWINDOW2*); + HRESULT get_top(LPHTMLWINDOW2*); + HRESULT get_window(LPHTMLWINDOW2*); + HRESULT navigate(BSTR); + HRESULT put_onfocus(VARIANT); + HRESULT get_onfocus(VARIANT*); + HRESULT put_onblur(VARIANT); + HRESULT get_onblur(VARIANT*); + HRESULT put_onload(VARIANT); + HRESULT get_onload(VARIANT*); + HRESULT put_onbeforeunload(VARIANT); + HRESULT get_onbeforeunload(VARIANT*); + HRESULT put_onunload(VARIANT); + HRESULT get_onunload(VARIANT*); + HRESULT put_onhelp(VARIANT); + HRESULT get_onhelp(VARIANT*); + HRESULT put_onerror(VARIANT); + HRESULT get_onerror(VARIANT*); + HRESULT put_onresize(VARIANT); + HRESULT get_onresize(VARIANT*); + HRESULT put_onscroll(VARIANT); + HRESULT get_onscroll(VARIANT*); + HRESULT get_document(IHTMLDocument2*); + HRESULT get_event(LPHTMLEVENTOBJ*); + HRESULT get__newEnum(IUnknown*); + HRESULT showModalDialog(BSTR,VARIANT*,VARIANT*,VARIANT*); + HRESULT showHelp(BSTR,VARIANT,BSTR); + HRESULT get_screen(LPHTMLSCREEN*); + HRESULT get_Option(LPHTMLOPTIONELEMENTFACTORY*); + HRESULT focus(); + HRESULT get_closed(VARIANT_BOOL*); + HRESULT blur(); + HRESULT scroll(long,long); + HRESULT get_clientInformation(LPOMNAVIGATOR*); + HRESULT setInterval(BSTR,long,VARIANT*,long*); + HRESULT clearInterval(long); + HRESULT put_offscreenBuffering(VARIANT); + HRESULT get_offscreenBuffering(VARIANT*); + HRESULT execScript(BSTR,BSTR,VARIANT*); + HRESULT toString(BSTR*); + HRESULT scrollBy(LONG,LONG); + HRESULT scrollTo(LONG,LONG); + HRESULT moveTo(LONG,LONG); + HRESULT moveBy(LONG,LONG); + HRESULT resizeTo(LONG,LONG); + HRESULT resizeBy(LONG,LONG); + HRESULT get_external(IDispatch*); +} +alias IHTMLWindow2 LPHTMLWINDOW2; + +interface IHTMLFrameBase : public IDispatch { + HRESULT put_src(BSTR); + HRESULT get_src(BSTR*); + HRESULT put_name(BSTR); + HRESULT get_name(BSTR*); + HRESULT put_border(VARIANT); + HRESULT get_border(VARIANT*); + HRESULT put_frameBorder(BSTR); + HRESULT get_frameBorder(BSTR*); + HRESULT put_frameSpacing(VARIANT); + HRESULT get_frameSpacing(VARIANT*); + HRESULT put_marginWidth(VARIANT); + HRESULT get_marginWidth(VARIANT*); + HRESULT put_marginHeight(VARIANT); + HRESULT get_marginHeight(VARIANT*); + HRESULT put_noResize(VARIANT_BOOL); + HRESULT get_noResize(VARIANT_BOOL*); + HRESULT put_scrolling(BSTR); + HRESULT get_scrolling(BSTR*); +} + +interface IHTMLFrameBase2 : public IDispatch { + HRESULT get_contentWindow(IHTMLWindow2 *); + HRESULT put_onload(VARIANT); + HRESULT get_onload(VARIANT*); + HRESULT put_onreadystatechange(VARIANT); + HRESULT get_onreadystatechange(VARIANT*); + HRESULT get_readyState(BSTR*); + HRESULT put_allowTransparency(VARIANT_BOOL); + HRESULT get_allowTransparency(VARIANT_BOOL*); +} + +interface IHTMLFrameBase3 : public IDispatch { + HRESULT put_longDesc(BSTR); + HRESULT get_longDesc(BSTR*); +} + +interface IHTMLBodyElement : public IDispatch { + HRESULT put_background(BSTR); + HRESULT get_background(BSTR*); + HRESULT put_bgProperties(BSTR); + HRESULT get_bgProperties(BSTR*); + HRESULT put_leftMargin(VARIANT); + HRESULT get_leftMargin(VARIANT*); + HRESULT put_topMargin(VARIANT); + HRESULT get_topMargin(VARIANT*); + HRESULT put_rightMargin(VARIANT); + HRESULT get_rightMargin(VARIANT*); + HRESULT put_bottomMargin(VARIANT); + HRESULT get_bottomMargin(VARIANT*); + HRESULT put_noWrap(VARIANT_BOOL); + HRESULT get_noWrap(VARIANT_BOOL*); + HRESULT put_bgColor(VARIANT); + HRESULT get_bgColor(VARIANT*); + HRESULT put_text(VARIANT); + HRESULT get_text(VARIANT*); + HRESULT put_link(VARIANT); + HRESULT get_link(VARIANT*); + HRESULT put_vLink(VARIANT); + HRESULT get_vLink(VARIANT*); + HRESULT put_aLink(VARIANT); + HRESULT get_aLink(VARIANT*); + HRESULT put_onload(VARIANT); + HRESULT get_onload(VARIANT*); + HRESULT put_onunload(VARIANT); + HRESULT get_onunload(VARIANT*); + HRESULT put_scroll(BSTR); + HRESULT get_scroll(BSTR*); + HRESULT put_onselect(VARIANT); + HRESULT get_onselect(VARIANT*); + HRESULT put_onbeforeunload(VARIANT); + HRESULT get_onbeforeunload(VARIANT*); + HRESULT createTextRange(IHTMLTxtRange*); +} + +interface IHTMLBodyElement2 : public IDispatch { + HRESULT put_onbeforeprint(VARIANT); + HRESULT get_onbeforeprint(VARIANT*); + HRESULT put_onafterprint(VARIANT); + HRESULT get_onafterprint(VARIANT*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/mswsock.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/mswsock.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,203 @@ +/***********************************************************************\ +* mswsock.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Daniel Keep * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.mswsock; + +import win32.winbase, win32.windef; +private import win32.basetyps, win32.w32api; + +// FIXME: clean up Windows version support + +version (Win32_Winsock2) pragma(msg, + "Version Win32_Winsock2 is deprecated; Winsock2 is now imported by default"); + +// Pull in Winsock1 if the user has put "Win32_Winsock1" on the compile +// line; otherwise, default to Winsock2. +version (Win32_Winsock1) { + import win32.winsock; +} else { + import win32.winsock2; +} + +static if (_WIN32_WINNT_ONLY) { + static if (_WIN32_WINNT >= 0x500) { + enum { + /* WinNT5+: + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */ + SO_MAXDG = 0x7009, + SO_MAXPATHDG = 0x700A, + } + } + + enum { + /* WinNT4+: + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options_for_windows_nt_4_0_2.htm */ + SO_CONNDATA = 0x7000, + SO_CONNOPT = 0x7001, + SO_DISCDATA = 0x7002, + SO_DISCOPT = 0x7003, + SO_CONNDATALEN = 0x7004, + SO_CONNOPTLEN = 0x7005, + SO_DISCDATALEN = 0x7006, + SO_DISCOPTLEN = 0x7007, + + /* WinNT4: + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */ + SO_UPDATE_ACCEPT_CONTENT = 0x700B, + } +} + +enum { + /* Win95+, WinNT4+ but apparently shouldn't used: mark as deprecated? + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */ + SO_OPENTYPE = 0x7008, + + /* Win95+; these two are passed to the SO_OPENTYPE option as arguments, + so would they be deprecated as well? + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */ + SO_SYNCHRONOUS_ALERT = 0x0010, + SO_SYNCHRONOUS_NONALERT = 0x0020, + + /* Win95: + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/socket_options.htm */ + SO_CONNECT_TIME = 0x700C, +} + + +static if (_WIN32_WINNT_ONLY) { + enum { + TCP_BSDURGENT = 0x7000, + } + + /* These *appear* to be constants for passing to the TransmitFile / + TransmitPackets functions, which are available in WinNT3.51+ + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmitfile_2.htm */ + enum { + TF_DISCONNECT = 1, + TF_REUSE_SOCKET = 2, + TF_WRITE_BEHIND = 4, + TF_USE_DEFAULT_WORKER = 0, + TF_USE_SYSTEM_THREAD = 16, + TF_USE_KERNEL_APC = 32 + } +} + +/* Win95+, WinNT3.51+ + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmit_file_buffers_2.htm */ +struct TRANSMIT_FILE_BUFFERS { + PVOID Head; + DWORD HeadLength; + PVOID Tail; + DWORD TailLength; +} +alias TRANSMIT_FILE_BUFFERS* PTRANSMIT_FILE_BUFFERS, LPTRANSMIT_FILE_BUFFERS; + +extern(Windows) { + /* Win95+, WinNT3.51+ + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/wsarecvex_2.htm */ + int WSARecvEx(SOCKET, char*, int, int*); + + /* Win95+, WinNT3.51+ + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/getacceptexSOCKADDRs_2.htm */ + VOID GetAcceptExSockaddrs(PVOID, DWORD, DWORD, DWORD, SOCKADDR**, LPINT, SOCKADDR**, LPINT); + + static if (_WIN32_WINNT_ONLY) { + /* WinNT3.51+ + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmitfile_2.htm */ + BOOL TransmitFile(SOCKET, HANDLE, DWORD, DWORD, LPOVERLAPPED, LPTRANSMIT_FILE_BUFFERS, DWORD); + + /* WinNT3.51+ + ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/acceptex_2.htm */ + alias BOOL function(SOCKET, SOCKET, PVOID, DWORD, DWORD, DWORD, LPDWORD, LPOVERLAPPED) LPFN_ACCEPTEX; + const GUID WSAID_ACCEPTEX = {0xb5367df1,0xcbac,0x11cf,[0x95,0xca,0x00,0x80,0x5f,0x48,0xa1,0x92]}; + + alias BOOL function(SOCKET, SOCKADDR*, int, PVOID, DWORD, LPDWORD, LPOVERLAPPED) LPFN_CONNECTEX; + const GUID WSAID_CONNECTEX = {0x25a207b9,0xddf3,0x4660,[0x8e,0xe9,0x76,0xe5,0x8c,0x74,0x06,0x3e]}; + } +} + +version(Win32_Winsock1) { +} else { + static if (WINVER > 0x501) { + /* These appear to be constants for the TRANSMIT_PACKETS_ELEMENT + * structure below, so I've given them the same minimum version + */ + enum { + TP_ELEMENT_FILE = 1, + TP_ELEMENT_MEMORY = 2, + TP_ELEMENT_EOP = 4 + } + + /* WinXP+, Srv2k3+ + * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/transmit_packets_element_2.htm + */ + struct TRANSMIT_PACKETS_ELEMENT { + ULONG dwElFlags; + ULONG cLength; + union { + struct { + LARGE_INTEGER nFileOffset; + HANDLE hFile; + } + PVOID pBuffer; + } + } + + /* WinXP+, Server2003+: + * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/wsamsg_2.htm + */ + struct WSAMSG { + LPSOCKADDR name; + INT namelen; + LPWSABUF lpBuffers; + DWORD dwBufferCount; + WSABUF Control; + DWORD dwFlags; + } + + alias WSAMSG* PWSAMSG, LPWSAMSG; + + /* According to MSDN docs, the WSAMSG.Control buffer starts with a + cmsghdr header of the following form. See also RFC 2292. */ + /* DK: Confirmed. So I suppose these should get the same version as + WSAMSG... */ + struct WSACMSGHDR { + UINT cmsg_len; + INT cmsg_level; + INT cmsg_type; + // followed by UCHAR cmsg_data[]; + } + + /* TODO: Standard Posix.1g macros as per RFC 2292, with WSA_uglification. */ + /* DK: MinGW doesn't define these, and neither does the MSDN docs. Might have + to actually look up RFC 2292... */ + /+ + #if 0 + #define WSA_CMSG_FIRSTHDR(mhdr) + #define WSA_CMSG_NXTHDR(mhdr, cmsg) + #define WSA_CMSG_SPACE(length) + #define WSA_CMSG_LEN(length) + #endif + +/ + + extern(Windows) + { + /* WinXP+, Srv2k3+ + * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/disconnectex_2.htm + */ + BOOL DisconnectEx(SOCKET, LPOVERLAPPED, DWORD, DWORD); + + /* WinXP+, Srv2k3+ + * ms-help://MS.MSDNQTR.2003FEB.1033/winsock/winsock/wsarecvmsg_2.htm + */ + int WSARecvMsg(SOCKET, LPWSAMSG, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); + } + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/nb30.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/nb30.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,237 @@ +/***********************************************************************\ +* nb30.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.nb30; + +private import win32.windef; + +const size_t + NCBNAMSZ = 16, + MAX_LANA = 254; + +// FIXME: are these really two sets of constants? +enum : UCHAR { + REGISTERING = 0, + REGISTERED = 4, + DEREGISTERED, + DUPLICATE, + DUPLICATE_DEREG, // = 7 + UNIQUE_NAME = 0, + GROUP_NAME = 0x80, + NAME_FLAGS_MASK = 0x87 +} + +enum : UCHAR { + LISTEN_OUTSTANDING = 1, + CALL_PENDING, + SESSION_ESTABLISHED, + HANGUP_PENDING, + HANGUP_COMPLETE, + SESSION_ABORTED // = 6 +} + +const char[4] + ALL_TRANSPORTS = "M\0\0\0", + MS_NBF = "MNBF"; + +enum : UCHAR { + NCBCALL = 0x10, + NCBLISTEN, + NCBHANGUP, // = 0x12 + NCBSEND = 0x14, + NCBRECV, + NCBRECVANY, + NCBCHAINSEND, // = 0x17 + NCBDGSEND = 0x20, + NCBDGRECV, + NCBDGSENDBC, + NCBDGRECVBC, // = 0x23, + NCBADDNAME = 0x30, + NCBDELNAME, + NCBRESET, + NCBASTAT, + NCBSSTAT, + NCBCANCEL, + NCBADDGRNAME, + NCBENUM, // = 0x37 + NCBUNLINK = 0x70, + NCBSENDNA, + NCBCHAINSENDNA, + NCBLANSTALERT, // = 0x73 + NCBACTION = 0x77, + NCBFINDNAME, + NCBTRACE // = 0x79 +} + +const UCHAR ASYNCH = 0x80; + +enum : UCHAR { + NRC_GOODRET = 0x00, + NRC_BUFLEN = 0x01, + NRC_ILLCMD = 0x03, + NRC_CMDTMO = 0x05, + NRC_INCOMP, + NRC_BADDR, + NRC_SNUMOUT, + NRC_NORES, + NRC_SCLOSED, + NRC_CMDCAN, // = 0x0b + NRC_DUPNAME = 0x0d, + NRC_NAMTFUL, + NRC_ACTSES, // = 0x0f, + NRC_LOCTFUL = 0x11, + NRC_REMTFUL, + NRC_ILLNN, + NRC_NOCALL, + NRC_NOWILD, + NRC_INUSE, + NRC_NAMERR, + NRC_SABORT, + NRC_NAMCONF, // = 0x19 + NRC_IFBUSY = 0x21, + NRC_TOOMANY, + NRC_BRIDGE, + NRC_CANOCCR, // = 0x24 + NRC_CANCEL = 0x26, + NRC_DUPENV = 0x30, + NRC_ENVNOTDEF = 0x34, + NRC_OSRESNOTAV, + NRC_MAXAPPS, + NRC_NOSAPS, + NRC_NORESOURCES, + NRC_INVADDRESS, // = 0x39 + NRC_INVDDID = 0x3B, + NRC_LOCKFAIL = 0x3C, + NRC_OPENERR = 0x3f, + NRC_SYSTEM = 0x40, + NRC_PENDING = 0xff +} + +struct ACTION_HEADER { + union { + /* transport_id is defined as a ULONG, but both the above constants + * and the documented description suggest it should be a char[4] + */ + ULONG transport_id; + char[4] c_transport_id; + } + USHORT action_code; + USHORT reserved; +} +alias ACTION_HEADER* PACTION_HEADER; + +struct ADAPTER_STATUS { + UCHAR[6] adapter_address; + UCHAR rev_major; + UCHAR reserved0; + UCHAR adapter_type; + UCHAR rev_minor; + WORD duration; + WORD frmr_recv; + WORD frmr_xmit; + WORD iframe_recv_err; + WORD xmit_aborts; + DWORD xmit_success; + DWORD recv_success; + WORD iframe_xmit_err; + WORD recv_buff_unavail; + WORD t1_timeouts; + WORD ti_timeouts; + DWORD reserved1; + WORD free_ncbs; + WORD max_cfg_ncbs; + WORD max_ncbs; + WORD xmit_buf_unavail; + WORD max_dgram_size; + WORD pending_sess; + WORD max_cfg_sess; + WORD max_sess; + WORD max_sess_pkt_size; + WORD name_count; +} +alias ADAPTER_STATUS* PADAPTER_STATUS; + +struct FIND_NAME_BUFFER { + /* From Win32 API docs + * + * length + * Specifies the length, in bytes, of the FIND_NAME_BUFFER + * structure. Although this structure always occupies 33 bytes, + * not all of the structure is necessarily valid. + * + * On this basis, should length be initialised? + */ + UCHAR length; + UCHAR access_control; + UCHAR frame_control; + UCHAR[6] destination_addr; + UCHAR[6] source_addr; + UCHAR[18] routing_info; +} +alias FIND_NAME_BUFFER* PFIND_NAME_BUFFER; + +struct FIND_NAME_HEADER { + WORD node_count; + UCHAR reserved; + UCHAR unique_group; +} +alias FIND_NAME_HEADER* PFIND_NAME_HEADER; + +struct LANA_ENUM { + UCHAR length; + UCHAR[MAX_LANA+1] lana; +} +alias LANA_ENUM* PLANA_ENUM; + +struct NAME_BUFFER { + UCHAR[NCBNAMSZ] name; + UCHAR name_num; + UCHAR name_flags; +} +alias NAME_BUFFER* PNAME_BUFFER; + +struct NCB { + UCHAR ncb_command; + UCHAR ncb_retcode; + UCHAR ncb_lsn; + UCHAR ncb_num; + PUCHAR ncb_buffer; + WORD ncb_length; + UCHAR[NCBNAMSZ] ncb_callname; + UCHAR[NCBNAMSZ] ncb_name; + UCHAR ncb_rto; + UCHAR ncb_sto; + extern (Windows) void function(NCB*) ncb_post; + UCHAR ncb_lana_num; + UCHAR ncb_cmd_cplt; + UCHAR ncb_reserve[10]; + HANDLE ncb_event; +} +alias NCB* PNCB; + +struct SESSION_BUFFER { + UCHAR lsn; + UCHAR state; + UCHAR[NCBNAMSZ] local_name; + UCHAR[NCBNAMSZ] remote_name; + UCHAR rcvs_outstanding; + UCHAR sends_outstanding; +} +alias SESSION_BUFFER* PSESSION_BUFFER; + +struct SESSION_HEADER { + UCHAR sess_name; + UCHAR num_sess; + UCHAR rcv_dg_outstanding; + UCHAR rcv_any_outstanding; +} +alias SESSION_HEADER* PSESSION_HEADER; + +extern (Windows) UCHAR Netbios(PNCB); diff -r 586e4a649642 -r 4a9dcbd9e54f win32/nddeapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/nddeapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,162 @@ +/***********************************************************************\ +* nddeapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.nddeapi; + +private import win32.windef; + +// FIXME: check types and grouping of constants + +/+ +#ifndef CNLEN /* also in lmcons.h */ +#define CNLEN 15 +#define UNCLEN (CNLEN + 2) +#endif ++/ + +const char SEP_CHAR = ','; +const char[] BAR_CHAR = "|"; +const wchar SEP_WCHAR = ','; +const wchar[] BAR_WCHAR = "|"; + +enum { + NDDE_NO_ERROR, + NDDE_ACCESS_DENIED, + NDDE_BUF_TOO_SMALL, + NDDE_ERROR_MORE_DATA, + NDDE_INVALID_SERVER, + NDDE_INVALID_SHARE, + NDDE_INVALID_PARAMETER, + NDDE_INVALID_LEVEL, + NDDE_INVALID_PASSWORD, + NDDE_INVALID_ITEMNAME, + NDDE_INVALID_TOPIC, + NDDE_INTERNAL_ERROR, + NDDE_OUT_OF_MEMORY, + NDDE_INVALID_APPNAME, + NDDE_NOT_IMPLEMENTED, + NDDE_SHARE_ALREADY_EXIST, + NDDE_SHARE_NOT_EXIST, + NDDE_INVALID_FILENAME, + NDDE_NOT_RUNNING, + NDDE_INVALID_WINDOW, + NDDE_INVALID_SESSION, + NDDE_INVALID_ITEM_LIST, + NDDE_SHARE_DATA_CORRUPTED, + NDDE_REGISTRY_ERROR, + NDDE_CANT_ACCESS_SERVER, + NDDE_INVALID_SPECIAL_COMMAND, + NDDE_INVALID_SECURITY_DESC, + NDDE_TRUST_SHARE_FAIL +} + +const size_t + MAX_NDDESHARENAME = 256, + MAX_DOMAINNAME = 15, + MAX_USERNAME = 15, + MAX_APPNAME = 255, + MAX_TOPICNAME = 255, + MAX_ITEMNAME = 255; + +const NDDEF_NOPASSWORDPROMPT = 1; +const NDDEF_NOCACHELOOKUP = 2; +const NDDEF_STRIP_NDDE = 4; + +const SHARE_TYPE_OLD = 1; +const SHARE_TYPE_NEW = 2; +const SHARE_TYPE_STATIC = 4; + +const uint + NDDE_CMD_SHOW_MASK = 0x0000FFFF, + NDDE_TRUST_CMD_SHOW = 0x10000000, + NDDE_TRUST_SHARE_DEL = 0x20000000, + NDDE_TRUST_SHARE_INIT = 0x40000000, + NDDE_TRUST_SHARE_START = 0x80000000; + +struct NDdeShareInfo_tag { + LONG lRevision; + LPTSTR lpszShareName; + LONG lShareType; + LPTSTR lpszAppTopicList; + LONG fSharedFlag; + LONG fService; + LONG fStartAppFlag; + LONG nCmdShow; + LONG[2] qModifyId; + LONG cNumItems; + LPTSTR lpszItemList; +} +extern (C) { // huh? + NDdeShareInfo_tag NDDESHAREINFO; + NDdeShareInfo_tag* PNDDESHAREINFO; +} + +extern (Windows) { + UINT NDdeGetErrorStringA(UINT, LPSTR, DWORD); + UINT NDdeGetErrorStringW(UINT, LPWSTR, DWORD); + UINT NDdeGetShareSecurityA(LPSTR, LPSTR, SECURITY_INFORMATION, + PSECURITY_DESCRIPTOR, DWORD, PDWORD); + UINT NDdeGetShareSecurityW(LPWSTR, LPWSTR, SECURITY_INFORMATION, + PSECURITY_DESCRIPTOR, DWORD, PDWORD); + UINT NDdeGetTrustedShareA(LPSTR, LPSTR, PDWORD, PDWORD, PDWORD); + UINT NDdeGetTrustedShareW(LPWSTR, LPWSTR, PDWORD, PDWORD, PDWORD); + BOOL NDdeIsValidShareNameA(LPSTR); + BOOL NDdeIsValidShareNameW(LPWSTR); + BOOL NDdeIsValidAppTopicListA(LPSTR); + BOOL NDdeIsValidAppTopicListW(LPWSTR); + UINT NDdeSetShareSecurityA(LPSTR, LPSTR, SECURITY_INFORMATION, + PSECURITY_DESCRIPTOR); + UINT NDdeSetShareSecurityW(LPWSTR, LPWSTR, SECURITY_INFORMATION, + PSECURITY_DESCRIPTOR); + UINT NDdeSetTrustedShareA(LPSTR, LPSTR, DWORD); + UINT NDdeSetTrustedShareW(LPWSTR, LPWSTR, DWORD); + UINT NDdeShareAddA(LPSTR, UINT, PSECURITY_DESCRIPTOR, PBYTE, DWORD); + UINT NDdeShareAddW(LPWSTR, UINT, PSECURITY_DESCRIPTOR, PBYTE, DWORD); + UINT NDdeShareDelA(LPSTR, LPSTR, UINT); + UINT NDdeShareDelW(LPWSTR, LPWSTR, UINT); + UINT NDdeShareEnumA(LPSTR, UINT, PBYTE, DWORD, PDWORD, PDWORD); + UINT NDdeShareEnumW(LPWSTR, UINT, PBYTE, DWORD, PDWORD, PDWORD); + UINT NDdeShareGetInfoA(LPSTR, LPSTR, UINT, PBYTE, DWORD, PDWORD, PWORD); + UINT NDdeShareGetInfoW(LPWSTR, LPWSTR, UINT, PBYTE, DWORD, PDWORD, PWORD); + UINT NDdeShareSetInfoA(LPSTR, LPSTR, UINT, PBYTE, DWORD, WORD); + UINT NDdeShareSetInfoW(LPWSTR, LPWSTR, UINT, PBYTE, DWORD, WORD); + UINT NDdeTrustedShareEnumA(LPSTR, UINT, PBYTE, DWORD, PDWORD, PDWORD); + UINT NDdeTrustedShareEnumW(LPWSTR, UINT, PBYTE, DWORD, PDWORD, PDWORD); +} + +version (Unicode) { + alias NDdeShareAddW NDdeShareAdd; + alias NDdeShareDelW NDdeShareDel; + alias NDdeSetShareSecurityW NDdeSetShareSecurity; + alias NDdeGetShareSecurityW NDdeGetShareSecurity; + alias NDdeShareEnumW NDdeShareEnum; + alias NDdeShareGetInfoW NDdeShareGetInfo; + alias NDdeShareSetInfoW NDdeShareSetInfo; + alias NDdeGetErrorStringW NDdeGetErrorString; + alias NDdeIsValidShareNameW NDdeIsValidShareName; + alias NDdeIsValidAppTopicListW NDdeIsValidAppTopicList; + alias NDdeSetTrustedShareW NDdeSetTrustedShare; + alias NDdeGetTrustedShareW NDdeGetTrustedShare; + alias NDdeTrustedShareEnumW NDdeTrustedShareEnum; +} else { + alias NDdeShareAddA NDdeShareAdd; + alias NDdeShareDelA NDdeShareDel; + alias NDdeSetShareSecurityA NDdeSetShareSecurity; + alias NDdeGetShareSecurityA NDdeGetShareSecurity; + alias NDdeShareEnumA NDdeShareEnum; + alias NDdeShareGetInfoA NDdeShareGetInfo; + alias NDdeShareSetInfoA NDdeShareSetInfo; + alias NDdeGetErrorStringA NDdeGetErrorString; + alias NDdeIsValidShareNameA NDdeIsValidShareName; + alias NDdeIsValidAppTopicListA NDdeIsValidAppTopicList; + alias NDdeSetTrustedShareA NDdeSetTrustedShare; + alias NDdeGetTrustedShareA NDdeGetTrustedShare; + alias NDdeTrustedShareEnumA NDdeTrustedShareEnum; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/nspapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/nspapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,148 @@ +/***********************************************************************\ +* nspapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.nspapi; + +private import win32.basetyps, win32.windef; + +// FIXME: check types of constants + +enum { + NS_ALL = 0, + + NS_SAP, + NS_NDS, + NS_PEER_BROWSE, + + NS_TCPIP_LOCAL = 10, + NS_TCPIP_HOSTS, + NS_DNS, + NS_NETBT, + NS_WINS, + + NS_NBP = 20, + + NS_MS = 30, + NS_STDA, + NS_NTDS, + + NS_X500 = 40, + NS_NIS, + NS_NISPLUS, + + NS_WRQ = 50 +} + +enum { + SERVICE_REGISTER = 1, + SERVICE_DEREGISTER = 2, + SERVICE_FLUSH = 3, + SERVICE_FLAG_HARD = 2 +} + +/* MinGW makes the next section conditional on winsock.h or winsock2.h + * being included. But that doesn't translate well into D. + */ +version (Win32_Winsock1) { + import win32.winsock; +} else { + import win32.winsock2; +} + +struct SOCKET_ADDRESS { + LPSOCKADDR lpSockaddr; + INT iSockaddrLength; +} +alias SOCKET_ADDRESS* PSOCKET_ADDRESS, LPSOCKET_ADDRESS; + +struct CSADDR_INFO { + SOCKET_ADDRESS LocalAddr; + SOCKET_ADDRESS RemoteAddr; + INT iSocketType; + INT iProtocol; +} +alias CSADDR_INFO* PCSADDR_INFO, LPCSADDR_INFO; + +struct BLOB { + ULONG cbSize; + BYTE* pBlobData; +} +alias BLOB* PBLOB, LPBLOB; + +struct SERVICE_ADDRESS { + DWORD dwAddressType; + DWORD dwAddressFlags; + DWORD dwAddressLength; + DWORD dwPrincipalLength; + BYTE* lpAddress; + BYTE* lpPrincipal; +} + +struct SERVICE_ADDRESSES { + DWORD dwAddressCount; + SERVICE_ADDRESS _Addresses; + + SERVICE_ADDRESS* Addresses() { return &_Addresses; } +} +alias SERVICE_ADDRESSES* PSERVICE_ADDRESSES, LPSERVICE_ADDRESSES; + +struct SERVICE_INFOA { + LPGUID lpServiceType; + LPSTR lpServiceName; + LPSTR lpComment; + LPSTR lpLocale; + DWORD dwDisplayHint; + DWORD dwVersion; + DWORD dwTime; + LPSTR lpMachineName; + LPSERVICE_ADDRESSES lpServiceAddress; + BLOB ServiceSpecificInfo; +} +alias SERVICE_INFOA* LPSERVICE_INFOA; + +struct SERVICE_INFOW { + LPGUID lpServiceType; + LPWSTR lpServiceName; + LPWSTR lpComment; + LPWSTR lpLocale; + DWORD dwDisplayHint; + DWORD dwVersion; + DWORD dwTime; + LPWSTR lpMachineName; + LPSERVICE_ADDRESSES lpServiceAddress; + BLOB ServiceSpecificInfo; +} +alias SERVICE_INFOW* LPSERVICE_INFOW; + +alias void* LPSERVICE_ASYNC_INFO; + +extern (Windows) { + INT SetServiceA(DWORD, DWORD, DWORD, LPSERVICE_INFOA, + LPSERVICE_ASYNC_INFO, LPDWORD); + INT SetServiceW(DWORD, DWORD, DWORD, LPSERVICE_INFOW, + LPSERVICE_ASYNC_INFO, LPDWORD); + INT GetAddressByNameA(DWORD, LPGUID, LPSTR, LPINT, DWORD, + LPSERVICE_ASYNC_INFO, LPVOID, LPDWORD, LPSTR, LPDWORD); + INT GetAddressByNameW(DWORD, LPGUID, LPWSTR, LPINT, DWORD, + LPSERVICE_ASYNC_INFO, LPVOID, LPDWORD, LPWSTR, LPDWORD); +} + +version (Unicode) { + alias SERVICE_INFOW SERVICE_INFO; + alias SetServiceW SetService; + alias GetAddressByNameW GetAddressByName; +} else { + alias SERVICE_INFOA SERVICE_INFO; + alias SetServiceA SetService; + alias GetAddressByNameA GetAddressByName; +} + +alias SERVICE_INFO _SERVICE_INFO; +alias SERVICE_INFO* LPSERVICE_INFO; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ntdef.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ntdef.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,79 @@ +/***********************************************************************\ +* ntdef.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ntdef; + +private import win32.basetsd, win32.subauth, win32.windef, win32.winnt; + +const uint + OBJ_INHERIT = 0x0002, + OBJ_PERMANENT = 0x0010, + OBJ_EXCLUSIVE = 0x0020, + OBJ_CASE_INSENSITIVE = 0x0040, + OBJ_OPENIF = 0x0080, + OBJ_OPENLINK = 0x0100, + OBJ_VALID_ATTRIBUTES = 0x01F2; + +void InitializeObjectAttributes(OBJECT_ATTRIBUTES* p, UNICODE_STRING* n, + uint a, HANDLE r, void* s) { + with (*p) { + Length = OBJECT_ATTRIBUTES.sizeof; + RootDirectory = r; + Attributes = a; + ObjectName = n; + SecurityDescriptor = s; + SecurityQualityOfService = null; + } +} + +bool NT_SUCCESS(int x) { return x >= 0; } + +/* In MinGW, NTSTATUS, UNICODE_STRING, STRING and their associated pointer + * type aliases are defined in ntdef.h, ntsecapi.h and subauth.h, each of + * which checks that none of the others is already included. + */ +alias int NTSTATUS; +alias int* PNTSTATUS; + +struct UNICODE_STRING { + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; +} +alias UNICODE_STRING* PUNICODE_STRING, PCUNICODE_STRING; + +struct STRING { + USHORT Length; + USHORT MaximumLength; + PCHAR Buffer; +} +alias STRING ANSI_STRING, OEM_STRING; +alias STRING* PSTRING, PANSI_STRING, POEM_STRING; + +alias LARGE_INTEGER PHYSICAL_ADDRESS; +alias LARGE_INTEGER* PPHYSICAL_ADDRESS; + +enum SECTION_INHERIT { + ViewShare = 1, + ViewUnmap +} + +/* In MinGW, this is defined in ntdef.h and ntsecapi.h, each of which checks + * that the other isn't already included. + */ +struct OBJECT_ATTRIBUTES { + ULONG Length = OBJECT_ATTRIBUTES.sizeof; + HANDLE RootDirectory; + PUNICODE_STRING ObjectName; + ULONG Attributes; + PVOID SecurityDescriptor; + PVOID SecurityQualityOfService; +} +alias OBJECT_ATTRIBUTES* POBJECT_ATTRIBUTES; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ntdll.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ntdll.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,27 @@ +/***********************************************************************\ +* ntdll.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ntdll; + +private import win32.w32api; + +// http://www.matcode.com/undocwin.h.txt +static assert (_WIN32_WINNT_ONLY, + "win32.ntdll is available only if version WindowsNTonly, WindowsXP, " + "Windows2003 or WindowsVista is set"); + + +enum SHUTDOWN_ACTION { + ShutdownNoReboot, + ShutdownReboot, + ShutdownPowerOff +} + +extern (Windows) uint NtShutdownSystem(SHUTDOWN_ACTION Action); diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ntldap.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ntldap.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,58 @@ +/***********************************************************************\ +* ntldap.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ntldap; + +/* TOTHINKABOUT: These constants don't have ANSI/Unicode versioned + * aliases. Should we merge them anyway? + */ + +const char[] + LDAP_SERVER_ASQ_OID = "1.2.840.113556.1.4.1504", + LDAP_SERVER_DIRSYNC_OID = "1.2.840.113556.1.4.841", + LDAP_SERVER_SD_FLAGS_OID = "1.2.840.113556.1.4.801", + LDAP_SERVER_FAST_BIND_OID = "1.2.840.113556.1.4.1781", + LDAP_MATCHING_RULE_BIT_OR = "1.2.840.113556.1.4.804", + LDAP_MATCHING_RULE_BIT_AND = "1.2.840.113556.1.4.803", + LDAP_SERVER_EXTENDED_DN_OID = "1.2.840.113556.1.4.529", + LDAP_SERVER_LAZY_COMMIT_OID = "1.2.840.113556.1.4.619", + LDAP_SERVER_TREE_DELETE_OID = "1.2.840.113556.1.4.805", + LDAP_SERVER_VERIFY_NAME_OID = "1.2.840.113556.1.4.1338", + LDAP_SERVER_SHOW_DELETED_OID = "1.2.840.113556.1.4.417", + LDAP_SERVER_NOTIFICATION_OID = "1.2.840.113556.1.4.528", + LDAP_SERVER_DOMAIN_SCOPE_OID = "1.2.840.113556.1.4.1339", + LDAP_CAP_ACTIVE_DIRECTORY_OID = "1.2.840.113556.1.4.800", + LDAP_SERVER_SEARCH_OPTIONS_OID = "1.2.840.113556.1.4.1340", + LDAP_CAP_ACTIVE_DIRECTORY_V51_OID = "1.2.840.113556.1.4.1670", + LDAP_SERVER_PERMISSIVE_MODIFY_OID = "1.2.840.113556.1.4.1413", + LDAP_SERVER_CROSSDOM_MOVE_TARGET_OID = "1.2.840.113556.1.4.521"; + +const wchar[] + LDAP_SERVER_ASQ_OID_W = "1.2.840.113556.1.4.1504", + LDAP_SERVER_DIRSYNC_OID_W = "1.2.840.113556.1.4.841", + LDAP_SERVER_SD_FLAGS_OID_W = "1.2.840.113556.1.4.801", + LDAP_SERVER_FAST_BIND_OID_W = "1.2.840.113556.1.4.1781", + LDAP_MATCHING_RULE_BIT_OR_W = "1.2.840.113556.1.4.804", + LDAP_MATCHING_RULE_BIT_AND_W = "1.2.840.113556.1.4.803", + LDAP_SERVER_EXTENDED_DN_OID_W = "1.2.840.113556.1.4.529", + LDAP_SERVER_LAZY_COMMIT_OID_W = "1.2.840.113556.1.4.619", + LDAP_SERVER_TREE_DELETE_OID_W = "1.2.840.113556.1.4.805", + LDAP_SERVER_VERIFY_NAME_OID_W = "1.2.840.113556.1.4.1338", + LDAP_SERVER_SHOW_DELETED_OID_W = "1.2.840.113556.1.4.417", + LDAP_SERVER_NOTIFICATION_OID_W = "1.2.840.113556.1.4.528", + LDAP_SERVER_DOMAIN_SCOPE_OID_W = "1.2.840.113556.1.4.1339", + LDAP_CAP_ACTIVE_DIRECTORY_OID_W = "1.2.840.113556.1.4.800", + LDAP_SERVER_SEARCH_OPTIONS_OID_W = "1.2.840.113556.1.4.1340", + LDAP_CAP_ACTIVE_DIRECTORY_V51_OID_W = "1.2.840.113556.1.4.1670", + LDAP_SERVER_PERMISSIVE_MODIFY_OID_W = "1.2.840.113556.1.4.1413", + LDAP_SERVER_CROSSDOM_MOVE_TARGET_OID_W = "1.2.840.113556.1.4.521"; + +const SERVER_SEARCH_FLAG_DOMAIN_SCOPE = 1; +const SERVER_SEARCH_FLAG_PHANTOM_ROOT = 2; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ntsecapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ntsecapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,793 @@ +/***********************************************************************\ +* ntsecapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ntsecapi; + +private import + win32.basetyps, win32.ntdef, win32.windef, win32.winnt, win32.w32api; + +// FIXME: check types and grouping of constants +// FIXME: check Windows version support + +const KERB_WRAP_NO_ENCRYPT = 0x80000001; + +const LOGON_GUEST = 0x00000001; +const LOGON_NOENCRYPTION = 0x00000002; +const LOGON_CACHED_ACCOUNT = 0x00000004; +const LOGON_USED_LM_PASSWORD = 0x00000008; +const LOGON_EXTRA_SIDS = 0x00000020; +const LOGON_SUBAUTH_SESSION_KEY = 0x00000040; +const LOGON_SERVER_TRUST_ACCOUNT = 0x00000080; +const LOGON_NTLMV2_ENABLED = 0x00000100; +const LOGON_RESOURCE_GROUPS = 0x00000200; +const LOGON_PROFILE_PATH_RETURNED = 0x00000400; +const LOGON_GRACE_LOGON = 0x01000000; + +enum { + LSA_MODE_PASSWORD_PROTECTED = 1, + LSA_MODE_INDIVIDUAL_ACCOUNTS, + LSA_MODE_MANDATORY_ACCESS, + LSA_MODE_LOG_FULL +} + +bool LSA_SUCCESS(int x) { return x >= 0; } + +/* TOTHINKABOUT: These constants don't have ANSI/Unicode versioned + * aliases. Should we merge them anyway? + */ +const char[] MICROSOFT_KERBEROS_NAME_A = "Kerberos"; +const wchar[] MICROSOFT_KERBEROS_NAME_W = "Kerberos"; +const char[] MSV1_0_PACKAGE_NAME = "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"; +const wchar[] MSV1_0_PACKAGE_NAMEW = "MICROSOFT_AUTHENTICATION_PACKAGE_V1_0"; + +const MSV1_0_ALLOW_SERVER_TRUST_ACCOUNT = 32; +const MSV1_0_ALLOW_WORKSTATION_TRUST_ACCOUNT = 2048; +const MSV1_0_CLEARTEXT_PASSWORD_ALLOWED = 2; +const MSV1_0_CRED_LM_PRESENT = 1; +const MSV1_0_CRED_NT_PRESENT = 2; +const MSV1_0_CRED_VERSION = 0; +const MSV1_0_DONT_TRY_GUEST_ACCOUNT = 16; +const MSV1_0_MAX_NTLM3_LIFE = 1800; +const MSV1_0_MAX_AVL_SIZE = 64000; +const MSV1_0_MNS_LOGON = 16777216; + +const size_t + MSV1_0_CHALLENGE_LENGTH = 8, + MSV1_0_LANMAN_SESSION_KEY_LENGTH = 8, + MSV1_0_NTLM3_RESPONSE_LENGTH = 16, + MSV1_0_NTLM3_OWF_LENGTH = 16, + MSV1_0_NTLM3_INPUT_LENGTH = MSV1_0_NTLM3_RESPONSE.sizeof + - MSV1_0_NTLM3_RESPONSE_LENGTH, + MSV1_0_OWF_PASSWORD_LENGTH = 16, + MSV1_0_PACKAGE_NAMEW_LENGTH = MSV1_0_PACKAGE_NAMEW.sizeof + - WCHAR.sizeof; + +const MSV1_0_RETURN_USER_PARAMETERS = 8; +const MSV1_0_RETURN_PASSWORD_EXPIRY = 64; +const MSV1_0_RETURN_PROFILE_PATH = 512; +const MSV1_0_SUBAUTHENTICATION_DLL_EX = 1048576; +const MSV1_0_SUBAUTHENTICATION_DLL = 0xff000000; +const MSV1_0_SUBAUTHENTICATION_DLL_SHIFT = 24; +const MSV1_0_SUBAUTHENTICATION_DLL_RAS = 2; +const MSV1_0_SUBAUTHENTICATION_DLL_IIS = 132; +const MSV1_0_SUBAUTHENTICATION_FLAGS = 0xff000000; +const MSV1_0_TRY_GUEST_ACCOUNT_ONLY = 256; +const MSV1_0_TRY_SPECIFIED_DOMAIN_ONLY = 1024; +const MSV1_0_UPDATE_LOGON_STATISTICS = 4; +const MSV1_0_USE_CLIENT_CHALLENGE = 128; +const MSV1_0_USER_SESSION_KEY_LENGTH = 16; + +const char[] + MSV1_0_SUBAUTHENTICATION_KEY + = `System\CurrentControlSet\Control\Lsa\MSV1_0`, + MSV1_0_SUBAUTHENTICATION_VALUE = "Auth"; + +const ACCESS_MASK + POLICY_VIEW_LOCAL_INFORMATION = 0x0001, + POLICY_VIEW_AUDIT_INFORMATION = 0x0002, + POLICY_GET_PRIVATE_INFORMATION = 0x0004, + POLICY_TRUST_ADMIN = 0x0008, + POLICY_CREATE_ACCOUNT = 0x0010, + POLICY_CREATE_SECRET = 0x0020, + POLICY_CREATE_PRIVILEGE = 0x0040, + POLICY_SET_DEFAULT_QUOTA_LIMITS = 0x0080, + POLICY_SET_AUDIT_REQUIREMENTS = 0x0100, + POLICY_AUDIT_LOG_ADMIN = 0x0200, + POLICY_SERVER_ADMIN = 0x0400, + POLICY_LOOKUP_NAMES = 0x0800, + + POLICY_READ = STANDARD_RIGHTS_READ | 0x0006, + POLICY_WRITE = STANDARD_RIGHTS_WRITE | 0x07F8, + POLICY_EXECUTE = STANDARD_RIGHTS_EXECUTE | 0x0801, + POLICY_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | 0x0FFF; + +const POLICY_AUDIT_EVENT_UNCHANGED = 0; +const POLICY_AUDIT_EVENT_SUCCESS = 1; +const POLICY_AUDIT_EVENT_FAILURE = 2; +const POLICY_AUDIT_EVENT_NONE = 4; +const POLICY_AUDIT_EVENT_MASK = 7; + +enum { + POLICY_LOCATION_LOCAL = 1, + POLICY_LOCATION_DS +} + +enum : uint { + POLICY_MACHINE_POLICY_LOCAL = 0, + POLICY_MACHINE_POLICY_DEFAULTED, + POLICY_MACHINE_POLICY_EXPLICIT, + POLICY_MACHINE_POLICY_UNKNOWN = 0xFFFFFFFF +} + + +const POLICY_QOS_SCHANEL_REQUIRED = 0x0001; +const POLICY_QOS_OUTBOUND_INTEGRITY = 0x0002; +const POLICY_QOS_OUTBOUND_CONFIDENTIALITY = 0x0004; +const POLICY_QOS_INBOUND_INTEGREITY = 0x0008; +const POLICY_QOS_INBOUND_CONFIDENTIALITY = 0x0010; +const POLICY_QOS_ALLOW_LOCAL_ROOT_CERT_STORE = 0x0020; +const POLICY_QOS_RAS_SERVER_ALLOWED = 0x0040; +const POLICY_QOS_DHCP_SERVER_ALLOWD = 0x0080; + +const POLICY_KERBEROS_FORWARDABLE = 1; +const POLICY_KERBEROS_PROXYABLE = 2; +const POLICY_KERBEROS_RENEWABLE = 4; +const POLICY_KERBEROS_POSTDATEABLE = 8; + +const char[] + SAM_PASSWORD_CHANGE_NOTIFY_ROUTINE = "PasswordChangeNotify", + SAM_INIT_NOTIFICATION_ROUTINE = "InitializeChangeNotify", + SAM_PASSWORD_FILTER_ROUTINE = "PasswordFilter"; + +const TCHAR[] + SE_INTERACTIVE_LOGON_NAME = "SeInteractiveLogonRight", + SE_NETWORK_LOGON_NAME = "SeNetworkLogonRight", + SE_BATCH_LOGON_NAME = "SeBatchLogonRight", + SE_SERVICE_LOGON_NAME = "SeServiceLogonRight"; + +enum { + TRUST_ATTRIBUTE_NON_TRANSITIVE = 1, + TRUST_ATTRIBUTE_UPLEVEL_ONLY = 2, + TRUST_ATTRIBUTE_TREE_PARENT = 4194304, + TRUST_ATTRIBUTES_VALID = -16580609 +} + +enum { + TRUST_AUTH_TYPE_NONE, + TRUST_AUTH_TYPE_NT4OWF, + TRUST_AUTH_TYPE_CLEAR +} + +enum { + TRUST_DIRECTION_DISABLED, + TRUST_DIRECTION_INBOUND, + TRUST_DIRECTION_OUTBOUND, + TRUST_DIRECTION_BIDIRECTIONAL +} + +enum { + TRUST_TYPE_DOWNLEVEL = 1, + TRUST_TYPE_UPLEVEL, + TRUST_TYPE_MIT, + TRUST_TYPE_DCE +} + +alias UNICODE_STRING LSA_UNICODE_STRING; +alias UNICODE_STRING* PLSA_UNICODE_STRING; +alias STRING LSA_STRING; +alias STRING* PLSA_STRING; + +enum MSV1_0_LOGON_SUBMIT_TYPE { + MsV1_0InteractiveLogon = 2, + MsV1_0Lm20Logon, + MsV1_0NetworkLogon, + MsV1_0SubAuthLogon, + MsV1_0WorkstationUnlockLogon = 7 +} +alias MSV1_0_LOGON_SUBMIT_TYPE* PMSV1_0_LOGON_SUBMIT_TYPE; + +enum MSV1_0_PROFILE_BUFFER_TYPE { + MsV1_0InteractiveProfile = 2, + MsV1_0Lm20LogonProfile, + MsV1_0SmartCardProfile +} +alias MSV1_0_PROFILE_BUFFER_TYPE* PMSV1_0_PROFILE_BUFFER_TYPE; + + +enum MSV1_0_AVID { + MsvAvEOL, + MsvAvNbComputerName, + MsvAvNbDomainName, + MsvAvDnsComputerName, + MsvAvDnsDomainName +} + +enum MSV1_0_PROTOCOL_MESSAGE_TYPE { + MsV1_0Lm20ChallengeRequest = 0, + MsV1_0Lm20GetChallengeResponse, + MsV1_0EnumerateUsers, + MsV1_0GetUserInfo, + MsV1_0ReLogonUsers, + MsV1_0ChangePassword, + MsV1_0ChangeCachedPassword, + MsV1_0GenericPassthrough, + MsV1_0CacheLogon, + MsV1_0SubAuth, + MsV1_0DeriveCredential, + MsV1_0CacheLookup +} +alias MSV1_0_PROTOCOL_MESSAGE_TYPE* PMSV1_0_PROTOCOL_MESSAGE_TYPE; + +enum POLICY_LSA_SERVER_ROLE { + PolicyServerRoleBackup = 2, + PolicyServerRolePrimary +} +alias POLICY_LSA_SERVER_ROLE* PPOLICY_LSA_SERVER_ROLE; + +enum POLICY_SERVER_ENABLE_STATE { + PolicyServerEnabled = 2, + PolicyServerDisabled +} +alias POLICY_SERVER_ENABLE_STATE* PPOLICY_SERVER_ENABLE_STATE; + +enum POLICY_INFORMATION_CLASS { + PolicyAuditLogInformation = 1, + PolicyAuditEventsInformation, + PolicyPrimaryDomainInformation, + PolicyPdAccountInformation, + PolicyAccountDomainInformation, + PolicyLsaServerRoleInformation, + PolicyReplicaSourceInformation, + PolicyDefaultQuotaInformation, + PolicyModificationInformation, + PolicyAuditFullSetInformation, + PolicyAuditFullQueryInformation, + PolicyDnsDomainInformation, + PolicyEfsInformation +} +alias POLICY_INFORMATION_CLASS* PPOLICY_INFORMATION_CLASS; + +enum POLICY_AUDIT_EVENT_TYPE { + AuditCategorySystem, + AuditCategoryLogon, + AuditCategoryObjectAccess, + AuditCategoryPrivilegeUse, + AuditCategoryDetailedTracking, + AuditCategoryPolicyChange, + AuditCategoryAccountManagement, + AuditCategoryDirectoryServiceAccess, + AuditCategoryAccountLogon +} +alias POLICY_AUDIT_EVENT_TYPE* PPOLICY_AUDIT_EVENT_TYPE; + +enum POLICY_LOCAL_INFORMATION_CLASS { + PolicyLocalAuditEventsInformation = 1, + PolicyLocalPdAccountInformation, + PolicyLocalAccountDomainInformation, + PolicyLocalLsaServerRoleInformation, + PolicyLocalReplicaSourceInformation, + PolicyLocalModificationInformation, + PolicyLocalAuditFullSetInformation, + PolicyLocalAuditFullQueryInformation, + PolicyLocalDnsDomainInformation, + PolicyLocalIPSecReferenceInformation, + PolicyLocalMachinePasswordInformation, + PolicyLocalQualityOfServiceInformation, + PolicyLocalPolicyLocationInformation +} +alias POLICY_LOCAL_INFORMATION_CLASS* PPOLICY_LOCAL_INFORMATION_CLASS; + +enum POLICY_DOMAIN_INFORMATION_CLASS { + PolicyDomainIPSecReferenceInformation = 1, + PolicyDomainQualityOfServiceInformation, + PolicyDomainEfsInformation, + PolicyDomainPublicKeyInformation, + PolicyDomainPasswordPolicyInformation, + PolicyDomainLockoutInformation, + PolicyDomainKerberosTicketInformation +} +alias POLICY_DOMAIN_INFORMATION_CLASS* PPOLICY_DOMAIN_INFORMATION_CLASS; + +enum SECURITY_LOGON_TYPE { + Interactive = 2, + Network, + Batch, + Service, + Proxy, + Unlock +} +alias SECURITY_LOGON_TYPE* PSECURITY_LOGON_TYPE; + +enum TRUSTED_INFORMATION_CLASS { + TrustedDomainNameInformation = 1, + TrustedControllersInformation, + TrustedPosixOffsetInformation, + TrustedPasswordInformation, + TrustedDomainInformationBasic, + TrustedDomainInformationEx, + TrustedDomainAuthInformation, + TrustedDomainFullInformation +} +alias TRUSTED_INFORMATION_CLASS* PTRUSTED_INFORMATION_CLASS; + +struct DOMAIN_PASSWORD_INFORMATION { + USHORT MinPasswordLength; + USHORT PasswordHistoryLength; + ULONG PasswordProperties; + LARGE_INTEGER MaxPasswordAge; + LARGE_INTEGER MinPasswordAge; +} +alias DOMAIN_PASSWORD_INFORMATION* PDOMAIN_PASSWORD_INFORMATION; + +struct LSA_ENUMERATION_INFORMATION { + PSID Sid; +} +alias LSA_ENUMERATION_INFORMATION* PLSA_ENUMERATION_INFORMATION; + +alias OBJECT_ATTRIBUTES LSA_OBJECT_ATTRIBUTES; +alias OBJECT_ATTRIBUTES* PLSA_OBJECT_ATTRIBUTES; + +struct LSA_TRUST_INFORMATION { + LSA_UNICODE_STRING Name; + PSID Sid; +} +alias LSA_TRUST_INFORMATION TRUSTED_DOMAIN_INFORMATION_BASIC; +alias LSA_TRUST_INFORMATION* PLSA_TRUST_INFORMATION; +/* in MinGW (further down the code): + * typedef PLSA_TRUST_INFORMATION *PTRUSTED_DOMAIN_INFORMATION_BASIC; + * but it doesn't look right.... + */ +alias LSA_TRUST_INFORMATION** PTRUSTED_DOMAIN_INFORMATION_BASIC; + +struct LSA_REFERENCED_DOMAIN_LIST { + ULONG Entries; + PLSA_TRUST_INFORMATION Domains; +} +alias LSA_REFERENCED_DOMAIN_LIST* PLSA_REFERENCED_DOMAIN_LIST; + +struct LSA_TRANSLATED_SID { + SID_NAME_USE Use; + ULONG RelativeId; + LONG DomainIndex; +} +alias LSA_TRANSLATED_SID* PLSA_TRANSLATED_SID; + +struct LSA_TRANSLATED_NAME { + SID_NAME_USE Use; + LSA_UNICODE_STRING Name; + LONG DomainIndex; +} +alias LSA_TRANSLATED_NAME* PLSA_TRANSLATED_NAME; + +struct MSV1_0_INTERACTIVE_LOGON { + MSV1_0_LOGON_SUBMIT_TYPE MessageType; + UNICODE_STRING LogonDomainName; + UNICODE_STRING UserName; + UNICODE_STRING Password; +} +alias MSV1_0_INTERACTIVE_LOGON* PMSV1_0_INTERACTIVE_LOGON; + +struct MSV1_0_INTERACTIVE_PROFILE { + MSV1_0_PROFILE_BUFFER_TYPE MessageType; + USHORT LogonCount; + USHORT BadPasswordCount; + LARGE_INTEGER LogonTime; + LARGE_INTEGER LogoffTime; + LARGE_INTEGER KickOffTime; + LARGE_INTEGER PasswordLastSet; + LARGE_INTEGER PasswordCanChange; + LARGE_INTEGER PasswordMustChange; + UNICODE_STRING LogonScript; + UNICODE_STRING HomeDirectory; + UNICODE_STRING FullName; + UNICODE_STRING ProfilePath; + UNICODE_STRING HomeDirectoryDrive; + UNICODE_STRING LogonServer; + ULONG UserFlags; +} +alias MSV1_0_INTERACTIVE_PROFILE* PMSV1_0_INTERACTIVE_PROFILE; + +struct MSV1_0_LM20_LOGON { + MSV1_0_LOGON_SUBMIT_TYPE MessageType; + UNICODE_STRING LogonDomainName; + UNICODE_STRING UserName; + UNICODE_STRING Workstation; + UCHAR[MSV1_0_CHALLENGE_LENGTH] ChallengeToClient; + STRING CaseSensitiveChallengeResponse; + STRING CaseInsensitiveChallengeResponse; + ULONG ParameterControl; +} +alias MSV1_0_LM20_LOGON* PMSV1_0_LM20_LOGON; + +static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + struct MSV1_0_SUBAUTH_LOGON { + MSV1_0_LOGON_SUBMIT_TYPE MessageType; + UNICODE_STRING LogonDomainName; + UNICODE_STRING UserName; + UNICODE_STRING Workstation; + UCHAR[MSV1_0_CHALLENGE_LENGTH] ChallengeToClient; + STRING AuthenticationInfo1; + STRING AuthenticationInfo2; + ULONG ParameterControl; + ULONG SubAuthPackageId; + } + alias MSV1_0_SUBAUTH_LOGON* PMSV1_0_SUBAUTH_LOGON; +} + +struct MSV1_0_LM20_LOGON_PROFILE { + MSV1_0_PROFILE_BUFFER_TYPE MessageType; + LARGE_INTEGER KickOffTime; + LARGE_INTEGER LogoffTime; + ULONG UserFlags; + UCHAR[MSV1_0_USER_SESSION_KEY_LENGTH] UserSessionKey; + UNICODE_STRING LogonDomainName; + UCHAR[MSV1_0_LANMAN_SESSION_KEY_LENGTH] LanmanSessionKey; + UNICODE_STRING LogonServer; + UNICODE_STRING UserParameters; +} +alias MSV1_0_LM20_LOGON_PROFILE* PMSV1_0_LM20_LOGON_PROFILE; + +struct MSV1_0_SUPPLEMENTAL_CREDENTIAL { + ULONG Version; + ULONG Flags; + UCHAR[MSV1_0_OWF_PASSWORD_LENGTH] LmPassword; + UCHAR[MSV1_0_OWF_PASSWORD_LENGTH] NtPassword; +} +alias MSV1_0_SUPPLEMENTAL_CREDENTIAL* PMSV1_0_SUPPLEMENTAL_CREDENTIAL; + +struct MSV1_0_NTLM3_RESPONSE { + UCHAR[MSV1_0_NTLM3_RESPONSE_LENGTH] Response; + UCHAR RespType; + UCHAR HiRespType; + USHORT Flags; + ULONG MsgWord; + ULONGLONG TimeStamp; + UCHAR[MSV1_0_CHALLENGE_LENGTH] ChallengeFromClient; + ULONG AvPairsOff; + UCHAR _Buffer; + UCHAR* Buffer() { return &_Buffer; } +} +alias MSV1_0_NTLM3_RESPONSE* PMSV1_0_NTLM3_RESPONSE; + +struct MSV1_0_AV_PAIR { + USHORT AvId; + USHORT AvLen; +} +alias MSV1_0_AV_PAIR* PMSV1_0_AV_PAIR; + +struct MSV1_0_CHANGEPASSWORD_REQUEST { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + UNICODE_STRING DomainName; + UNICODE_STRING AccountName; + UNICODE_STRING OldPassword; + UNICODE_STRING NewPassword; + BOOLEAN Impersonating; +} +alias MSV1_0_CHANGEPASSWORD_REQUEST* PMSV1_0_CHANGEPASSWORD_REQUEST; + +struct MSV1_0_CHANGEPASSWORD_RESPONSE { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + BOOLEAN PasswordInfoValid; + DOMAIN_PASSWORD_INFORMATION DomainPasswordInfo; +} +alias MSV1_0_CHANGEPASSWORD_RESPONSE* PMSV1_0_CHANGEPASSWORD_RESPONSE; + +struct MSV1_0_SUBAUTH_REQUEST { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + ULONG SubAuthPackageId; + ULONG SubAuthInfoLength; + PUCHAR SubAuthSubmitBuffer; +} +alias MSV1_0_SUBAUTH_REQUEST* PMSV1_0_SUBAUTH_REQUEST; + +struct MSV1_0_SUBAUTH_RESPONSE { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + ULONG SubAuthInfoLength; + PUCHAR SubAuthReturnBuffer; +} +alias MSV1_0_SUBAUTH_RESPONSE* PMSV1_0_SUBAUTH_RESPONSE; + +const MSV1_0_DERIVECRED_TYPE_SHA1 = 0; + +struct MSV1_0_DERIVECRED_REQUEST { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + LUID LogonId; + ULONG DeriveCredType; + ULONG DeriveCredInfoLength; + UCHAR _DeriveCredSubmitBuffer; + UCHAR* DeriveCredSubmitBuffer() { return &_DeriveCredSubmitBuffer; } +} +alias MSV1_0_DERIVECRED_REQUEST* PMSV1_0_DERIVECRED_REQUEST; + +struct MSV1_0_DERIVECRED_RESPONSE { + MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType; + ULONG DeriveCredInfoLength; + UCHAR _DeriveCredReturnBuffer; + UCHAR* DeriveCredReturnBuffer() { return &_DeriveCredReturnBuffer; } +} +alias MSV1_0_DERIVECRED_RESPONSE* PMSV1_0_DERIVECRED_RESPONSE; + +alias uint LSA_ENUMERATION_HANDLE, LSA_OPERATIONAL_MODE, + POLICY_AUDIT_EVENT_OPTIONS; +alias uint* PLSA_ENUMERATION_HANDLE, PLSA_OPERATIONAL_MODE, + PPOLICY_AUDIT_EVENT_OPTIONS; + +struct POLICY_PRIVILEGE_DEFINITION { + LSA_UNICODE_STRING Name; + LUID LocalValue; +} +alias POLICY_PRIVILEGE_DEFINITION* PPOLICY_PRIVILEGE_DEFINITION; + +struct POLICY_AUDIT_LOG_INFO { + ULONG AuditLogPercentFull; + ULONG MaximumLogSize; + LARGE_INTEGER AuditRetentionPeriod; + BOOLEAN AuditLogFullShutdownInProgress; + LARGE_INTEGER TimeToShutdown; + ULONG NextAuditRecordId; +} +alias POLICY_AUDIT_LOG_INFO* PPOLICY_AUDIT_LOG_INFO; + +struct POLICY_AUDIT_EVENTS_INFO { + BOOLEAN AuditingMode; + PPOLICY_AUDIT_EVENT_OPTIONS EventAuditingOptions; + ULONG MaximumAuditEventCount; +} +alias POLICY_AUDIT_EVENTS_INFO* PPOLICY_AUDIT_EVENTS_INFO; + +struct POLICY_ACCOUNT_DOMAIN_INFO { + LSA_UNICODE_STRING DomainName; + PSID DomainSid; +} +alias POLICY_ACCOUNT_DOMAIN_INFO* PPOLICY_ACCOUNT_DOMAIN_INFO; + +struct POLICY_PRIMARY_DOMAIN_INFO { + LSA_UNICODE_STRING Name; + PSID Sid; +} +alias POLICY_PRIMARY_DOMAIN_INFO* PPOLICY_PRIMARY_DOMAIN_INFO; + +struct POLICY_DNS_DOMAIN_INFO { + LSA_UNICODE_STRING Name; + LSA_UNICODE_STRING DnsDomainName; + LSA_UNICODE_STRING DnsTreeName; + GUID DomainGuid; + PSID Sid; +} +alias POLICY_DNS_DOMAIN_INFO* PPOLICY_DNS_DOMAIN_INFO; + +struct POLICY_PD_ACCOUNT_INFO { + LSA_UNICODE_STRING Name; +} +alias POLICY_PD_ACCOUNT_INFO* PPOLICY_PD_ACCOUNT_INFO; + +struct POLICY_LSA_SERVER_ROLE_INFO { + POLICY_LSA_SERVER_ROLE LsaServerRole; +} +alias POLICY_LSA_SERVER_ROLE_INFO* PPOLICY_LSA_SERVER_ROLE_INFO; + +struct POLICY_REPLICA_SOURCE_INFO { + LSA_UNICODE_STRING ReplicaSource; + LSA_UNICODE_STRING ReplicaAccountName; +} +alias POLICY_REPLICA_SOURCE_INFO* PPOLICY_REPLICA_SOURCE_INFO; + +struct POLICY_DEFAULT_QUOTA_INFO { + QUOTA_LIMITS QuotaLimits; +} +alias POLICY_DEFAULT_QUOTA_INFO* PPOLICY_DEFAULT_QUOTA_INFO; + +struct POLICY_MODIFICATION_INFO { + LARGE_INTEGER ModifiedId; + LARGE_INTEGER DatabaseCreationTime; +} +alias POLICY_MODIFICATION_INFO* PPOLICY_MODIFICATION_INFO; + +struct POLICY_AUDIT_FULL_SET_INFO { + BOOLEAN ShutDownOnFull; +} +alias POLICY_AUDIT_FULL_SET_INFO* PPOLICY_AUDIT_FULL_SET_INFO; + +struct POLICY_AUDIT_FULL_QUERY_INFO { + BOOLEAN ShutDownOnFull; + BOOLEAN LogIsFull; +} +alias POLICY_AUDIT_FULL_QUERY_INFO* PPOLICY_AUDIT_FULL_QUERY_INFO; + +struct POLICY_EFS_INFO { + ULONG InfoLength; + PUCHAR EfsBlob; +} +alias POLICY_EFS_INFO* PPOLICY_EFS_INFO; + +struct POLICY_LOCAL_IPSEC_REFERENCE_INFO { + LSA_UNICODE_STRING ObjectPath; +} +alias POLICY_LOCAL_IPSEC_REFERENCE_INFO* PPOLICY_LOCAL_IPSEC_REFERENCE_INFO; + +struct POLICY_LOCAL_MACHINE_PASSWORD_INFO { + LARGE_INTEGER PasswordChangeInterval; +} +alias POLICY_LOCAL_MACHINE_PASSWORD_INFO* PPOLICY_LOCAL_MACHINE_PASSWORD_INFO; + +struct POLICY_LOCAL_POLICY_LOCATION_INFO { + ULONG PolicyLocation; +} +alias POLICY_LOCAL_POLICY_LOCATION_INFO* PPOLICY_LOCAL_POLICY_LOCATION_INFO; + +struct POLICY_LOCAL_QUALITY_OF_SERVICE_INFO{ + ULONG QualityOfService; +} +alias POLICY_LOCAL_QUALITY_OF_SERVICE_INFO + POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO; +alias POLICY_LOCAL_QUALITY_OF_SERVICE_INFO* + PPOLICY_LOCAL_QUALITY_OF_SERVICE_INFO, + PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO; + +struct POLICY_DOMAIN_PUBLIC_KEY_INFO { + ULONG InfoLength; + PUCHAR PublicKeyInfo; +} +alias POLICY_DOMAIN_PUBLIC_KEY_INFO* PPOLICY_DOMAIN_PUBLIC_KEY_INFO; + +struct POLICY_DOMAIN_LOCKOUT_INFO { + LARGE_INTEGER LockoutDuration; + LARGE_INTEGER LockoutObservationWindow; + USHORT LockoutThreshold; +} +alias POLICY_DOMAIN_LOCKOUT_INFO* PPOLICY_DOMAIN_LOCKOUT_INFO; + +struct POLICY_DOMAIN_PASSWORD_INFO { + USHORT MinPasswordLength; + USHORT PasswordHistoryLength; + ULONG PasswordProperties; + LARGE_INTEGER MaxPasswordAge; + LARGE_INTEGER MinPasswordAge; +} +alias POLICY_DOMAIN_PASSWORD_INFO* PPOLICY_DOMAIN_PASSWORD_INFO; + +struct POLICY_DOMAIN_KERBEROS_TICKET_INFO { + ULONG AuthenticationOptions; + LARGE_INTEGER MinTicketAge; + LARGE_INTEGER MaxTicketAge; + LARGE_INTEGER MaxRenewAge; + LARGE_INTEGER ProxyLifetime; + LARGE_INTEGER ForceLogoff; +} +alias POLICY_DOMAIN_KERBEROS_TICKET_INFO* PPOLICY_DOMAIN_KERBEROS_TICKET_INFO; + +alias HANDLE LSA_HANDLE; +alias HANDLE* PLSA_HANDLE; + +struct TRUSTED_DOMAIN_NAME_INFO { + LSA_UNICODE_STRING Name; +} +alias TRUSTED_DOMAIN_NAME_INFO* PTRUSTED_DOMAIN_NAME_INFO; + +struct TRUSTED_CONTROLLERS_INFO { + ULONG Entries; + PLSA_UNICODE_STRING Names; +} +alias TRUSTED_CONTROLLERS_INFO* PTRUSTED_CONTROLLERS_INFO; + +struct TRUSTED_POSIX_OFFSET_INFO { + ULONG Offset; +} +alias TRUSTED_POSIX_OFFSET_INFO* PTRUSTED_POSIX_OFFSET_INFO; + +struct TRUSTED_PASSWORD_INFO { + LSA_UNICODE_STRING Password; + LSA_UNICODE_STRING OldPassword; +} +alias TRUSTED_PASSWORD_INFO* PTRUSTED_PASSWORD_INFO; + +struct TRUSTED_DOMAIN_INFORMATION_EX { + LSA_UNICODE_STRING Name; + LSA_UNICODE_STRING FlatName; + PSID Sid; + ULONG TrustDirection; + ULONG TrustType; + ULONG TrustAttributes; +} +alias TRUSTED_DOMAIN_INFORMATION_EX* PTRUSTED_DOMAIN_INFORMATION_EX; + +struct LSA_AUTH_INFORMATION { + LARGE_INTEGER LastUpdateTime; + ULONG AuthType; + ULONG AuthInfoLength; + PUCHAR AuthInfo; +} +alias LSA_AUTH_INFORMATION* PLSA_AUTH_INFORMATION; + +struct TRUSTED_DOMAIN_AUTH_INFORMATION { + ULONG IncomingAuthInfos; + PLSA_AUTH_INFORMATION IncomingAuthenticationInformation; + PLSA_AUTH_INFORMATION IncomingPreviousAuthenticationInformation; + ULONG OutgoingAuthInfos; + PLSA_AUTH_INFORMATION OutgoingAuthenticationInformation; + PLSA_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation; +} +alias TRUSTED_DOMAIN_AUTH_INFORMATION* PTRUSTED_DOMAIN_AUTH_INFORMATION; + +struct TRUSTED_DOMAIN_FULL_INFORMATION { + TRUSTED_DOMAIN_INFORMATION_EX Information; + TRUSTED_POSIX_OFFSET_INFO PosixOffset; + TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation; +} +alias TRUSTED_DOMAIN_FULL_INFORMATION* PTRUSTED_DOMAIN_FULL_INFORMATION; + +extern (Windows) { + NTSTATUS LsaAddAccountRights(LSA_HANDLE, PSID, PLSA_UNICODE_STRING, + ULONG); + NTSTATUS LsaCallAuthenticationPackage(HANDLE, ULONG, PVOID, ULONG, + PVOID*, PULONG, PNTSTATUS); + NTSTATUS LsaClose(LSA_HANDLE); + NTSTATUS LsaConnectUntrusted(PHANDLE); + NTSTATUS LsaCreateTrustedDomainEx(LSA_HANDLE, + PTRUSTED_DOMAIN_INFORMATION_EX, PTRUSTED_DOMAIN_AUTH_INFORMATION, + ACCESS_MASK, PLSA_HANDLE); + NTSTATUS LsaDeleteTrustedDomain(LSA_HANDLE, PSID); + NTSTATUS LsaDeregisterLogonProcess(HANDLE); + NTSTATUS LsaEnumerateAccountRights(LSA_HANDLE, PSID, PLSA_UNICODE_STRING*, + PULONG); + NTSTATUS LsaEnumerateAccountsWithUserRight(LSA_HANDLE, + PLSA_UNICODE_STRING, PVOID*, PULONG); + NTSTATUS LsaEnumerateTrustedDomains(LSA_HANDLE, PLSA_ENUMERATION_HANDLE, + PVOID*, ULONG, PULONG); + NTSTATUS LsaEnumerateTrustedDomainsEx(LSA_HANDLE, PLSA_ENUMERATION_HANDLE, + TRUSTED_INFORMATION_CLASS, PVOID*, ULONG, PULONG); + NTSTATUS LsaFreeMemory(PVOID); + NTSTATUS LsaFreeReturnBuffer(PVOID); + NTSTATUS LsaLogonUser(HANDLE, PLSA_STRING, SECURITY_LOGON_TYPE, ULONG, + PVOID, ULONG, PTOKEN_GROUPS, PTOKEN_SOURCE, PVOID*, PULONG, PLUID, + PHANDLE, PQUOTA_LIMITS, PNTSTATUS); + NTSTATUS LsaLookupAuthenticationPackage(HANDLE, PLSA_STRING, PULONG); + NTSTATUS LsaLookupNames(LSA_HANDLE, ULONG, PLSA_UNICODE_STRING, + PLSA_REFERENCED_DOMAIN_LIST*, PLSA_TRANSLATED_SID*); + NTSTATUS LsaLookupSids(LSA_HANDLE, ULONG, PSID*, + PLSA_REFERENCED_DOMAIN_LIST*, PLSA_TRANSLATED_NAME*); + ULONG LsaNtStatusToWinError(NTSTATUS); + NTSTATUS LsaOpenPolicy(PLSA_UNICODE_STRING, PLSA_OBJECT_ATTRIBUTES, + ACCESS_MASK, PLSA_HANDLE); + NTSTATUS LsaQueryDomainInformationPolicy(LSA_HANDLE, + POLICY_DOMAIN_INFORMATION_CLASS, PVOID*); + NTSTATUS LsaQueryInformationPolicy(LSA_HANDLE, POLICY_INFORMATION_CLASS, + PVOID*); + NTSTATUS LsaQueryLocalInformationPolicy(LSA_HANDLE, + POLICY_LOCAL_INFORMATION_CLASS, PVOID*); + NTSTATUS LsaQueryTrustedDomainInfo(LSA_HANDLE, PSID, + TRUSTED_INFORMATION_CLASS, PVOID*); + NTSTATUS LsaQueryTrustedDomainInfoByName(LSA_HANDLE, PLSA_UNICODE_STRING, + TRUSTED_INFORMATION_CLASS, PVOID*); + NTSTATUS LsaRegisterLogonProcess(PLSA_STRING, PHANDLE, + PLSA_OPERATIONAL_MODE); + NTSTATUS LsaRemoveAccountRights(LSA_HANDLE, PSID, BOOLEAN, + PLSA_UNICODE_STRING, ULONG); + NTSTATUS LsaRetrievePrivateData(LSA_HANDLE, PLSA_UNICODE_STRING, + PLSA_UNICODE_STRING*); + NTSTATUS LsaSetDomainInformationPolicy(LSA_HANDLE, + POLICY_DOMAIN_INFORMATION_CLASS, PVOID); + NTSTATUS LsaSetInformationPolicy(LSA_HANDLE, POLICY_INFORMATION_CLASS, + PVOID); + NTSTATUS LsaSetLocalInformationPolicy(LSA_HANDLE, + POLICY_LOCAL_INFORMATION_CLASS, PVOID); + NTSTATUS LsaSetTrustedDomainInformation(LSA_HANDLE, PSID, + TRUSTED_INFORMATION_CLASS, PVOID); + NTSTATUS LsaSetTrustedDomainInfoByName(LSA_HANDLE, PLSA_UNICODE_STRING, + TRUSTED_INFORMATION_CLASS, PVOID); + NTSTATUS LsaStorePrivateData(LSA_HANDLE, PLSA_UNICODE_STRING, + PLSA_UNICODE_STRING); +} + +alias NTSTATUS function(PUNICODE_STRING, ULONG, PUNICODE_STRING) + PSAM_PASSWORD_NOTIFICATION_ROUTINE; +alias BOOLEAN function() PSAM_INIT_NOTIFICATION_ROUTINE; +alias BOOLEAN function(PUNICODE_STRING, PUNICODE_STRING, + PUNICODE_STRING, BOOLEAN) PSAM_PASSWORD_FILTER_ROUTINE; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/oaidl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/oaidl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,672 @@ +/***********************************************************************\ +* oaidl.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.oaidl; + +private import win32.basetyps, win32.unknwn, win32.windef, win32.wtypes; + +const DISPID_UNKNOWN = -1; +const DISPID_VALUE = 0; +const DISPID_PROPERTYPUT = -3; +const DISPID_NEWENUM = -4; +const DISPID_EVALUATE = -5; +const DISPID_CONSTRUCTOR = -6; +const DISPID_DESTRUCTOR = -7; +const DISPID_COLLECT = -8; + +const FADF_AUTO = 1; +const FADF_STATIC = 2; +const FADF_EMBEDDED = 4; +const FADF_FIXEDSIZE = 16; +const FADF_RECORD = 32; +const FADF_HAVEIID = 64; +const FADF_HAVEVARTYPE = 128; +const FADF_BSTR = 256; +const FADF_UNKNOWN = 512; +const FADF_DISPATCH = 1024; +const FADF_VARIANT = 2048; +const FADF_RESERVED = 0xf0e8; +const FADF_DATADELETED = 0x1000; +const FADF_CREATEVECTOR = 0x2000; + +const PARAMFLAG_NONE = 0; +const PARAMFLAG_FIN = 1; +const PARAMFLAG_FOUT = 2; +const PARAMFLAG_FLCID = 4; +const PARAMFLAG_FRETVAL = 8; +const PARAMFLAG_FOPT = 16; +const PARAMFLAG_FHASDEFAULT = 32; + +const IDLFLAG_NONE = PARAMFLAG_NONE; +const IDLFLAG_FIN = PARAMFLAG_FIN; +const IDLFLAG_FOUT = PARAMFLAG_FOUT; +const IDLFLAG_FLCID = PARAMFLAG_FLCID; +const IDLFLAG_FRETVAL = PARAMFLAG_FRETVAL; + +const IMPLTYPEFLAG_FDEFAULT = 1; +const IMPLTYPEFLAG_FSOURCE = 2; +const IMPLTYPEFLAG_FRESTRICTED = 4; +const IMPLTYPEFLAG_FDEFAULTVTABLE = 8; + + +enum SYSKIND { + SYS_WIN16, + SYS_WIN32, + SYS_MAC +} + +enum LIBFLAGS { + LIBFLAG_FRESTRICTED = 1, + LIBFLAG_FCONTROL = 2, + LIBFLAG_FHIDDEN = 4, + LIBFLAG_FHASDISKIMAGE = 8 +} + +struct TLIBATTR { + GUID guid; + LCID lcid; + SYSKIND syskind; + WORD wMajorVerNum; + WORD wMinorVerNum; + WORD wLibFlags; +} +alias TLIBATTR* LPTLIBATTR; + +alias CY CURRENCY; + +struct SAFEARRAYBOUND { + ULONG cElements; + LONG lLbound; +} +alias SAFEARRAYBOUND* LPSAFEARRAYBOUND; + +struct SAFEARR_BSTR { + ULONG Size; + wireBSTR* aBstr; +} + +struct SAFEARR_UNKNOWN { + ULONG Size; + IUnknown** apUnknown; +} + +struct SAFEARR_DISPATCH { + ULONG Size; + LPDISPATCH* apDispatch; +} + +struct SAFEARR_VARIANT { + ULONG Size; + _wireVARIANT* aVariant; +} + +enum SF_TYPE { + SF_ERROR=VARENUM.VT_ERROR, + SF_I1=VARENUM.VT_I1, + SF_I2=VARENUM.VT_I2, + SF_I4=VARENUM.VT_I4, + SF_I8=VARENUM.VT_I8, + SF_BSTR=VARENUM.VT_BSTR, + SF_UNKNOWN=VARENUM.VT_UNKNOWN, + SF_DISPATCH=VARENUM.VT_DISPATCH, + SF_VARIANT=VARENUM.VT_VARIANT +} + +struct _wireBRECORD { + ULONG fFlags; + ULONG clSize; + LPRECORDINFO* pRecInfo; + byte* pRecord; +} +alias _wireBRECORD* wireBRECORD; + +struct SAFEARR_BRECORD { + ULONG Size; + wireBRECORD* aRecord; +} + +struct SAFEARR_HAVEIID { + ULONG Size; + IUnknown** apUnknown; + IID iid; +} + +struct SAFEARRAYUNION { + ULONG sfType; + union _u { + SAFEARR_BSTR BstrStr; + SAFEARR_UNKNOWN UnknownStr; + SAFEARR_DISPATCH DispatchStr; + SAFEARR_VARIANT VariantStr; + SAFEARR_BRECORD RecordStr; + SAFEARR_HAVEIID HaveIidStr; + BYTE_SIZEDARR ByteStr; + WORD_SIZEDARR WordStr; + DWORD_SIZEDARR LongStr; + HYPER_SIZEDARR HyperStr; + } + _u u; +} + +struct _wireSAFEARRAY { + USHORT cDims; + USHORT fFeatures; + ULONG cbElements; + ULONG cLocks; + SAFEARRAYUNION uArrayStructs; + SAFEARRAYBOUND rgsabound[1]; +} +alias _wireSAFEARRAY* wireSAFEARRAY; + +alias wireSAFEARRAY* wirePSAFEARRAY; + +struct SAFEARRAY { + USHORT cDims; + USHORT fFeatures; + ULONG cbElements; + ULONG cLocks; + PVOID pvData; + SAFEARRAYBOUND rgsabound[1]; +} +alias SAFEARRAY* LPSAFEARRAY; + +struct VARIANT { + union { + struct { + VARTYPE vt; + WORD wReserved1; + WORD wReserved2; + WORD wReserved3; + union { + int lVal; + LONGLONG llVal; + ubyte bVal; + short iVal; + float fltVal; + double dblVal; + VARIANT_BOOL boolVal; + SCODE scode; + CY cyVal; + DATE date; + BSTR bstrVal; + IUnknown punkVal; + IDispatch pdispVal; + SAFEARRAY* parray; + ubyte* pbVal; + short* piVal; + int* plVal; + float* pfltVal; + double* pdblVal; + VARIANT_BOOL* pboolVal; + _VARIANT_BOOL* pbool; + SCODE* pscode; + CY* pcyVal; + DATE* pdate; + BSTR* pbstrVal; + IUnknown* ppunkVal; + IDispatch* ppdispVal; + SAFEARRAY** pparray; + VARIANT* pvarVal; + void* byref; + CHAR cVal; + USHORT uiVal; + ULONG ulVal; + ULONGLONG ullVal; + INT intVal; + UINT uintVal; + DECIMAL* pdecVal; + CHAR* pcVal; + USHORT* puiVal; + ULONG* pulVal; + INT* pintVal; + UINT* puintVal; + struct { + PVOID pvRecord; + IRecordInfo pRecInfo; + } + } + } + DECIMAL decVal; + } +} +alias VARIANT* LPVARIANT; + +alias VARIANT VARIANTARG; +alias VARIANT* LPVARIANTARG; + +struct _wireVARIANT { + DWORD clSize; + DWORD rpcReserved; + USHORT vt; + USHORT wReserved1; + USHORT wReserved2; + USHORT wReserved3; + union { + LONG lVal; + LONGLONG llVal; + BYTE bVal; + SHORT iVal; + FLOAT fltVal; + DOUBLE dblVal; + VARIANT_BOOL boolVal; + SCODE scode; + CY cyVal; + DATE date; + wireBSTR bstrVal; + IUnknown* punkVal; + LPDISPATCH pdispVal; + wirePSAFEARRAY parray; + wireBRECORD brecVal; + BYTE* pbVal; + SHORT* piVal; + LONG* plVal; + FLOAT* pfltVal; + DOUBLE* pdblVal; + VARIANT_BOOL* pboolVal; + SCODE* pscode; + CY* pcyVal; + DATE* pdate; + wireBSTR* pbstrVal; + IUnknown** ppunkVal; + LPDISPATCH* ppdispVal; + wirePSAFEARRAY* pparray; + wireVARIANT* pvarVal; + CHAR cVal; + USHORT uiVal; + ULONG ulVal; + ULONGLONG ullVal; + INT intVal; + UINT uintVal; + DECIMAL decVal; + DECIMAL* pdecVal; + CHAR* pcVal; + USHORT* puiVal; + ULONG* pulVal; + INT* pintVal; + UINT* puintVal; + } +} +alias _wireVARIANT* wireVARIANT; + +alias LONG DISPID; +alias DISPID MEMBERID; +alias DWORD HREFTYPE; + +enum TYPEKIND { + TKIND_ENUM, TKIND_RECORD, TKIND_MODULE, TKIND_INTERFACE, TKIND_DISPATCH, + TKIND_COCLASS, TKIND_ALIAS, TKIND_UNION, TKIND_MAX +} + +struct TYPEDESC { + union { + TYPEDESC* lptdesc; + ARRAYDESC* lpadesc; + HREFTYPE hreftype; + } + VARTYPE vt; +} + +struct ARRAYDESC { + TYPEDESC tdescElem; + USHORT cDims; + SAFEARRAYBOUND rgbounds[1]; +} + +struct PARAMDESCEX { + ULONG cBytes; + VARIANTARG varDefaultValue; +} +alias PARAMDESCEX* LPPARAMDESCEX; + +struct PARAMDESC { + LPPARAMDESCEX pparamdescex; + USHORT wParamFlags; +} +alias PARAMDESC* LPPARAMDESC; + +struct IDLDESC { + ULONG dwReserved; + USHORT wIDLFlags; +} +alias IDLDESC* LPIDLDESC; + +struct ELEMDESC { + TYPEDESC tdesc; + union { + IDLDESC idldesc; + PARAMDESC paramdesc; + } +} +alias ELEMDESC* LPELEMDESC; + +struct TYPEATTR { + GUID guid; + LCID lcid; + DWORD dwReserved; + MEMBERID memidConstructor; + MEMBERID memidDestructor; + LPOLESTR lpstrSchema; + ULONG cbSizeInstance; + TYPEKIND typekind; + WORD cFuncs; + WORD cVars; + WORD cImplTypes; + WORD cbSizeVft; + WORD cbAlignment; + WORD wTypeFlags; + WORD wMajorVerNum; + WORD wMinorVerNum; + TYPEDESC tdescAlias; + IDLDESC idldescType; +} +alias TYPEATTR* LPTYPEATTR; + +struct DISPPARAMS { + VARIANTARG* rgvarg; + DISPID* rgdispidNamedArgs; + UINT cArgs; + UINT cNamedArgs; +} + +struct EXCEPINFO { + WORD wCode; + WORD wReserved; + BSTR bstrSource; + BSTR bstrDescription; + BSTR bstrHelpFile; + DWORD dwHelpContext; + PVOID pvReserved; + extern (Windows) { + HRESULT function (EXCEPINFO* ) pfnDeferredFillIn; + } + SCODE scode; +} +alias EXCEPINFO* LPEXCEPINFO; + +enum CALLCONV { + CC_FASTCALL, + CC_CDECL, + CC_MSCPASCAL, + CC_PASCAL=CC_MSCPASCAL, + CC_MACPASCAL, + CC_STDCALL, + CC_FPFASTCALL, + CC_SYSCALL, + CC_MPWCDECL, + CC_MPWPASCAL, + CC_MAX=CC_MPWPASCAL +} + +enum FUNCKIND { + FUNC_VIRTUAL, + FUNC_PUREVIRTUAL, + FUNC_NONVIRTUAL, + FUNC_STATIC, + FUNC_DISPATCH +} + +enum INVOKEKIND { + INVOKE_FUNC = 1, + INVOKE_PROPERTYGET = 2, + INVOKE_PROPERTYPUT = 4, + INVOKE_PROPERTYPUTREF = 8 +} + +struct FUNCDESC { + MEMBERID memid; + SCODE* lprgscode; + ELEMDESC* lprgelemdescParam; + FUNCKIND funckind; + INVOKEKIND invkind; + CALLCONV callconv; + SHORT cParams; + SHORT cParamsOpt; + SHORT oVft; + SHORT cScodes; + ELEMDESC elemdescFunc; + WORD wFuncFlags; +} +alias FUNCDESC* LPFUNCDESC; + +enum VARKIND { + VAR_PERINSTANCE, VAR_STATIC, VAR_CONST, VAR_DISPATCH +} + +struct VARDESC { + MEMBERID memid; + LPOLESTR lpstrSchema; + union { + ULONG oInst; + VARIANT* lpvarValue; + } + ELEMDESC elemdescVar; + WORD wVarFlags; + VARKIND varkind; +} +alias VARDESC* LPVARDESC; + +enum TYPEFLAGS { + TYPEFLAG_FAPPOBJECT = 1, + TYPEFLAG_FCANCREATE = 2, + TYPEFLAG_FLICENSED = 4, + TYPEFLAG_FPREDECLID = 8, + TYPEFLAG_FHIDDEN = 16, + TYPEFLAG_FCONTROL = 32, + TYPEFLAG_FDUAL = 64, + TYPEFLAG_FNONEXTENSIBLE = 128, + TYPEFLAG_FOLEAUTOMATION = 256, + TYPEFLAG_FRESTRICTED = 512, + TYPEFLAG_FAGGREGATABLE = 1024, + TYPEFLAG_FREPLACEABLE = 2048, + TYPEFLAG_FDISPATCHABLE = 4096, + TYPEFLAG_FREVERSEBIND = 8192 +} + +enum FUNCFLAGS { + FUNCFLAG_FRESTRICTED = 1, + FUNCFLAG_FSOURCE = 2, + FUNCFLAG_FBINDABLE = 4, + FUNCFLAG_FREQUESTEDIT = 8, + FUNCFLAG_FDISPLAYBIND = 16, + FUNCFLAG_FDEFAULTBIND = 32, + FUNCFLAG_FHIDDEN = 64, + FUNCFLAG_FUSESGETLASTERROR = 128, + FUNCFLAG_FDEFAULTCOLLELEM = 256, + FUNCFLAG_FUIDEFAULT = 512, + FUNCFLAG_FNONBROWSABLE = 1024, + FUNCFLAG_FREPLACEABLE = 2048, + FUNCFLAG_FIMMEDIATEBIND = 4096 +} + +enum VARFLAGS { + VARFLAG_FREADONLY = 1, + VARFLAG_FSOURCE = 2, + VARFLAG_FBINDABLE = 4, + VARFLAG_FREQUESTEDIT = 8, + VARFLAG_FDISPLAYBIND = 16, + VARFLAG_FDEFAULTBIND = 32, + VARFLAG_FHIDDEN = 64, + VARFLAG_FRESTRICTED = 128, + VARFLAG_FDEFAULTCOLLELEM = 256, + VARFLAG_FUIDEFAULT = 512, + VARFLAG_FNONBROWSABLE = 1024, + VARFLAG_FREPLACEABLE = 2048, + VARFLAG_FIMMEDIATEBIND = 4096 +} + +struct CLEANLOCALSTORAGE { + IUnknown* pInterface; + PVOID pStorage; + DWORD flags; +} + +struct CUSTDATAITEM { + GUID guid; + VARIANTARG varValue; +} +alias CUSTDATAITEM* LPCUSTDATAITEM; + +struct CUSTDATA { + DWORD cCustData; + LPCUSTDATAITEM prgCustData; +} +alias CUSTDATA* LPCUSTDATA; + +enum DESCKIND { + DESCKIND_NONE = 0, + DESCKIND_FUNCDESC = DESCKIND_NONE+1, + DESCKIND_VARDESC = DESCKIND_FUNCDESC+1, + DESCKIND_TYPECOMP = DESCKIND_VARDESC+1, + DESCKIND_IMPLICITAPPOBJ = DESCKIND_TYPECOMP+1, + DESCKIND_MAX = DESCKIND_IMPLICITAPPOBJ+1 +} + +union BINDPTR { + LPFUNCDESC lpfuncdesc; + LPVARDESC lpvardesc; + LPTYPECOMP lptcomp; +} +alias BINDPTR* LPBINDPTR; + +interface IDispatch : public IUnknown { + HRESULT GetTypeInfoCount(UINT*); + HRESULT GetTypeInfo(UINT, LCID, LPTYPEINFO*); + HRESULT GetIDsOfNames(REFIID, LPOLESTR*, UINT, LCID, DISPID*); + HRESULT Invoke(DISPID, REFIID, LCID, WORD, DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*); +} +alias IDispatch LPDISPATCH; + +interface IEnumVARIANT : public IUnknown { + HRESULT Next(ULONG, VARIANT*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumVARIANT**); +} +alias IEnumVARIANT LPENUMVARIANT; + +interface ITypeComp : public IUnknown { + HRESULT Bind(LPOLESTR, ULONG, WORD, LPTYPEINFO*, DESCKIND*, LPBINDPTR); + HRESULT BindType(LPOLESTR, ULONG, LPTYPEINFO*, LPTYPECOMP*); +} +alias ITypeComp LPTYPECOMP; + +interface ITypeInfo : public IUnknown { + HRESULT GetTypeAttr(LPTYPEATTR*); + HRESULT GetTypeComp(LPTYPECOMP*); + HRESULT GetFuncDesc(UINT, LPFUNCDESC*); + HRESULT GetVarDesc(UINT, LPVARDESC*); + HRESULT GetNames(MEMBERID, BSTR*, UINT, UINT*); + HRESULT GetRefTypeOfImplType(UINT, HREFTYPE*); + HRESULT GetImplTypeFlags(UINT, INT*); + HRESULT GetIDsOfNames(LPOLESTR*, UINT, MEMBERID*); + HRESULT Invoke(PVOID, MEMBERID, WORD, DISPPARAMS*, VARIANT*, EXCEPINFO*, + UINT*); + HRESULT GetDocumentation(MEMBERID, BSTR*, BSTR*, DWORD*, BSTR*); + HRESULT GetDllEntry(MEMBERID, INVOKEKIND, BSTR*, BSTR*, WORD*); + HRESULT GetRefTypeInfo(HREFTYPE, LPTYPEINFO*); + HRESULT AddressOfMember(MEMBERID, INVOKEKIND, PVOID*); + HRESULT CreateInstance(LPUNKNOWN, REFIID, PVOID*); + HRESULT GetMops(MEMBERID, BSTR*); + HRESULT GetContainingTypeLib(LPTYPELIB*, UINT*); + void ReleaseTypeAttr(LPTYPEATTR); + void ReleaseFuncDesc(LPFUNCDESC); + void ReleaseVarDesc(LPVARDESC); +} +alias ITypeInfo LPTYPEINFO; + +interface ITypeInfo2 : public ITypeInfo { + HRESULT GetTypeKind(TYPEKIND*); + HRESULT GetTypeFlags(ULONG*); + HRESULT GetFuncIndexOfMemId(MEMBERID, INVOKEKIND, UINT*); + HRESULT GetVarIndexOfMemId(MEMBERID, UINT*); + HRESULT GetCustData(REFGUID, VARIANT*); + HRESULT GetFuncCustData(UINT, REFGUID, VARIANT*); + HRESULT GetParamCustData(UINT, UINT, REFGUID, VARIANT*); + HRESULT GetVarCustData(UINT, REFGUID, VARIANT*); + HRESULT GetImplTypeCustData(UINT, REFGUID, VARIANT*); + HRESULT GetDocumentation2(MEMBERID, LCID, BSTR*, DWORD*, BSTR*); + HRESULT GetAllCustData(CUSTDATA*); + HRESULT GetAllFuncCustData(UINT, CUSTDATA*); + HRESULT GetAllParamCustData(UINT, UINT, CUSTDATA*); + HRESULT GetAllVarCustData(UINT, CUSTDATA*); + HRESULT GetAllImplTypeCustData(UINT, CUSTDATA*); +} +alias ITypeInfo2 LPTYPEINFO2; + +interface ITypeLib : public IUnknown { + UINT GetTypeInfoCount(); + HRESULT GetTypeInfo(UINT, ITypeInfo**); + HRESULT GetTypeInfoType(UINT, TYPEKIND*); + HRESULT GetTypeInfoOfGuid(REFGUID, ITypeInfo**); + HRESULT GetLibAttr(TLIBATTR**); + HRESULT GetTypeComp(ITypeComp*); + HRESULT GetDocumentation(INT, BSTR*, BSTR*, DWORD*, BSTR*); + HRESULT IsName(LPOLESTR, ULONG, BOOL*); + HRESULT FindName(LPOLESTR, ULONG, ITypeInfo**, MEMBERID*, USHORT*); + void ReleaseTLibAttr(TLIBATTR*); +} +alias ITypeLib LPTYPELIB; + +interface ITypeLib2 : public ITypeLib { + HRESULT GetCustData(REFGUID, VARIANT*); + HRESULT GetLibStatistics(ULONG*, ULONG*); + HRESULT GetDocumentation2(INT, LCID, BSTR*, DWORD*, BSTR*); + HRESULT GetAllCustData(CUSTDATA*); +} +alias ITypeLib2 LPTYPELIB2; + +interface IErrorInfo : public IUnknown { + HRESULT GetGUID(GUID*); + HRESULT GetSource(BSTR*); + HRESULT GetDescription(BSTR*); + HRESULT GetHelpFile(BSTR*); + HRESULT GetHelpContext(DWORD*); +} +alias IErrorInfo LPERRORINFO; + +interface ICreateErrorInfo : public IUnknown { + HRESULT SetGUID(REFGUID); + HRESULT SetSource(LPOLESTR); + HRESULT SetDescription(LPOLESTR); + HRESULT SetHelpFile(LPOLESTR); + HRESULT SetHelpContext(DWORD); +} +alias ICreateErrorInfo* LPCREATEERRORINFO; + +interface ISupportErrorInfo : public IUnknown { + HRESULT InterfaceSupportsErrorInfo(REFIID); +} +alias ISupportErrorInfo LPSUPPORTERRORINFO; + +interface IRecordInfo : public IUnknown { + HRESULT RecordInit(PVOID); + HRESULT RecordClear(PVOID); + HRESULT RecordCopy(PVOID, PVOID); + HRESULT GetGuid(GUID*); + HRESULT GetName(BSTR*); + HRESULT GetSize(ULONG*); + HRESULT GetTypeInfo(ITypeInfo**); + HRESULT GetField(PVOID, LPCOLESTR, VARIANT*); + HRESULT GetFieldNoCopy(PVOID, LPCOLESTR, VARIANT*, PVOID*); + HRESULT PutField (ULONG, PVOID, LPCOLESTR, VARIANT*); + HRESULT PutFieldNoCopy(ULONG, PVOID, LPCOLESTR, VARIANT*); + HRESULT GetFieldNames(ULONG*, BSTR*); + BOOL IsMatchingType(); + PVOID RecordCreate(); + HRESULT RecordCreateCopy(PVOID, PVOID*); + HRESULT RecordDestroy (PVOID); +} +alias IRecordInfo LPRECORDINFO; + +interface ITypeMarshal : public IUnknown { + HRESULT Size(PVOID, DWORD, PVOID, ULONG*); + HRESULT Marshal(PVOID, DWORD, PVOID, ULONG, BYTE*, ULONG*); + HRESULT Unmarshal(PVOID, DWORD, ULONG, BYTE*, ULONG*); + HRESULT Free(PVOID); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/objbase.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/objbase.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,207 @@ +/***********************************************************************\ +* objbase.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.objbase; +pragma(lib, "ole32.lib"); + +import win32.cguid, win32.objidl, win32.unknwn, win32.wtypes; +private import win32.basetyps, win32.objfwd, win32.rpcdce, win32.winbase, + win32.windef; + +// DAC: Not needed for D? +//MACRO #define LISet32(li, v) ((li).HighPart=(v)<0?-1:0, (li).LowPart=(v)) +//MACRO #define ULISet32(li, v) ((li).HighPart=0, (li).LowPart=(v)) + +const CLSCTX_ALL = CLSCTX.CLSCTX_INPROC_SERVER|CLSCTX.CLSCTX_INPROC_HANDLER|CLSCTX.CLSCTX_LOCAL_SERVER; +const CLSCTX_INPROC = CLSCTX.CLSCTX_INPROC_SERVER|CLSCTX.CLSCTX_INPROC_HANDLER; +const CLSCTX_SERVER = CLSCTX.CLSCTX_INPROC_SERVER|CLSCTX.CLSCTX_LOCAL_SERVER|CLSCTX.CLSCTX_REMOTE_SERVER; +const MARSHALINTERFACE_MIN=500; +const CWCSTORAGENAME=32; + +const STGM_DIRECT = 0; +const STGM_TRANSACTED = 0x10000L; +const STGM_SIMPLE = 0x8000000L; +const STGM_READ = 0; +const STGM_WRITE = 1; +const STGM_READWRITE = 2; +const STGM_SHARE_DENY_NONE = 0x40; +const STGM_SHARE_DENY_READ = 0x30; +const STGM_SHARE_DENY_WRITE = 0x20; +const STGM_SHARE_EXCLUSIVE = 0x10; +const STGM_PRIORITY = 0x40000L; +const STGM_DELETEONRELEASE = 0x4000000; +const STGM_NOSCRATCH = 0x100000; +const STGM_CREATE = 0x1000; +const STGM_CONVERT = 0x20000; +const STGM_NOSNAPSHOT = 0x200000; +const STGM_FAILIFTHERE = 0; + +const ASYNC_MODE_COMPATIBILITY = 1; +const ASYNC_MODE_DEFAULT = 0; + +const STGTY_REPEAT = 256; +const STG_TOEND = 0xFFFFFFFF; +const STG_LAYOUT_SEQUENTIAL = 0; +const STG_LAYOUT_INTERLEAVED = 1; + +const COM_RIGHTS_EXECUTE = 1; +const COM_RIGHTS_SAFE_FOR_SCRIPTING = 2; + +const STGOPTIONS_VERSION = 2; + +enum STGFMT { + STGFMT_STORAGE = 0, + STGFMT_FILE = 3, + STGFMT_ANY = 4, + STGFMT_DOCFILE = 5 +} + +struct STGOPTIONS { + USHORT usVersion; + USHORT reserved; + ULONG ulSectorSize; + WCHAR* pwcsTemplateFile; +} + +enum REGCLS { + REGCLS_SINGLEUSE = 0, + REGCLS_MULTIPLEUSE = 1, + REGCLS_MULTI_SEPARATE = 2 +} + +/* +BOOL IsEqualGUID(GUID rguid1, GUID rguid2) { + return rguid1 == rguid2; +} +*/ + +extern (Windows) BOOL IsEqualGUID( + REFGUID rguid1, + REFGUID rguid2 +); + +alias IsEqualGUID IsEqualIID; +alias IsEqualGUID IsEqualCLSID; + +enum COINIT { + COINIT_APARTMENTTHREADED = 2, + COINIT_MULTITHREADED = 0, + COINIT_DISABLE_OLE1DDE = 4, + COINIT_SPEED_OVER_MEMORY = 8 +} + +enum STDMSHLFLAGS { + SMEXF_SERVER = 1, + SMEXF_HANDLER +} + +extern(Windows) { + alias HRESULT function(REFCLSID, REFIID, PVOID*) LPFNGETCLASSOBJECT; + alias HRESULT function() LPFNCANUNLOADNOW; + + DWORD CoBuildVersion(); + HRESULT CoInitialize(PVOID); + HRESULT CoInitializeEx(LPVOID, DWORD); + void CoUninitialize(); + HRESULT CoGetMalloc(DWORD, LPMALLOC*); + DWORD CoGetCurrentProcess(); + HRESULT CoRegisterMallocSpy(LPMALLOCSPY); + HRESULT CoRevokeMallocSpy(); + HRESULT CoCreateStandardMalloc(DWORD, IMalloc**); + //#ifdef DBG + ULONG DebugCoGetRpcFault(); + void DebugCoSetRpcFault(ULONG); + //#endif + HRESULT CoGetClassObject(REFCLSID, DWORD, COSERVERINFO*, REFIID, PVOID*); + HRESULT CoRegisterClassObject(REFCLSID, LPUNKNOWN, DWORD, DWORD, PDWORD); + HRESULT CoRevokeClassObject(DWORD); + HRESULT CoGetMarshalSizeMax(ULONG*, REFIID, LPUNKNOWN, DWORD, PVOID, DWORD); + HRESULT CoMarshalInterface(LPSTREAM, REFIID, LPUNKNOWN, DWORD, PVOID, DWORD); + HRESULT CoUnmarshalInterface(LPSTREAM, REFIID, PVOID*); + HRESULT CoMarshalHresult(LPSTREAM, HRESULT); + HRESULT CoUnmarshalHresult(LPSTREAM, HRESULT*); + HRESULT CoReleaseMarshalData(LPSTREAM); + HRESULT CoDisconnectObject(LPUNKNOWN, DWORD); + HRESULT CoLockObjectExternal(LPUNKNOWN, BOOL, BOOL); + HRESULT CoGetStandardMarshal(REFIID, LPUNKNOWN, DWORD, PVOID, DWORD, LPMARSHAL*); + HRESULT CoGetStdMarshalEx(LPUNKNOWN, DWORD, LPUNKNOWN*); + BOOL CoIsHandlerConnected(LPUNKNOWN); + BOOL CoHasStrongExternalConnections(LPUNKNOWN); + HRESULT CoMarshalInterThreadInterfaceInStream(REFIID, LPUNKNOWN, LPSTREAM*); + HRESULT CoGetInterfaceAndReleaseStream(LPSTREAM, REFIID, PVOID*); + HRESULT CoCreateFreeThreadedMarshaler(LPUNKNOWN, LPUNKNOWN*); + HINSTANCE CoLoadLibrary(LPOLESTR, BOOL); + void CoFreeLibrary(HINSTANCE); + void CoFreeAllLibraries(); + void CoFreeUnusedLibraries(); + HRESULT CoCreateInstance(REFCLSID, LPUNKNOWN, DWORD, REFIID, PVOID*); + HRESULT CoCreateInstanceEx(REFCLSID, IUnknown*, DWORD, COSERVERINFO*, DWORD, MULTI_QI*); + HRESULT StringFromCLSID(REFCLSID, LPOLESTR*); + HRESULT CLSIDFromString(LPOLESTR, LPCLSID); + HRESULT StringFromIID(REFIID, LPOLESTR*); + HRESULT IIDFromString(LPOLESTR, LPIID); + BOOL CoIsOle1Class(REFCLSID); + HRESULT ProgIDFromCLSID(REFCLSID, LPOLESTR*); + HRESULT CLSIDFromProgID(LPCOLESTR, LPCLSID); + int StringFromGUID2(REFGUID, LPOLESTR, int); + HRESULT CoCreateGuid(GUID*); + BOOL CoFileTimeToDosDateTime(FILETIME*, LPWORD, LPWORD); + BOOL CoDosDateTimeToFileTime(WORD, WORD, FILETIME*); + HRESULT CoFileTimeNow(FILETIME*); + HRESULT CoRegisterMessageFilter(LPMESSAGEFILTER, LPMESSAGEFILTER*); + HRESULT CoGetTreatAsClass(REFCLSID, LPCLSID); + HRESULT CoTreatAsClass(REFCLSID, REFCLSID); + HRESULT DllGetClassObject(REFCLSID, REFIID, PVOID*); + HRESULT DllCanUnloadNow(); + PVOID CoTaskMemAlloc(ULONG); + PVOID CoTaskMemRealloc(PVOID, ULONG); + void CoTaskMemFree(PVOID); + HRESULT CreateDataAdviseHolder(LPDATAADVISEHOLDER*); + HRESULT CreateDataCache(LPUNKNOWN, REFCLSID, REFIID, PVOID*); + HRESULT StgCreateDocfile(OLECHAR*, DWORD, DWORD, IStorage**); + HRESULT StgCreateDocfileOnILockBytes(ILockBytes*, DWORD, DWORD, IStorage**); + HRESULT StgOpenStorage(OLECHAR*, IStorage, DWORD, SNB, DWORD, IStorage*); + HRESULT StgOpenStorageOnILockBytes(ILockBytes*, IStorage*, DWORD, SNB, DWORD, IStorage**); + HRESULT StgIsStorageFile(OLECHAR*); + HRESULT StgIsStorageILockBytes(ILockBytes*); + HRESULT StgSetTimes(OLECHAR *, FILETIME *, FILETIME *, FILETIME *); + HRESULT StgCreateStorageEx(WCHAR*, DWORD, DWORD, DWORD, STGOPTIONS*, void*, REFIID, void**); + HRESULT StgOpenStorageEx(WCHAR*, DWORD, DWORD, DWORD, STGOPTIONS*, void*, REFIID, void**); + HRESULT BindMoniker(LPMONIKER, DWORD, REFIID, PVOID*); + HRESULT CoGetObject(LPCWSTR, BIND_OPTS*, REFIID, void**); + HRESULT MkParseDisplayName(LPBC, LPCOLESTR, ULONG*, LPMONIKER*); + HRESULT MonikerRelativePathTo(LPMONIKER, LPMONIKER, LPMONIKER*, BOOL); + HRESULT MonikerCommonPrefixWith(LPMONIKER, LPMONIKER, LPMONIKER*); + HRESULT CreateBindCtx(DWORD, LPBC*); + HRESULT CreateGenericComposite(LPMONIKER, LPMONIKER, LPMONIKER*); + HRESULT GetClassFile (LPCOLESTR, CLSID*); + HRESULT CreateFileMoniker(LPCOLESTR, LPMONIKER*); + HRESULT CreateItemMoniker(LPCOLESTR, LPCOLESTR, LPMONIKER*); + HRESULT CreateAntiMoniker(LPMONIKER*); + HRESULT CreatePointerMoniker(LPUNKNOWN, LPMONIKER*); + HRESULT GetRunningObjectTable(DWORD, LPRUNNINGOBJECTTABLE*); + HRESULT CoInitializeSecurity(PSECURITY_DESCRIPTOR, LONG, SOLE_AUTHENTICATION_SERVICE*, void*, DWORD, DWORD, void*, DWORD, void*); + HRESULT CoGetCallContext(REFIID, void**); + HRESULT CoQueryProxyBlanket(IUnknown*, DWORD*, DWORD*, OLECHAR**, DWORD*, DWORD*, RPC_AUTH_IDENTITY_HANDLE*, DWORD*); + HRESULT CoSetProxyBlanket(IUnknown*, DWORD, DWORD, OLECHAR*, DWORD, DWORD, RPC_AUTH_IDENTITY_HANDLE, DWORD); + HRESULT CoCopyProxy(IUnknown*, IUnknown**); + HRESULT CoQueryClientBlanket(DWORD*, DWORD*, OLECHAR**, DWORD*, DWORD*, RPC_AUTHZ_HANDLE*, DWORD*); + HRESULT CoImpersonateClient(); + HRESULT CoRevertToSelf(); + HRESULT CoQueryAuthenticationServices(DWORD*, SOLE_AUTHENTICATION_SERVICE**); + HRESULT CoSwitchCallContext(IUnknown*, IUnknown**); + HRESULT CoGetInstanceFromFile(COSERVERINFO*, CLSID*, IUnknown*, DWORD, DWORD, OLECHAR*, DWORD, MULTI_QI*); + HRESULT CoGetInstanceFromIStorage(COSERVERINFO*, CLSID*, IUnknown*, DWORD, IStorage*, DWORD, MULTI_QI*); + ULONG CoAddRefServerProcess(); + ULONG CoReleaseServerProcess(); + HRESULT CoResumeClassObjects(); + HRESULT CoSuspendClassObjects(); + HRESULT CoGetPSClsid(REFIID, CLSID*); + HRESULT CoRegisterPSClsid(REFIID, REFCLSID); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/objfwd.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/objfwd.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,103 @@ +/***********************************************************************\ +* objfwd.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.objfwd; + +private import win32.objidl; + +/+ +// Forward declararions are not necessary in D. +extern(Windows) { + interface IMoniker; + interface IStream; + interface IMarshal; + interface IMalloc; + interface IMallocSpy; + interface IMessageFilter; + interface IPersist; + interface IPersistStream; + interface IRunningObjectTable; + interface IBindCtx; + interface IAdviseSink; + interface IAdviseSink2; + interface IDataObject; + interface IDataAdviseHolder; + + interface IEnumMoniker; + interface IEnumFORMATETC; + interface IEnumSTATDATA; + interface IEnumSTATSTG; + interface IEnumSTATPROPSTG; + interface IEnumString; + interface IEnumUnknown; + interface IStorage; + interface IPersistStorage; + interface ILockBytes; + interface IStdMarshalInfo; + interface IExternalConnection; + interface IRunnableObject; + interface IROTData; + interface IPersistFile; + interface IRootStorage; + interface IPropertyStorage; + interface IEnumSTATPROPSETSTG; + interface IPropertySetStorage; + interface IClientSecurity; + interface IServerSecurity; + interface IClassActivator; + interface IFillLockBytes; + interface IProgressNotify; + interface ILayoutStorage; + interface IRpcProxyBuffer; + interface IRpcChannelBuffer; + interface IRpcStubBuffer; +} ++/ +alias IMoniker LPMONIKER; +alias IStream LPSTREAM; +alias IMarshal LPMARSHAL; +alias IMalloc LPMALLOC; +alias IMallocSpy LPMALLOCSPY; +alias IMessageFilter LPMESSAGEFILTER; +alias IPersist LPPERSIST; +alias IPersistStream LPPERSISTSTREAM; +alias IRunningObjectTable LPRUNNINGOBJECTTABLE; +alias IBindCtx LPBINDCTX, LPBC; +alias IAdviseSink LPADVISESINK; +alias IAdviseSink2 LPADVISESINK2; +alias IDataObject LPDATAOBJECT; +alias IDataAdviseHolder LPDATAADVISEHOLDER; +alias IEnumMoniker LPENUMMONIKER; +alias IEnumFORMATETC LPENUMFORMATETC; +alias IEnumSTATDATA LPENUMSTATDATA; +alias IEnumSTATSTG LPENUMSTATSTG; +alias IEnumSTATPROPSTG LPENUMSTATPROPSTG; +alias IEnumString LPENUMSTRING; +alias IEnumUnknown LPENUMUNKNOWN; +alias IStorage LPSTORAGE; +alias IPersistStorage LPPERSISTSTORAGE; +alias ILockBytes LPLOCKBYTES; +alias IStdMarshalInfo LPSTDMARSHALINFO; +alias IExternalConnection LPEXTERNALCONNECTION; +alias IRunnableObject LPRUNNABLEOBJECT; +alias IROTData LPROTDATA; +alias IPersistFile LPPERSISTFILE; +alias IRootStorage LPROOTSTORAGE; +alias IRpcChannelBuffer LPRPCCHANNELBUFFER; +alias IRpcProxyBuffer LPRPCPROXYBUFFER; +alias IRpcStubBuffer LPRPCSTUBBUFFER; +alias IPropertyStorage LPPROPERTYSTORAGE; +alias IEnumSTATPROPSETSTG LPENUMSTATPROPSETSTG; +alias IPropertySetStorage LPPROPERTYSETSTORAGE; +alias IClientSecurity LPCLIENTSECURITY; +alias IServerSecurity LPSERVERSECURITY; +alias IClassActivator LPCLASSACTIVATOR; +alias IFillLockBytes LPFILLLOCKBYTES; +alias IProgressNotify LPPROGRESSNOTIFY; +alias ILayoutStorage LPLAYOUTSTORAGE; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/objidl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/objidl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1307 @@ +/***********************************************************************\ +* objidl.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +// TODO (Don): +// # why is "alias IPSFactoryBuffer* LPPSFACTORYBUFFER;" in this file, +// rather than in objfwd ? +// # do we need the proxies that are defined in this file? +module win32.objidl; + +import win32.unknwn; +import win32.objfwd; +private import win32.windef; +private import win32.basetyps; +private import win32.oleidl; +private import win32.wtypes; +private import win32.winbase; // for FILETIME +private import win32.rpcdce; + +struct STATSTG { + LPOLESTR pwcsName; + DWORD type; + ULARGE_INTEGER cbSize; + FILETIME mtime; + FILETIME ctime; + FILETIME atime; + DWORD grfMode; + DWORD grfLocksSupported; + CLSID clsid; + DWORD grfStateBits; + DWORD reserved; +} + +enum STGTY { + STGTY_STORAGE = 1, + STGTY_STREAM, + STGTY_LOCKBYTES, + STGTY_PROPERTY +} + +enum STREAM_SEEK { + STREAM_SEEK_SET, + STREAM_SEEK_CUR, + STREAM_SEEK_END +} + +struct INTERFACEINFO { + LPUNKNOWN pUnk; + IID iid; + WORD wMethod; +} +alias INTERFACEINFO* LPINTERFACEINFO; + +enum CALLTYPE { + CALLTYPE_TOPLEVEL = 1, + CALLTYPE_NESTED, + CALLTYPE_ASYNC, + CALLTYPE_TOPLEVEL_CALLPENDING, + CALLTYPE_ASYNC_CALLPENDING +} + +enum PENDINGTYPE { + PENDINGTYPE_TOPLEVEL = 1, + PENDINGTYPE_NESTED +} + +enum PENDINGMSG { + PENDINGMSG_CANCELCALL = 0, + PENDINGMSG_WAITNOPROCESS, + PENDINGMSG_WAITDEFPROCESS +} + +alias OLECHAR** SNB; + +enum DATADIR { + DATADIR_GET = 1, + DATADIR_SET +} +alias WORD CLIPFORMAT; +alias CLIPFORMAT* LPCLIPFORMAT; + +struct DVTARGETDEVICE { + DWORD tdSize; + WORD tdDriverNameOffset; + WORD tdDeviceNameOffset; + WORD tdPortNameOffset; + WORD tdExtDevmodeOffset; + BYTE tdData[1]; +} + +struct FORMATETC { + CLIPFORMAT cfFormat; + DVTARGETDEVICE* ptd; + DWORD dwAspect; + LONG lindex; + DWORD tymed; +} +alias FORMATETC* LPFORMATETC; + +struct RemSTGMEDIUM { + DWORD tymed; + DWORD dwHandleType; + ULONG pData; + uint pUnkForRelease; + uint cbData; + BYTE data[1]; +} + +struct HLITEM { + ULONG uHLID; + LPWSTR pwzFriendlyName; +} + +struct STATDATA { + FORMATETC formatetc; + DWORD grfAdvf; + IAdviseSink* pAdvSink; + DWORD dwConnection; +} + +struct STATPROPSETSTG { + FMTID fmtid; + CLSID clsid; + DWORD grfFlags; + FILETIME mtime; + FILETIME ctime; + FILETIME atime; +} + +enum EXTCONN { + EXTCONN_STRONG = 1, + EXTCONN_WEAK = 2, + EXTCONN_CALLABLE = 4 +} + +struct MULTI_QI { + IID* pIID; + IUnknown pItf; + HRESULT hr; +} + +struct AUTH_IDENTITY { + USHORT* User; + ULONG UserLength; + USHORT* Domain; + ULONG DomainLength; + USHORT* Password; + ULONG PasswordLength; + ULONG Flags; +} + +struct COAUTHINFO { + DWORD dwAuthnSvc; + DWORD dwAuthzSvc; + LPWSTR pwszServerPrincName; + DWORD dwAuthnLevel; + DWORD dwImpersonationLevel; + AUTH_IDENTITY* pAuthIdentityData; + DWORD dwCapabilities; +} + +struct COSERVERINFO { + DWORD dwReserved1; + LPWSTR pwszName; + COAUTHINFO* pAuthInfo; + DWORD dwReserved2; +} + +struct BIND_OPTS { + DWORD cbStruct; + DWORD grfFlags; + DWORD grfMode; + DWORD dwTickCountDeadline; +} +alias BIND_OPTS* LPBIND_OPTS; + +struct BIND_OPTS2 { + DWORD cbStruct; + DWORD grfFlags; + DWORD grfMode; + DWORD dwTickCountDeadline; + DWORD dwTrackFlags; + DWORD dwClassContext; + LCID locale; + COSERVERINFO* pServerInfo; +} +alias BIND_OPTS2* LPBIND_OPTS2; + +enum BIND_FLAGS { + BIND_MAYBOTHERUSER = 1, + BIND_JUSTTESTEXISTENCE +} + +struct STGMEDIUM { + DWORD tymed; + union { + HBITMAP hBitmap; + PVOID hMetaFilePict; + HENHMETAFILE hEnhMetaFile; + HGLOBAL hGlobal; + LPWSTR lpszFileName; + LPSTREAM pstm; + LPSTORAGE pstg; + } + LPUNKNOWN pUnkForRelease; +} +alias STGMEDIUM* LPSTGMEDIUM; + +enum LOCKTYPE { + LOCK_WRITE = 1, + LOCK_EXCLUSIVE = 2, + LOCK_ONLYONCE = 4 +} + +alias uint RPCOLEDATAREP; + +struct RPCOLEMESSAGE { + PVOID reserved1; + RPCOLEDATAREP dataRepresentation; + PVOID Buffer; + ULONG cbBuffer; + ULONG iMethod; + PVOID reserved2[5]; + ULONG rpcFlags; +} +alias RPCOLEMESSAGE* PRPCOLEMESSAGE; + +enum MKSYS { + MKSYS_NONE, + MKSYS_GENERICCOMPOSITE, + MKSYS_FILEMONIKER, + MKSYS_ANTIMONIKER, + MKSYS_ITEMMONIKER, + MKSYS_POINTERMONIKER +} + +enum MKREDUCE { + MKRREDUCE_ALL, + MKRREDUCE_ONE = 196608, + MKRREDUCE_TOUSER = 131072, + MKRREDUCE_THROUGHUSER = 65536 +} + +struct RemSNB { + uint ulCntStr; + uint ulCntChar; + OLECHAR rgString[1]; +} + +enum ADVF { + ADVF_NODATA = 1, + ADVF_PRIMEFIRST = 2, + ADVF_ONLYONCE = 4, + ADVFCACHE_NOHANDLER = 8, + ADVFCACHE_FORCEBUILTIN = 16, + ADVFCACHE_ONSAVE = 32, + ADVF_DATAONSTOP = 64 +} + +enum TYMED { + TYMED_HGLOBAL = 1, + TYMED_FILE = 2, + TYMED_ISTREAM = 4, + TYMED_ISTORAGE = 8, + TYMED_GDI = 16, + TYMED_MFPICT = 32, + TYMED_ENHMF = 64, + TYMED_NULL = 0 +} + +enum SERVERCALL { + SERVERCALL_ISHANDLED, + SERVERCALL_REJECTED, + SERVERCALL_RETRYLATER +} + +struct CAUB { + ULONG cElems; + ubyte* pElems; +} + +struct CAI { + ULONG cElems; + short* pElems; +} + +struct CAUI { + ULONG cElems; + USHORT* pElems; +} + +struct CAL { + ULONG cElems; + int* pElems; +} + +struct CAUL { + ULONG cElems; + ULONG* pElems; +} + +struct CAFLT { + ULONG cElems; + float* pElems; +} + +struct CADBL { + ULONG cElems; + double* pElems; +} + +struct CACY { + ULONG cElems; + CY* pElems; +} + +struct CADATE { + ULONG cElems; + DATE* pElems; +} + +struct CABSTR { + ULONG cElems; + BSTR* pElems; +} + +struct CABSTRBLOB { + ULONG cElems; + BSTRBLOB* pElems; +} + +struct CABOOL { + ULONG cElems; + VARIANT_BOOL* pElems; +} + +struct CASCODE { + ULONG cElems; + SCODE* pElems; +} + +struct CAH { + ULONG cElems; + LARGE_INTEGER* pElems; +} + +struct CAUH { + ULONG cElems; + ULARGE_INTEGER* pElems; +} + +struct CALPSTR { + ULONG cElems; + LPSTR* pElems; +} + +struct CALPWSTR { + ULONG cElems; + LPWSTR* pElems; +} + +struct CAFILETIME { + ULONG cElems; + FILETIME* pElems; +} + +struct CACLIPDATA { + ULONG cElems; + CLIPDATA* pElems; +} + +struct CACLSID { + ULONG cElems; + CLSID* pElems; +} +alias PROPVARIANT* LPPROPVARIANT; + +struct CAPROPVARIANT { + ULONG cElems; + LPPROPVARIANT pElems; +} + +struct PROPVARIANT { + VARTYPE vt; + WORD wReserved1; + WORD wReserved2; + WORD wReserved3; + union { + CHAR cVal; + UCHAR bVal; + short iVal; + USHORT uiVal; + VARIANT_BOOL boolVal; + int lVal; + ULONG ulVal; + float fltVal; + SCODE scode; + LARGE_INTEGER hVal; + ULARGE_INTEGER uhVal; + double dblVal; + CY cyVal; + DATE date; + FILETIME filetime; + CLSID* puuid; + BLOB blob; + CLIPDATA* pclipdata; + LPSTREAM pStream; + LPSTORAGE pStorage; + BSTR bstrVal; + BSTRBLOB bstrblobVal; + LPSTR pszVal; + LPWSTR pwszVal; + CAUB caub; + CAI cai; + CAUI caui; + CABOOL cabool; + CAL cal; + CAUL caul; + CAFLT caflt; + CASCODE cascode; + CAH cah; + CAUH cauh; + CADBL cadbl; + CACY cacy; + CADATE cadate; + CAFILETIME cafiletime; + CACLSID cauuid; + CACLIPDATA caclipdata; + CABSTR cabstr; + CABSTRBLOB cabstrblob; + CALPSTR calpstr; + CALPWSTR calpwstr; + CAPROPVARIANT capropvar; + } +} + +struct PROPSPEC { + ULONG ulKind; + union { + PROPID propid; + LPOLESTR lpwstr; + } +} + +struct STATPROPSTG { + LPOLESTR lpwstrName; + PROPID propid; + VARTYPE vt; +} + +enum PROPSETFLAG { + PROPSETFLAG_DEFAULT, + PROPSETFLAG_NONSIMPLE, + PROPSETFLAG_ANSI, + PROPSETFLAG_UNBUFFERED = 4 +} + +struct STORAGELAYOUT { + DWORD LayoutType; + OLECHAR* pwcsElementName; + LARGE_INTEGER cOffset; + LARGE_INTEGER cBytes; +} + +struct SOLE_AUTHENTICATION_SERVICE { + DWORD dwAuthnSvc; + DWORD dwAuthzSvc; + OLECHAR* pPrincipalName; + HRESULT hr; +} + +const OLECHAR* COLE_DEFAULT_PRINCIPAL = cast ( OLECHAR* )(-1); + +enum EOLE_AUTHENTICATION_CAPABILITIES { + EOAC_NONE = 0, + EOAC_MUTUAL_AUTH = 0x1, + EOAC_SECURE_REFS = 0x2, + EOAC_ACCESS_CONTROL = 0x4, + EOAC_APPID = 0x8, + EOAC_DYNAMIC = 0x10, + EOAC_STATIC_CLOAKING = 0x20, + EOAC_DYNAMIC_CLOAKING = 0x40, + EOAC_ANY_AUTHORITY = 0x80, + EOAC_MAKE_FULLSIC = 0x100, + EOAC_REQUIRE_FULLSIC = 0x200, + EOAC_AUTO_IMPERSONATE = 0x400, + EOAC_DEFAULT = 0x800, + EOAC_DISABLE_AAA = 0x1000, + EOAC_NO_CUSTOM_MARSHAL = 0x2000 +} + +struct SOLE_AUTHENTICATION_INFO { + DWORD dwAuthnSvc; + DWORD dwAuthzSvc; + void* pAuthInfo; +} + +const void* COLE_DEFAULT_AUTHINFO = cast( void* )(-1 ); + +struct SOLE_AUTHENTICATION_LIST { + DWORD cAuthInfo; + SOLE_AUTHENTICATION_INFO* aAuthInfo; +} + +interface IEnumFORMATETC : public IUnknown { + HRESULT Next(ULONG, FORMATETC*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumFORMATETC**); +} + +interface IEnumHLITEM : public IUnknown { + HRESULT Next(ULONG, HLITEM*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumHLITEM**); +} + +interface IEnumSTATDATA : public IUnknown { + HRESULT Next(ULONG, STATDATA*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumSTATDATA**); +} + +interface IEnumSTATPROPSETSTG : public IUnknown { + HRESULT Next(ULONG, STATPROPSETSTG*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumSTATPROPSETSTG**); +} + +interface IEnumSTATPROPSTG : public IUnknown { + HRESULT Next(ULONG, STATPROPSTG*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumSTATPROPSTG**); +} + +interface IEnumSTATSTG : public IUnknown { + HRESULT Next(ULONG, STATSTG*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumSTATSTG**); +} + +interface IEnumString : public IUnknown { + HRESULT Next(ULONG, LPOLESTR*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumString**); +} + +interface IEnumMoniker : public IUnknown { + HRESULT Next(ULONG, IMoniker*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumMoniker**); +} + + +interface IEnumUnknown : public IUnknown { + HRESULT Next(ULONG, IUnknown*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumUnknown**); +} + +interface ISequentialStream : public IUnknown { + HRESULT Read(void*, ULONG, ULONG*); + HRESULT Write(void* , ULONG, ULONG*); +} + +interface IStream : public ISequentialStream { + HRESULT Seek(LARGE_INTEGER, DWORD, ULARGE_INTEGER*); + HRESULT SetSize(ULARGE_INTEGER); + HRESULT CopyTo(IStream, ULARGE_INTEGER, ULARGE_INTEGER*, ULARGE_INTEGER*); + HRESULT Commit(DWORD); + HRESULT Revert(); + HRESULT LockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD); + HRESULT UnlockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD); + HRESULT Stat(STATSTG*, DWORD); + HRESULT Clone(LPSTREAM*); +} + +interface IMarshal : public IUnknown { + HRESULT GetUnmarshalClass(REFIID, PVOID, DWORD, PVOID, DWORD, CLSID*); + HRESULT GetMarshalSizeMax(REFIID, PVOID, DWORD, PVOID, PDWORD, ULONG*); + HRESULT MarshalInterface(IStream, REFIID, PVOID, DWORD, PVOID, DWORD); + HRESULT UnmarshalInterface(IStream, REFIID, void**); + HRESULT ReleaseMarshalData(IStream); + HRESULT DisconnectObject(DWORD); +} + +interface IStdMarshalInfo : public IUnknown { + HRESULT GetClassForHandler(DWORD, PVOID, CLSID*); +} + +interface IMalloc : public IUnknown { + void* Alloc(ULONG); + void* Realloc(void*, ULONG); + void Free(void*); + ULONG GetSize(void*); + int DidAlloc(void*); + void HeapMinimize(); +} + +interface IMallocSpy : public IUnknown { + ULONG PreAlloc(ULONG); + void* PostAlloc(void*); + void* PreFree(void*, BOOL); + void PostFree(BOOL); + ULONG PreRealloc(void*, ULONG, void**, BOOL); + void* PostRealloc(void*, BOOL); + void* PreGetSize(void*, BOOL); + ULONG PostGetSize(ULONG, BOOL); + void* PreDidAlloc(void*, BOOL); + int PostDidAlloc(void*, BOOL, int); + void PreHeapMinimize(); + void PostHeapMinimize(); +} + +interface IMessageFilter : public IUnknown { + DWORD HandleInComingCall(DWORD, HTASK, DWORD, LPINTERFACEINFO); + DWORD RetryRejectedCall(HTASK, DWORD, DWORD); + DWORD MessagePending(HTASK, DWORD, DWORD); +} + + +interface IPersist : public IUnknown { + HRESULT GetClassID(CLSID*); +} + +interface IPersistStream : public IPersist { + HRESULT IsDirty(); + HRESULT Load(IStream*); + HRESULT Save(IStream*, BOOL); + HRESULT GetSizeMax(PULARGE_INTEGER); +} + +interface IRunningObjectTable : public IUnknown { + HRESULT Register(DWORD, LPUNKNOWN, LPMONIKER, PDWORD); + HRESULT Revoke(DWORD); + HRESULT IsRunning(LPMONIKER); + HRESULT GetObject(LPMONIKER, LPUNKNOWN*); + HRESULT NoteChangeTime(DWORD, LPFILETIME); + HRESULT GetTimeOfLastChange(LPMONIKER, LPFILETIME); + HRESULT EnumRunning(IEnumMoniker**); +} + +interface IBindCtx : public IUnknown { + HRESULT RegisterObjectBound(LPUNKNOWN); + HRESULT RevokeObjectBound(LPUNKNOWN); + HRESULT ReleaseBoundObjects(); + HRESULT SetBindOptions(LPBIND_OPTS); + HRESULT GetBindOptions(LPBIND_OPTS); + HRESULT GetRunningObjectTable(IRunningObjectTable**); + HRESULT RegisterObjectParam(LPOLESTR, IUnknown*); + HRESULT GetObjectParam(LPOLESTR, IUnknown**); + HRESULT EnumObjectParam(IEnumString**); + HRESULT RevokeObjectParam(LPOLESTR); +} + +interface IMoniker: public IPersistStream { + HRESULT BindToObject(IBindCtx*, IMoniker*, REFIID, PVOID*); + HRESULT BindToStorage(IBindCtx*, IMoniker*, REFIID, PVOID*); + HRESULT Reduce(IBindCtx*, DWORD, IMoniker**, IMoniker**); + HRESULT ComposeWith(IMoniker*, BOOL, IMoniker**); + HRESULT Enum(BOOL, IEnumMoniker**); + HRESULT IsEqual(IMoniker*); + HRESULT Hash(PDWORD); + HRESULT IsRunning(IBindCtx*, IMoniker*, IMoniker*); + HRESULT GetTimeOfLastChange(IBindCtx*, IMoniker*, LPFILETIME); + HRESULT Inverse(IMoniker**); + HRESULT CommonPrefixWith(IMoniker*, IMoniker**); + HRESULT RelativePathTo(IMoniker*, IMoniker**); + HRESULT GetDisplayName(IBindCtx*, IMoniker*, LPOLESTR*); + HRESULT ParseDisplayName(IBindCtx*, IMoniker*, LPOLESTR, ULONG*, IMoniker**); + HRESULT IsSystemMoniker(PDWORD); +} + +interface IPersistStorage : public IPersist +{ + HRESULT IsDirty(); + HRESULT InitNew(LPSTORAGE); + HRESULT Load(LPSTORAGE); + HRESULT Save(LPSTORAGE, BOOL); + HRESULT SaveCompleted(LPSTORAGE); + HRESULT HandsOffStorage(); +} + +interface IPersistFile : public IPersist +{ + HRESULT IsDirty(); + HRESULT Load(LPCOLESTR, DWORD); + HRESULT Save(LPCOLESTR, BOOL); + HRESULT SaveCompleted(LPCOLESTR); + HRESULT GetCurFile(LPOLESTR*); +} + +interface IAdviseSink : public IUnknown { + HRESULT QueryInterface(REFIID, PVOID*); + ULONG AddRef(); + ULONG Release(); + void OnDataChange(FORMATETC*, STGMEDIUM*); + void OnViewChange(DWORD, LONG); + void OnRename(IMoniker*); + void OnSave(); + void OnClose(); +} + +interface IAdviseSink2 : public IAdviseSink +{ + void OnLinkSrcChange(IMoniker*); +} + +interface IDataObject : public IUnknown { + HRESULT GetData(FORMATETC*, STGMEDIUM*); + HRESULT GetDataHere(FORMATETC*, STGMEDIUM*); + HRESULT QueryGetData(FORMATETC*); + HRESULT GetCanonicalFormatEtc(FORMATETC*, FORMATETC*); + HRESULT SetData(FORMATETC*, STGMEDIUM*, BOOL); + HRESULT EnumFormatEtc(DWORD, IEnumFORMATETC**); + HRESULT DAdvise(FORMATETC*, DWORD, IAdviseSink*, PDWORD); + HRESULT DUnadvise(DWORD); + HRESULT EnumDAdvise(IEnumSTATDATA**); +} + +interface IDataAdviseHolder : public IUnknown { + HRESULT Advise(IDataObject*, FORMATETC*, DWORD, IAdviseSink*, PDWORD); + HRESULT Unadvise(DWORD); + HRESULT EnumAdvise(IEnumSTATDATA**); + HRESULT SendOnDataChange(IDataObject*, DWORD, DWORD); +} + +interface IStorage : public IUnknown { + HRESULT CreateStream(LPCWSTR, DWORD, DWORD, DWORD, IStream*); + HRESULT OpenStream(LPCWSTR, PVOID, DWORD, DWORD, IStream*); + HRESULT CreateStorage(LPCWSTR, DWORD, DWORD, DWORD, IStorage*); + HRESULT OpenStorage(LPCWSTR, IStorage, DWORD, SNB, DWORD, IStorage*); + HRESULT CopyTo(DWORD, IID* , SNB, IStorage); + HRESULT MoveElementTo(LPCWSTR, IStorage, LPCWSTR, DWORD); + HRESULT Commit(DWORD); + HRESULT Revert(); + HRESULT EnumElements(DWORD, PVOID, DWORD, IEnumSTATSTG*); + HRESULT DestroyElement(LPCWSTR); + HRESULT RenameElement(LPCWSTR, LPCWSTR); + HRESULT SetElementTimes(LPCWSTR, FILETIME* , FILETIME* , FILETIME* ); + HRESULT SetClass(REFCLSID); + HRESULT SetStateBits(DWORD, DWORD); + HRESULT Stat(STATSTG*, DWORD); +} + +// FIXME: GetClassID from IPersist not there - what to do about it? +interface IRootStorage : public IPersist { + HRESULT QueryInterface(REFIID, PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT SwitchToFile(LPOLESTR); +} + +interface IRpcChannelBuffer : public IUnknown { + HRESULT GetBuffer(RPCOLEMESSAGE*, REFIID); + HRESULT SendReceive(RPCOLEMESSAGE*, PULONG); + HRESULT FreeBuffer(RPCOLEMESSAGE*); + HRESULT GetDestCtx(PDWORD, PVOID*); + HRESULT IsConnected(); +} + +interface IRpcProxyBuffer : public IUnknown { + HRESULT Connect(IRpcChannelBuffer*); + void Disconnect(); +} + +interface IRpcStubBuffer : public IUnknown { + HRESULT Connect(LPUNKNOWN); + void Disconnect(); + HRESULT Invoke(RPCOLEMESSAGE*, LPRPCSTUBBUFFER); + LPRPCSTUBBUFFER IsIIDSupported(REFIID); + ULONG CountRefs(); + HRESULT DebugServerQueryInterface(PVOID*); + HRESULT DebugServerRelease(PVOID); +} + +interface IPSFactoryBuffer : public IUnknown { + HRESULT CreateProxy(LPUNKNOWN, REFIID, LPRPCPROXYBUFFER*, PVOID*); + HRESULT CreateStub(REFIID, LPUNKNOWN, LPRPCSTUBBUFFER*); +} +alias IPSFactoryBuffer* LPPSFACTORYBUFFER; + +interface ILockBytes : public IUnknown { + HRESULT ReadAt(ULARGE_INTEGER, PVOID, ULONG, ULONG*); + HRESULT WriteAt(ULARGE_INTEGER, PCVOID, ULONG, ULONG*); + HRESULT Flush(); + HRESULT SetSize(ULARGE_INTEGER); + HRESULT LockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD); + HRESULT UnlockRegion(ULARGE_INTEGER, ULARGE_INTEGER, DWORD); + HRESULT Stat(STATSTG*, DWORD); +} + +interface IExternalConnection : public IUnknown { + HRESULT AddConnection(DWORD, DWORD); + HRESULT ReleaseConnection(DWORD, DWORD, BOOL); +} + +interface IRunnableObject : public IUnknown { + HRESULT GetRunningClass(LPCLSID); + HRESULT Run(LPBC); + BOOL IsRunning(); + HRESULT LockRunning(BOOL, BOOL); + HRESULT SetContainedObject(BOOL); +} + +interface IROTData : public IUnknown { + HRESULT GetComparisonData(PVOID, ULONG, PULONG); +} + +interface IChannelHook : public IUnknown { + void ClientGetSize(REFGUID, REFIID, PULONG); + void ClientFillBuffer(REFGUID, REFIID, PULONG, PVOID); + void ClientNotify(REFGUID, REFIID, ULONG, PVOID, DWORD, HRESULT); + void ServerNotify(REFGUID, REFIID, ULONG, PVOID, DWORD); + void ServerGetSize(REFGUID, REFIID, HRESULT, PULONG); + void ServerFillBuffer(REFGUID, REFIID, PULONG, PVOID, HRESULT); +} + +interface IPropertyStorage : public IUnknown { + HRESULT ReadMultiple(ULONG, PROPSPEC* , PROPVARIANT*); + HRESULT WriteMultiple(ULONG, PROPSPEC* , PROPVARIANT*, PROPID); + HRESULT DeleteMultiple(ULONG, PROPSPEC* ); + HRESULT ReadPropertyNames(ULONG, PROPID* , LPWSTR*); + HRESULT WritePropertyNames(ULONG, PROPID* , LPWSTR* ); + HRESULT DeletePropertyNames(ULONG, PROPID* ); + HRESULT SetClass(REFCLSID); + HRESULT Commit(DWORD); + HRESULT Revert(); + HRESULT Enum(IEnumSTATPROPSTG**); + HRESULT Stat(STATPROPSTG*); + HRESULT SetTimes(FILETIME* , FILETIME* , FILETIME* ); +} + +interface IPropertySetStorage : public IUnknown { + HRESULT Create(REFFMTID, CLSID*, DWORD, DWORD, LPPROPERTYSTORAGE*); + HRESULT Open(REFFMTID, DWORD, LPPROPERTYSTORAGE*); + HRESULT Delete(REFFMTID); + HRESULT Enum(IEnumSTATPROPSETSTG**); +} + +interface IClientSecurity : public IUnknown { + HRESULT QueryBlanket(PVOID, PDWORD, PDWORD, OLECHAR**, PDWORD, PDWORD, RPC_AUTH_IDENTITY_HANDLE**, PDWORD*); + HRESULT SetBlanket(PVOID, DWORD, DWORD, LPWSTR, DWORD, DWORD, RPC_AUTH_IDENTITY_HANDLE*, DWORD); + HRESULT CopyProxy(LPUNKNOWN, LPUNKNOWN*); +} + +interface IServerSecurity : public IUnknown { + HRESULT QueryBlanket(PDWORD, PDWORD, OLECHAR**, PDWORD, PDWORD, RPC_AUTHZ_HANDLE*, PDWORD*); + HRESULT ImpersonateClient(); + HRESULT RevertToSelf(); + HRESULT IsImpersonating(); +} + +interface IClassActivator : public IUnknown { + HRESULT GetClassObject(REFCLSID, DWORD, LCID, REFIID, PVOID*); +} + +interface IFillLockBytes : public IUnknown { + HRESULT FillAppend(void* , ULONG, PULONG); + HRESULT FillAt(ULARGE_INTEGER, void* , ULONG, PULONG); + HRESULT SetFillSize(ULARGE_INTEGER); + HRESULT Terminate(BOOL); +} + +interface IProgressNotify : public IUnknown { + HRESULT OnProgress(DWORD, DWORD, BOOL, BOOL); +} + +interface ILayoutStorage : public IUnknown { + HRESULT LayoutScript(STORAGELAYOUT*, DWORD, DWORD); + HRESULT BeginMonitor(); + HRESULT EndMonitor(); + HRESULT ReLayoutDocfile(OLECHAR*); +} + +interface IGlobalInterfaceTable : public IUnknown { + HRESULT RegisterInterfaceInGlobal(IUnknown*, REFIID, DWORD*); + HRESULT RevokeInterfaceFromGlobal(DWORD); + HRESULT GetInterfaceFromGlobal(DWORD, REFIID, void**); +} + +/+ +// These are probably unnecessary for D. +extern (Windows) { +HRESULT IMarshal_GetUnmarshalClass_Proxy(IMarshal*, REFIID, void*, DWORD, void*, DWORD, CLSID*); +void IMarshal_GetUnmarshalClass_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMarshal_GetMarshalSizeMax_Proxy(IMarshal*, REFIID, void*, DWORD, void*, DWORD, DWORD*); +void IMarshal_GetMarshalSizeMax_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMarshal_MarshalInterface_Proxy(IMarshal*, IStream*, REFIID, void*, DWORD, void*, DWORD); +void IMarshal_MarshalInterface_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMarshal_UnmarshalInterface_Proxy(IMarshal*, IStream*, REFIID, void**); +void IMarshal_UnmarshalInterface_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMarshal_ReleaseMarshalData_Proxy(IMarshal*, IStream*); +void IMarshal_ReleaseMarshalData_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMarshal_DisconnectObject_Proxy(IMarshal*, DWORD); +void IMarshal_DisconnectObject_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void* IMalloc_Alloc_Proxy(IMalloc*, ULONG); +void IMalloc_Alloc_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void* IMalloc_Realloc_Proxy(IMalloc*, void*, ULONG); +void IMalloc_Realloc_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IMalloc_Free_Proxy(IMalloc*, void*); +void IMalloc_Free_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +ULONG IMalloc_GetSize_Proxy(IMalloc*, void*); +void IMalloc_GetSize_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +int IMalloc_DidAlloc_Proxy(IMalloc*, void*); +void IMalloc_DidAlloc_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IMalloc_HeapMinimize_Proxy(IMalloc*); +void IMalloc_HeapMinimize_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +ULONG IMallocSpy_PreAlloc_Proxy(IMallocSpy*, ULONG cbRequest); +void IMallocSpy_PreAlloc_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void* IMallocSpy_PostAlloc_Proxy(IMallocSpy*, void*); +void IMallocSpy_PostAlloc_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void* IMallocSpy_PreFree_Proxy(IMallocSpy*, void*, BOOL); +void IMallocSpy_PreFree_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IMallocSpy_PostFree_Proxy(IMallocSpy*, BOOL); +void IMallocSpy_PostFree_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +ULONG IMallocSpy_PreRealloc_Proxy(IMallocSpy*, void*, ULONG, void**, BOOL); +void IMallocSpy_PreRealloc_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void* IMallocSpy_PostRealloc_Proxy(IMallocSpy*, void*, BOOL); +void IMallocSpy_PostRealloc_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void* IMallocSpy_PreGetSize_Proxy(IMallocSpy*, void*, BOOL); +void IMallocSpy_PreGetSize_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +ULONG IMallocSpy_PostGetSize_Proxy(IMallocSpy*, ULONG, BOOL); +void IMallocSpy_PostGetSize_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void* IMallocSpy_PreDidAlloc_Proxy(IMallocSpy*, void*, BOOL); +void IMallocSpy_PreDidAlloc_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +int IMallocSpy_PostDidAlloc_Proxy(IMallocSpy*, void*, BOOL, int); +void IMallocSpy_PostDidAlloc_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IMallocSpy_PreHeapMinimize_Proxy(IMallocSpy* ); +void IMallocSpy_PreHeapMinimize_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IMallocSpy_PostHeapMinimize_Proxy(IMallocSpy*); +void IMallocSpy_PostHeapMinimize_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStdMarshalInfo_GetClassForHandler_Proxy(IStdMarshalInfo*, DWORD, void*, CLSID*); +void IStdMarshalInfo_GetClassForHandler_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +DWORD IExternalConnection_AddConnection_Proxy(IExternalConnection*, DWORD, DWORD); +void IExternalConnection_AddConnection_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +DWORD IExternalConnection_ReleaseConnection_Proxy(IExternalConnection*, DWORD, DWORD, BOOL); +void IExternalConnection_ReleaseConnection_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumUnknown_RemoteNext_Proxy(IEnumUnknown*, ULONG, IUnknown**, ULONG*); +void IEnumUnknown_RemoteNext_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumUnknown_Skip_Proxy(IEnumUnknown*, ULONG); +void IEnumUnknown_Skip_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumUnknown_Reset_Proxy(IEnumUnknown* ); +void IEnumUnknown_Reset_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumUnknown_Clone_Proxy(IEnumUnknown*, IEnumUnknown**); +void IEnumUnknown_Clone_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IBindCtx_RegisterObjectBound_Proxy(IBindCtx*, IUnknown*punk); +void IBindCtx_RegisterObjectBound_Stub(IRpcStubBuffer*, IRpcChannelBuffer*_pRpcChannelBuffer, PRPC_MESSAGE, PDWORD); +HRESULT IBindCtx_RevokeObjectBound_Proxy(IBindCtx*, IUnknown*punk); +void IBindCtx_RevokeObjectBound_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IBindCtx_ReleaseBoundObjects_Proxy(IBindCtx*); +void IBindCtx_ReleaseBoundObjects_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IBindCtx_SetBindOptions_Proxy(IBindCtx*, BIND_OPTS*); +void IBindCtx_SetBindOptions_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IBindCtx_GetBindOptions_Proxy(IBindCtx*, BIND_OPTS*pbindopts); +void IBindCtx_GetBindOptions_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IBindCtx_GetRunningObjectTable_Proxy(IBindCtx*, IRunningObjectTable**); +void IBindCtx_GetRunningObjectTable_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IBindCtx_RegisterObjectParam_Proxy(IBindCtx*, LPCSTR, IUnknown*); +void IBindCtx_RegisterObjectParam_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IBindCtx_GetObjectParam_Proxy(IBindCtx*, LPCSTR, IUnknown**); +void IBindCtx_GetObjectParam_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IBindCtx_EnumObjectParam_Proxy(IBindCtx*, IEnumString**); +void IBindCtx_EnumObjectParam_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IBindCtx_RevokeObjectParam_Proxy(IBindCtx*, LPCSTR); +void IBindCtx_RevokeObjectParam_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumMoniker_RemoteNext_Proxy(IEnumMoniker*, ULONG, IMoniker**, ULONG*); +void IEnumMoniker_RemoteNext_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumMoniker_Skip_Proxy(IEnumMoniker*, ULONG); +void IEnumMoniker_Skip_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumMoniker_Reset_Proxy(IEnumMoniker*); +void IEnumMoniker_Reset_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumMoniker_Clone_Proxy(IEnumMoniker*, IEnumMoniker**); +void IEnumMoniker_Clone_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRunnableObject_GetRunningClass_Proxy(IRunnableObject*, LPCLSID); +void IRunnableObject_GetRunningClass_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRunnableObject_Run_Proxy(IRunnableObject*, LPBINDCTX); +void IRunnableObject_Run_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +BOOL IRunnableObject_IsRunning_Proxy(IRunnableObject*); +void IRunnableObject_IsRunning_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRunnableObject_LockRunning_Proxy(IRunnableObject*, BOOL, BOOL); +void IRunnableObject_LockRunning_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRunnableObject_SetContainedObject_Proxy(IRunnableObject*, BOOL); +void IRunnableObject_SetContainedObject_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRunningObjectTable_Register_Proxy(IRunningObjectTable*, DWORD, IUnknown*, IMoniker*, DWORD*); +void IRunningObjectTable_Register_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRunningObjectTable_Revoke_Proxy(IRunningObjectTable*, DWORD); +void IRunningObjectTable_Revoke_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRunningObjectTable_IsRunning_Proxy(IRunningObjectTable*, IMoniker*); +void IRunningObjectTable_IsRunning_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRunningObjectTable_GetObject_Proxy(IRunningObjectTable*, IMoniker*, IUnknown**); +void IRunningObjectTable_GetObject_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRunningObjectTable_NoteChangeTime_Proxy(IRunningObjectTable*, DWORD, FILETIME*); +void IRunningObjectTable_NoteChangeTime_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRunningObjectTable_GetTimeOfLastChange_Proxy(IRunningObjectTable*, IMoniker*, FILETIME*); +void IRunningObjectTable_GetTimeOfLastChange_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRunningObjectTable_EnumRunning_Proxy(IRunningObjectTable*, IEnumMoniker**); +void IRunningObjectTable_EnumRunning_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersist_GetClassID_Proxy(IPersist*, CLSID*); +void IPersist_GetClassID_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistStream_IsDirty_Proxy(IPersistStream*); +void IPersistStream_IsDirty_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistStream_Load_Proxy(IPersistStream*, IStream*); +void IPersistStream_Load_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistStream_Save_Proxy(IPersistStream*, IStream*, BOOL); +void IPersistStream_Save_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistStream_GetSizeMax_Proxy(IPersistStream*, ULARGE_INTEGER*); +void IPersistStream_GetSizeMax_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_RemoteBindToObject_Proxy(IMoniker*, IBindCtx*, IMoniker*, REFIID, IUnknown**); +void IMoniker_RemoteBindToObject_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_RemoteBindToStorage_Proxy(IMoniker*, IBindCtx*, IMoniker*, REFIID, IUnknown**); +void IMoniker_RemoteBindToStorage_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_Reduce_Proxy(IMoniker*, IBindCtx*, DWORD, IMoniker**, IMoniker**); +void IMoniker_Reduce_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_ComposeWith_Proxy(IMoniker*, IMoniker*, BOOL, IMoniker**); +void IMoniker_ComposeWith_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_Enum_Proxy(IMoniker*, BOOL, IEnumMoniker**); +void IMoniker_Enum_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_IsEqual_Proxy(IMoniker*, IMoniker*); +void IMoniker_IsEqual_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_Hash_Proxy(IMoniker*, DWORD*); +void IMoniker_Hash_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_IsRunning_Proxy(IMoniker*, IBindCtx*, IMoniker*, IMoniker*); +void IMoniker_IsRunning_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_GetTimeOfLastChange_Proxy(IMoniker*, IBindCtx*, IMoniker*, FILETIME*); +void IMoniker_GetTimeOfLastChange_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_Inverse_Proxy(IMoniker*, IMoniker**); +void IMoniker_Inverse_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_CommonPrefixWith_Proxy(IMoniker*, IMoniker*, IMoniker**); +void IMoniker_CommonPrefixWith_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_RelativePathTo_Proxy(IMoniker*, IMoniker*, IMoniker**); +void IMoniker_RelativePathTo_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_GetDisplayName_Proxy(IMoniker*, IBindCtx*, IMoniker*, LPCSTR*); +void IMoniker_GetDisplayName_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_ParseDisplayName_Proxy(IMoniker*, IBindCtx*, IMoniker*, LPCSTR, ULONG*, IMoniker**); +void IMoniker_ParseDisplayName_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IMoniker_IsSystemMoniker_Proxy(IMoniker*, DWORD*); +void IMoniker_IsSystemMoniker_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IROTData_GetComparisonData_Proxy(IROTData*, BYTE*, ULONG cbMax, ULONG*); +void IROTData_GetComparisonData_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumString_RemoteNext_Proxy(IEnumString*, ULONG, LPCSTR*rgelt, ULONG*); +void IEnumString_RemoteNext_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumString_Skip_Proxy(IEnumString*, ULONG); +void IEnumString_Skip_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumString_Reset_Proxy(IEnumString*); +void IEnumString_Reset_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumString_Clone_Proxy(IEnumString*, IEnumString**); +void IEnumString_Clone_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStream_RemoteRead_Proxy(IStream*, BYTE*, ULONG, ULONG*); +void IStream_RemoteRead_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStream_RemoteWrite_Proxy(IStream*, BYTE*pv, ULONG, ULONG*); +void IStream_RemoteWrite_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStream_RemoteSeek_Proxy(IStream*, LARGE_INTEGER, DWORD, ULARGE_INTEGER*); +void IStream_RemoteSeek_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStream_SetSize_Proxy(IStream*, ULARGE_INTEGER); +void IStream_SetSize_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStream_RemoteCopyTo_Proxy(IStream*, IStream*, ULARGE_INTEGER, ULARGE_INTEGER*, ULARGE_INTEGER*); +void IStream_RemoteCopyTo_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStream_Commit_Proxy(IStream*, DWORD); +void IStream_Commit_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStream_Revert_Proxy(IStream*); +void IStream_Revert_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStream_LockRegion_Proxy(IStream*, ULARGE_INTEGER, ULARGE_INTEGER, DWORD); +void IStream_LockRegion_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStream_UnlockRegion_Proxy(IStream*, ULARGE_INTEGER, ULARGE_INTEGER, DWORD); +void IStream_UnlockRegion_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStream_Stat_Proxy(IStream*, STATSTG*, DWORD); +void IStream_Stat_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStream_Clone_Proxy(IStream*, IStream**); +void IStream_Clone_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumSTATSTG_RemoteNext_Proxy(IEnumSTATSTG*, ULONG, STATSTG*, ULONG*); +void IEnumSTATSTG_RemoteNext_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumSTATSTG_Skip_Proxy(IEnumSTATSTG*, ULONG celt); +void IEnumSTATSTG_Skip_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumSTATSTG_Reset_Proxy(IEnumSTATSTG*); +void IEnumSTATSTG_Reset_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumSTATSTG_Clone_Proxy(IEnumSTATSTG*, IEnumSTATSTG**); +void IEnumSTATSTG_Clone_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_CreateStream_Proxy(IStorage*, OLECHAR*, DWORD, DWORD, DWORD, IStream**); +void IStorage_CreateStream_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_RemoteOpenStream_Proxy(IStorage*, OLECHAR*, uint, BYTE*, DWORD, DWORD, IStream**); +void IStorage_RemoteOpenStream_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_CreateStorage_Proxy(IStorage*, OLECHAR*, DWORD, DWORD, DWORD, IStorage**); +void IStorage_CreateStorage_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_OpenStorage_Proxy(IStorage*, OLECHAR*, IStorage*, DWORD, SNB, DWORD, IStorage**); +void IStorage_OpenStorage_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_CopyTo_Proxy(IStorage*, DWORD, IID*, SNB, IStorage*); +void IStorage_CopyTo_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_MoveElementTo_Proxy(IStorage*, OLECHAR*, IStorage*, OLECHAR*, DWORD); +void IStorage_MoveElementTo_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_Commit_Proxy(IStorage*, DWORD); +void IStorage_Commit_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_Revert_Proxy(IStorage*); +void IStorage_Revert_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_RemoteEnumElements_Proxy(IStorage*, DWORD, uint, BYTE*, DWORD, IEnumSTATSTG**); +void IStorage_RemoteEnumElements_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_DestroyElement_Proxy(IStorage*, OLECHAR*); +void IStorage_DestroyElement_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_RenameElement_Proxy(IStorage*, OLECHAR*, OLECHAR*); +void IStorage_RenameElement_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_SetElementTimes_Proxy(IStorage*, OLECHAR*, FILETIME*, FILETIME*, FILETIME*); +void IStorage_SetElementTimes_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_SetClass_Proxy(IStorage*, REFCLSID); +void IStorage_SetClass_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_SetStateBits_Proxy(IStorage*, DWORD, DWORD); +void IStorage_SetStateBits_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IStorage_Stat_Proxy(IStorage*, STATSTG*, DWORD); +void IStorage_Stat_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistFile_IsDirty_Proxy(IPersistFile*); +void IPersistFile_IsDirty_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistFile_Load_Proxy(IPersistFile*, LPCOLESTR, DWORD); +void IPersistFile_Load_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistFile_Save_Proxy(IPersistFile*, LPCOLESTR pszFileName, BOOL); +void IPersistFile_Save_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistFile_SaveCompleted_Proxy(IPersistFile*, LPCOLESTR); +void IPersistFile_SaveCompleted_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistFile_GetCurFile_Proxy(IPersistFile*, LPCSTR*); +void IPersistFile_GetCurFile_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistStorage_IsDirty_Proxy(IPersistStorage*); +void IPersistStorage_IsDirty_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistStorage_InitNew_Proxy(IPersistStorage*, IStorage*); +void IPersistStorage_InitNew_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistStorage_Load_Proxy(IPersistStorage*, IStorage*); +void IPersistStorage_Load_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistStorage_Save_Proxy(IPersistStorage*, IStorage*, BOOL); +void IPersistStorage_Save_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistStorage_SaveCompleted_Proxy(IPersistStorage*, IStorage*); +void IPersistStorage_SaveCompleted_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPersistStorage_HandsOffStorage_Proxy(IPersistStorage*); +void IPersistStorage_HandsOffStorage_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT ILockBytes_RemoteReadAt_Proxy(ILockBytes*, ULARGE_INTEGER, BYTE*, ULONG, ULONG*); +void ILockBytes_RemoteReadAt_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT ILockBytes_RemoteWriteAt_Proxy(ILockBytes*, ULARGE_INTEGER, BYTE*pv, ULONG, ULONG*); +void ILockBytes_RemoteWriteAt_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT ILockBytes_Flush_Proxy(ILockBytes*); +void ILockBytes_Flush_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT ILockBytes_SetSize_Proxy(ILockBytes*, ULARGE_INTEGER); +void ILockBytes_SetSize_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT ILockBytes_LockRegion_Proxy(ILockBytes*, ULARGE_INTEGER, ULARGE_INTEGER, DWORD); +void ILockBytes_LockRegion_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT ILockBytes_UnlockRegion_Proxy(ILockBytes*, ULARGE_INTEGER, ULARGE_INTEGER, DWORD); +void ILockBytes_UnlockRegion_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT ILockBytes_Stat_Proxy(ILockBytes*, STATSTG*, DWORD); +void ILockBytes_Stat_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumFORMATETC_RemoteNext_Proxy(IEnumFORMATETC*, ULONG, FORMATETC*, ULONG*); +void IEnumFORMATETC_RemoteNext_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumFORMATETC_Skip_Proxy(IEnumFORMATETC*, ULONG); +void IEnumFORMATETC_Skip_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumFORMATETC_Reset_Proxy(IEnumFORMATETC*); +void IEnumFORMATETC_Reset_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumFORMATETC_Clone_Proxy(IEnumFORMATETC*, IEnumFORMATETC**); +void IEnumFORMATETC_Clone_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumFORMATETC_Next_Proxy(IEnumFORMATETC*, ULONG, FORMATETC*, ULONG*); +HRESULT IEnumFORMATETC_Next_Stub(IEnumFORMATETC*, ULONG, FORMATETC*, ULONG*); +HRESULT IEnumSTATDATA_RemoteNext_Proxy(IEnumSTATDATA*, ULONG, STATDATA*, ULONG*); +void IEnumSTATDATA_RemoteNext_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumSTATDATA_Skip_Proxy(IEnumSTATDATA*, ULONG); +void IEnumSTATDATA_Skip_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumSTATDATA_Reset_Proxy(IEnumSTATDATA*); +void IEnumSTATDATA_Reset_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumSTATDATA_Clone_Proxy(IEnumSTATDATA*, IEnumSTATDATA**); +void IEnumSTATDATA_Clone_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IEnumSTATDATA_Next_Proxy(IEnumSTATDATA*, ULONG, STATDATA*, ULONG*); +HRESULT IEnumSTATDATA_Next_Stub(IEnumSTATDATA*, ULONG, STATDATA*, ULONG*); +HRESULT IRootStorage_SwitchToFile_Proxy(IRootStorage*, LPCSTR); +void IRootStorage_SwitchToFile_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IAdviseSink_RemoteOnDataChange_Proxy(IAdviseSink*, FORMATETC*, RemSTGMEDIUM*); +void IAdviseSink_RemoteOnDataChange_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IAdviseSink_RemoteOnViewChange_Proxy(IAdviseSink*, DWORD, LONG); +void IAdviseSink_RemoteOnViewChange_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IAdviseSink_RemoteOnRename_Proxy(IAdviseSink*, IMoniker*); +void IAdviseSink_RemoteOnRename_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IAdviseSink_RemoteOnSave_Proxy(IAdviseSink*); +void IAdviseSink_RemoteOnSave_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IAdviseSink_RemoteOnClose_Proxy(IAdviseSink*); +void IAdviseSink_RemoteOnClose_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IAdviseSink_OnDataChange_Proxy(IAdviseSink*, FORMATETC*, STGMEDIUM*); +void IAdviseSink_OnDataChange_Stub(IAdviseSink*, FORMATETC*, RemSTGMEDIUM*); +void IAdviseSink_OnViewChange_Proxy(IAdviseSink*, DWORD, LONG); +void IAdviseSink_OnViewChange_Stub(IAdviseSink*, DWORD, LONG); +void IAdviseSink_OnRename_Proxy(IAdviseSink*, IMoniker*); +void IAdviseSink_OnRename_Stub(IAdviseSink*, IMoniker*); +void IAdviseSink_OnSave_Proxy(IAdviseSink*); +void IAdviseSink_OnSave_Stub(IAdviseSink*); +void IAdviseSink_OnClose_Proxy(IAdviseSink*); +HRESULT IAdviseSink_OnClose_Stub(IAdviseSink*); +void IAdviseSink2_RemoteOnLinkSrcChange_Proxy(IAdviseSink2*, IMoniker*); +void IAdviseSink2_RemoteOnLinkSrcChange_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IAdviseSink2_OnLinkSrcChange_Proxy(IAdviseSink2*, IMoniker*); +void IAdviseSink2_OnLinkSrcChange_Stub(IAdviseSink2*, IMoniker*); +HRESULT IDataObject_RemoteGetData_Proxy(IDataObject*, FORMATETC*, RemSTGMEDIUM**); +void IDataObject_RemoteGetData_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataObject_RemoteGetDataHere_Proxy(IDataObject*, FORMATETC*, RemSTGMEDIUM**); +void IDataObject_RemoteGetDataHere_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataObject_QueryGetData_Proxy(IDataObject*, FORMATETC*); +void IDataObject_QueryGetData_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataObject_GetCanonicalFormatEtc_Proxy(IDataObject*, FORMATETC*, FORMATETC*); +void IDataObject_GetCanonicalFormatEtc_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataObject_RemoteSetData_Proxy(IDataObject*, FORMATETC*, RemSTGMEDIUM*, BOOL); +void IDataObject_RemoteSetData_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataObject_EnumFormatEtc_Proxy(IDataObject*, DWORD, IEnumFORMATETC**); +void IDataObject_EnumFormatEtc_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataObject_DAdvise_Proxy(IDataObject*, FORMATETC*, DWORD, IAdviseSink*, DWORD*); +void IDataObject_DAdvise_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataObject_DUnadvise_Proxy(IDataObject*, DWORD); +void IDataObject_DUnadvise_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataObject_EnumDAdvise_Proxy(IDataObject*, IEnumSTATDATA**); +void IDataObject_EnumDAdvise_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataObject_GetData_Proxy(IDataObject*, FORMATETC*, STGMEDIUM*); +HRESULT IDataObject_GetData_Stub(IDataObject*, FORMATETC*, RemSTGMEDIUM**); +HRESULT IDataObject_GetDataHere_Proxy(IDataObject*, FORMATETC*, STGMEDIUM*); +HRESULT IDataObject_GetDataHere_Stub(IDataObject*, FORMATETC*, RemSTGMEDIUM**); +HRESULT IDataObject_SetData_Proxy(IDataObject*, FORMATETC*, STGMEDIUM*, BOOL); +HRESULT IDataObject_SetData_Stub(IDataObject*, FORMATETC*, RemSTGMEDIUM*, BOOL); +HRESULT IDataAdviseHolder_Advise_Proxy(IDataAdviseHolder*, IDataObject*, FORMATETC*, DWORD, IAdviseSink*, DWORD*); +void IDataAdviseHolder_Advise_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataAdviseHolder_Unadvise_Proxy(IDataAdviseHolder*, DWORD); +void IDataAdviseHolder_Unadvise_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataAdviseHolder_EnumAdvise_Proxy(IDataAdviseHolder*, IEnumSTATDATA**); +void IDataAdviseHolder_EnumAdvise_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IDataAdviseHolder_SendOnDataChange_Proxy(IDataAdviseHolder*, IDataObject*, DWORD, DWORD); +void IDataAdviseHolder_SendOnDataChange_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +DWORD IMessageFilter_HandleInComingCall_Proxy(IMessageFilter*, DWORD, HTASK, DWORD, LPINTERFACEINFO); +void IMessageFilter_HandleInComingCall_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +DWORD IMessageFilter_RetryRejectedCall_Proxy(IMessageFilter*, HTASK, DWORD, DWORD); +void IMessageFilter_RetryRejectedCall_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +DWORD IMessageFilter_MessagePending_Proxy(IMessageFilter*, HTASK, DWORD, DWORD); +void IMessageFilter_MessagePending_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRpcChannelBuffer_GetBuffer_Proxy(IRpcChannelBuffer*, RPCOLEMESSAGE*, REFIID); +void IRpcChannelBuffer_GetBuffer_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRpcChannelBuffer_SendReceive_Proxy(IRpcChannelBuffer*, RPCOLEMESSAGE*, ULONG*); +void IRpcChannelBuffer_SendReceive_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRpcChannelBuffer_FreeBuffer_Proxy(IRpcChannelBuffer*, RPCOLEMESSAGE*); +void IRpcChannelBuffer_FreeBuffer_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRpcChannelBuffer_GetDestCtx_Proxy(IRpcChannelBuffer*, DWORD*, void**); +void IRpcChannelBuffer_GetDestCtx_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRpcChannelBuffer_IsConnected_Proxy(IRpcChannelBuffer*); +void IRpcChannelBuffer_IsConnected_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRpcProxyBuffer_Connect_Proxy(IRpcProxyBuffer*, IRpcChannelBuffer*pRpcChannelBuffer); +void IRpcProxyBuffer_Connect_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IRpcProxyBuffer_Disconnect_Proxy(IRpcProxyBuffer*); +void IRpcProxyBuffer_Disconnect_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRpcStubBuffer_Connect_Proxy(IRpcStubBuffer*, IUnknown*); +void IRpcStubBuffer_Connect_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IRpcStubBuffer_Disconnect_Proxy(IRpcStubBuffer*); +void IRpcStubBuffer_Disconnect_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRpcStubBuffer_Invoke_Proxy(IRpcStubBuffer*, RPCOLEMESSAGE*, IRpcChannelBuffer*); +void IRpcStubBuffer_Invoke_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +IRpcStubBuffer*IRpcStubBuffer_IsIIDSupported_Proxy(IRpcStubBuffer*, REFIID); +void IRpcStubBuffer_IsIIDSupported_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +ULONG IRpcStubBuffer_CountRefs_Proxy(IRpcStubBuffer*); +void IRpcStubBuffer_CountRefs_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IRpcStubBuffer_DebugServerQueryInterface_Proxy(IRpcStubBuffer*, void**); +void IRpcStubBuffer_DebugServerQueryInterface_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void IRpcStubBuffer_DebugServerRelease_Proxy(IRpcStubBuffer*, void*); +void IRpcStubBuffer_DebugServerRelease_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPSFactoryBuffer_CreateProxy_Proxy(IPSFactoryBuffer*, IUnknown*, REFIID, IRpcProxyBuffer**, void**); +void IPSFactoryBuffer_CreateProxy_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +HRESULT IPSFactoryBuffer_CreateStub_Proxy(IPSFactoryBuffer*, REFIID, IUnknown*, IRpcStubBuffer**); +void IPSFactoryBuffer_CreateStub_Stub(IRpcStubBuffer*, IRpcChannelBuffer*, PRPC_MESSAGE, PDWORD); +void SNB_to_xmit(SNB*, RemSNB**); +void SNB_from_xmit(RemSNB*, SNB*); +void SNB_free_inst(SNB*); +void SNB_free_xmit(RemSNB*); +HRESULT IEnumUnknown_Next_Proxy(IEnumUnknown*, ULONG, IUnknown**, ULONG*); +HRESULT IEnumUnknown_Next_Stub(IEnumUnknown*, ULONG, IUnknown**, ULONG*); +HRESULT IEnumMoniker_Next_Proxy(IEnumMoniker*, ULONG, IMoniker**, ULONG*); +HRESULT IEnumMoniker_Next_Stub(IEnumMoniker*, ULONG, IMoniker**, ULONG*); +HRESULT IMoniker_BindToObject_Proxy(IMoniker*, IBindCtx*, IMoniker*, REFIID, void**); +HRESULT IMoniker_BindToObject_Stub(IMoniker*, IBindCtx*, IMoniker*, REFIID, IUnknown**); +HRESULT IMoniker_BindToStorage_Proxy(IMoniker*, IBindCtx*, IMoniker*, REFIID, void**); +HRESULT IMoniker_BindToStorage_Stub(IMoniker*, IBindCtx*, IMoniker*, REFIID, IUnknown**); +HRESULT IEnumString_Next_Proxy(IEnumString*, ULONG, LPCSTR*, ULONG*); +HRESULT IEnumString_Next_Stub(IEnumString*, ULONG, LPCSTR*, ULONG*); +HRESULT IStream_Read_Proxy(IStream*, void*, ULONG, ULONG*); +HRESULT IStream_Read_Stub(IStream*, BYTE*, ULONG, ULONG*); +HRESULT IStream_Write_Proxy(IStream*, void*, ULONG, ULONG*); +HRESULT IStream_Write_Stub(IStream*, BYTE*, ULONG, ULONG*); +HRESULT IStream_Seek_Proxy(IStream*, LARGE_INTEGER, DWORD, ULARGE_INTEGER*); +HRESULT IStream_Seek_Stub(IStream*, LARGE_INTEGER, DWORD, ULARGE_INTEGER*); +HRESULT IStream_CopyTo_Proxy(IStream*, IStream*, ULARGE_INTEGER, ULARGE_INTEGER*, ULARGE_INTEGER*); +HRESULT IStream_CopyTo_Stub(IStream*, IStream*, ULARGE_INTEGER, ULARGE_INTEGER*, ULARGE_INTEGER*); +HRESULT IEnumSTATSTG_Next_Proxy(IEnumSTATSTG*, ULONG, STATSTG*, ULONG*); +HRESULT IEnumSTATSTG_Next_Stub(IEnumSTATSTG*, ULONG, STATSTG*, ULONG*); +HRESULT IStorage_OpenStream_Proxy(IStorage*, OLECHAR*, void*, DWORD, DWORD, IStream**); +HRESULT IStorage_OpenStream_Stub(IStorage*, OLECHAR*, uint, BYTE*, DWORD, DWORD, IStream** ); +HRESULT IStorage_EnumElements_Proxy(IStorage*, DWORD, void*, DWORD, IEnumSTATSTG**); +HRESULT IStorage_EnumElements_Stub(IStorage*, DWORD, uint, BYTE*, DWORD, IEnumSTATSTG**); +HRESULT ILockBytes_ReadAt_Proxy(ILockBytes*, ULARGE_INTEGER, void*, ULONG, ULONG*); +HRESULT ILockBytes_ReadAt_Stub(ILockBytes*, ULARGE_INTEGER, BYTE*, ULONG, ULONG*); +HRESULT ILockBytes_WriteAt_Proxy(ILockBytes*, ULARGE_INTEGER, void*, ULONG, ULONG*); +HRESULT ILockBytes_WriteAt_Stub(ILockBytes*, ULARGE_INTEGER, BYTE*, ULONG, ULONG*); +} ++/ diff -r 586e4a649642 -r 4a9dcbd9e54f win32/objsafe.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/objsafe.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,23 @@ +/***********************************************************************\ +* objsafe.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.objsafe; + +private import win32.basetyps, win32.unknwn, win32.windef; + +enum { + INTERFACESAFE_FOR_UNTRUSTED_CALLER = 1, + INTERFACESAFE_FOR_UNTRUSTED_DATA +} + +interface IObjectSafety : IUnknown { + HRESULT GetInterfaceSafetyOptions(REFIID, DWORD*, DWORD*); + HRESULT SetInterfaceSafetyOptions(REFIID, DWORD, DWORD); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ocidl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ocidl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,471 @@ +/***********************************************************************\ +* ocidl.d * +* * +* Windows API header module * +* Part of the Internet Development SDK * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ocidl; + +private import win32.ole2, win32.oleidl, win32.oaidl, win32.objfwd, + win32.windef, win32.wtypes; +private import win32.objidl; // for CLIPFORMAT +private import win32.wingdi; // for TEXTMETRICW +private import win32.winuser; // for LPMSG + +interface IBindHost : public IUnknown {} + +interface IServiceProvider : IUnknown{ + HRESULT QueryService(REFGUID,REFIID,void**); +} + +/* +// TODO: +//private import win32.servprov; // for IServiceProvider +// private import win32.urlmon; // for IBindHost. This is not included in MinGW. + +// win32.urlmon should contain: +interface IBindHost : public IUnknown +{ + HRESULT CreateMoniker(LPOLESTR szName, IBindCtx* pBC, IMoniker** ppmk, DWORD); + HRESULT MonikerBindToObject(IMoniker* pMk, IBindCtx* pBC, IBindStatusCallback* pBSC, REFIID, void** ); + HRESULT MonikerBindToStorage(IMoniker* pMk, IBindCtx* pBC, IBindStatusCallback* pBSC, REFIID, void** ); +} +*/ + + + + +//[Yes] #ifndef OLE2ANSI +alias TEXTMETRICW TEXTMETRICOLE; +//} else { +//alias TEXTMETRIC TEXTMETRICOLE; +//} +alias TEXTMETRICOLE* LPTEXTMETRICOLE; + +alias DWORD OLE_COLOR; +alias UINT OLE_HANDLE; +alias int OLE_XPOS_HIMETRIC; +alias int OLE_YPOS_HIMETRIC; +alias int OLE_XSIZE_HIMETRIC; +alias int OLE_YSIZE_HIMETRIC; + +enum READYSTATE { + READYSTATE_UNINITIALIZED = 0, + READYSTATE_LOADING = 1, + READYSTATE_LOADED = 2, + READYSTATE_INTERACTIVE = 3, + READYSTATE_COMPLETE = 4 +} + +enum PROPBAG2_TYPE { + PROPBAG2_TYPE_UNDEFINED, + PROPBAG2_TYPE_DATA, + PROPBAG2_TYPE_URL, + PROPBAG2_TYPE_OBJECT, + PROPBAG2_TYPE_STREAM, + PROPBAG2_TYPE_STORAGE, + PROPBAG2_TYPE_MONIKER // = 6 +} + +struct PROPBAG2 { + DWORD dwType; + VARTYPE vt; + CLIPFORMAT cfType; + DWORD dwHint; + LPOLESTR pstrName; + CLSID clsid; +} + +enum QACONTAINERFLAGS { + QACONTAINER_SHOWHATCHING = 1, + QACONTAINER_SHOWGRABHANDLES = 2, + QACONTAINER_USERMODE = 4, + QACONTAINER_DISPLAYASDEFAULT = 8, + QACONTAINER_UIDEAD = 16, + QACONTAINER_AUTOCLIP = 32, + QACONTAINER_MESSAGEREFLECT = 64, + QACONTAINER_SUPPORTSMNEMONICS = 128 +} + +struct QACONTAINER { + ULONG cbSize = this.sizeof; + IOleClientSite* pClientSite; + IAdviseSinkEx* pAdviseSink; + IPropertyNotifySink* pPropertyNotifySink; + IUnknown* pUnkEventSink; + DWORD dwAmbientFlags; + OLE_COLOR colorFore; + OLE_COLOR colorBack; + IFont* pFont; + IOleUndoManager* pUndoMgr; + DWORD dwAppearance; + LONG lcid; + HPALETTE hpal; + IBindHost* pBindHost; + IOleControlSite* pOleControlSite; + IServiceProvider* pServiceProvider; +} + +struct QACONTROL { + ULONG cbSize = this.sizeof; + DWORD dwMiscStatus; + DWORD dwViewStatus; + DWORD dwEventCookie; + DWORD dwPropNotifyCookie; + DWORD dwPointerActivationPolicy; +} + +struct POINTF { + float x; + float y; +} +alias POINTF* LPPOINTF; + +struct CONTROLINFO { + ULONG cb; + HACCEL hAccel; + USHORT cAccel; + DWORD dwFlags; +} +alias CONTROLINFO* LPCONTROLINFO; + +struct CONNECTDATA { + LPUNKNOWN pUnk; + DWORD dwCookie; +} +alias CONNECTDATA* LPCONNECTDATA; + +struct LICINFO { + int cbLicInfo; + BOOL fRuntimeKeyAvail; + BOOL fLicVerified; +} +alias LICINFO* LPLICINFO; + +struct CAUUID { + ULONG cElems; + GUID* pElems; +} +alias CAUUID* LPCAUUID; + +struct CALPOLESTR { + ULONG cElems; + LPOLESTR* pElems; +} +alias CALPOLESTR* LPCALPOLESTR; + +struct CADWORD { + ULONG cElems; + DWORD* pElems; +} +alias CADWORD* LPCADWORD; + +struct PROPPAGEINFO { + ULONG cb; + LPOLESTR pszTitle; + SIZE size; + LPOLESTR pszDocString; + LPOLESTR pszHelpFile; + DWORD dwHelpContext; +} +alias PROPPAGEINFO* LPPROPPAGEINFO; + +interface IOleControl : public IUnknown { + HRESULT GetControlInfo(LPCONTROLINFO); + HRESULT OnMnemonic(LPMSG); + HRESULT OnAmbientPropertyChange(DISPID); + HRESULT FreezeEvents(BOOL); +} + +interface IOleControlSite : public IUnknown { + HRESULT OnControlInfoChanged(); + HRESULT LockInPlaceActive(BOOL); + HRESULT GetExtendedControl(LPDISPATCH*); + HRESULT TransformCoords(POINTL*, POINTF*, DWORD); + HRESULT TranslateAccelerator(LPMSG, DWORD); + HRESULT OnFocus(BOOL); + HRESULT ShowPropertyFrame(); +} + +interface ISimpleFrameSite : public IUnknown { + HRESULT PreMessageFilter(HWND, UINT, WPARAM, LPARAM, LRESULT*, PDWORD); + HRESULT PostMessageFilter(HWND, UINT, WPARAM, LPARAM, LRESULT*, DWORD); +} + +interface IErrorLog : public IUnknown { + HRESULT AddError(LPCOLESTR, LPEXCEPINFO); +} +alias IErrorLog LPERRORLOG; + +interface IPropertyBag : public IUnknown { + HRESULT Read(LPCOLESTR, LPVARIANT, LPERRORLOG); + HRESULT Write(LPCOLESTR, LPVARIANT); +} +alias IPropertyBag LPPROPERTYBAG; + +interface IPropertyBag2 : public IUnknown { + HRESULT Read(ULONG, PROPBAG2*, LPERRORLOG, VARIANT*, HRESULT*); + HRESULT Write(ULONG, PROPBAG2*, VARIANT*); + HRESULT CountProperties(ULONG*); + HRESULT GetPropertyInfo(ULONG, ULONG, PROPBAG2*, ULONG*); + HRESULT LoadObject(LPCOLESTR, DWORD, IUnknown*, LPERRORLOG); +} +alias IPropertyBag2 LPPROPERTYBAG2; + +interface IPersistPropertyBag : public IPersist { + HRESULT InitNew(); + HRESULT Load(LPPROPERTYBAG, LPERRORLOG); + HRESULT Save(LPPROPERTYBAG, BOOL, BOOL); +} + +interface IPersistPropertyBag2 : public IPersist { + HRESULT InitNew(); + HRESULT Load(LPPROPERTYBAG2, LPERRORLOG); + HRESULT Save(LPPROPERTYBAG2, BOOL, BOOL); + HRESULT IsDirty(); +} + +interface IPersistStreamInit : public IPersist { + HRESULT IsDirty(); + HRESULT Load(LPSTREAM); + HRESULT Save(LPSTREAM, BOOL); + HRESULT GetSizeMax(PULARGE_INTEGER); + HRESULT InitNew(); +} + +interface IPersistMemory : public IPersist { + HRESULT IsDirty(); + HRESULT Load(PVOID, ULONG); + HRESULT Save(PVOID, BOOL, ULONG); + HRESULT GetSizeMax(PULONG); + HRESULT InitNew(); +} + +interface IPropertyNotifySink : public IUnknown { + HRESULT OnChanged(DISPID); + HRESULT OnRequestEdit(DISPID); +} + +interface IProvideClassInfo : public IUnknown { + HRESULT GetClassInfo(LPTYPEINFO*); +} + +interface IProvideClassInfo2 : public IProvideClassInfo { + HRESULT GetGUID(DWORD, GUID*); +} + +interface IConnectionPointContainer : public IUnknown { + HRESULT EnumConnectionPoints(LPENUMCONNECTIONPOINTS*); + HRESULT FindConnectionPoint(REFIID, LPCONNECTIONPOINT*); +} + +interface IEnumConnectionPoints : public IUnknown { + HRESULT Next(ULONG, LPCONNECTIONPOINT*, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(LPENUMCONNECTIONPOINTS*); +} +alias IEnumConnectionPoints LPENUMCONNECTIONPOINTS; + +interface IConnectionPoint : public IUnknown { + HRESULT GetConnectionInterface(IID*); + HRESULT GetConnectionPointContainer(IConnectionPointContainer**); + HRESULT Advise(LPUNKNOWN, PDWORD); + HRESULT Unadvise(DWORD); + HRESULT EnumConnections(LPENUMCONNECTIONS*); +} +alias IConnectionPoint LPCONNECTIONPOINT; + +interface IEnumConnections : public IUnknown { + HRESULT Next(ULONG, LPCONNECTDATA, PULONG); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(LPENUMCONNECTIONS*); +} +alias IEnumConnections LPENUMCONNECTIONS; + +interface IClassFactory2 : public IClassFactory { + HRESULT GetLicInfo(LPLICINFO); + HRESULT RequestLicKey(DWORD, BSTR*); + HRESULT CreateInstanceLic(LPUNKNOWN, LPUNKNOWN, REFIID, BSTR, PVOID*); +} + +interface ISpecifyPropertyPages : public IUnknown { + HRESULT GetPages(CAUUID*); +} + +interface IPerPropertyBrowsing : public IUnknown { + HRESULT GetDisplayString(DISPID, BSTR*); + HRESULT MapPropertyToPage(DISPID, LPCLSID); + HRESULT GetPredefinedStrings(DISPID, CALPOLESTR*, CADWORD*); + HRESULT GetPredefinedValue(DISPID, DWORD, VARIANT*); +} + +interface IPropertyPageSite : public IUnknown { + HRESULT OnStatusChange(DWORD); + HRESULT GetLocaleID(LCID*); + HRESULT GetPageContainer(LPUNKNOWN*); + HRESULT TranslateAccelerator(LPMSG); +} +alias IPropertyPageSite LPPROPERTYPAGESITE; + +interface IPropertyPage : public IUnknown { + HRESULT SetPageSite(LPPROPERTYPAGESITE); + HRESULT Activate(HWND, LPCRECT, BOOL); + HRESULT Deactivate(); + HRESULT GetPageInfo(LPPROPPAGEINFO); + HRESULT SetObjects(ULONG, LPUNKNOWN*); + HRESULT Show(UINT); + HRESULT Move(LPCRECT); + HRESULT IsPageDirty(); + HRESULT Apply(); + HRESULT Help(LPCOLESTR); + HRESULT TranslateAccelerator(LPMSG); +} + + +interface IPropertyPage2 : public IPropertyPage +{ HRESULT EditProperty(DISPID); +} + +interface IFont : public IUnknown { + HRESULT get_Name(BSTR*); + HRESULT put_Name(BSTR); + HRESULT get_Size(CY*); + HRESULT put_Size(CY); + HRESULT get_Bold(BOOL*); + HRESULT put_Bold(BOOL); + HRESULT get_Italic(BOOL*); + HRESULT put_Italic(BOOL); + HRESULT get_Underline(BOOL*); + HRESULT put_Underline(BOOL); + HRESULT get_Strikethrough(BOOL*); + HRESULT put_Strikethrough(BOOL); + HRESULT get_Weight(short*); + HRESULT put_Weight(short); + HRESULT get_Charset(short*); + HRESULT put_Charset(short); + HRESULT get_hFont(HFONT*); + HRESULT Clone(IFont**); + HRESULT IsEqual(IFont*); + HRESULT SetRatio(int, int); + HRESULT QueryTextMetrics(LPTEXTMETRICOLE); + HRESULT AddRefHfont(HFONT); + HRESULT ReleaseHfont(HFONT); + HRESULT SetHdc(HDC); +} +alias IFont LPFONT; + +interface IFontDisp : public IDispatch { +} +alias IFontDisp LPFONTDISP; + +interface IPicture : public IUnknown { + HRESULT get_Handle(OLE_HANDLE*); + HRESULT get_hPal(OLE_HANDLE*); + HRESULT get_Type(short*); + HRESULT get_Width(OLE_XSIZE_HIMETRIC*); + HRESULT get_Height(OLE_YSIZE_HIMETRIC*); + HRESULT Render(HDC, int, int, int, int, OLE_XPOS_HIMETRIC, + OLE_YPOS_HIMETRIC, OLE_XSIZE_HIMETRIC, OLE_YSIZE_HIMETRIC, LPCRECT); + HRESULT set_hPal(OLE_HANDLE); + HRESULT get_CurDC(HDC*); + HRESULT SelectPicture(HDC, HDC*, OLE_HANDLE*); + HRESULT get_KeepOriginalFormat(BOOL*); + HRESULT put_KeepOriginalFormat(BOOL); + HRESULT PictureChanged(); + HRESULT SaveAsFile(LPSTREAM, BOOL, LONG*); + HRESULT get_Attributes(PDWORD); +} + +interface IPictureDisp : public IDispatch { +} + +interface IOleInPlaceSiteEx : public IOleInPlaceSite { + HRESULT OnInPlaceActivateEx(BOOL*, DWORD); + HRESULT OnInPlaceDeactivateEx(BOOL); + HRESULT RequestUIActivate(); +} + +interface IObjectWithSite : public IUnknown { + HRESULT SetSite(IUnknown*); + HRESULT GetSite(REFIID, void**); +} + +interface IOleInPlaceSiteWindowless : public IOleInPlaceSiteEx { + HRESULT CanWindowlessActivate(); + HRESULT GetCapture(); + HRESULT SetCapture(BOOL); + HRESULT GetFocus(); + HRESULT SetFocus(BOOL); + HRESULT GetDC(LPCRECT, DWORD, HDC*); + HRESULT ReleaseDC(HDC); + HRESULT InvalidateRect(LPCRECT, BOOL); + HRESULT InvalidateRgn(HRGN, BOOL); + HRESULT ScrollRect(INT, INT, LPCRECT, LPCRECT); + HRESULT AdjustRect(LPCRECT); + HRESULT OnDefWindowMessage(UINT, WPARAM, LPARAM, LRESULT*); +} + +interface IAdviseSinkEx : public IUnknown { + void OnDataChange(FORMATETC*, STGMEDIUM*); + void OnViewChange(DWORD, LONG); + void OnRename(IMoniker*); + void OnSave(); + void OnClose(); + HRESULT OnViewStatusChange(DWORD); +} + +interface IPointerInactive : public IUnknown { + HRESULT GetActivationPolicy(DWORD*); + HRESULT OnInactiveMouseMove(LPCRECT, LONG, LONG, DWORD); + HRESULT OnInactiveSetCursor(LPCRECT, LONG, LONG, DWORD, BOOL); +} + +interface IOleUndoUnit : public IUnknown { + HRESULT Do(LPOLEUNDOMANAGER); + HRESULT GetDescription(BSTR*); + HRESULT GetUnitType(CLSID*, LONG*); + HRESULT OnNextAdd(); +} + +interface IOleParentUndoUnit : public IOleUndoUnit { + HRESULT Open(IOleParentUndoUnit*); + HRESULT Close(IOleParentUndoUnit*, BOOL); + HRESULT Add(IOleUndoUnit*); + HRESULT FindUnit(IOleUndoUnit*); + HRESULT GetParentState(DWORD*); +} + +interface IEnumOleUndoUnits : public IUnknown { + HRESULT Next(ULONG, IOleUndoUnit**, ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumOleUndoUnits**); +} + +interface IOleUndoManager : public IUnknown { + HRESULT Open(IOleParentUndoUnit*); + HRESULT Close(IOleParentUndoUnit*, BOOL); + HRESULT Add(IOleUndoUnit*); + HRESULT GetOpenParentState(DWORD*); + HRESULT DiscardFrom(IOleUndoUnit*); + HRESULT UndoTo(IOleUndoUnit*); + HRESULT RedoTo(IOleUndoUnit*); + HRESULT EnumUndoable(IEnumOleUndoUnits**); + HRESULT EnumRedoable(IEnumOleUndoUnits**); + HRESULT GetLastUndoDescription(BSTR*); + HRESULT GetLastRedoDescription(BSTR*); + HRESULT Enable(BOOL); +} +alias IOleUndoManager LPOLEUNDOMANAGER; + +interface IQuickActivate : public IUnknown { + HRESULT QuickActivate(QACONTAINER*, QACONTROL*); + HRESULT SetContentExtent(LPSIZEL); + HRESULT GetContentExtent(LPSIZEL); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/odbcinst.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/odbcinst.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,166 @@ +/***********************************************************************\ +* odbcinst.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.odbcinst; + +import win32.sql; +private import win32.windef; + +/* FIXME: The Unicode/Ansi functions situation is a mess. How do the xxxA + * versions of these functions fit into the scheme? + */ + +// SQLConfigDataSource() +enum : WORD { + ODBC_ADD_DSN = 1, + ODBC_CONFIG_DSN = 2, + ODBC_REMOVE_DSN = 3, + ODBC_ADD_SYS_DSN = 4, + ODBC_CONFIG_SYS_DSN = 5, + ODBC_REMOVE_SYS_DSN = 6, + ODBC_REMOVE_DEFAULT_DSN = 7 +} + +// ODBC 3.0+ +enum : WORD { + ODBC_INSTALL_INQUIRY = 1, + ODBC_INSTALL_COMPLETE = 2 +} + +// ODBC 2.5+ +enum : WORD { + ODBC_INSTALL_DRIVER = 1, + ODBC_REMOVE_DRIVER = 2, + ODBC_CONFIG_DRIVER = 3, + ODBC_CONFIG_DRIVER_MAX = 100 +} + +// ODBC 3.0+ +// SQLSetConfigMode() +enum : UWORD { + ODBC_BOTH_DSN = 0, + ODBC_USER_DSN = 1, + ODBC_SYSTEM_DSN = 2 +} + +enum : DWORD { + ODBC_ERROR_GENERAL_ERR = 1, + ODBC_ERROR_INVALID_BUFF_LEN = 2, + ODBC_ERROR_INVALID_HWND = 3, + ODBC_ERROR_INVALID_STR = 4, + ODBC_ERROR_INVALID_REQUEST_TYPE = 5, + ODBC_ERROR_COMPONENT_NOT_FOUND = 6, + ODBC_ERROR_INVALID_NAME = 7, + ODBC_ERROR_INVALID_KEYWORD_VALUE = 8, + ODBC_ERROR_INVALID_DSN = 9, + ODBC_ERROR_INVALID_INF = 10, + ODBC_ERROR_REQUEST_FAILED = 11, + ODBC_ERROR_INVALID_PATH = 12, + ODBC_ERROR_LOAD_LIB_FAILED = 13, + ODBC_ERROR_INVALID_PARAM_SEQUENCE = 14, + ODBC_ERROR_INVALID_LOG_FILE = 15, + ODBC_ERROR_USER_CANCELED = 16, + ODBC_ERROR_USAGE_UPDATE_FAILED = 17, + ODBC_ERROR_CREATE_DSN_FAILED = 18, + ODBC_ERROR_WRITING_SYSINFO_FAILED = 19, + ODBC_ERROR_REMOVE_DSN_FAILED = 20, + ODBC_ERROR_OUT_OF_MEM = 21, + ODBC_ERROR_OUTPUT_STRING_TRUNCATED = 22 +} + +extern (Windows): +BOOL ConfigDSN(HWND,WORD,LPCSTR,LPCSTR); +BOOL ConfigDSNW(HWND,WORD,LPCWSTR,LPCWSTR); +BOOL ConfigTranslator(HWND,DWORD*); +BOOL SQLConfigDataSource(HWND,WORD,LPCSTR,LPCSTR); +BOOL SQLConfigDataSourceW(HWND,WORD,LPCWSTR,LPCWSTR); +BOOL SQLCreateDataSource(HWND,LPCSTR); +BOOL SQLCreateDataSourceW(HWND,LPCWSTR); +BOOL SQLGetAvailableDrivers(LPCSTR,LPSTR,WORD,WORD*); +BOOL SQLGetAvailableDriversW(LPCWSTR,LPWSTR,WORD,WORD*); +BOOL SQLGetInstalledDrivers(LPSTR,WORD,WORD*); +BOOL SQLGetInstalledDriversW(LPWSTR,WORD,WORD*); +int SQLGetPrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPSTR,int,LPCSTR); +int SQLGetPrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,int,LPCWSTR); +BOOL SQLGetTranslator(HWND,LPSTR,WORD,WORD*,LPSTR,WORD,WORD*,DWORD*); +BOOL SQLGetTranslatorW(HWND,LPWSTR,WORD,WORD*,LPWSTR,WORD,WORD*,DWORD*); +BOOL SQLInstallDriver(LPCSTR,LPCSTR,LPSTR,WORD,WORD*); +BOOL SQLInstallDriverManager(LPSTR,WORD,WORD*); +BOOL SQLInstallDriverManagerW(LPWSTR,WORD,WORD*); +BOOL SQLInstallDriverW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*); +BOOL SQLInstallODBC(HWND,LPCSTR,LPCSTR,LPCSTR); +BOOL SQLInstallODBCW(HWND,LPCWSTR,LPCWSTR,LPCWSTR); +BOOL SQLManageDataSources(HWND); +BOOL SQLRemoveDefaultDataSource(); +BOOL SQLRemoveDSNFromIni(LPCSTR); +BOOL SQLRemoveDSNFromIniW(LPCWSTR); +BOOL SQLValidDSN(LPCSTR); +BOOL SQLValidDSNW(LPCWSTR); +BOOL SQLWriteDSNToIni(LPCSTR,LPCSTR); +BOOL SQLWriteDSNToIniW(LPCWSTR,LPCWSTR); +BOOL SQLWritePrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPCSTR); +BOOL SQLWritePrivateProfileStringW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR); + +static if (ODBCVER >= 0x0250) { + BOOL ConfigDriver(HWND,WORD,LPCSTR,LPCSTR,LPSTR,WORD,WORD*); + BOOL ConfigDriverW(HWND,WORD,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*); + BOOL SQLConfigDriver(HWND,WORD,LPCSTR,LPCSTR,LPSTR,WORD,WORD*); + BOOL SQLConfigDriverW(HWND,WORD,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*); + deprecated { + BOOL SQLInstallTranslator(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD); + BOOL SQLInstallTranslatorW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD); + } + BOOL SQLRemoveDriver(LPCSTR,BOOL,LPDWORD); + BOOL SQLRemoveDriverManager(LPDWORD); + BOOL SQLRemoveDriverW(LPCWSTR,BOOL,LPDWORD); + BOOL SQLRemoveTranslator(LPCSTR,LPDWORD); + BOOL SQLRemoveTranslatorW(LPCWSTR,LPDWORD); +} +static if (ODBCVER >= 0x0300) { + BOOL SQLGetConfigMode(UWORD*); + BOOL SQLInstallDriverEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD); + BOOL SQLInstallDriverExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD); + SQLRETURN SQLInstallerError(WORD,DWORD*,LPSTR,WORD,WORD*); + SQLRETURN SQLInstallerErrorW(WORD,DWORD*,LPWSTR,WORD,WORD*); + BOOL SQLInstallTranslatorEx(LPCSTR,LPCSTR,LPSTR,WORD,WORD*,WORD,LPDWORD); + BOOL SQLInstallTranslatorExW(LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*,WORD,LPDWORD); + SQLRETURN SQLPostInstallerError(DWORD,LPCSTR); + SQLRETURN SQLPostInstallerErrorW(DWORD,LPCWSTR); + BOOL SQLReadFileDSN(LPCSTR,LPCSTR,LPCSTR,LPSTR,WORD,WORD*); + BOOL SQLReadFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPWSTR,WORD,WORD*); + BOOL SQLSetConfigMode(UWORD); + BOOL SQLWriteFileDSN(LPCSTR,LPCSTR,LPCSTR,LPCSTR); + BOOL SQLWriteFileDSNW(LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR); +} + +version (Unicode) { + alias SQLConfigDataSourceW SQLConfigDataSource; + alias SQLConfigDriverW SQLConfigDriver; + alias SQLCreateDataSourceW SQLCreateDataSource; + alias SQLGetAvailableDriversW SQLGetAvailableDrivers; + alias SQLGetInstalledDriversW SQLGetInstalledDrivers; + alias SQLGetPrivateProfileStringW SQLGetPrivateProfileString; + alias SQLGetTranslatorW SQLGetTranslator; + alias SQLInstallDriverW SQLInstallDriver; + alias SQLInstallDriverExW SQLInstallDriverEx; + alias SQLInstallDriverManagerW SQLInstallDriverManager; + alias SQLInstallerErrorW SQLInstallerError; + alias SQLInstallODBCW SQLInstallODBC; + deprecated alias SQLInstallTranslatorW SQLInstallTranslator; + alias SQLInstallTranslatorExW SQLInstallTranslatorEx; + alias SQLPostInstallerErrorW SQLPostInstallerError; + alias SQLReadFileDSNW SQLReadFileDSN; + alias SQLRemoveDriverW SQLRemoveDriver; + alias SQLRemoveDSNFromIniW SQLRemoveDSNFromIni; + alias SQLRemoveTranslatorW SQLRemoveTranslator; + alias SQLValidDSNW SQLValidDSN; + alias SQLWriteDSNToIniW SQLWriteDSNToIni; + alias SQLWriteFileDSNW SQLWriteFileDSN; + alias SQLWritePrivateProfileStringW SQLWritePrivateProfileString; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ole.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ole.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,362 @@ +/***********************************************************************\ +* ole.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ole; + +private import win32.windef, win32.wingdi, win32.uuid; + +alias LPCSTR OLE_LPCSTR; + +/+#define LRESULT LONG +#define HGLOBAL HANDLE+/ + +enum { + OT_LINK = 1, + OT_EMBEDDED, + OT_STATIC +} + +const OLEVERB_PRIMARY = 0; +const OF_SET = 1; +const OF_GET = 2; +const OF_HANDLER = 4; + +struct OLETARGETDEVICE { + USHORT otdDeviceNameOffset; + USHORT otdDriverNameOffset; + USHORT otdPortNameOffset; + USHORT otdExtDevmodeOffset; + USHORT otdExtDevmodeSize; + USHORT otdEnvironmentOffset; + USHORT otdEnvironmentSize; + BYTE _otdData; + BYTE* otdData() { return &_otdData; } +} +alias OLETARGETDEVICE* LPOLETARGETDEVICE; + +enum OLESTATUS { + OLE_OK, + OLE_WAIT_FOR_RELEASE, + OLE_BUSY, + OLE_ERROR_PROTECT_ONLY, + OLE_ERROR_MEMORY, + OLE_ERROR_STREAM, + OLE_ERROR_STATIC, + OLE_ERROR_BLANK, + OLE_ERROR_DRAW, + OLE_ERROR_METAFILE, + OLE_ERROR_ABORT, + OLE_ERROR_CLIPBOARD, + OLE_ERROR_FORMAT, + OLE_ERROR_OBJECT, + OLE_ERROR_OPTION, + OLE_ERROR_PROTOCOL, + OLE_ERROR_ADDRESS, + OLE_ERROR_NOT_EQUAL, + OLE_ERROR_HANDLE, + OLE_ERROR_GENERIC, + OLE_ERROR_CLASS, + OLE_ERROR_SYNTAX, + OLE_ERROR_DATATYPE, + OLE_ERROR_PALETTE, + OLE_ERROR_NOT_LINK, + OLE_ERROR_NOT_EMPTY, + OLE_ERROR_SIZE, + OLE_ERROR_DRIVE, + OLE_ERROR_NETWORK, + OLE_ERROR_NAME, + OLE_ERROR_TEMPLATE, + OLE_ERROR_NEW, + OLE_ERROR_EDIT, + OLE_ERROR_OPEN, + OLE_ERROR_NOT_OPEN, + OLE_ERROR_LAUNCH, + OLE_ERROR_COMM, + OLE_ERROR_TERMINATE, + OLE_ERROR_COMMAND, + OLE_ERROR_SHOW, + OLE_ERROR_DOVERB, + OLE_ERROR_ADVISE_NATIVE, + OLE_ERROR_ADVISE_PICT, + OLE_ERROR_ADVISE_RENAME, + OLE_ERROR_POKE_NATIVE, + OLE_ERROR_REQUEST_NATIVE, + OLE_ERROR_REQUEST_PICT, + OLE_ERROR_SERVER_BLOCKED, + OLE_ERROR_REGISTRATION, + OLE_ERROR_ALREADY_REGISTERED, + OLE_ERROR_TASK, + OLE_ERROR_OUTOFDATE, + OLE_ERROR_CANT_UPDATE_CLIENT, + OLE_ERROR_UPDATE, + OLE_ERROR_SETDATA_FORMAT, + OLE_ERROR_STATIC_FROM_OTHER_OS, + OLE_ERROR_FILE_VER, + OLE_WARN_DELETE_DATA = 1000 +} + +enum OLE_NOTIFICATION { + OLE_CHANGED, + OLE_SAVED, + OLE_CLOSED, + OLE_RENAMED, + OLE_QUERY_PAINT, + OLE_RELEASE, + OLE_QUERY_RETRY +} + +enum OLE_RELEASE_METHOD { + OLE_NONE, + OLE_DELETE, + OLE_LNKPASTE, + OLE_EMBPASTE, + OLE_SHOW, + OLE_RUN, + OLE_ACTIVATE, + OLE_UPDATE, + OLE_CLOSE, + OLE_RECONNECT, + OLE_SETUPDATEOPTIONS, + OLE_SERVERUNLAUNCH, + OLE_LOADFROMSTREAM, + OLE_SETDATA, + OLE_REQUESTDATA, + OLE_OTHER, + OLE_CREATE, + OLE_CREATEFROMTEMPLATE, + OLE_CREATELINKFROMFILE, + OLE_COPYFROMLNK, + OLE_CREATEFROMFILE, + OLE_CREATEINVISIBLE +} + +enum OLEOPT_RENDER { + olerender_none, + olerender_draw, + olerender_format +} + +alias WORD OLECLIPFORMAT; + +enum OLEOPT_UPDATE { + oleupdate_always, + oleupdate_onsave, + oleupdate_oncall, +// #ifdef OLE_INTERNAL + oleupdate_onclose +// #endif +} + +alias HANDLE HOBJECT; +alias LONG LHSERVER, LHCLIENTDOC, LHSERVERDOC; + +struct OLEOBJECTVTBL { + extern (Windows) { + void* function(LPOLEOBJECT, OLE_LPCSTR) QueryProtocol; + OLESTATUS function(LPOLEOBJECT) Release; + OLESTATUS function(LPOLEOBJECT, BOOL) Show; + OLESTATUS function(LPOLEOBJECT, UINT, BOOL, BOOL) DoVerb; + OLESTATUS function(LPOLEOBJECT, OLECLIPFORMAT, HANDLE*) GetData; + OLESTATUS function(LPOLEOBJECT, OLECLIPFORMAT, HANDLE) SetData; + OLESTATUS function(LPOLEOBJECT, HGLOBAL) SetTargetDevice; + OLESTATUS function(LPOLEOBJECT, RECT*) SetBounds; + OLECLIPFORMAT function(LPOLEOBJECT, OLECLIPFORMAT) EnumFormats; + OLESTATUS function(LPOLEOBJECT, LOGPALETTE*) SetColorScheme; +//#ifndef SERVERONLY + OLESTATUS function(LPOLEOBJECT) Delete; + OLESTATUS function(LPOLEOBJECT, OLE_LPCSTR, OLE_LPCSTR) SetHostNames; + OLESTATUS function(LPOLEOBJECT, LPOLESTREAM) SaveToStream; + OLESTATUS function(LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, + LPOLEOBJECT*) Clone; + OLESTATUS function(LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, OLE_LPCSTR, + LPOLEOBJECT*) CopyFromLink; + OLESTATUS function(LPOLEOBJECT, LPOLEOBJECT) Equal; + OLESTATUS function(LPOLEOBJECT) CopyToClipboard; + OLESTATUS function(LPOLEOBJECT, HDC, RECT*, RECT*, HDC) Draw; + OLESTATUS function(LPOLEOBJECT, UINT, BOOL, BOOL, HWND, RECT*) + Activate; + OLESTATUS function(LPOLEOBJECT, HGLOBAL, UINT) Execute; + OLESTATUS function(LPOLEOBJECT) Close; + OLESTATUS function(LPOLEOBJECT) Update; + OLESTATUS function(LPOLEOBJECT) Reconnect; + OLESTATUS function(LPOLEOBJECT, OLE_LPCSTR, LPOLECLIENT, LHCLIENTDOC, + OLE_LPCSTR, LPOLEOBJECT*) ObjectConvert; + OLESTATUS function(LPOLEOBJECT, OLEOPT_UPDATE*) GetLinkUpdateOptions; + OLESTATUS function(LPOLEOBJECT, OLEOPT_UPDATE) SetLinkUpdateOptions; + OLESTATUS function(LPOLEOBJECT, OLE_LPCSTR) Rename; + OLESTATUS function(LPOLEOBJECT, LPSTR, UINT*) QueryName; + OLESTATUS function(LPOLEOBJECT, LONG*) QueryType; + OLESTATUS function(LPOLEOBJECT, RECT*) QueryBounds; + OLESTATUS function(LPOLEOBJECT, DWORD*) QuerySize; + OLESTATUS function(LPOLEOBJECT) QueryOpen; + OLESTATUS function(LPOLEOBJECT) QueryOutOfDate; + OLESTATUS function(LPOLEOBJECT) QueryReleaseStatus; + OLESTATUS function(LPOLEOBJECT) QueryReleaseError; + OLE_RELEASE_METHOD function(LPOLEOBJECT) QueryReleaseMethod; + OLESTATUS function(LPOLEOBJECT, OLECLIPFORMAT) RequestData; + OLESTATUS function(LPOLEOBJECT, UINT, LONG*) ObjectLong; + OLESTATUS function(LPOLEOBJECT, HANDLE, LPOLECLIENT, BOOL) ChangeData; +//#endif + } +} +alias OLEOBJECTVTBL* LPOLEOBJECTVTBL; + +//#ifndef OLE_INTERNAL +struct OLEOBJECT { + LPOLEOBJECTVTBL lpvtbl; +} +alias OLEOBJECT* LPOLEOBJECT; +//#endif + +struct OLECLIENTVTBL { + int function(LPOLECLIENT, OLE_NOTIFICATION, LPOLEOBJECT) CallBack; +} +alias OLECLIENTVTBL* LPOLECLIENTVTBL; + +struct OLECLIENT { + LPOLECLIENTVTBL lpvtbl; +} +alias OLECLIENT* LPOLECLIENT; + +struct OLESTREAMVTBL { + DWORD function(LPOLESTREAM, void*, DWORD) Get; + DWORD function(LPOLESTREAM, void*, DWORD) Put; +} +alias OLESTREAMVTBL* LPOLESTREAMVTBL; + +struct OLESTREAM { + LPOLESTREAMVTBL lpstbl; +} +alias OLESTREAM* LPOLESTREAM; + +enum OLE_SERVER_USE { + OLE_SERVER_MULTI, + OLE_SERVER_SINGLE +} + +struct OLESERVERVTBL { + OLESTATUS function(LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, LPOLESERVERDOC*) + Open; + OLESTATUS function(LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, + LPOLESERVERDOC*) Create; + OLESTATUS function(LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, + OLE_LPCSTR, LPOLESERVERDOC*) CreateFromTemplate; + OLESTATUS function(LPOLESERVER, LHSERVERDOC, OLE_LPCSTR, OLE_LPCSTR, + LPOLESERVERDOC*) Edit; + OLESTATUS function(LPOLESERVER) Exit; + OLESTATUS function(LPOLESERVER) Release; + OLESTATUS function(LPOLESERVER, HGLOBAL) Execute; +} +typedef OLESERVERVTBL* LPOLESERVERVTBL; + +struct OLESERVER { + LPOLESERVERVTBL lpvtbl; +} +alias OLESERVER* LPOLESERVER; + +struct OLESERVERDOCVTBL { + OLESTATUS function(LPOLESERVERDOC) Save; + OLESTATUS function(LPOLESERVERDOC) Close; + OLESTATUS function(LPOLESERVERDOC, OLE_LPCSTR, OLE_LPCSTR) SetHostNames; + OLESTATUS function(LPOLESERVERDOC, RECT*) SetDocDimensions; + OLESTATUS function(LPOLESERVERDOC, OLE_LPCSTR, LPOLEOBJECT*, LPOLECLIENT) + GetObject; + OLESTATUS function(LPOLESERVERDOC) Release; + OLESTATUS function(LPOLESERVERDOC, LOGPALETTE*) SetColorScheme; + OLESTATUS function(LPOLESERVERDOC, HGLOBAL) Execute; +} +alias OLESERVERDOCVTBL* LPOLESERVERDOCVTBL; + +struct OLESERVERDOC { + LPOLESERVERDOCVTBL lpvtbl; +} +alias OLESERVERDOC* LPOLESERVERDOC; + +extern (Windows) { + OLESTATUS OleDelete(LPOLEOBJECT); + OLESTATUS OleRelease(LPOLEOBJECT); + OLESTATUS OleSaveToStream(LPOLEOBJECT, LPOLESTREAM); + OLESTATUS OleEqual(LPOLEOBJECT, LPOLEOBJECT); + OLESTATUS OleCopyToClipboard(LPOLEOBJECT); + OLESTATUS OleSetHostNames(LPOLEOBJECT, LPCSTR, LPCSTR); + OLESTATUS OleSetTargetDevice(LPOLEOBJECT, HGLOBAL); + OLESTATUS OleSetBounds(LPOLEOBJECT, LPCRECT); + OLESTATUS OleSetColorScheme(LPOLEOBJECT, LOGPALETTE*); + OLESTATUS OleQueryBounds(LPOLEOBJECT, RECT*); + OLESTATUS OleQuerySize(LPOLEOBJECT, DWORD*); + OLESTATUS OleDraw(LPOLEOBJECT, HDC, LPCRECT, LPCRECT, HDC); + OLESTATUS OleQueryOpen(LPOLEOBJECT); + OLESTATUS OleActivate(LPOLEOBJECT, UINT, BOOL, BOOL, HWND, LPCRECT); + OLESTATUS OleExecute(LPOLEOBJECT, HGLOBAL, UINT); + OLESTATUS OleClose(LPOLEOBJECT); + OLESTATUS OleUpdate(LPOLEOBJECT); + OLESTATUS OleReconnect(LPOLEOBJECT); + OLESTATUS OleGetLinkUpdateOptions(LPOLEOBJECT, OLEOPT_UPDATE*); + OLESTATUS OleSetLinkUpdateOptions(LPOLEOBJECT, OLEOPT_UPDATE); + void* OleQueryProtocol(LPOLEOBJECT, LPCSTR); + OLESTATUS OleQueryReleaseStatus(LPOLEOBJECT); + OLESTATUS OleQueryReleaseError(LPOLEOBJECT); + OLE_RELEASE_METHOD OleQueryReleaseMethod(LPOLEOBJECT); + OLESTATUS OleQueryType(LPOLEOBJECT, LONG*); + DWORD OleQueryClientVersion(); + DWORD OleQueryServerVersion(); + OLECLIPFORMAT OleEnumFormats(LPOLEOBJECT, OLECLIPFORMAT); + OLESTATUS OleGetData(LPOLEOBJECT, OLECLIPFORMAT, HANDLE*); + OLESTATUS OleSetData(LPOLEOBJECT, OLECLIPFORMAT, HANDLE); + OLESTATUS OleQueryOutOfDate(LPOLEOBJECT); + OLESTATUS OleRequestData(LPOLEOBJECT, OLECLIPFORMAT); + OLESTATUS OleQueryLinkFromClip(LPCSTR, OLEOPT_RENDER, OLECLIPFORMAT); + OLESTATUS OleQueryCreateFromClip(LPCSTR, OLEOPT_RENDER, OLECLIPFORMAT); + OLESTATUS OleCreateFromClip(LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, + LPOLEOBJECT*, OLEOPT_RENDER, OLECLIPFORMAT); + OLESTATUS OleCreateLinkFromClip(LPCSTR, LPOLECLIENT, LHCLIENTDOC, LPCSTR, + LPOLEOBJECT*, OLEOPT_RENDER, OLECLIPFORMAT); + OLESTATUS OleCreateFromFile(LPCSTR, LPOLECLIENT, LPCSTR, LPCSTR, + LHCLIENTDOC, LPCSTR, LPOLEOBJECT*, OLEOPT_RENDER, OLECLIPFORMAT); + OLESTATUS OleCreateLinkFromFile(LPCSTR, LPOLECLIENT, LPCSTR, LPCSTR, + LPCSTR, LHCLIENTDOC, LPCSTR, LPOLEOBJECT*, OLEOPT_RENDER, OLECLIPFORMAT); + OLESTATUS OleLoadFromStream(LPOLESTREAM, LPCSTR, LPOLECLIENT, LHCLIENTDOC, + LPCSTR, LPOLEOBJECT*); + OLESTATUS OleCreate(LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, LPCSTR, + LPOLEOBJECT*, OLEOPT_RENDER, OLECLIPFORMAT); + OLESTATUS OleCreateInvisible(LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, + LPCSTR, LPOLEOBJECT*, OLEOPT_RENDER, OLECLIPFORMAT, BOOL); + OLESTATUS OleCreateFromTemplate(LPCSTR, LPOLECLIENT, LPCSTR, LHCLIENTDOC, + LPCSTR, LPOLEOBJECT*, OLEOPT_RENDER, OLECLIPFORMAT); + OLESTATUS OleClone(LPOLEOBJECT, LPOLECLIENT, LHCLIENTDOC, LPCSTR, + LPOLEOBJECT*); + OLESTATUS OleCopyFromLink(LPOLEOBJECT, LPCSTR, LPOLECLIENT, LHCLIENTDOC, + LPCSTR, LPOLEOBJECT*); + OLESTATUS OleObjectConvert(LPOLEOBJECT, LPCSTR, LPOLECLIENT, LHCLIENTDOC, + LPCSTR, LPOLEOBJECT*); + OLESTATUS OleRename(LPOLEOBJECT, LPCSTR); + OLESTATUS OleQueryName(LPOLEOBJECT, LPSTR, UINT*); + OLESTATUS OleRevokeObject(LPOLECLIENT); + BOOL OleIsDcMeta(HDC); + OLESTATUS OleRegisterClientDoc(LPCSTR, LPCSTR, LONG, LHCLIENTDOC*); + OLESTATUS OleRevokeClientDoc(LHCLIENTDOC); + OLESTATUS OleRenameClientDoc(LHCLIENTDOC, LPCSTR); + OLESTATUS OleRevertClientDoc(LHCLIENTDOC); + OLESTATUS OleSavedClientDoc(LHCLIENTDOC); + OLESTATUS OleEnumObjects(LHCLIENTDOC, LPOLEOBJECT*); + OLESTATUS OleRegisterServer(LPCSTR, LPOLESERVER, LHSERVER*, HINSTANCE, + OLE_SERVER_USE); + OLESTATUS OleRevokeServer(LHSERVER); + OLESTATUS OleBlockServer(LHSERVER); + OLESTATUS OleUnblockServer(LHSERVER, BOOL*); + OLESTATUS OleLockServer(LPOLEOBJECT, LHSERVER*); + OLESTATUS OleUnlockServer(LHSERVER); + OLESTATUS OleRegisterServerDoc(LHSERVER, LPCSTR, LPOLESERVERDOC, + LHSERVERDOC*); + OLESTATUS OleRevokeServerDoc(LHSERVERDOC); + OLESTATUS OleRenameServerDoc(LHSERVERDOC, LPCSTR); + OLESTATUS OleRevertServerDoc(LHSERVERDOC); + OLESTATUS OleSavedServerDoc(LHSERVERDOC); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ole2.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ole2.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,118 @@ +/***********************************************************************\ +* ole2.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ole2; +pragma(lib, "ole32.lib"); + +public import win32.basetyps, win32.objbase, win32.oleauto, win32.olectlid, + win32.oleidl, win32.unknwn, win32.winerror, win32.uuid; +private import win32.objfwd, win32.objidl, win32.windef, win32.wtypes; +private import win32.winuser; // for LPMSG + +const E_DRAW = VIEW_E_DRAW; + +const DATA_E_FORMATETC = DV_E_FORMATETC; + +enum { + OLEIVERB_PRIMARY = 0, + OLEIVERB_SHOW = -1, + OLEIVERB_OPEN = -2, + OLEIVERB_HIDE = -3, + OLEIVERB_UIACTIVATE = -4, + OLEIVERB_INPLACEACTIVATE = -5, + OLEIVERB_DISCARDUNDOSTATE = -6 +} + +const EMBDHLP_INPROC_HANDLER = 0x0000L; +const EMBDHLP_INPROC_SERVER = 0x0001L; +const EMBDHLP_CREATENOW = 0x00000000L; +const EMBDHLP_DELAYCREATE = 0x00010000L; + +align(8): +struct OLESTREAM { + LPOLESTREAMVTBL lpstbl; +} +alias OLESTREAM* LPOLESTREAM; + +extern (Windows) { + struct OLESTREAMVTBL { + DWORD function (LPOLESTREAM, void*, DWORD) Get; + DWORD function (LPOLESTREAM, void*, DWORD) Put; + } +} +alias OLESTREAMVTBL* LPOLESTREAMVTBL; + +extern (Windows) { + HRESULT CreateDataAdviseHolder(LPDATAADVISEHOLDER*); + DWORD OleBuildVersion(); + HRESULT ReadClassStg(LPSTORAGE, CLSID*); + HRESULT WriteClassStg(LPSTORAGE, REFCLSID); + HRESULT ReadClassStm(LPSTREAM, CLSID*); + HRESULT WriteClassStm(LPSTREAM, REFCLSID); + HRESULT WriteFmtUserTypeStg(LPSTORAGE, CLIPFORMAT, LPOLESTR); + HRESULT ReadFmtUserTypeStg(LPSTORAGE, CLIPFORMAT*, LPOLESTR*); + HRESULT OleInitialize(PVOID); + void OleUninitialize(); + HRESULT OleQueryLinkFromData(LPDATAOBJECT); + HRESULT OleQueryCreateFromData(LPDATAOBJECT); + HRESULT OleCreate(REFCLSID, REFIID, DWORD, LPFORMATETC, LPOLECLIENTSITE, LPSTORAGE, PVOID*); + HRESULT OleCreateFromData(LPDATAOBJECT, REFIID, DWORD, LPFORMATETC, LPOLECLIENTSITE, LPSTORAGE, PVOID*); + HRESULT OleCreateLinkFromData(LPDATAOBJECT, REFIID, DWORD, LPFORMATETC, LPOLECLIENTSITE, LPSTORAGE, PVOID*); + HRESULT OleCreateStaticFromData(LPDATAOBJECT, REFIID, DWORD, LPFORMATETC, LPOLECLIENTSITE, LPSTORAGE, PVOID*); + HRESULT OleCreateLink(LPMONIKER, REFIID, DWORD, LPFORMATETC, LPOLECLIENTSITE, LPSTORAGE, PVOID*); + HRESULT OleCreateLinkToFile(LPCOLESTR, REFIID, DWORD, LPFORMATETC, LPOLECLIENTSITE, LPSTORAGE, PVOID*); + HRESULT OleCreateFromFile(REFCLSID, LPCOLESTR, REFIID, DWORD, LPFORMATETC, LPOLECLIENTSITE, LPSTORAGE, PVOID*); + HRESULT OleLoad(LPSTORAGE, REFIID, LPOLECLIENTSITE, PVOID*); + HRESULT OleSave(LPPERSISTSTORAGE, LPSTORAGE, BOOL); + HRESULT OleLoadFromStream(LPSTREAM, REFIID, PVOID*); + HRESULT OleSaveToStream(LPPERSISTSTREAM, LPSTREAM); + HRESULT OleSetContainedObject(LPUNKNOWN, BOOL); + HRESULT OleNoteObjectVisible(LPUNKNOWN, BOOL); + HRESULT RegisterDragDrop(HWND, LPDROPTARGET); + HRESULT RevokeDragDrop(HWND); + HRESULT DoDragDrop(LPDATAOBJECT, LPDROPSOURCE, DWORD, PDWORD); + HRESULT OleSetClipboard(LPDATAOBJECT); + HRESULT OleGetClipboard(LPDATAOBJECT*); + HRESULT OleFlushClipboard(); + HRESULT OleIsCurrentClipboard(LPDATAOBJECT); + HOLEMENU OleCreateMenuDescriptor(HMENU, LPOLEMENUGROUPWIDTHS); + HRESULT OleSetMenuDescriptor(HOLEMENU, HWND, HWND, LPOLEINPLACEFRAME, LPOLEINPLACEACTIVEOBJECT); + HRESULT OleDestroyMenuDescriptor(HOLEMENU); + HRESULT OleTranslateAccelerator(LPOLEINPLACEFRAME, LPOLEINPLACEFRAMEINFO, LPMSG); + HANDLE OleDuplicateData(HANDLE, CLIPFORMAT, UINT); + HRESULT OleDraw(LPUNKNOWN, DWORD, HDC, LPCRECT); + HRESULT OleRun(LPUNKNOWN); + BOOL OleIsRunning(LPOLEOBJECT); + HRESULT OleLockRunning(LPUNKNOWN, BOOL, BOOL); + void ReleaseStgMedium(LPSTGMEDIUM); + HRESULT CreateOleAdviseHolder(LPOLEADVISEHOLDER*); + HRESULT OleCreateDefaultHandler(REFCLSID, LPUNKNOWN, REFIID, PVOID*); + HRESULT OleCreateEmbeddingHelper(REFCLSID, LPUNKNOWN, DWORD, LPCLASSFACTORY, REFIID, PVOID*); + BOOL IsAccelerator(HACCEL, int, LPMSG, WORD*); + HGLOBAL OleGetIconOfFile(LPOLESTR, BOOL); + HGLOBAL OleGetIconOfClass(REFCLSID, LPOLESTR, BOOL); + HGLOBAL OleMetafilePictFromIconAndLabel(HICON, LPOLESTR, LPOLESTR, UINT); + HRESULT OleRegGetUserType(REFCLSID, DWORD, LPOLESTR*); + HRESULT OleRegGetMiscStatus(REFCLSID, DWORD, DWORD*); + HRESULT OleRegEnumFormatEtc (REFCLSID, DWORD, LPENUMFORMATETC*); + HRESULT OleRegEnumVerbs (REFCLSID, LPENUMOLEVERB*); + HRESULT OleConvertOLESTREAMToIStorage(LPOLESTREAM, LPSTORAGE, DVTARGETDEVICE*); + HRESULT OleConvertIStorageToOLESTREAM(LPSTORAGE, LPOLESTREAM); + HRESULT GetHGlobalFromILockBytes(LPLOCKBYTES, HGLOBAL*); + HRESULT CreateILockBytesOnHGlobal(HGLOBAL, BOOL, LPLOCKBYTES*); + HRESULT GetHGlobalFromStream(LPSTREAM, HGLOBAL*); + HRESULT CreateStreamOnHGlobal(HGLOBAL, BOOL, LPSTREAM*); + HRESULT OleDoAutoConvert(LPSTORAGE, LPCLSID); + HRESULT OleGetAutoConvert(REFCLSID, LPCLSID); + HRESULT OleSetAutoConvert(REFCLSID, REFCLSID); + HRESULT GetConvertStg(LPSTORAGE); + HRESULT SetConvertStg(LPSTORAGE, BOOL); + HRESULT OleConvertIStorageToOLESTREAMEx(LPSTORAGE, CLIPFORMAT, LONG, LONG, DWORD, LPSTGMEDIUM, LPOLESTREAM); + HRESULT OleConvertOLESTREAMToIStorageEx(LPOLESTREAM, LPSTORAGE, CLIPFORMAT*, LONG*, LONG*, DWORD*, LPSTGMEDIUM); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ole2ver.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ole2ver.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,14 @@ +/***********************************************************************\ +* ole2ver.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ole2ver; + +// These are apparently not documented on the MSDN site +const rmm = 23; +const rup = 639; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/oleacc.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/oleacc.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,214 @@ +/***********************************************************************\ +* oleacc.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.oleacc; +pragma(lib, "oleacc.lib"); + +private import win32.basetyps, win32.oaidl, win32.unknwn, win32.wtypes, + win32.windef; + +enum { + DISPID_ACC_PARENT = -5000, + DISPID_ACC_CHILDCOUNT = -5001, + DISPID_ACC_CHILD = -5002, + DISPID_ACC_NAME = -5003, + DISPID_ACC_VALUE = -5004, + DISPID_ACC_DESCRIPTION = -5005, + DISPID_ACC_ROLE = -5006, + DISPID_ACC_STATE = -5007, + DISPID_ACC_HELP = -5008, + DISPID_ACC_HELPTOPIC = -5009, + DISPID_ACC_KEYBOARDSHORTCUT = -5010, + DISPID_ACC_FOCUS = -5011, + DISPID_ACC_SELECTION = -5012, + DISPID_ACC_DEFAULTACTION = -5013, + DISPID_ACC_SELECT = -5014, + DISPID_ACC_LOCATION = -5015, + DISPID_ACC_NAVIGATE = -5016, + DISPID_ACC_HITTEST = -5017, + DISPID_ACC_DODEFAULTACTION = -5018 +} + +enum { + NAVDIR_UP = 1, + NAVDIR_DOWN, + NAVDIR_LEFT, + NAVDIR_RIGHT, + NAVDIR_NEXT, + NAVDIR_PREVIOUS, + NAVDIR_FIRSTCHILD, + NAVDIR_LASTCHILD // = 8 +} + +enum { + ROLE_SYSTEM_TITLEBAR = 1, + ROLE_SYSTEM_MENUBAR, + ROLE_SYSTEM_SCROLLBAR, + ROLE_SYSTEM_GRIP, + ROLE_SYSTEM_SOUND, + ROLE_SYSTEM_CURSOR, + ROLE_SYSTEM_CARET, + ROLE_SYSTEM_ALERT, + ROLE_SYSTEM_WINDOW, + ROLE_SYSTEM_CLIENT, + ROLE_SYSTEM_MENUPOPUP, + ROLE_SYSTEM_MENUITEM, + ROLE_SYSTEM_TOOLTIP, + ROLE_SYSTEM_APPLICATION, + ROLE_SYSTEM_DOCUMENT, + ROLE_SYSTEM_PANE, + ROLE_SYSTEM_CHART, + ROLE_SYSTEM_DIALOG, + ROLE_SYSTEM_BORDER, + ROLE_SYSTEM_GROUPING, + ROLE_SYSTEM_SEPARATOR, + ROLE_SYSTEM_TOOLBAR, + ROLE_SYSTEM_STATUSBAR, + ROLE_SYSTEM_TABLE, + ROLE_SYSTEM_COLUMNHEADER, + ROLE_SYSTEM_ROWHEADER, + ROLE_SYSTEM_COLUMN, + ROLE_SYSTEM_ROW, + ROLE_SYSTEM_CELL, + ROLE_SYSTEM_LINK, + ROLE_SYSTEM_HELPBALLOON, + ROLE_SYSTEM_CHARACTER, + ROLE_SYSTEM_LIST, + ROLE_SYSTEM_LISTITEM, + ROLE_SYSTEM_OUTLINE, + ROLE_SYSTEM_OUTLINEITEM, + ROLE_SYSTEM_PAGETAB, + ROLE_SYSTEM_PROPERTYPAGE, + ROLE_SYSTEM_INDICATOR, + ROLE_SYSTEM_GRAPHIC, + ROLE_SYSTEM_STATICTEXT, + ROLE_SYSTEM_TEXT, + ROLE_SYSTEM_PUSHBUTTON, + ROLE_SYSTEM_CHECKBUTTON, + ROLE_SYSTEM_RADIOBUTTON, + ROLE_SYSTEM_COMBOBOX, + ROLE_SYSTEM_DROPLIST, + ROLE_SYSTEM_PROGRESSBAR, + ROLE_SYSTEM_DIAL, + ROLE_SYSTEM_HOTKEYFIELD, + ROLE_SYSTEM_SLIDER, + ROLE_SYSTEM_SPINBUTTON, + ROLE_SYSTEM_DIAGRAM, + ROLE_SYSTEM_ANIMATION, + ROLE_SYSTEM_EQUATION, + ROLE_SYSTEM_BUTTONDROPDOWN, + ROLE_SYSTEM_BUTTONMENU, + ROLE_SYSTEM_BUTTONDROPDOWNGRID, + ROLE_SYSTEM_WHITESPACE, + ROLE_SYSTEM_PAGETABLIST, + ROLE_SYSTEM_CLOCK // = 61 +} + +enum { + STATE_SYSTEM_UNAVAILABLE = 0x00000001, + STATE_SYSTEM_SELECTED = 0x00000002, + STATE_SYSTEM_FOCUSED = 0x00000004, + STATE_SYSTEM_PRESSED = 0x00000008, + STATE_SYSTEM_CHECKED = 0x00000010, + STATE_SYSTEM_MIXED = 0x00000020, + STATE_SYSTEM_READONLY = 0x00000040, + STATE_SYSTEM_HOTTRACKED = 0x00000080, + STATE_SYSTEM_DEFAULT = 0x00000100, + STATE_SYSTEM_EXPANDED = 0x00000200, + STATE_SYSTEM_COLLAPSED = 0x00000400, + STATE_SYSTEM_BUSY = 0x00000800, + STATE_SYSTEM_FLOATING = 0x00001000, + STATE_SYSTEM_MARQUEED = 0x00002000, + STATE_SYSTEM_ANIMATED = 0x00004000, + STATE_SYSTEM_INVISIBLE = 0x00008000, + STATE_SYSTEM_OFFSCREEN = 0x00010000, + STATE_SYSTEM_SIZEABLE = 0x00020000, + STATE_SYSTEM_MOVEABLE = 0x00040000, + STATE_SYSTEM_SELFVOICING = 0x00080000, + STATE_SYSTEM_FOCUSABLE = 0x00100000, + STATE_SYSTEM_SELECTABLE = 0x00200000, + STATE_SYSTEM_LINKED = 0x00400000, + STATE_SYSTEM_TRAVERSED = 0x00800000, + STATE_SYSTEM_MULTISELECTABLE = 0x01000000, + STATE_SYSTEM_EXTSELECTABLE = 0x02000000, + STATE_SYSTEM_ALERT_LOW = 0x04000000, + STATE_SYSTEM_ALERT_MEDIUM = 0x08000000, + STATE_SYSTEM_ALERT_HIGH = 0x10000000, + STATE_SYSTEM_VALID = 0x1fffffff +} + +enum SELFLAG +{ + SELFLAG_NONE = 0, + SELFLAG_TAKEFOCUS = 1, + SELFLAG_TAKESELECTION = 2, + SELFLAG_EXTENDSELECTION = 4, + SELFLAG_ADDSELECTION = 8, + SELFLAG_REMOVESELECTION = 16 +} + +const SELFLAG_VALID = 0x0000001F; + + +interface IAccessible : public IDispatch { + HRESULT get_accParent(IDispatch**); + HRESULT get_accChildCount(int*); + HRESULT get_accChild(VARIANT, IDispatch **); + HRESULT get_accName(VARIANT, BSTR*); + HRESULT get_accValue(VARIANT, BSTR*); + HRESULT get_accDescription(VARIANT, BSTR*); + HRESULT get_accRole(VARIANT, VARIANT*); + HRESULT get_accState(VARIANT, VARIANT*); + HRESULT get_accHelp(VARIANT, BSTR*); + HRESULT get_accHelpTopic(BSTR*, VARIANT, int*); + HRESULT get_accKeyboardShortcut(VARIANT, BSTR*); + HRESULT get_accFocus(VARIANT*); + HRESULT get_accSelection(VARIANT*); + HRESULT get_accDefaultAction(VARIANT, BSTR*); + + HRESULT accSelect(int, VARIANT); + HRESULT accLocation(int*, int*, int*, int*, VARIANT); + HRESULT accNavigate(int, VARIANT, VARIANT*); + HRESULT accHitTest(int, int, VARIANT*); + HRESULT accDoDefaultAction(VARIANT); + + HRESULT put_accName(VARIANT, BSTR); + HRESULT put_accValue(VARIANT, BSTR); +} + +alias IAccessible* LPACCESSIBLE; + +extern (Windows) { + HRESULT AccessibleChildren(IAccessible*, LONG, LONG, VARIANT*, LONG*); + HRESULT AccessibleObjectFromEvent(HWND, DWORD, DWORD, IAccessible*, VARIANT*); + HRESULT AccessibleObjectFromPoint(POINT, IAccessible**, VARIANT*); + HRESULT AccessibleObjectFromWindow(HWND, DWORD, REFIID, void**); + HRESULT CreateStdAccessibleObject(HWND, LONG, REFIID, void**); + HRESULT CreateStdAccessibleProxyA(HWND, LPCSTR, LONG, REFIID, void**); + HRESULT CreateStdAccessibleProxyW(HWND, LPCWSTR, LONG, REFIID, void**); + + void GetOleaccVersionInfo(DWORD*, DWORD*); + UINT GetRoleTextA(DWORD, LPSTR, UINT); + UINT GetRoleTextW(DWORD, LPWSTR, UINT); + UINT GetStateTextA(DWORD, LPSTR, UINT); + UINT GetStateTextW(DWORD, LPWSTR, UINT); + LRESULT LresultFromObject(REFIID, WPARAM, LPUNKNOWN); + HRESULT ObjectFromLresult(LRESULT, REFIID, WPARAM, void**); + HRESULT WindowFromAccessibleObject(IAccessible*, HWND*); +} + +version(Unicode) { + alias CreateStdAccessibleProxyW CreateStdAccessibleProxy; + alias GetRoleTextW GetRoleText; + alias GetStateTextW GetStateText; +} else { + alias CreateStdAccessibleProxyA CreateStdAccessibleProxy; + alias GetRoleTextA GetRoleText; + alias GetStateTextA GetStateText; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/oleauto.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/oleauto.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,684 @@ +/***********************************************************************\ +* oleauto.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.oleauto; +pragma(lib, "oleaut32.lib"); + +import win32.oaidl; +private import win32.basetyps, win32.unknwn, win32.windef, win32.wtypes; +private import win32.winbase; // for SYSTEMTIME + +align(8): +const STDOLE_MAJORVERNUM = 1; +const STDOLE_MINORVERNUM = 0; +const STDOLE_LCID = 0; + +const VARIANT_NOVALUEPROP = 0x01; +const VARIANT_ALPHABOOL = 0x02; +const VARIANT_NOUSEOVERRIDE = 0x04; +const VARIANT_LOCALBOOL = 0x08; + +const VAR_TIMEVALUEONLY = 0x0001; +const VAR_DATEVALUEONLY = 0x0002; +const VAR_VALIDDATE = 0x0004; +const VAR_CALENDAR_HIJRI = 0x0008; +const VAR_LOCALBOOL = 0x0010; +const VAR_FORMAT_NOSUBSTITUTE = 0x0020; +const VAR_FOURDIGITYEARS = 0x0040; +const VAR_CALENDAR_THAI = 0x0080; +const VAR_CALENDAR_GREGORIAN = 0x0100; + +const MEMBERID_NIL = DISPID_UNKNOWN; +const ID_DEFAULTINST = -2; +const DISPATCH_METHOD = 1; +const DISPATCH_PROPERTYGET = 2; +const DISPATCH_PROPERTYPUT = 4; +const DISPATCH_PROPERTYPUTREF = 8; + +//ULONG LHashValOfName(LCID l, OLECHAR* n) { return LHashValOfNameSys(SYSKIND.SYS_WIN32, l, n); } + +// DAC: These aren't in the 2003 SDK. +//MACRO #define WHashValOfLHashVal(h) ((unsigned short)(0x0000ffff&(h))) +//MACRO #define IsHashValCompatible(h1, h2) ((BOOL)((0x00ff0000&(h1))==(0x00ff0000&(h2)))) + +enum { + ACTIVEOBJECT_STRONG = 0, + ACTIVEOBJECT_WEAK = 1 +} + +// DAC: These seem to be irrelevant for D. +//#define V_UNION(X, Y) ((X)->Y) +//#define V_VT(X) ((X)->vt) +//#define V_BOOL(X) V_UNION(X, boolVal) +//#define V_ISBYREF(X) (V_VT(X)&VT_BYREF) +//#define V_ISARRAY(X) (V_VT(X)&VT_ARRAY) +//#define V_ISVECTOR(X) (V_VT(X)&VT_VECTOR) +//#define V_NONE(X) V_I2(X) +//#define V_UI1(X) V_UNION(X, bVal) +//#define V_UI1REF(X) V_UNION(X, pbVal) +//#define V_I2(X) V_UNION(X, iVal) +//#define V_UI2(X) V_UNION(X, uiVal) +//#define V_I2REF(X) V_UNION(X, piVal) +//#define V_I4(X) V_UNION(X, lVal) +//#define V_UI4(X) V_UNION(X, ulVal) +//#define V_I4REF(X) V_UNION(X, plVal) +//#define V_UI4REF(X) V_UNION(X, pulVal) +//#define V_I8(X) V_UNION(X, llVal) +//#define V_UI8(X) V_UNION(X, ullVal) +//#define V_I8REF(X) V_UNION(X, pllVal) +//#define V_UI8REF(X) V_UNION(X, pullVal) +//#define V_R4(X) V_UNION(X, fltVal) +//#define V_R4REF(X) V_UNION(X, pfltVal) +//#define V_R8(X) V_UNION(X, dblVal) +//#define V_R8REF(X) V_UNION(X, pdblVal) +//#define V_CY(X) V_UNION(X, cyVal) +//#define V_CYREF(X) V_UNION(X, pcyVal) +//#define V_DATE(X) V_UNION(X, date) +//#define V_DATEREF(X) V_UNION(X, pdate) +//#define V_BSTR(X) V_UNION(X, bstrVal) +//#define V_BSTRREF(X) V_UNION(X, pbstrVal) +//#define V_DISPATCH(X) V_UNION(X, pdispVal) +//#define V_DISPATCHREF(X) V_UNION(X, ppdispVal) +//#define V_ERROR(X) V_UNION(X, scode) +//#define V_ERRORREF(X) V_UNION(X, pscode) +//#define V_BOOLREF(X) V_UNION(X, pboolVal) +//#define V_UNKNOWN(X) V_UNION(X, punkVal) +//#define V_UNKNOWNREF(X) V_UNION(X, ppunkVal) +//#define V_VARIANTREF(X) V_UNION(X, pvarVal) +//#define V_LPSTR(X) V_UNION(X, pszVal) +//#define V_LPSTRREF(X) V_UNION(X, ppszVal) +//#define V_LPWSTR(X) V_UNION(X, pwszVal) +//#define V_LPWSTRREF(X) V_UNION(X, ppwszVal) +//#define V_FILETIME(X) V_UNION(X, filetime) +//#define V_FILETIMEREF(X) V_UNION(X, pfiletime) +//#define V_BLOB(X) V_UNION(X, blob) +//#define V_UUID(X) V_UNION(X, puuid) +//#define V_CLSID(X) V_UNION(X, puuid) +//#define V_ARRAY(X) V_UNION(X, parray) +//#define V_ARRAYREF(X) V_UNION(X, pparray) +//#define V_BYREF(X) V_UNION(X, byref) +//#define V_DECIMAL(X) ((X)->decVal) +//#define V_DECIMALREF(X) V_UNION(X, pdecVal) +//#define V_I1(X) V_UNION(X, cVal) + +//#ifdef _WIN64 +//#define V_INT_PTR(X) V_I8(X) +//#define V_UINT_PTR(X) V_UI8(X) +//#define V_INT_PTRREF(X) V_I8REF(X) +//#define V_UINT_PTRREF(X) V_UI8REF(X) +//#else +//#define V_INT_PTR(X) V_I4(X) +//#define V_UINT_PTR(X) V_UI4(X) +//#define V_INT_PTRREF(X) V_I4REF(X) +//#define V_UINT_PTRREF(X) V_UI4REF(X) +//#endif + +enum { + VARCMP_LT = 0, + VARCMP_EQ, + VARCMP_GT, + VARCMP_NULL // = 3 +} + +const LOCALE_USE_NLS = 0x10000000; + +const VARIANT_NOUSEROVERRIDE = 0x04; +const VARIANT_CALENDAR_HIJRI = 0x08; +const VARIANT_CALENDAR_THAI = 0x20; +const VARIANT_CALENDAR_GREGORIAN = 0x40; +const VARIANT_USE_NLS = 0x80; + +const NUMPRS_LEADING_WHITE = 0x00001; +const NUMPRS_TRAILING_WHITE = 0x00002; +const NUMPRS_LEADING_PLUS = 0x00004; +const NUMPRS_TRAILING_PLUS = 0x00008; +const NUMPRS_LEADING_MINUS = 0x00010; +const NUMPRS_TRAILING_MINUS = 0x00020; +const NUMPRS_HEX_OCT = 0x00040; +const NUMPRS_PARENS = 0x00080; +const NUMPRS_DECIMAL = 0x00100; +const NUMPRS_THOUSANDS = 0x00200; +const NUMPRS_CURRENCY = 0x00400; +const NUMPRS_EXPONENT = 0x00800; +const NUMPRS_USE_ALL = 0x01000; +const NUMPRS_STD = 0x01FFF; +const NUMPRS_NEG = 0x10000; +const NUMPRS_INEXACT = 0x20000; + +const VTBIT_I1 = 1 << VARENUM.VT_I1; +const VTBIT_UI1 = 1 << VARENUM.VT_UI1; +const VTBIT_I2 = 1 << VARENUM.VT_I2; +const VTBIT_UI2 = 1 << VARENUM.VT_UI2; +const VTBIT_I4 = 1 << VARENUM.VT_I4; +const VTBIT_UI4 = 1 << VARENUM.VT_UI4; +const VTBIT_I8 = 1 << VARENUM.VT_I8; +const VTBIT_UI8 = 1 << VARENUM.VT_UI8; +const VTBIT_R4 = 1 << VARENUM.VT_R4; +const VTBIT_R8 = 1 << VARENUM.VT_R8; +const VTBIT_CY = 1 << VARENUM.VT_CY; +const VTBIT_DECIMAL = 1 << VARENUM.VT_DECIMAL; + + +enum REGKIND{ + REGKIND_DEFAULT, + REGKIND_REGISTER, + REGKIND_NONE +} + +struct PARAMDATA{ + OLECHAR* szName; + VARTYPE vt; +} +alias PARAMDATA* LPPARAMDATA; + +struct METHODDATA{ + OLECHAR* szName; + PARAMDATA* ppdata; + DISPID dispid; + UINT iMeth; + CALLCONV cc; + UINT cArgs; + WORD wFlags; + VARTYPE vtReturn; +} +alias METHODDATA* LPMETHODDATA; + +struct INTERFACEDATA{ + METHODDATA* pmethdata; + UINT cMembers; +} +alias INTERFACEDATA* LPINTERFACEDATA; + +struct UDATE { + SYSTEMTIME st; + USHORT wDayOfYear; +} + +struct NUMPARSE { + int cDig; + uint dwInFlags; + uint dwOutFlags; + int cchUsed; + int nBaseShift; + int nPwr10; +} + + +// DAC: In MinGW, these were declared but not defined in oaidl. +// The SDK docs suggest they belong in this file instead. + +deprecated { // not actually deprecated, but they aren't converted yet. + // (will need to reinstate CreateTypeLib as well) + interface ICreateTypeInfo {}; + interface ICreateTypeInfo2 {}; + interface ICreateTypeLib {}; + interface ICreateTypeLib2 {}; + + alias ICreateTypeInfo* LPCREATETYPEINFO; + alias ICreateTypeInfo2* LPCREATETYPEINFO2; + alias ICreateTypeLib* LPCREATETYPELIB; + alias ICreateTypeLib2* LPCREATETYPELIB2; +} + +extern (Windows) { + BSTR SysAllocString(OLECHAR*); + int SysReAllocString(BSTR*, OLECHAR*); + BSTR SysAllocStringLen(OLECHAR*, uint); + int SysReAllocStringLen(BSTR*, OLECHAR*, uint); + void SysFreeString(BSTR); + uint SysStringLen(BSTR); + uint SysStringByteLen(BSTR); + BSTR SysAllocStringByteLen(char*, uint); + int DosDateTimeToVariantTime(ushort, ushort, double*); + int VariantTimeToDosDateTime(double, ushort*, ushort*); + int VariantTimeToSystemTime(double, LPSYSTEMTIME); + int SystemTimeToVariantTime(LPSYSTEMTIME, double*); + HRESULT VarDateFromUdate(UDATE*, ULONG, DATE*); + HRESULT VarDateFromUdateEx(UDATE*, LCID, ULONG, DATE*); + HRESULT VarUdateFromDate(DATE, ULONG, UDATE*); + HRESULT SafeArrayAllocDescriptor(uint, SAFEARRAY**); + HRESULT SafeArrayAllocData(SAFEARRAY*); + SAFEARRAY* SafeArrayCreate(VARTYPE, uint, SAFEARRAYBOUND*); + HRESULT SafeArrayDestroyDescriptor(SAFEARRAY*); + HRESULT SafeArrayDestroyData(SAFEARRAY*); + HRESULT SafeArrayDestroy(SAFEARRAY*); + HRESULT SafeArrayRedim(SAFEARRAY*, SAFEARRAYBOUND*); + uint SafeArrayGetDim(SAFEARRAY*); + uint SafeArrayGetElemsize(SAFEARRAY*); + HRESULT SafeArrayGetUBound(SAFEARRAY*, uint, int*); + HRESULT SafeArrayGetLBound(SAFEARRAY*, uint, int*); + HRESULT SafeArrayLock(SAFEARRAY*); + HRESULT SafeArrayUnlock(SAFEARRAY*); + HRESULT SafeArrayAccessData(SAFEARRAY*, void**); + HRESULT SafeArrayUnaccessData(SAFEARRAY*); + HRESULT SafeArrayGetElement(SAFEARRAY*, int*, void*); + HRESULT SafeArrayPutElement(SAFEARRAY*, int*, void*); + HRESULT SafeArrayCopy(SAFEARRAY*, SAFEARRAY**); + HRESULT SafeArrayPtrOfIndex(SAFEARRAY*, int*, void**); + SAFEARRAY* SafeArrayCreateVector(VARTYPE, LONG, ULONG); + SAFEARRAY* SafeArrayCreateVectorEx(VARTYPE, LONG, ULONG, LPVOID); + HRESULT SafeArrayAllocDescriptorEx(VARTYPE, UINT, SAFEARRAY**); + HRESULT SafeArrayGetVartype(SAFEARRAY*, VARTYPE*); + HRESULT SafeArraySetRecordInfo(SAFEARRAY*, IRecordInfo*); + HRESULT SafeArrayGetRecordInfo(SAFEARRAY*, IRecordInfo**); + HRESULT SafeArraySetIID(SAFEARRAY*, REFGUID); + HRESULT SafeArrayGetIID(SAFEARRAY*, GUID*); + void VariantInit(VARIANTARG*); + HRESULT VariantClear(VARIANTARG*); + HRESULT VariantCopy(VARIANTARG*, VARIANTARG*); + HRESULT VariantCopyInd(VARIANT*, VARIANTARG*); + HRESULT VariantChangeType(VARIANTARG*, VARIANTARG*, ushort, VARTYPE); + HRESULT VariantChangeTypeEx(VARIANTARG*, VARIANTARG*, LCID, ushort, VARTYPE); + HRESULT VarUI1FromI2(short, ubyte*); + HRESULT VarUI1FromI4(int, ubyte*); + HRESULT VarUI1FromR4(float, ubyte*); + HRESULT VarUI1FromR8(double, ubyte*); + HRESULT VarUI1FromCy(CY, ubyte*); + HRESULT VarUI1FromDate(DATE, ubyte*); + HRESULT VarUI1FromStr(OLECHAR*, LCID, uint, ubyte*); + HRESULT VarUI1FromDisp(LPDISPATCH, LCID, ubyte*); + HRESULT VarUI1FromBool(VARIANT_BOOL, ubyte*); + HRESULT VarI2FromUI1(ubyte, short*); + HRESULT VarI2FromI4(int, short*); + HRESULT VarI2FromR4(float, short*); + HRESULT VarI2FromR8(double, short*); + HRESULT VarI2FromCy(CY cyIn, short*); + HRESULT VarI2FromDate(DATE, short*); + HRESULT VarI2FromStr(OLECHAR*, LCID, uint, short*); + HRESULT VarI2FromDisp(LPDISPATCH, LCID, short*); + HRESULT VarI2FromBool(VARIANT_BOOL, short*); + HRESULT VarI4FromUI1(ubyte, int*); + HRESULT VarI4FromI2(short, int*); + HRESULT VarI4FromR4(float, int*); + HRESULT VarI4FromR8(double, int*); + HRESULT VarI4FromCy(CY, int*); + HRESULT VarI4FromDate(DATE, int*); + HRESULT VarI4FromStr(OLECHAR*, LCID, uint, int*); + HRESULT VarI4FromDisp(LPDISPATCH, LCID, int*); + HRESULT VarI4FromBool(VARIANT_BOOL, int*); + HRESULT VarR4FromUI1(ubyte, float*); + HRESULT VarR4FromI2(short, float*); + HRESULT VarR4FromI4(int, float*); + HRESULT VarR4FromR8(double, float*); + HRESULT VarR4FromCy(CY, float*); + HRESULT VarR4FromDate(DATE, float*); + HRESULT VarR4FromStr(OLECHAR*, LCID, uint, float*); + HRESULT VarR4FromDisp(LPDISPATCH, LCID, float*); + HRESULT VarR4FromBool(VARIANT_BOOL, float*); + HRESULT VarR8FromUI1(ubyte, double*); + HRESULT VarR8FromI2(short, double*); + HRESULT VarR8FromI4(int, double*); + HRESULT VarR8FromR4(float, double*); + HRESULT VarR8FromCy(CY, double*); + HRESULT VarR8FromDate(DATE, double*); + HRESULT VarR8FromStr(OLECHAR*, LCID, uint, double*); + HRESULT VarR8FromDisp(LPDISPATCH, LCID, double*); + HRESULT VarR8FromBool(VARIANT_BOOL, double*); + HRESULT VarR8FromDec(DECIMAL*, double*); + HRESULT VarDateFromUI1(ubyte, DATE*); + HRESULT VarDateFromI2(short, DATE*); + HRESULT VarDateFromI4(int, DATE*); + HRESULT VarDateFromR4(float, DATE*); + HRESULT VarDateFromR8(double, DATE*); + HRESULT VarDateFromCy(CY, DATE*); + HRESULT VarDateFromStr(OLECHAR*, LCID, uint, DATE*); + HRESULT VarDateFromDisp(LPDISPATCH, LCID, DATE*); + HRESULT VarDateFromBool(VARIANT_BOOL, DATE*); + HRESULT VarCyFromUI1(ubyte, CY*); + HRESULT VarCyFromI2(short, CY*); + HRESULT VarCyFromI4(int, CY*); + HRESULT VarCyFromR4(float, CY*); + HRESULT VarCyFromR8(double, CY*); + HRESULT VarCyFromDate(DATE, CY*); + HRESULT VarCyFromStr(OLECHAR*, LCID, uint, CY*); + HRESULT VarCyFromDisp(LPDISPATCH, LCID, CY*); + HRESULT VarCyFromBool(VARIANT_BOOL, CY*); + HRESULT VarBstrFromUI1(ubyte, LCID, uint, BSTR*); + HRESULT VarBstrFromI2(short, LCID, uint, BSTR*); + HRESULT VarBstrFromI4(int, LCID, uint, BSTR*); + HRESULT VarBstrFromR4(float, LCID, uint, BSTR*); + HRESULT VarBstrFromR8(double, LCID, uint, BSTR*); + HRESULT VarBstrFromCy(CY, LCID, uint, BSTR*); + HRESULT VarBstrFromDate(DATE, LCID, uint, BSTR*); + HRESULT VarBstrFromDisp(LPDISPATCH, LCID, uint, BSTR*); + HRESULT VarBstrFromBool(VARIANT_BOOL, LCID, uint, BSTR*); + HRESULT VarBoolFromUI1(ubyte, VARIANT_BOOL*); + HRESULT VarBoolFromI2(short, VARIANT_BOOL*); + HRESULT VarBoolFromI4(int, VARIANT_BOOL*); + HRESULT VarBoolFromR4(float, VARIANT_BOOL*); + HRESULT VarBoolFromR8(double, VARIANT_BOOL*); + HRESULT VarBoolFromDate(DATE, VARIANT_BOOL*); + HRESULT VarBoolFromCy(CY, VARIANT_BOOL*); + HRESULT VarBoolFromStr(OLECHAR*, LCID, uint, VARIANT_BOOL*); + HRESULT VarBoolFromDisp(LPDISPATCH, LCID, VARIANT_BOOL*); + HRESULT VarDecFromR8(double, DECIMAL*); + ULONG LHashValOfNameSysA(SYSKIND, LCID, char*); + ULONG LHashValOfNameSys(SYSKIND, LCID, OLECHAR*); + HRESULT LoadTypeLib(OLECHAR*, LPTYPELIB*); + HRESULT LoadTypeLibEx(LPCOLESTR, REGKIND, LPTYPELIB*); + HRESULT LoadRegTypeLib(REFGUID, WORD, WORD, LCID, LPTYPELIB*); + HRESULT QueryPathOfRegTypeLib(REFGUID, ushort, ushort, LCID, LPBSTR); + HRESULT RegisterTypeLib(LPTYPELIB, OLECHAR*, OLECHAR*); + HRESULT UnRegisterTypeLib(REFGUID, WORD, WORD, LCID, SYSKIND); + // not actually deprecated, but depends on unconverted ICreateTypeLib + deprecated HRESULT CreateTypeLib(SYSKIND, OLECHAR*, LPCREATETYPELIB*); + HRESULT DispGetParam(DISPPARAMS*, UINT, VARTYPE, VARIANT*, UINT*); + HRESULT DispGetIDsOfNames(LPTYPEINFO, OLECHAR**, UINT, DISPID*); + HRESULT DispInvoke(void*, LPTYPEINFO, DISPID, WORD, DISPPARAMS*, VARIANT*, EXCEPINFO*, UINT*); + HRESULT CreateDispTypeInfo(INTERFACEDATA*, LCID, LPTYPEINFO*); + HRESULT CreateStdDispatch(IUnknown*, void*, LPTYPEINFO, IUnknown**); + HRESULT RegisterActiveObject(IUnknown*, REFCLSID, DWORD, DWORD*); + HRESULT RevokeActiveObject(DWORD, void*); + HRESULT GetActiveObject(REFCLSID, void*, IUnknown**); + HRESULT SetErrorInfo(uint, LPERRORINFO); + HRESULT GetErrorInfo(uint, LPERRORINFO*); + HRESULT CreateErrorInfo(LPCREATEERRORINFO*); + uint OaBuildVersion(); + HRESULT VectorFromBstr (BSTR, SAFEARRAY**); + HRESULT BstrFromVector (SAFEARRAY*, BSTR*); + HRESULT VarParseNumFromStr(OLECHAR*, LCID, ULONG, NUMPARSE*, BYTE*); + HRESULT VarNumFromParseNum(NUMPARSE*, BYTE*, ULONG, VARIANT*); + + HRESULT VarAdd(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarSub(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarMul(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarDiv(LPVARIANT, LPVARIANT, LPVARIANT); + + HRESULT VarUI1FromI2(SHORT, BYTE*); + HRESULT VarUI1FromI4(LONG, BYTE*); + HRESULT VarUI1FromI8(LONG64, BYTE*); + HRESULT VarUI1FromR4(FLOAT, BYTE*); + HRESULT VarUI1FromR8(DOUBLE, BYTE*); + HRESULT VarUI1FromDate(DATE, BYTE*); + HRESULT VarUI1FromBool(VARIANT_BOOL, BYTE*); + HRESULT VarUI1FromI1(byte, BYTE*); + HRESULT VarUI1FromUI2(USHORT, BYTE*); + HRESULT VarUI1FromUI4(ULONG, BYTE*); + HRESULT VarUI1FromUI8(ULONG64, BYTE*); + HRESULT VarUI1FromStr(OLECHAR*, LCID, ULONG, BYTE*); + HRESULT VarUI1FromCy(CY, BYTE*); + HRESULT VarUI1FromDec(DECIMAL*, BYTE*); + HRESULT VarUI1FromDisp(IDispatch*, LCID, BYTE*); + + HRESULT VarI2FromUI1(BYTE, SHORT*); + HRESULT VarI2FromI4(LONG, SHORT*); + HRESULT VarI2FromI8(LONG64, SHORT*); + HRESULT VarI2FromR4(FLOAT, SHORT*); + HRESULT VarI2FromR8(DOUBLE, SHORT*); + HRESULT VarI2FromDate(DATE, SHORT*); + HRESULT VarI2FromBool(VARIANT_BOOL, SHORT*); + HRESULT VarI2FromI1(byte, SHORT*); + HRESULT VarI2FromUI2(USHORT, SHORT*); + HRESULT VarI2FromUI4(ULONG, SHORT*); + HRESULT VarI2FromUI8(ULONG64, SHORT*); + HRESULT VarI2FromStr(OLECHAR*, LCID, ULONG, SHORT*); + HRESULT VarI2FromCy(CY, SHORT*); + HRESULT VarI2FromDec(DECIMAL*, SHORT*); + HRESULT VarI2FromDisp(IDispatch*, LCID, SHORT*); + + HRESULT VarI4FromUI1(BYTE, LONG*); + HRESULT VarI4FromI2(SHORT, LONG*); + HRESULT VarI4FromI8(LONG64, LONG*); + HRESULT VarI4FromR4(FLOAT, LONG*); + HRESULT VarI4FromR8(DOUBLE, LONG*); + HRESULT VarI4FromDate(DATE, LONG*); + HRESULT VarI4FromBool(VARIANT_BOOL, LONG*); + HRESULT VarI4FromI1(byte, LONG*); + HRESULT VarI4FromUI2(USHORT, LONG*); + HRESULT VarI4FromUI4(ULONG, LONG*); + HRESULT VarI4FromUI8(ULONG64, LONG*); + HRESULT VarI4FromStr(OLECHAR*, LCID, ULONG, LONG*); + HRESULT VarI4FromCy(CY, LONG*); + HRESULT VarI4FromDec(DECIMAL*, LONG*); + HRESULT VarI4FromDisp(IDispatch*, LCID, LONG*); + + HRESULT VarI8FromUI1(BYTE, LONG64*); + HRESULT VarI8FromI2(SHORT, LONG64*); + HRESULT VarI8FromI4(LONG, LONG64*); + HRESULT VarI8FromR4(FLOAT, LONG64*); + HRESULT VarI8FromR8(DOUBLE, LONG64*); + HRESULT VarI8FromDate(DATE, LONG64*); + HRESULT VarI8FromStr(OLECHAR*, LCID, ULONG, LONG64*); + HRESULT VarI8FromBool(VARIANT_BOOL, LONG64*); + HRESULT VarI8FromI1(byte, LONG64*); + HRESULT VarI8FromUI2(USHORT, LONG64*); + HRESULT VarI8FromUI4(ULONG, LONG64*); + HRESULT VarI8FromUI8(ULONG64, LONG64*); + HRESULT VarI8FromDec(DECIMAL* pdecIn, LONG64*); + HRESULT VarI8FromInt(INT intIn, LONG64*); + HRESULT VarI8FromCy(CY, LONG64*); + HRESULT VarI8FromDisp(IDispatch*, LCID, LONG64*); + + HRESULT VarR4FromUI1(BYTE, FLOAT*); + HRESULT VarR4FromI2(SHORT, FLOAT*); + HRESULT VarR4FromI4(LONG, FLOAT*); + HRESULT VarR4FromI8(LONG64, FLOAT*); + HRESULT VarR4FromR8(DOUBLE, FLOAT*); + HRESULT VarR4FromDate(DATE, FLOAT*); + HRESULT VarR4FromBool(VARIANT_BOOL, FLOAT*); + HRESULT VarR4FromI1(byte, FLOAT*); + HRESULT VarR4FromUI2(USHORT, FLOAT*); + HRESULT VarR4FromUI4(ULONG, FLOAT*); + HRESULT VarR4FromUI8(ULONG64, FLOAT*); + HRESULT VarR4FromStr(OLECHAR*, LCID, ULONG, FLOAT*); + HRESULT VarR4FromCy(CY, FLOAT*); + HRESULT VarR4FromDec(DECIMAL*, FLOAT*); + HRESULT VarR4FromDisp(IDispatch*, LCID, FLOAT*); + + HRESULT VarR8FromUI1(BYTE, double*); + HRESULT VarR8FromI2(SHORT, double*); + HRESULT VarR8FromI4(LONG, double*); + HRESULT VarR8FromI8(LONG64, double*); + HRESULT VarR8FromR4(FLOAT, double*); + HRESULT VarR8FromDate(DATE, double*); + HRESULT VarR8FromBool(VARIANT_BOOL, double*); + HRESULT VarR8FromI1(byte, double*); + HRESULT VarR8FromUI2(USHORT, double*); + HRESULT VarR8FromUI4(ULONG, double*); + HRESULT VarR8FromUI8(ULONG64, double*); + HRESULT VarR8FromStr(OLECHAR*, LCID, ULONG, double*); + HRESULT VarR8FromCy(CY, double*); + HRESULT VarR8FromDec(DECIMAL*, double*); + HRESULT VarR8FromDisp(IDispatch*, LCID, double*); + + HRESULT VarDateFromUI1(BYTE, DATE*); + HRESULT VarDateFromI2(SHORT, DATE*); + HRESULT VarDateFromI4(LONG, DATE*); + HRESULT VarDateFromI8(LONG64, DATE*); + HRESULT VarDateFromR4(FLOAT, DATE*); + HRESULT VarDateFromR8(DOUBLE, DATE*); + HRESULT VarDateFromStr(OLECHAR*, LCID, ULONG, DATE*); + HRESULT VarDateFromI1(byte, DATE*); + HRESULT VarDateFromUI2(USHORT, DATE*); + HRESULT VarDateFromUI4(ULONG, DATE*); + HRESULT VarDateFromUI8(ULONG64, DATE*); + HRESULT VarDateFromBool(VARIANT_BOOL, DATE*); + HRESULT VarDateFromCy(CY, DATE*); + HRESULT VarDateFromDec(DECIMAL*, DATE*); + HRESULT VarDateFromDisp(IDispatch*, LCID, DATE*); + + HRESULT VarCyFromUI1(BYTE, CY*); + HRESULT VarCyFromI2(SHORT sIn, CY*); + HRESULT VarCyFromI4(LONG, CY*); + HRESULT VarCyFromI8(LONG64, CY*); + HRESULT VarCyFromR4(FLOAT, CY*); + HRESULT VarCyFromR8(DOUBLE, CY*); + HRESULT VarCyFromDate(DATE, CY*); + HRESULT VarCyFromStr(OLECHAR*, LCID, ULONG, CY*); + HRESULT VarCyFromBool(VARIANT_BOOL, CY*); + HRESULT VarCyFromI1(byte, CY*); + HRESULT VarCyFromUI2(USHORT, CY*); + HRESULT VarCyFromUI4(ULONG, CY*); + HRESULT VarCyFromUI8(ULONG64, CY*); + HRESULT VarCyFromDec(DECIMAL*, CY*); + HRESULT VarCyFromStr(OLECHAR*, LCID, ULONG, CY*); + HRESULT VarCyFromDisp(IDispatch*, LCID, CY*); + + HRESULT VarBstrFromUI1(BYTE, LCID, ULONG, BSTR*); + HRESULT VarBstrFromI2(SHORT, LCID, ULONG, BSTR*); + HRESULT VarBstrFromI4(LONG, LCID, ULONG, BSTR*); + HRESULT VarBstrFromI8(LONG64, LCID, ULONG, BSTR*); + HRESULT VarBstrFromR4(FLOAT, LCID, ULONG, BSTR*); + HRESULT VarBstrFromR8(DOUBLE, LCID, ULONG, BSTR*); + HRESULT VarBstrFromDate(DATE, LCID, ULONG, BSTR*); + HRESULT VarBstrFromBool(VARIANT_BOOL, LCID, ULONG, BSTR*); + HRESULT VarBstrFromI1(byte, LCID, ULONG, BSTR*); + HRESULT VarBstrFromUI2(USHORT, LCID, ULONG, BSTR*); + HRESULT VarBstrFromUI8(ULONG64, LCID, ULONG, BSTR*); + HRESULT VarBstrFromUI4(ULONG, LCID, ULONG, BSTR*); + HRESULT VarBstrFromCy(CY, LCID, ULONG, BSTR*); + HRESULT VarBstrFromDec(DECIMAL*, LCID, ULONG, BSTR*); + HRESULT VarBstrFromDisp(IDispatch*, LCID, ULONG, BSTR*); + + HRESULT VarBoolFromUI1(BYTE, VARIANT_BOOL*); + HRESULT VarBoolFromI2(SHORT, VARIANT_BOOL*); + HRESULT VarBoolFromI4(LONG, VARIANT_BOOL*); + HRESULT VarBoolFromI8(LONG64, VARIANT_BOOL*); + HRESULT VarBoolFromR4(FLOAT, VARIANT_BOOL*); + HRESULT VarBoolFromR8(DOUBLE, VARIANT_BOOL*); + HRESULT VarBoolFromDate(DATE, VARIANT_BOOL*); + HRESULT VarBoolFromStr(OLECHAR*, LCID, ULONG, VARIANT_BOOL*); + HRESULT VarBoolFromI1(byte, VARIANT_BOOL*); + HRESULT VarBoolFromUI2(USHORT, VARIANT_BOOL*); + HRESULT VarBoolFromUI4(ULONG, VARIANT_BOOL*); + HRESULT VarBoolFromUI8(ULONG64, VARIANT_BOOL*); + HRESULT VarBoolFromCy(CY, VARIANT_BOOL*); + HRESULT VarBoolFromDec(DECIMAL*, VARIANT_BOOL*); + HRESULT VarBoolFromDisp(IDispatch*, LCID, VARIANT_BOOL*); + + HRESULT VarI1FromUI1(BYTE, byte*); + HRESULT VarI1FromI2(SHORT, byte*); + HRESULT VarI1FromI4(LONG, byte*); + HRESULT VarI1FromI8(LONG64, byte*); + HRESULT VarI1FromR4(FLOAT, byte*); + HRESULT VarI1FromR8(DOUBLE, byte*); + HRESULT VarI1FromDate(DATE, byte*); + HRESULT VarI1FromStr(OLECHAR*, LCID, ULONG, byte*); + HRESULT VarI1FromBool(VARIANT_BOOL, byte*); + HRESULT VarI1FromUI2(USHORT, byte*); + HRESULT VarI1FromUI4(ULONG, byte*); + HRESULT VarI1FromUI8(ULONG64, byte*); + HRESULT VarI1FromCy(CY, byte*); + HRESULT VarI1FromDec(DECIMAL*, byte*); + HRESULT VarI1FromDisp(IDispatch*, LCID, byte*); + + HRESULT VarUI2FromUI1(BYTE, USHORT*); + HRESULT VarUI2FromI2(SHORT, USHORT*); + HRESULT VarUI2FromI4(LONG, USHORT*); + HRESULT VarUI2FromI8(LONG64, USHORT*); + HRESULT VarUI2FromR4(FLOAT, USHORT*); + HRESULT VarUI2FromR8(DOUBLE, USHORT*); + HRESULT VarUI2FromDate(DATE, USHORT*); + HRESULT VarUI2FromStr(OLECHAR*, LCID, ULONG, USHORT*); + HRESULT VarUI2FromBool(VARIANT_BOOL, USHORT*); + HRESULT VarUI2FromI1(byte, USHORT*); + HRESULT VarUI2FromUI4(ULONG, USHORT*); + HRESULT VarUI2FromUI8(ULONG64, USHORT*); + HRESULT VarUI2FromCy(CY, USHORT*); + HRESULT VarUI2FromDec(DECIMAL*, USHORT*); + HRESULT VarUI2FromDisp(IDispatch*, LCID, USHORT*); + + HRESULT VarUI4FromStr(OLECHAR*, LCID, ULONG, ULONG*); + HRESULT VarUI4FromUI1(BYTE, ULONG*); + HRESULT VarUI4FromI2(SHORT, ULONG*); + HRESULT VarUI4FromI4(LONG, ULONG*); + HRESULT VarUI4FromI8(LONG64, ULONG*); + HRESULT VarUI4FromR4(FLOAT, ULONG*); + HRESULT VarUI4FromR8(DOUBLE, ULONG*); + HRESULT VarUI4FromDate(DATE, ULONG*); + HRESULT VarUI4FromBool(VARIANT_BOOL, ULONG*); + HRESULT VarUI4FromI1(byte, ULONG*); + HRESULT VarUI4FromUI2(USHORT, ULONG*); + HRESULT VarUI4FromUI8(ULONG64, ULONG*); + HRESULT VarUI4FromCy(CY, ULONG*); + HRESULT VarUI4FromDec(DECIMAL*, ULONG*); + HRESULT VarUI4FromDisp(IDispatch*, LCID, ULONG*); + + HRESULT VarUI8FromUI1(BYTE, ULONG64*); + HRESULT VarUI8FromI2(SHORT, ULONG64*); + HRESULT VarUI8FromI4(LONG, ULONG64*); + HRESULT VarUI8FromI8(LONG64, ULONG64*); + HRESULT VarUI8FromR4(FLOAT, ULONG64*); + HRESULT VarUI8FromR8(DOUBLE, ULONG64*); + HRESULT VarUI8FromDate(DATE, ULONG64*); + HRESULT VarUI8FromStr(OLECHAR*, LCID, ULONG, ULONG64*); + HRESULT VarUI8FromBool(VARIANT_BOOL, ULONG64*); + HRESULT VarUI8FromI1(byte, ULONG64*); + HRESULT VarUI8FromUI2(USHORT, ULONG64*); + HRESULT VarUI8FromUI4(ULONG, ULONG64*); + HRESULT VarUI8FromDec(DECIMAL*, ULONG64*); + HRESULT VarUI8FromInt(INT, ULONG64*); + HRESULT VarUI8FromCy(CY, ULONG64*); + HRESULT VarUI8FromDisp(IDispatch*, LCID, ULONG64*); + + HRESULT VarDecFromUI1(BYTE, DECIMAL*); + HRESULT VarDecFromI2(SHORT, DECIMAL*); + HRESULT VarDecFromI4(LONG, DECIMAL*); + HRESULT VarDecFromI8(LONG64, DECIMAL*); + HRESULT VarDecFromR4(FLOAT, DECIMAL*); + HRESULT VarDecFromR8(DOUBLE, DECIMAL*); + HRESULT VarDecFromDate(DATE, DECIMAL*); + HRESULT VarDecFromStr(OLECHAR*, LCID, ULONG, DECIMAL*); + HRESULT VarDecFromBool(VARIANT_BOOL, DECIMAL*); + HRESULT VarDecFromI1(byte, DECIMAL*); + HRESULT VarDecFromUI2(USHORT, DECIMAL*); + HRESULT VarDecFromUI4(ULONG, DECIMAL*); + HRESULT VarDecFromUI8(ULONG64, DECIMAL*); + HRESULT VarDecFromCy(CY, DECIMAL*); + HRESULT VarDecFromDisp(IDispatch*, LCID, DECIMAL*); + + HRESULT VarDecNeg(DECIMAL*, DECIMAL*); + HRESULT VarR4CmpR8(float, double); + HRESULT VarR8Pow(double, double, double*); + HRESULT VarR8Round(double, int, double*); + HRESULT VarDecAbs(DECIMAL*, DECIMAL*); + HRESULT VarDecAdd(DECIMAL*, DECIMAL*, DECIMAL*); + HRESULT VarDecCmp(DECIMAL*, DECIMAL*); + HRESULT VarDecCmpR8(DECIMAL*, DOUBLE); + HRESULT VarDecDiv(DECIMAL*, DECIMAL*, DECIMAL*); + HRESULT VarDecFix(DECIMAL*, DECIMAL*); + HRESULT VarDecInt(DECIMAL*, DECIMAL*); + HRESULT VarDecMul(DECIMAL*, DECIMAL*, DECIMAL*); + HRESULT VarDecRound(DECIMAL*, int, DECIMAL*); + HRESULT VarDecSub(DECIMAL*, DECIMAL*, DECIMAL*); + HRESULT VarCyAbs(CY, CY*); + HRESULT VarCyAdd(CY, CY, CY*); + HRESULT VarCyCmp(CY, CY); + HRESULT VarCyCmpR8(CY, DOUBLE); + HRESULT VarCyFix(CY, CY*); + HRESULT VarCyInt(CY, CY*); + HRESULT VarCyMul(CY, CY, CY*); + HRESULT VarCyMulI4(CY, LONG, CY*); + HRESULT VarCyMulI8(CY, LONG64, CY*); + HRESULT VarCyNeg(CY, CY*); + HRESULT VarCyRound(CY, INT, CY*); + HRESULT VarCySub(CY, CY, CY*); + HRESULT VarAdd(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarAnd(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarCat(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarDiv(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarEqv(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarIdiv(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarImp(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarMod(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarMul(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarOr(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarPow(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarSub(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarXor(LPVARIANT, LPVARIANT, LPVARIANT); + HRESULT VarAbs(LPVARIANT, LPVARIANT); + HRESULT VarFix(LPVARIANT, LPVARIANT); + HRESULT VarInt(LPVARIANT, LPVARIANT); + HRESULT VarNeg(LPVARIANT, LPVARIANT); + HRESULT VarNot(LPVARIANT, LPVARIANT); + HRESULT VarRound(LPVARIANT, int, LPVARIANT); + HRESULT VarCmp(LPVARIANT, LPVARIANT, LCID, ULONG); + HRESULT VarBstrCmp(BSTR, BSTR, LCID, ULONG); + HRESULT VarBstrCat(BSTR, BSTR, BSTR*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/olectl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/olectl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,398 @@ +/***********************************************************************\ +* olectl.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.olectl; + +// In conversion from MinGW, the following was deleted: +//#define FONTSIZE(n) {n##0000, 0} + +import win32.ocidl, win32.olectlid; +private import win32.basetyps, win32.oaidl, win32.oleauto, win32.unknwn, + win32.windef, win32.wingdi, win32.winuser, win32.wtypes; +private import win32.ntdef; // for NTSTATUS +private import win32.objfwd; // for LPSTREAM +private import win32.winerror; // for SCODE + + +private { + // These replace C macros. + template ITF_ERROR_SCODE_FOR_D(int c) + { + const SCODE ITF_ERROR_SCODE_FOR_D + = (SEVERITY_ERROR << 31) | (FACILITY_ITF << 16) | c; + } + + template ITF_SUCCESS_SCODE_FOR_D(int c) + { + const SCODE ITF_SUCCESS_SCODE_FOR_D + = (SEVERITY_SUCCESS << 31) | (FACILITY_ITF << 16) | c; + } + + template STD_CTL_SCODE(int c) + { + const SCODE STD_CTL_SCODE + = (SEVERITY_ERROR << 31) | (FACILITY_CONTROL << 16) | c; + } +} + +enum : SCODE { + CTL_E_ILLEGALFUNCTIONCALL = STD_CTL_SCODE!(5), + CTL_E_OVERFLOW = STD_CTL_SCODE!(6), + CTL_E_OUTOFMEMORY = STD_CTL_SCODE!(7), + CTL_E_DIVISIONBYZERO = STD_CTL_SCODE!(11), + CTL_E_OUTOFSTRINGSPACE = STD_CTL_SCODE!(14), + CTL_E_OUTOFSTACKSPACE = STD_CTL_SCODE!(28), + CTL_E_BADFILENAMEORNUMBER = STD_CTL_SCODE!(52), + CTL_E_FILENOTFOUND = STD_CTL_SCODE!(53), + CTL_E_BADFILEMODE = STD_CTL_SCODE!(54), + CTL_E_FILEALREADYOPEN = STD_CTL_SCODE!(55), + CTL_E_DEVICEIOERROR = STD_CTL_SCODE!(57), + CTL_E_FILEALREADYEXISTS = STD_CTL_SCODE!(58), + CTL_E_BADRECORDLENGTH = STD_CTL_SCODE!(59), + CTL_E_DISKFULL = STD_CTL_SCODE!(61), + CTL_E_BADRECORDNUMBER = STD_CTL_SCODE!(63), + CTL_E_BADFILENAME = STD_CTL_SCODE!(64), + CTL_E_TOOMANYFILES = STD_CTL_SCODE!(67), + CTL_E_DEVICEUNAVAILABLE = STD_CTL_SCODE!(68), + CTL_E_PERMISSIONDENIED = STD_CTL_SCODE!(70), + CTL_E_DISKNOTREADY = STD_CTL_SCODE!(71), + CTL_E_PATHFILEACCESSERROR = STD_CTL_SCODE!(75), + CTL_E_PATHNOTFOUND = STD_CTL_SCODE!(76), + CTL_E_INVALIDPATTERNSTRING = STD_CTL_SCODE!(93), + CTL_E_INVALIDUSEOFNULL = STD_CTL_SCODE!(94), + CTL_E_INVALIDFILEFORMAT = STD_CTL_SCODE!(321), + CTL_E_INVALIDPROPERTYVALUE = STD_CTL_SCODE!(380), + CTL_E_INVALIDPROPERTYARRAYINDEX = STD_CTL_SCODE!(381), + CTL_E_SETNOTSUPPORTEDATRUNTIME = STD_CTL_SCODE!(382), + CTL_E_SETNOTSUPPORTED = STD_CTL_SCODE!(383), + CTL_E_NEEDPROPERTYARRAYINDEX = STD_CTL_SCODE!(385), + CTL_E_SETNOTPERMITTED = STD_CTL_SCODE!(387), + CTL_E_GETNOTSUPPORTEDATRUNTIME = STD_CTL_SCODE!(393), + CTL_E_GETNOTSUPPORTED = STD_CTL_SCODE!(394), + CTL_E_PROPERTYNOTFOUND = STD_CTL_SCODE!(422), + CTL_E_INVALIDCLIPBOARDFORMAT = STD_CTL_SCODE!(460), + CTL_E_INVALIDPICTURE = STD_CTL_SCODE!(481), + CTL_E_PRINTERERROR = STD_CTL_SCODE!(482), + CTL_E_CANTSAVEFILETOTEMP = STD_CTL_SCODE!(735), + CTL_E_SEARCHTEXTNOTFOUND = STD_CTL_SCODE!(744), + CTL_E_REPLACEMENTSTOOLONG = STD_CTL_SCODE!(746), + CTL_E_CUSTOM_FIRST = STD_CTL_SCODE!(600) +} + +const SCODE CLASS_E_NOTLICENSED = CLASSFACTORY_E_FIRST+2; + +enum : SCODE { + CONNECT_E_FIRST = ITF_ERROR_SCODE_FOR_D!(0x200), + CONNECT_E_LAST = ITF_ERROR_SCODE_FOR_D!(0x20F), + CONNECT_S_FIRST = ITF_SUCCESS_SCODE_FOR_D!(0x200), + CONNECT_S_LAST = ITF_SUCCESS_SCODE_FOR_D!(0x20F), + CONNECT_E_NOCONNECTION = CONNECT_E_FIRST + 0, + CONNECT_E_ADVISELIMIT = CONNECT_E_FIRST + 1, + CONNECT_E_CANNOTCONNECT = CONNECT_E_FIRST + 2, + CONNECT_E_OVERRIDDEN = CONNECT_E_FIRST + 3, + + SELFREG_E_FIRST = ITF_ERROR_SCODE_FOR_D!(0x200), + SELFREG_E_LAST = ITF_ERROR_SCODE_FOR_D!(0x20F), + SELFREG_S_FIRST = ITF_SUCCESS_SCODE_FOR_D!(0x200), + SELFREG_S_LAST = ITF_SUCCESS_SCODE_FOR_D!(0x20F), + SELFREG_E_TYPELIB = SELFREG_E_FIRST + 0, + SELFREG_E_CLASS = SELFREG_E_FIRST + 1, + + PERPROP_E_FIRST = ITF_ERROR_SCODE_FOR_D!(0x200), + PERPROP_E_LAST = ITF_ERROR_SCODE_FOR_D!(0x20F), + PERPROP_S_FIRST = ITF_SUCCESS_SCODE_FOR_D!(0x200), + PERPROP_S_LAST = ITF_SUCCESS_SCODE_FOR_D!(0x20F), + PERPROP_E_NOPAGEAVAILABLE = PERPROP_E_FIRST +} + +enum { + OLEMISC_RECOMPOSEONRESIZE = 0x1, + OLEMISC_ONLYICONIC = 0x2, + OLEMISC_INSERTNOTREPLACE = 0x4, + OLEMISC_STATIC = 0x8, + OLEMISC_CANTLINKINSIDE = 0x10, + OLEMISC_CANLINKBYOLE1 = 0x20, + OLEMISC_ISLINKOBJECT = 0x40, + OLEMISC_INSIDEOUT = 0x80, + OLEMISC_ACTIVATEWHENVISIBLE = 0x100, + OLEMISC_RENDERINGISDEVICEINDEPENDENT = 0x200, + OLEMISC_INVISIBLEATRUNTIME = 0x400, + OLEMISC_ALWAYSRUN = 0x800, + OLEMISC_ACTSLIKEBUTTON = 0x1000, + OLEMISC_ACTSLIKELABEL = 0x2000, + OLEMISC_NOUIACTIVATE = 0x4000, + OLEMISC_ALIGNABLE = 0x8000, + OLEMISC_SIMPLEFRAME = 0x10000, + OLEMISC_SETCLIENTSITEFIRST = 0x20000, + OLEMISC_IMEMODE = 0x40000, + OLEMISC_IGNOREACTIVATEWHENVISIBLE = 0x80000, + OLEMISC_WANTSTOMENUMERGE = 0x100000, + OLEMISC_SUPPORTSMULTILEVELUNDO = 0x200000 +} +const OLEIVERB_PROPERTIES = -7; + +const VT_STREAMED_PROPSET = 73; +const VT_STORED_PROPSET = 74; +const VT_BLOB_PROPSET = 75; +const VT_VERBOSE_ENUM = 76; +const VT_COLOR = VARENUM.VT_I4; +const VT_XPOS_PIXELS = VARENUM.VT_I4; +const VT_YPOS_PIXELS = VARENUM.VT_I4; +const VT_XSIZE_PIXELS = VARENUM.VT_I4; +const VT_YSIZE_PIXELS = VARENUM.VT_I4; +const VT_XPOS_HIMETRIC = VARENUM.VT_I4; +const VT_YPOS_HIMETRIC = VARENUM.VT_I4; +const VT_XSIZE_HIMETRIC = VARENUM.VT_I4; +const VT_YSIZE_HIMETRIC = VARENUM.VT_I4; +const VT_TRISTATE = VARENUM.VT_I2; +const VT_OPTEXCLUSIVE = VARENUM.VT_BOOL; +const VT_FONT = VARENUM.VT_DISPATCH; +const VT_PICTURE = VARENUM.VT_DISPATCH; +const VT_HANDLE = VARENUM.VT_I4; + +enum { + OCM__BASE = WM_USER + 0x1c00, + OCM_COMMAND = OCM__BASE + WM_COMMAND, + OCM_CTLCOLORBTN = OCM__BASE + WM_CTLCOLORBTN, + OCM_CTLCOLOREDIT = OCM__BASE + WM_CTLCOLOREDIT, + OCM_CTLCOLORDLG = OCM__BASE + WM_CTLCOLORDLG, + OCM_CTLCOLORLISTBOX = OCM__BASE + WM_CTLCOLORLISTBOX, + OCM_CTLCOLORMSGBOX = OCM__BASE + WM_CTLCOLORMSGBOX, + OCM_CTLCOLORSCROLLBAR = OCM__BASE + WM_CTLCOLORSCROLLBAR, + OCM_CTLCOLORSTATIC = OCM__BASE + WM_CTLCOLORSTATIC, + OCM_DRAWITEM = OCM__BASE + WM_DRAWITEM, + OCM_MEASUREITEM = OCM__BASE + WM_MEASUREITEM, + OCM_DELETEITEM = OCM__BASE + WM_DELETEITEM, + OCM_VKEYTOITEM = OCM__BASE + WM_VKEYTOITEM, + OCM_CHARTOITEM = OCM__BASE + WM_CHARTOITEM, + OCM_COMPAREITEM = OCM__BASE + WM_COMPAREITEM, + OCM_HSCROLL = OCM__BASE + WM_HSCROLL, + OCM_VSCROLL = OCM__BASE + WM_VSCROLL, + OCM_PARENTNOTIFY = OCM__BASE + WM_PARENTNOTIFY, + OCM_NOTIFY = OCM__BASE + WM_NOTIFY +} + +enum { + CTRLINFO_EATS_RETURN = 1, + CTRLINFO_EATS_ESCAPE +} + +enum { + XFORMCOORDS_POSITION = 1, + XFORMCOORDS_SIZE = 2, + XFORMCOORDS_HIMETRICTOCONTAINER = 4, + XFORMCOORDS_CONTAINERTOHIMETRIC = 8 +} + +const GUIDKIND_DEFAULT_SOURCE_DISP_IID = 1; + +enum { + PROPPAGESTATUS_DIRTY = 1, + PROPPAGESTATUS_VALIDATE = 2 +} + +enum { + PICTURE_SCALABLE = 1, + PICTURE_TRANSPARENT = 2 +} + +enum { + PICTYPE_UNINITIALIZED = -1, + PICTYPE_NONE, // = 0 + PICTYPE_BITMAP, + PICTYPE_METAFILE, + PICTYPE_ICON, + PICTYPE_ENHMETAFILE // = 4 +} + +enum { + DISPID_AUTOSIZE = -500, + DISPID_BACKCOLOR = -501, + DISPID_BACKSTYLE = -502, + DISPID_BORDERCOLOR = -503, + DISPID_BORDERSTYLE = -504, + DISPID_BORDERWIDTH = -505, + DISPID_DRAWMODE = -507, + DISPID_DRAWSTYLE = -508, + DISPID_DRAWWIDTH = -509, + DISPID_FILLCOLOR = -510, + DISPID_FILLSTYLE = -511, + DISPID_FONT = -512, + DISPID_FORECOLOR = -513, + DISPID_ENABLED = -514, + DISPID_HWND = -515, + DISPID_TABSTOP = -516, + DISPID_TEXT = -517, + DISPID_CAPTION = -518, + DISPID_BORDERVISIBLE = -519, + DISPID_APPEARANCE = -520, + DISPID_MOUSEPOINTER = -521, + DISPID_MOUSEICON = -522, + DISPID_PICTURE = -523, + DISPID_VALID = -524, + DISPID_REFRESH = -550, + DISPID_DOCLICK = -551, + DISPID_ABOUTBOX = -552, + DISPID_CLICK = -600, + DISPID_DBLCLICK = -601, + DISPID_KEYDOWN = -602, + DISPID_KEYPRESS = -603, + DISPID_KEYUP = -604, + DISPID_MOUSEDOWN = -605, + DISPID_MOUSEMOVE = -606, + DISPID_MOUSEUP = -607, + DISPID_ERROREVENT = -608, + DISPID_AMBIENT_BACKCOLOR = -701, + DISPID_AMBIENT_DISPLAYNAME = -702, + DISPID_AMBIENT_FONT = -703, + DISPID_AMBIENT_FORECOLOR = -704, + DISPID_AMBIENT_LOCALEID = -705, + DISPID_AMBIENT_MESSAGEREFLECT = -706, + DISPID_AMBIENT_SCALEUNITS = -707, + DISPID_AMBIENT_TEXTALIGN = -708, + DISPID_AMBIENT_USERMODE = -709, + DISPID_AMBIENT_UIDEAD = -710, + DISPID_AMBIENT_SHOWGRABHANDLES = -711, + DISPID_AMBIENT_SHOWHATCHING = -712, + DISPID_AMBIENT_DISPLAYASDEFAULT = -713, + DISPID_AMBIENT_SUPPORTSMNEMONICS = -714, + DISPID_AMBIENT_AUTOCLIP = -715, + DISPID_AMBIENT_APPEARANCE = -716, + DISPID_AMBIENT_CODEPAGE = -725, + DISPID_AMBIENT_PALETTE = -726, + DISPID_AMBIENT_CHARSET = -727, + DISPID_AMBIENT_RIGHTTOLEFT = -732, + DISPID_AMBIENT_TOPTOBOTTOM = -733 +} + +enum { + DISPID_FONT_NAME = 0, + DISPID_FONT_SIZE = 2, + DISPID_FONT_BOLD, + DISPID_FONT_ITALIC, + DISPID_FONT_UNDER, + DISPID_FONT_STRIKE, + DISPID_FONT_WEIGHT, + DISPID_FONT_CHARSET // = 8 +} + +enum { + DISPID_PICT_HANDLE = 0, + DISPID_PICT_HPAL = 2, + DISPID_PICT_TYPE, + DISPID_PICT_WIDTH, + DISPID_PICT_HEIGHT, + DISPID_PICT_RENDER // = 6 +} + +alias IOleControl *LPOLECONTROL; +alias IOleControlSite *LPOLECONTROLSITE; +alias ISimpleFrameSite *LPSIMPLEFRAMESITE; +alias IPersistPropertyBag *LPPERSISTPROPERTYBAG; +alias IPersistStreamInit *LPPERSISTSTREAMINIT; +alias IPersistMemory *LPPERSISTMEMORY; +alias IPropertyNotifySink* LPPROPERTYNOTIFYSINK; +alias IProvideClassInfo *LPPROVIDECLASSINFO; +alias IProvideClassInfo2 *LPPROVIDECLASSINFO2; +alias IConnectionPointContainer *LPCONNECTIONPOINTCONTAINER; +alias IClassFactory2 *LPCLASSFACTORY2; +alias ISpecifyPropertyPages *LPSPECIFYPROPERTYPAGES; +alias IPerPropertyBrowsing *LPPERPROPERTYBROWSING; +alias IPropertyPage *LPPROPERTYPAGE; +alias IPropertyPage2 *LPPROPERTYPAGE2; + +alias IPicture *LPPICTURE; +alias IPictureDisp *LPPICTUREDISP; +alias int OLE_XPOS_PIXELS; +alias int OLE_YPOS_PIXELS; +alias int OLE_XSIZE_PIXELS; +alias int OLE_YSIZE_PIXELS; +alias float OLE_XPOS_CONTAINER; +alias float OLE_YPOS_CONTAINER; +alias float OLE_XSIZE_CONTAINER; + +alias VARIANT_BOOL OLE_OPTEXCLUSIVE; +alias VARIANT_BOOL OLE_CANCELBOOL; +alias VARIANT_BOOL OLE_ENABLEDEFAULTBOOL; + +align(8): + +enum OLE_TRISTATE { + triUnchecked, + triChecked1, + triGray +} + +struct OCPFIPARAMS { + ULONG cbStructSize; + HWND hWndOwner; + int x; + int y; + LPCOLESTR lpszCaption; + ULONG cObjects; + LPUNKNOWN *lplpUnk; + ULONG cPages; + CLSID *lpPages; + LCID lcid; + DISPID dispidInitialProperty; +} +alias OCPFIPARAMS* LPOCPFIPARAMS; + +struct FONTDESC { + UINT cbSizeofstruct; + LPOLESTR lpstrName; + CY cySize; + SHORT sWeight; + SHORT sCharset; + BOOL fItalic; + BOOL fUnderline; + BOOL fStrikethrough; +} +alias FONTDESC* LPFONTDESC; + +struct PICTDESC +{ + UINT cbSizeofstruct; + UINT picType; + union { + struct bmp { + HBITMAP hbitmap; + HPALETTE hpal; + } + struct wmf { + HMETAFILE hmeta; + int xExt; + int yExt; + } + struct icon { + HICON hicon; + } + struct emf { + HENHMETAFILE hemf; + } + } +} +alias PICTDESC* LPPICTDESC; + +extern(Windows) { + HRESULT DllRegisterServer(); + HRESULT DllUnregisterServer(); + HRESULT OleCreateFontIndirect(LPFONTDESC, REFIID, PVOID*); + HRESULT OleCreatePictureIndirect(LPPICTDESC, REFIID, BOOL, PVOID*); + HRESULT OleCreatePropertyFrame(HWND, UINT, UINT, LPCOLESTR, ULONG, LPUNKNOWN*, ULONG, LPCLSID, LCID, DWORD, PVOID); + HRESULT OleCreatePropertyFrameIndirect(LPOCPFIPARAMS); + HCURSOR OleIconToCursor(HINSTANCE, HICON); + HRESULT OleLoadPicture(LPSTREAM, LONG, BOOL, REFIID, PVOID*); + HRESULT OleLoadPictureEx(LPSTREAM, LONG, BOOL, REFIID, DWORD, DWORD, DWORD, LPVOID*); + HRESULT OleLoadPicturePath(LPOLESTR, LPUNKNOWN, DWORD, OLE_COLOR, REFIID, LPVOID*); + HRESULT OleLoadPictureFile(VARIANT, LPDISPATCH*); + HRESULT OleLoadPictureFileEx(VARIANT, DWORD, DWORD, DWORD, LPDISPATCH*); + HRESULT OleSavePictureFile(LPDISPATCH, BSTR); + HRESULT OleTranslateColor(OLE_COLOR, HPALETTE, COLORREF*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/olectlid.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/olectlid.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,13 @@ +/***********************************************************************\ +* olectlid.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.olectlid; + +private import win32.basetyps; + diff -r 586e4a649642 -r 4a9dcbd9e54f win32/oledlg.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/oledlg.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,990 @@ +/***********************************************************************\ +* oledlg.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.oledlg; + +import win32.commdlg, win32.dlgs, win32.ole2, win32.prsht, win32.shellapi, + win32.windows; +private import win32.winbase, win32.objidl, win32.objfwd, win32.winnt; + +// FIXME: remove inherited methods from interface definitions + +const PS_MAXLINKTYPES=8; + +const TCHAR[] OLESTDDELIM = "\\"; +const TCHAR[] SZOLEUI_MSG_HELP = "OLEUI_MSG_HELP"; +const TCHAR[] SZOLEUI_MSG_ENDDIALOG = "OLEUI_MSG_ENDDIALOG"; +const TCHAR[] SZOLEUI_MSG_BROWSE = "OLEUI_MSG_BROWSE"; +const TCHAR[] SZOLEUI_MSG_CHANGEICON = "OLEUI_MSG_CHANGEICON"; +const TCHAR[] SZOLEUI_MSG_CLOSEBUSYDIALOG = "OLEUI_MSG_CLOSEBUSYDIALOG"; +const TCHAR[] SZOLEUI_MSG_CONVERT = "OLEUI_MSG_CONVERT"; +const TCHAR[] SZOLEUI_MSG_CHANGESOURCE = "OLEUI_MSG_CHANGESOURCE"; +const TCHAR[] SZOLEUI_MSG_ADDCONTROL = "OLEUI_MSG_ADDCONTROL"; +const TCHAR[] SZOLEUI_MSG_BROWSE_OFN = "OLEUI_MSG_BROWSE_OFN"; + +const TCHAR[] PROP_HWND_CHGICONDLG = "HWND_CIDLG"; + +const IDC_OLEUIHELP=99; + +enum { + IDC_IO_CREATENEW = 2100, + IDC_IO_CREATEFROMFILE, + IDC_IO_LINKFILE, + IDC_IO_OBJECTTYPELIST, + IDC_IO_DISPLAYASICON, + IDC_IO_CHANGEICON, + IDC_IO_FILE, + IDC_IO_FILEDISPLAY, + IDC_IO_RESULTIMAGE, + IDC_IO_RESULTTEXT, + IDC_IO_ICONDISPLAY, + IDC_IO_OBJECTTYPETEXT, + IDC_IO_FILETEXT, + IDC_IO_FILETYPE, + IDC_IO_INSERTCONTROL, + IDC_IO_ADDCONTROL, + IDC_IO_CONTROLTYPELIST // = 2116 +} + +const IDC_PS_PASTE=500; +const IDC_PS_PASTELINK=501; +const IDC_PS_SOURCETEXT=502; +const IDC_PS_PASTELIST=503; +const IDC_PS_PASTELINKLIST=504; +const IDC_PS_DISPLAYLIST=505; +const IDC_PS_DISPLAYASICON=506; +const IDC_PS_ICONDISPLAY=507; +const IDC_PS_CHANGEICON=508; +const IDC_PS_RESULTIMAGE=509; +const IDC_PS_RESULTTEXT=510; + +const IDC_CI_GROUP=120; +const IDC_CI_CURRENT=121; +const IDC_CI_CURRENTICON=122; +const IDC_CI_DEFAULT=123; +const IDC_CI_DEFAULTICON=124; +const IDC_CI_FROMFILE=125; +const IDC_CI_FROMFILEEDIT=126; +const IDC_CI_ICONLIST=127; +const IDC_CI_LABEL=128; +const IDC_CI_LABELEDIT=129; +const IDC_CI_BROWSE=130; +const IDC_CI_ICONDISPLAY=131; + +const IDC_CV_OBJECTTYPE=150; +const IDC_CV_DISPLAYASICON=152; +const IDC_CV_CHANGEICON=153; +const IDC_CV_ACTIVATELIST=154; +const IDC_CV_CONVERTTO=155; +const IDC_CV_ACTIVATEAS=156; +const IDC_CV_RESULTTEXT=157; +const IDC_CV_CONVERTLIST=158; +const IDC_CV_ICONDISPLAY=165; + +const IDC_EL_CHANGESOURCE=201; +const IDC_EL_AUTOMATIC=202; +const IDC_EL_CANCELLINK=209; +const IDC_EL_UPDATENOW=210; +const IDC_EL_OPENSOURCE=211; +const IDC_EL_MANUAL=212; +const IDC_EL_LINKSOURCE=216; +const IDC_EL_LINKTYPE=217; +const IDC_EL_LINKSLISTBOX=206; +const IDC_EL_COL1=220; +const IDC_EL_COL2=221; +const IDC_EL_COL3=222; + +const IDC_BZ_RETRY=600; +const IDC_BZ_ICON=601; +const IDC_BZ_MESSAGE1=602; +const IDC_BZ_SWITCHTO=604; + +const IDC_UL_METER=1029; +const IDC_UL_STOP=1030; +const IDC_UL_PERCENT=1031; +const IDC_UL_PROGRESS=1032; + +const IDC_PU_LINKS=900; +const IDC_PU_TEXT=901; +const IDC_PU_CONVERT=902; +const IDC_PU_ICON=908; + +const IDC_GP_OBJECTNAME=1009; +const IDC_GP_OBJECTTYPE=1010; +const IDC_GP_OBJECTSIZE=1011; +const IDC_GP_CONVERT=1013; +const IDC_GP_OBJECTICON=1014; +const IDC_GP_OBJECTLOCATION=1022; + +const IDC_VP_PERCENT=1000; +const IDC_VP_CHANGEICON=1001; +const IDC_VP_EDITABLE=1002; +const IDC_VP_ASICON=1003; +const IDC_VP_RELATIVE=1005; +const IDC_VP_SPIN=1006; +const IDC_VP_SCALETXT=1034; +const IDC_VP_ICONDISPLAY=1021; +const IDC_VP_RESULTIMAGE=1033; + +const IDC_LP_OPENSOURCE=1006; +const IDC_LP_UPDATENOW=1007; +const IDC_LP_BREAKLINK=1008; +const IDC_LP_LINKSOURCE=1012; +const IDC_LP_CHANGESOURCE=1015; +const IDC_LP_AUTOMATIC=1016; +const IDC_LP_MANUAL=1017; +const IDC_LP_DATE=1018; +const IDC_LP_TIME=1019; + +const IDD_INSERTOBJECT=1000; +const IDD_CHANGEICON=1001; +const IDD_CONVERT=1002; +const IDD_PASTESPECIAL=1003; +const IDD_EDITLINKS=1004; +const IDD_BUSY=1006; +const IDD_UPDATELINKS=1007; +const IDD_CHANGESOURCE=1009; +const IDD_INSERTFILEBROWSE=1010; +const IDD_CHANGEICONBROWSE=1011; +const IDD_CONVERTONLY=1012; +const IDD_CHANGESOURCE4=1013; +const IDD_GNRLPROPS=1100; +const IDD_VIEWPROPS=1101; +const IDD_LINKPROPS=1102; +const IDD_CANNOTUPDATELINK=1008; +const IDD_LINKSOURCEUNAVAILABLE=1020; +const IDD_SERVERNOTFOUND=1023; +const IDD_OUTOFMEMORY=1024; +const IDD_SERVERNOTREGW=1021; +const IDD_LINKTYPECHANGEDW=1022; +const IDD_SERVERNOTREGA=1025; +const IDD_LINKTYPECHANGEDA=1026; + +const ID_BROWSE_CHANGEICON=1; +const ID_BROWSE_INSERTFILE=2; +const ID_BROWSE_ADDCONTROL=3; +const ID_BROWSE_CHANGESOURCE=4; + +const OLEUI_FALSE=0; +const OLEUI_SUCCESS=1; +const OLEUI_OK=1; +const OLEUI_CANCEL=2; + +const OLEUI_ERR_STANDARDMIN=100; +const OLEUI_ERR_STRUCTURENULL=101; +const OLEUI_ERR_STRUCTUREINVALID=102; +const OLEUI_ERR_CBSTRUCTINCORRECT=103; +const OLEUI_ERR_HWNDOWNERINVALID=104; +const OLEUI_ERR_LPSZCAPTIONINVALID=105; +const OLEUI_ERR_LPFNHOOKINVALID=106; +const OLEUI_ERR_HINSTANCEINVALID=107; +const OLEUI_ERR_LPSZTEMPLATEINVALID=108; +const OLEUI_ERR_HRESOURCEINVALID=109; +const OLEUI_ERR_FINDTEMPLATEFAILURE=110; +const OLEUI_ERR_LOADTEMPLATEFAILURE=111; +const OLEUI_ERR_DIALOGFAILURE=112; +const OLEUI_ERR_LOCALMEMALLOC=113; +const OLEUI_ERR_GLOBALMEMALLOC=114; +const OLEUI_ERR_LOADSTRING=115; +const OLEUI_ERR_OLEMEMALLOC=116; +const OLEUI_ERR_STANDARDMAX=116; + +const OPF_OBJECTISLINK=1; +const OPF_NOFILLDEFAULT=2; +const OPF_SHOWHELP=4; +const OPF_DISABLECONVERT=8; + +const OLEUI_OPERR_SUBPROPNULL=OLEUI_ERR_STANDARDMAX; +const OLEUI_OPERR_SUBPROPINVALID=(OLEUI_ERR_STANDARDMAX+1); +const OLEUI_OPERR_PROPSHEETNULL=(OLEUI_ERR_STANDARDMAX+2); +const OLEUI_OPERR_PROPSHEETINVALID=(OLEUI_ERR_STANDARDMAX+3); +const OLEUI_OPERR_SUPPROP=(OLEUI_ERR_STANDARDMAX+4); +const OLEUI_OPERR_PROPSINVALID=(OLEUI_ERR_STANDARDMAX+5); +const OLEUI_OPERR_PAGESINCORRECT=(OLEUI_ERR_STANDARDMAX+6); +const OLEUI_OPERR_INVALIDPAGES=(OLEUI_ERR_STANDARDMAX+7); +const OLEUI_OPERR_NOTSUPPORTED=(OLEUI_ERR_STANDARDMAX+8); +const OLEUI_OPERR_DLGPROCNOTNULL=(OLEUI_ERR_STANDARDMAX+9); +const OLEUI_OPERR_LPARAMNOTZERO=(OLEUI_ERR_STANDARDMAX+10); +const OLEUI_GPERR_STRINGINVALID=(OLEUI_ERR_STANDARDMAX+11); +const OLEUI_GPERR_CLASSIDINVALID=(OLEUI_ERR_STANDARDMAX+12); +const OLEUI_GPERR_LPCLSIDEXCLUDEINVALID=(OLEUI_ERR_STANDARDMAX+13); +const OLEUI_GPERR_CBFORMATINVALID=(OLEUI_ERR_STANDARDMAX+14); +const OLEUI_VPERR_METAPICTINVALID=(OLEUI_ERR_STANDARDMAX+15); +const OLEUI_VPERR_DVASPECTINVALID=(OLEUI_ERR_STANDARDMAX+16); +const OLEUI_LPERR_LINKCNTRNULL=(OLEUI_ERR_STANDARDMAX+17); +const OLEUI_LPERR_LINKCNTRINVALID=(OLEUI_ERR_STANDARDMAX+18); +const OLEUI_OPERR_PROPERTYSHEET=(OLEUI_ERR_STANDARDMAX+19); +const OLEUI_OPERR_OBJINFOINVALID=(OLEUI_ERR_STANDARDMAX+20); +const OLEUI_OPERR_LINKINFOINVALID=(OLEUI_ERR_STANDARDMAX+21); + +const OLEUI_QUERY_GETCLASSID=65280; +const OLEUI_QUERY_LINKBROKEN=65281; + +const IOF_SHOWHELP=1; +const IOF_SELECTCREATENEW=2; +const IOF_SELECTCREATEFROMFILE=4; +const IOF_CHECKLINK=8; +const IOF_CHECKDISPLAYASICON=16; +const IOF_CREATENEWOBJECT=32; +const IOF_CREATEFILEOBJECT=64; +const IOF_CREATELINKOBJECT=128; +const IOF_DISABLELINK=256; +const IOF_VERIFYSERVERSEXIST=512; +const IOF_DISABLEDISPLAYASICON=1024; +const IOF_HIDECHANGEICON=2048; +const IOF_SHOWINSERTCONTROL=4096; +const IOF_SELECTCREATECONTROL=8192; + +const OLEUI_IOERR_LPSZFILEINVALID=OLEUI_ERR_STANDARDMAX; +const OLEUI_IOERR_LPSZLABELINVALID=(OLEUI_ERR_STANDARDMAX+1); +const OLEUI_IOERR_HICONINVALID=(OLEUI_ERR_STANDARDMAX+2); +const OLEUI_IOERR_LPFORMATETCINVALID=(OLEUI_ERR_STANDARDMAX+3); +const OLEUI_IOERR_PPVOBJINVALID=(OLEUI_ERR_STANDARDMAX+4); +const OLEUI_IOERR_LPIOLECLIENTSITEINVALID=(OLEUI_ERR_STANDARDMAX+5); +const OLEUI_IOERR_LPISTORAGEINVALID=(OLEUI_ERR_STANDARDMAX+6); +const OLEUI_IOERR_SCODEHASERROR=(OLEUI_ERR_STANDARDMAX+7); +const OLEUI_IOERR_LPCLSIDEXCLUDEINVALID=(OLEUI_ERR_STANDARDMAX+8); +const OLEUI_IOERR_CCHFILEINVALID=(OLEUI_ERR_STANDARDMAX+9); + +const PSF_SHOWHELP=1; +const PSF_SELECTPASTE=2; +const PSF_SELECTPASTELINK=4; +const PSF_CHECKDISPLAYASICON=8; +const PSF_DISABLEDISPLAYASICON=16; +const PSF_HIDECHANGEICON=32; +const PSF_STAYONCLIPBOARDCHANGE=64; +const PSF_NOREFRESHDATAOBJECT=128; + +const OLEUI_IOERR_SRCDATAOBJECTINVALID=OLEUI_ERR_STANDARDMAX; +const OLEUI_IOERR_ARRPASTEENTRIESINVALID=(OLEUI_ERR_STANDARDMAX+1); +const OLEUI_IOERR_ARRLINKTYPESINVALID=(OLEUI_ERR_STANDARDMAX+2); +const OLEUI_PSERR_CLIPBOARDCHANGED=(OLEUI_ERR_STANDARDMAX+3); +const OLEUI_PSERR_GETCLIPBOARDFAILED=(OLEUI_ERR_STANDARDMAX+4); +const OLEUI_ELERR_LINKCNTRNULL=OLEUI_ERR_STANDARDMAX; +const OLEUI_ELERR_LINKCNTRINVALID=(OLEUI_ERR_STANDARDMAX+1); + +const ELF_SHOWHELP=1; +const ELF_DISABLEUPDATENOW=2; +const ELF_DISABLEOPENSOURCE=4; +const ELF_DISABLECHANGESOURCE=8; +const ELF_DISABLECANCELLINK=16; + +const CIF_SHOWHELP=1; +const CIF_SELECTCURRENT=2; +const CIF_SELECTDEFAULT=4; +const CIF_SELECTFROMFILE=8; +const CIF_USEICONEXE=16; + +const OLEUI_CIERR_MUSTHAVECLSID=OLEUI_ERR_STANDARDMAX; +const OLEUI_CIERR_MUSTHAVECURRENTMETAFILE=OLEUI_ERR_STANDARDMAX+1; +const OLEUI_CIERR_SZICONEXEINVALID=OLEUI_ERR_STANDARDMAX+2; + +const CF_SHOWHELPBUTTON=1; +const CF_SETCONVERTDEFAULT=2; +const CF_SETACTIVATEDEFAULT=4; +const CF_SELECTCONVERTTO=8; +const CF_SELECTACTIVATEAS=16; +const CF_DISABLEDISPLAYASICON=32; +const CF_DISABLEACTIVATEAS=64; +const CF_HIDECHANGEICON=128; +const CF_CONVERTONLY=256; + +const OLEUI_CTERR_CLASSIDINVALID = OLEUI_ERR_STANDARDMAX+1; +const OLEUI_CTERR_DVASPECTINVALID = OLEUI_ERR_STANDARDMAX+2; +const OLEUI_CTERR_CBFORMATINVALID = OLEUI_ERR_STANDARDMAX+3; +const OLEUI_CTERR_HMETAPICTINVALID = OLEUI_ERR_STANDARDMAX+4; +const OLEUI_CTERR_STRINGINVALID = OLEUI_ERR_STANDARDMAX+5; + +const BZ_DISABLECANCELBUTTON = 1; +const BZ_DISABLESWITCHTOBUTTON = 2; +const BZ_DISABLERETRYBUTTON = 4; +const BZ_NOTRESPONDINGDIALOG = 8; + +const OLEUI_BZERR_HTASKINVALID = OLEUI_ERR_STANDARDMAX; +const OLEUI_BZ_SWITCHTOSELECTED = OLEUI_ERR_STANDARDMAX+1; +const OLEUI_BZ_RETRYSELECTED = OLEUI_ERR_STANDARDMAX+2; +const OLEUI_BZ_CALLUNBLOCKED = OLEUI_ERR_STANDARDMAX+3; + +const CSF_SHOWHELP = 1; +const CSF_VALIDSOURCE = 2; +const CSF_ONLYGETSOURCE = 4; +const CSF_EXPLORER = 8; + +const OLEUI_CSERR_LINKCNTRNULL = OLEUI_ERR_STANDARDMAX; +const OLEUI_CSERR_LINKCNTRINVALID = OLEUI_ERR_STANDARDMAX+1; +const OLEUI_CSERR_FROMNOTNULL = OLEUI_ERR_STANDARDMAX+2; +const OLEUI_CSERR_TONOTNULL = OLEUI_ERR_STANDARDMAX+3; +const OLEUI_CSERR_SOURCENULL = OLEUI_ERR_STANDARDMAX+4; +const OLEUI_CSERR_SOURCEINVALID = OLEUI_ERR_STANDARDMAX+5; +const OLEUI_CSERR_SOURCEPARSERROR = OLEUI_ERR_STANDARDMAX+6; +const OLEUI_CSERR_SOURCEPARSEERROR = OLEUI_ERR_STANDARDMAX+7; + +const VPF_SELECTRELATIVE=1; +const VPF_DISABLERELATIVE=2; +const VPF_DISABLESCALE=4; + +align(8): +extern (Windows) { + alias UINT function(HWND, UINT, WPARAM, LPARAM) LPFNOLEUIHOOK; +} + +struct OLEUIINSERTOBJECTW { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCWSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCWSTR lpszTemplate; + HRSRC hResource; + CLSID clsid; + LPWSTR lpszFile; + UINT cchFile; + UINT cClsidExclude; + LPCLSID lpClsidExclude; + IID iid; + DWORD oleRender; + LPFORMATETC lpFormatEtc; + LPOLECLIENTSITE lpIOleClientSite; + LPSTORAGE lpIStorage; + PVOID *ppvObj; + SCODE sc; + HGLOBAL hMetaPict; +} +alias OLEUIINSERTOBJECTW* POLEUIINSERTOBJECTW, LPOLEUIINSERTOBJECTW; + +struct OLEUIINSERTOBJECTA { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCSTR lpszTemplate; + HRSRC hResource; + CLSID clsid; + LPSTR lpszFile; + UINT cchFile; + UINT cClsidExclude; + LPCLSID lpClsidExclude; + IID iid; + DWORD oleRender; + LPFORMATETC lpFormatEtc; + LPOLECLIENTSITE lpIOleClientSite; + LPSTORAGE lpIStorage; + PVOID *ppvObj; + SCODE sc; + HGLOBAL hMetaPict; +} +alias OLEUIINSERTOBJECTA* POLEUIINSERTOBJECTA, LPOLEUIINSERTOBJECTA; + +UINT OleUIInsertObjectW(LPOLEUIINSERTOBJECTW); +UINT OleUIInsertObjectA(LPOLEUIINSERTOBJECTA); + +enum OLEUIPASTEFLAG { + OLEUIPASTE_PASTEONLY, + OLEUIPASTE_LINKTYPE1, + OLEUIPASTE_LINKTYPE2, + OLEUIPASTE_LINKTYPE3 = 4, + OLEUIPASTE_LINKTYPE4 = 8, + OLEUIPASTE_LINKTYPE5 = 16, + OLEUIPASTE_LINKTYPE6 = 32, + OLEUIPASTE_LINKTYPE7 = 64, + OLEUIPASTE_LINKTYPE8 = 128, + OLEUIPASTE_PASTE = 512, + OLEUIPASTE_LINKANYTYPE = 1024, + OLEUIPASTE_ENABLEICON = 2048 +} + +struct OLEUIPASTEENTRYW { + FORMATETC fmtetc; + LPCWSTR lpstrFormatName; + LPCWSTR lpstrResultText; + DWORD dwFlags; + DWORD dwScratchSpace; +} +alias OLEUIPASTEENTRYW* POLEUIPASTEENTRYW, LPOLEUIPASTEENTRYW; + +struct OLEUIPASTEENTRYA { + FORMATETC fmtetc; + LPCSTR lpstrFormatName; + LPCSTR lpstrResultText; + DWORD dwFlags; + DWORD dwScratchSpace; +} +alias OLEUIPASTEENTRYA* POLEUIPASTEENTRYA, LPOLEUIPASTEENTRYA; + +struct OLEUIPASTESPECIALW { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCWSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCWSTR lpszTemplate; + HRSRC hResource; + LPDATAOBJECT lpSrcDataObj; + LPOLEUIPASTEENTRYW arrPasteEntries; + int cPasteEntries; + UINT *arrLinkTypes; + int cLinkTypes; + UINT cClsidExclude; + LPCLSID lpClsidExclude; + int nSelectedIndex; + BOOL fLink; + HGLOBAL hMetaPict; + SIZEL sizel; +} +alias OLEUIPASTESPECIALW* POLEUIPASTESPECIALW, LPOLEUIPASTESPECIALW; + +struct OLEUIPASTESPECIALA { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCSTR lpszTemplate; + HRSRC hResource; + LPDATAOBJECT lpSrcDataObj; + LPOLEUIPASTEENTRYA arrPasteEntries; + int cPasteEntries; + UINT* arrLinkTypes; + int cLinkTypes; + UINT cClsidExclude; + LPCLSID lpClsidExclude; + int nSelectedIndex; + BOOL fLink; + HGLOBAL hMetaPict; + SIZEL sizel; +} +alias OLEUIPASTESPECIALA* POLEUIPASTESPECIALA, LPOLEUIPASTESPECIALA; + +interface IOleUILinkContainerW : public IUnknown +{ + HRESULT QueryInterface(REFIID, PVOID*); + ULONG AddRef(); + ULONG Release(); + DWORD GetNextLink(DWORD dwLink); + HRESULT SetLinkUpdateOptions(DWORD, DWORD); + HRESULT GetLinkUpdateOptions(DWORD, PDWORD); + HRESULT SetLinkSource(DWORD, LPWSTR, ULONG, PULONG, BOOL); + HRESULT GetLinkSource(DWORD, LPWSTR*, PULONG, LPWSTR*, LPWSTR*, BOOL*, BOOL*); + HRESULT OpenLinkSource(DWORD); + HRESULT UpdateLink(DWORD, BOOL, BOOL); + HRESULT CancelLink(DWORD); +} +alias IOleUILinkContainerW* LPOLEUILINKCONTAINERW; + +interface IOleUILinkContainerA : public IUnknown +{ + HRESULT QueryInterface(REFIID, PVOID*); + ULONG AddRef(); + ULONG Release(); + DWORD GetNextLink(DWORD); + HRESULT SetLinkUpdateOptions(DWORD, DWORD); + HRESULT GetLinkUpdateOptions(DWORD, PDWORD); + HRESULT SetLinkSource(DWORD, LPSTR, ULONG, PULONG, BOOL); + HRESULT GetLinkSource(DWORD, LPSTR*, PULONG, LPSTR*, LPSTR*, BOOL*, BOOL*); + HRESULT OpenLinkSource(DWORD); + HRESULT UpdateLink(DWORD, BOOL, BOOL); + HRESULT CancelLink(DWORD); +} +alias IOleUILinkContainerA* LPOLEUILINKCONTAINERA; + +struct OLEUIEDITLINKSW { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCWSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCWSTR lpszTemplate; + HRSRC hResource; + LPOLEUILINKCONTAINERW lpOleUILinkContainer; +} +alias OLEUIEDITLINKSW* POLEUIEDITLINKSW, LPOLEUIEDITLINKSW; + +struct OLEUIEDITLINKSA { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCSTR lpszTemplate; + HRSRC hResource; + LPOLEUILINKCONTAINERA lpOleUILinkContainer; +} +alias OLEUIEDITLINKSA* POLEUIEDITLINKSA, LPOLEUIEDITLINKSA; + +struct OLEUICHANGEICONW { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCWSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCWSTR lpszTemplate; + HRSRC hResource; + HGLOBAL hMetaPict; + CLSID clsid; + WCHAR szIconExe[MAX_PATH]; + int cchIconExe; +} +alias OLEUICHANGEICONW* POLEUICHANGEICONW, LPOLEUICHANGEICONW; + +struct OLEUICHANGEICONA { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCSTR lpszTemplate; + HRSRC hResource; + HGLOBAL hMetaPict; + CLSID clsid; + CHAR szIconExe[MAX_PATH]; + int cchIconExe; +} +alias OLEUICHANGEICONA* POLEUICHANGEICONA, LPOLEUICHANGEICONA; + +struct OLEUICONVERTW { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCWSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCWSTR lpszTemplate; + HRSRC hResource; + CLSID clsid; + CLSID clsidConvertDefault; + CLSID clsidActivateDefault; + CLSID clsidNew; + DWORD dvAspect; + WORD wFormat; + BOOL fIsLinkedObject; + HGLOBAL hMetaPict; + LPWSTR lpszUserType; + BOOL fObjectsIconChanged; + LPWSTR lpszDefLabel; + UINT cClsidExclude; + LPCLSID lpClsidExclude; +} +alias OLEUICONVERTW* POLEUICONVERTW, LPOLEUICONVERTW; + +struct OLEUICONVERTA { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCSTR lpszTemplate; + HRSRC hResource; + CLSID clsid; + CLSID clsidConvertDefault; + CLSID clsidActivateDefault; + CLSID clsidNew; + DWORD dvAspect; + WORD wFormat; + BOOL fIsLinkedObject; + HGLOBAL hMetaPict; + LPSTR lpszUserType; + BOOL fObjectsIconChanged; + LPSTR lpszDefLabel; + UINT cClsidExclude; + LPCLSID lpClsidExclude; +} +alias OLEUICONVERTA* POLEUICONVERTA, LPOLEUICONVERTA; + +struct OLEUIBUSYW { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCWSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCWSTR lpszTemplate; + HRSRC hResource; + HTASK hTask; + HWND *lphWndDialog; +} +alias OLEUIBUSYW* POLEUIBUSYW, LPOLEUIBUSYW; + +struct OLEUIBUSYA { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCSTR lpszTemplate; + HRSRC hResource; + HTASK hTask; + HWND *lphWndDialog; +} +alias OLEUIBUSYA* POLEUIBUSYA, LPOLEUIBUSYA; + +struct OLEUICHANGESOURCEW { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCWSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCWSTR lpszTemplate; + HRSRC hResource; + OPENFILENAMEW* lpOFN; + DWORD dwReserved1[4]; + LPOLEUILINKCONTAINERW lpOleUILinkContainer; + DWORD dwLink; + LPWSTR lpszDisplayName; + ULONG nFileLength; + LPWSTR lpszFrom; + LPWSTR lpszTo; +} +alias OLEUICHANGESOURCEW* POLEUICHANGESOURCEW, LPOLEUICHANGESOURCEW; + +struct OLEUICHANGESOURCEA { + DWORD cbStruct; + DWORD dwFlags; + HWND hWndOwner; + LPCSTR lpszCaption; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + HINSTANCE hInstance; + LPCSTR lpszTemplate; + HRSRC hResource; + OPENFILENAMEA *lpOFN; + DWORD dwReserved1[4]; + LPOLEUILINKCONTAINERA lpOleUILinkContainer; + DWORD dwLink; + LPSTR lpszDisplayName; + ULONG nFileLength; + LPSTR lpszFrom; + LPSTR lpszTo; +} +alias OLEUICHANGESOURCEA* POLEUICHANGESOURCEA, LPOLEUICHANGESOURCEA; + +interface IOleUIObjInfoW : public IUnknown +{ + HRESULT QueryInterface(REFIID, PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetObjectInfo(DWORD, PDWORD, LPWSTR*, LPWSTR*, LPWSTR*, LPWSTR*); + HRESULT GetConvertInfo(DWORD, CLSID*, PWORD, CLSID*, LPCLSID*, UINT*); + HRESULT ConvertObject(DWORD, REFCLSID); + HRESULT GetViewInfo(DWORD, HGLOBAL*, PDWORD, int*); + HRESULT SetViewInfo(DWORD, HGLOBAL, DWORD, int, BOOL); +} +alias IOleUIObjInfoW *LPOLEUIOBJINFOW; + +interface IOleUIObjInfoA : public IUnknown +{ + HRESULT QueryInterface(REFIID, PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetObjectInfo(DWORD, PDWORD, LPSTR*, LPSTR*, LPSTR*, LPSTR*); + HRESULT GetConvertInfo(DWORD, CLSID*, PWORD, CLSID*, LPCLSID*, UINT*); + HRESULT ConvertObject(DWORD, REFCLSID); + HRESULT GetViewInfo(DWORD, HGLOBAL*, PDWORD, int*); + HRESULT SetViewInfo(DWORD, HGLOBAL, DWORD, int, BOOL); +} +alias IOleUIObjInfoA *LPOLEUIOBJINFOA; + +interface IOleUILinkInfoW : public IOleUILinkContainerW +{ + HRESULT QueryInterface(REFIID, PVOID*); + ULONG AddRef(); + ULONG Release(); + DWORD GetNextLink(DWORD); + HRESULT SetLinkUpdateOptions(DWORD, DWORD); + HRESULT GetLinkUpdateOptions(DWORD, DWORD*); + HRESULT SetLinkSource(DWORD, LPWSTR, ULONG, PULONG, BOOL); + HRESULT GetLinkSource(DWORD, LPWSTR*, PULONG, LPWSTR*, LPWSTR*, BOOL*, BOOL*); + HRESULT OpenLinkSource(DWORD); + HRESULT UpdateLink(DWORD, BOOL, BOOL); + HRESULT CancelLink(DWORD); + HRESULT GetLastUpdate(DWORD, FILETIME*); +} +alias IOleUILinkInfoW *LPOLEUILINKINFOW; + +interface IOleUILinkInfoA : public IOleUILinkContainerA +{ + HRESULT QueryInterface(REFIID, PVOID*); + ULONG AddRef(); + ULONG Release(); + DWORD GetNextLink(DWORD); + HRESULT SetLinkUpdateOptions(DWORD, DWORD); + HRESULT GetLinkUpdateOptions(DWORD, DWORD*); + HRESULT SetLinkSource(DWORD, LPSTR, ULONG, PULONG, BOOL); + HRESULT GetLinkSource(DWORD, LPSTR*, PULONG, LPSTR*, LPSTR*, BOOL*, BOOL*); + HRESULT OpenLinkSource(DWORD); + HRESULT UpdateLink(DWORD, BOOL, BOOL); + HRESULT CancelLink(DWORD); + HRESULT GetLastUpdate(DWORD, FILETIME*); +} +alias IOleUILinkInfoA* LPOLEUILINKINFOA; + +struct OLEUIGNRLPROPSW { + DWORD cbStruct; + DWORD dwFlags; + DWORD dwReserved1[2]; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + DWORD dwReserved2[3]; + OLEUIOBJECTPROPSW* lpOP; +} +alias OLEUIGNRLPROPSW* POLEUIGNRLPROPSW, LPOLEUIGNRLPROPSW; + +struct OLEUIGNRLPROPSA { + DWORD cbStruct; + DWORD dwFlags; + DWORD dwReserved1[2]; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + DWORD dwReserved2[3]; + OLEUIOBJECTPROPSA* lpOP; +} +alias OLEUIGNRLPROPSA* POLEUIGNRLPROPSA, LPOLEUIGNRLPROPSA; + +struct OLEUIVIEWPROPSW { + DWORD cbStruct; + DWORD dwFlags; + DWORD dwReserved1[2]; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + DWORD dwReserved2[3]; + OLEUIOBJECTPROPSW* lpOP; + int nScaleMin; + int nScaleMax; +} +alias OLEUIVIEWPROPSW* POLEUIVIEWPROPSW, LPOLEUIVIEWPROPSW; + +struct OLEUIVIEWPROPSA { + DWORD cbStruct; + DWORD dwFlags; + DWORD dwReserved1[2]; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + DWORD dwReserved2[3]; + OLEUIOBJECTPROPSA *lpOP; + int nScaleMin; + int nScaleMax; +} +alias OLEUIVIEWPROPSA* POLEUIVIEWPROPSA, LPOLEUIVIEWPROPSA; + +struct OLEUILINKPROPSW { + DWORD cbStruct; + DWORD dwFlags; + DWORD dwReserved1[2]; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + DWORD dwReserved2[3]; + OLEUIOBJECTPROPSW *lpOP; +} +alias OLEUILINKPROPSW* POLEUILINKPROPSW, LPOLEUILINKPROPSW; + +struct OLEUILINKPROPSA { + DWORD cbStruct; + DWORD dwFlags; + DWORD dwReserved1[2]; + LPFNOLEUIHOOK lpfnHook; + LPARAM lCustData; + DWORD dwReserved2[3]; + OLEUIOBJECTPROPSA* lpOP; +} +alias OLEUILINKPROPSA* POLEUILINKPROPSA, LPOLEUILINKPROPSA; + +struct OLEUIOBJECTPROPSW { + DWORD cbStruct; + DWORD dwFlags; + LPPROPSHEETHEADERW lpPS; + DWORD dwObject; + LPOLEUIOBJINFOW lpObjInfo; + DWORD dwLink; + LPOLEUILINKINFOW lpLinkInfo; + LPOLEUIGNRLPROPSW lpGP; + LPOLEUIVIEWPROPSW lpVP; + LPOLEUILINKPROPSW lpLP; +} +alias OLEUIOBJECTPROPSW* POLEUIOBJECTPROPSW, LPOLEUIOBJECTPROPSW; + +struct OLEUIOBJECTPROPSA { + DWORD cbStruct; + DWORD dwFlags; + LPPROPSHEETHEADERA lpPS; + DWORD dwObject; + LPOLEUIOBJINFOA lpObjInfo; + DWORD dwLink; + LPOLEUILINKINFOA lpLinkInfo; + LPOLEUIGNRLPROPSA lpGP; + LPOLEUIVIEWPROPSA lpVP; + LPOLEUILINKPROPSA lpLP; +} +alias OLEUIOBJECTPROPSA* POLEUIOBJECTPROPSA, LPOLEUIOBJECTPROPSA; + +extern (Windows) { + BOOL OleUIAddVerbMenuW(LPOLEOBJECT, LPCWSTR, HMENU, UINT, UINT, UINT, BOOL, UINT, HMENU*); + BOOL OleUIAddVerbMenuA(LPOLEOBJECT, LPCSTR, HMENU, UINT, UINT, UINT, BOOL, UINT, HMENU*); + UINT OleUIBusyW(LPOLEUIBUSYW); + UINT OleUIBusyA(LPOLEUIBUSYA); + BOOL OleUICanConvertOrActivateAs(REFCLSID, BOOL, WORD); + UINT OleUIChangeIconW(LPOLEUICHANGEICONW); + UINT OleUIChangeIconA(LPOLEUICHANGEICONA); + UINT OleUIChangeSourceW(LPOLEUICHANGESOURCEW); + UINT OleUIChangeSourceA(LPOLEUICHANGESOURCEA); + UINT OleUIConvertW(LPOLEUICONVERTW); + UINT OleUIConvertA(LPOLEUICONVERTA); + UINT OleUIEditLinksW(LPOLEUIEDITLINKSW); + UINT OleUIEditLinksA(LPOLEUIEDITLINKSA); + UINT OleUIObjectPropertiesW(LPOLEUIOBJECTPROPSW); + UINT OleUIObjectPropertiesA(LPOLEUIOBJECTPROPSA); + UINT OleUIPasteSpecialW(LPOLEUIPASTESPECIALW); + UINT OleUIPasteSpecialA(LPOLEUIPASTESPECIALA); + BOOL OleUIUpdateLinksW(LPOLEUILINKCONTAINERW, HWND, LPWSTR, int); + BOOL OleUIUpdateLinksA(LPOLEUILINKCONTAINERA, HWND, LPSTR, int); +} + +extern (C) { + int OleUIPromptUserW(int, HWND, ...); + int OleUIPromptUserA(int, HWND, ...); +} + +version(Unicode) { + alias IDD_SERVERNOTREGW IDD_SERVERNOTREG; + alias IDD_LINKTYPECHANGEDW IDD_LINKTYPECHANGED; + alias OleUIUpdateLinksW OleUIUpdateLinks; + alias OleUIAddVerbMenuW OleUIAddVerbMenu; + alias OLEUIOBJECTPROPSW OLEUIOBJECTPROPS; + alias POLEUIOBJECTPROPSW POLEUIOBJECTPROPS; + alias LPOLEUIOBJECTPROPSW LPOLEUIOBJECTPROPS; + alias OleUIObjectPropertiesW OleUIObjectProperties; + alias OLEUIINSERTOBJECTW OLEUIINSERTOBJECT; + alias POLEUIINSERTOBJECTW POLEUIINSERTOBJECT; + alias LPOLEUIINSERTOBJECTW LPOLEUIINSERTOBJECT; + alias OleUIInsertObjectW OleUIInsertObject; + alias OleUIPromptUserW OleUIPromptUser; + alias OLEUIPASTEENTRYW OLEUIPASTEENTRY; + alias POLEUIPASTEENTRYW POLEUIPASTEENTRY; + alias LPOLEUIPASTEENTRYW LPOLEUIPASTEENTRY; + alias OLEUIPASTESPECIALW OLEUIPASTESPECIAL; + alias POLEUIPASTESPECIALW POLEUIPASTESPECIAL; + alias LPOLEUIPASTESPECIALW LPOLEUIPASTESPECIAL; + alias OleUIPasteSpecialW OleUIPasteSpecial; + alias IOleUILinkContainerW IOleUILinkContainer; + alias LPOLEUILINKCONTAINERW LPOLEUILINKCONTAINER; + alias OLEUIEDITLINKSW OLEUIEDITLINKS; + alias POLEUIEDITLINKSW POLEUIEDITLINKS; + alias LPOLEUIEDITLINKSW LPOLEUIEDITLINKS; + alias OleUIEditLinksW OleUIEditLinks; + alias OLEUICHANGEICONW OLEUICHANGEICON; + alias POLEUICHANGEICONW POLEUICHANGEICON; + alias LPOLEUICHANGEICONW LPOLEUICHANGEICON; + alias OleUIChangeIconW OleUIChangeIcon; + alias OLEUICONVERTW OLEUICONVERT; + alias POLEUICONVERTW POLEUICONVERT; + alias LPOLEUICONVERTW LPOLEUICONVERT; + alias OleUIConvertW OleUIConvert; + alias OLEUIBUSYW OLEUIBUSY; + alias POLEUIBUSYW POLEUIBUSY; + alias LPOLEUIBUSYW LPOLEUIBUSY; + alias OleUIBusyW OleUIBusy; + alias OLEUICHANGESOURCEW OLEUICHANGESOURCE; + alias POLEUICHANGESOURCEW POLEUICHANGESOURCE; + alias LPOLEUICHANGESOURCEW LPOLEUICHANGESOURCE; + alias OleUIChangeSourceW OleUIChangeSource; + alias IOleUIObjInfoW IOleUIObjInfo; + alias LPOLEUIOBJINFOW LPOLEUIOBJINFO; + alias IOleUILinkInfoW IOleUILinkInfo; + //alias IOleUILinkInfoWVtbl IOleUILinkInfoVtbl; + alias LPOLEUILINKINFOW LPOLEUILINKINFO; + alias OLEUIGNRLPROPSW OLEUIGNRLPROPS; + alias POLEUIGNRLPROPSW POLEUIGNRLPROPS; + alias LPOLEUIGNRLPROPSW LPOLEUIGNRLPROPS; + alias OLEUIVIEWPROPSW OLEUIVIEWPROPS; + alias POLEUIVIEWPROPSW POLEUIVIEWPROPS; + alias LPOLEUIVIEWPROPSW LPOLEUIVIEWPROPS; + alias OLEUILINKPROPSW OLEUILINKPROPS; + alias POLEUILINKPROPSW POLEUILINKPROPS; + alias LPOLEUILINKPROPSW LPOLEUILINKPROPS; +} else { + alias IDD_SERVERNOTREGA IDD_SERVERNOTREG; + alias IDD_LINKTYPECHANGEDA IDD_LINKTYPECHANGED; + alias OleUIUpdateLinksA OleUIUpdateLinks; + alias OleUIAddVerbMenuA OleUIAddVerbMenu; + alias OLEUIOBJECTPROPSA OLEUIOBJECTPROPS; + alias POLEUIOBJECTPROPSA POLEUIOBJECTPROPS; + alias LPOLEUIOBJECTPROPSA LPOLEUIOBJECTPROPS; + alias OleUIObjectPropertiesA OleUIObjectProperties; + alias OLEUIINSERTOBJECTA OLEUIINSERTOBJECT; + alias POLEUIINSERTOBJECTA POLEUIINSERTOBJECT; + alias LPOLEUIINSERTOBJECTA LPOLEUIINSERTOBJECT; + alias OleUIInsertObjectA OleUIInsertObject; + alias OleUIPromptUserA OleUIPromptUser; + alias OLEUIPASTEENTRYA OLEUIPASTEENTRY; + alias POLEUIPASTEENTRYA POLEUIPASTEENTRY; + alias LPOLEUIPASTEENTRYA LPOLEUIPASTEENTRY; + alias OLEUIPASTESPECIALA OLEUIPASTESPECIAL; + alias POLEUIPASTESPECIALA POLEUIPASTESPECIAL; + alias LPOLEUIPASTESPECIALA LPOLEUIPASTESPECIAL; + alias OleUIPasteSpecialA OleUIPasteSpecial; + alias IOleUILinkContainerA IOleUILinkContainer; + alias LPOLEUILINKCONTAINERA LPOLEUILINKCONTAINER; + alias OLEUIEDITLINKSA OLEUIEDITLINKS; + alias POLEUIEDITLINKSA POLEUIEDITLINKS; + alias LPOLEUIEDITLINKSA LPOLEUIEDITLINKS; + alias OleUIEditLinksA OleUIEditLinks; + alias OLEUICHANGEICONA OLEUICHANGEICON; + alias POLEUICHANGEICONA POLEUICHANGEICON; + alias LPOLEUICHANGEICONA LPOLEUICHANGEICON; + alias OleUIChangeIconA OleUIChangeIcon; + alias OLEUICONVERTA OLEUICONVERT; + alias POLEUICONVERTA POLEUICONVERT; + alias LPOLEUICONVERTA LPOLEUICONVERT; + alias OleUIConvertA OleUIConvert; + alias OLEUIBUSYA OLEUIBUSY; + alias POLEUIBUSYA POLEUIBUSY; + alias LPOLEUIBUSYA LPOLEUIBUSY; + alias OleUIBusyA OleUIBusy; + alias OLEUICHANGESOURCEA OLEUICHANGESOURCE; + alias POLEUICHANGESOURCEA POLEUICHANGESOURCE; + alias LPOLEUICHANGESOURCEA LPOLEUICHANGESOURCE; + alias OleUIChangeSourceA OleUIChangeSource; + alias IOleUIObjInfoA IOleUIObjInfo; + alias LPOLEUIOBJINFOA LPOLEUIOBJINFO; + alias IOleUILinkInfoA IOleUILinkInfo; + //alias IOleUILinkInfoAVtbl IOleUILinkInfoVtbl; + alias LPOLEUILINKINFOA LPOLEUILINKINFO; + alias OLEUIGNRLPROPSA OLEUIGNRLPROPS; + alias POLEUIGNRLPROPSA POLEUIGNRLPROPS; + alias LPOLEUIGNRLPROPSA LPOLEUIGNRLPROPS; + alias OLEUIVIEWPROPSA OLEUIVIEWPROPS; + alias POLEUIVIEWPROPSA POLEUIVIEWPROPS; + alias LPOLEUIVIEWPROPSA LPOLEUIVIEWPROPS; + alias OLEUILINKPROPSA OLEUILINKPROPS; + alias POLEUILINKPROPSA POLEUILINKPROPS; + alias LPOLEUILINKPROPSA LPOLEUILINKPROPS; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/oleidl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/oleidl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,270 @@ +/***********************************************************************\ +* oleidl.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.oleidl; + +// DAC: This is defined in ocidl !! +// what is it doing in here? +//alias IEnumOleUndoUnits* LPENUMOLEUNDOUNITS; + +private import win32.basetyps, win32.objidl, win32.unknwn, win32.windef, + win32.winuser, win32.wtypes; +private import win32.objfwd; // for LPMONIKER +private import win32.wingdi; // for LPLOGPALETTE + +const MK_ALT = 32; + +enum BINDSPEED { + BINDSPEED_INDEFINITE = 1, + BINDSPEED_MODERATE, + BINDSPEED_IMMEDIATE +} + +enum OLEWHICHMK { + OLEWHICHMK_CONTAINER = 1, + OLEWHICHMK_OBJREL, + OLEWHICHMK_OBJFULL +} + +enum OLEGETMONIKER { + OLEGETMONIKER_ONLYIFTHERE = 1, + OLEGETMONIKER_FORCEASSIGN, + OLEGETMONIKER_UNASSIGN, + OLEGETMONIKER_TEMPFORUSER +} + +enum USERCLASSTYPE { + USERCLASSTYPE_FULL = 1, + USERCLASSTYPE_SHORT, + USERCLASSTYPE_APPNAME +} + +enum DROPEFFECT { + DROPEFFECT_NONE = 0, + DROPEFFECT_COPY = 1, + DROPEFFECT_MOVE = 2, + DROPEFFECT_LINK = 4, + DROPEFFECT_SCROLL = 0x80000000 +} + +struct OLEMENUGROUPWIDTHS { + LONG width[6]; +} +alias OLEMENUGROUPWIDTHS* LPOLEMENUGROUPWIDTHS; + +alias HGLOBAL HOLEMENU; + +enum OLECLOSE { + OLECLOSE_SAVEIFDIRTY, + OLECLOSE_NOSAVE, + OLECLOSE_PROMPTSAVE +} + +struct OLEVERB { + LONG lVerb; + LPWSTR lpszVerbName; + DWORD fuFlags; + DWORD grfAttribs; +} +alias OLEVERB* LPOLEVERB; + +alias RECT BORDERWIDTHS; +alias LPRECT LPBORDERWIDTHS; +alias LPCRECT LPCBORDERWIDTHS; + +struct OLEINPLACEFRAMEINFO { + UINT cb; + BOOL fMDIApp; + HWND hwndFrame; + HACCEL haccel; + UINT cAccelEntries; +} +alias OLEINPLACEFRAMEINFO* LPOLEINPLACEFRAMEINFO; + +interface IEnumOLEVERB : public IUnknown +{ + HRESULT Next(ULONG,OLEVERB*,ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumOLEVERB**); +} +//alias IEnumOLEVERB IEnumOleVerb; +alias IEnumOLEVERB LPENUMOLEVERB; + + +interface IParseDisplayName : public IUnknown { + HRESULT ParseDisplayName(IBindCtx*,LPOLESTR,ULONG*,IMoniker**); +} +alias IParseDisplayName LPPARSEDISPLAYNAME; + +interface IOleContainer : public IParseDisplayName { + HRESULT EnumObjects(DWORD,IEnumUnknown**); + HRESULT LockContainer(BOOL); +} +alias IOleContainer LPOLECONTAINER; + +interface IOleItemContainer : public IOleContainer { + HRESULT GetObject(LPOLESTR,DWORD,IBindCtx*,REFIID,void**); + HRESULT GetObjectStorage(LPOLESTR,IBindCtx*,REFIID,void**); + HRESULT IsRunning(LPOLESTR); +} + + +interface IOleClientSite : public IUnknown { + HRESULT SaveObject(); + HRESULT GetMoniker(DWORD,DWORD,LPMONIKER*); + HRESULT GetContainer(LPOLECONTAINER*); + HRESULT ShowObject(); + HRESULT OnShowWindow(BOOL); + HRESULT RequestNewObjectLayout(); +} +alias IOleClientSite LPOLECLIENTSITE; + +interface IOleObject : public IUnknown { + HRESULT SetClientSite(LPOLECLIENTSITE); + HRESULT GetClientSite(LPOLECLIENTSITE*); + HRESULT SetHostNames(LPCOLESTR,LPCOLESTR); + HRESULT Close(DWORD); + HRESULT SetMoniker(DWORD,LPMONIKER); + HRESULT GetMoniker(DWORD,DWORD,LPMONIKER*); + HRESULT InitFromData(LPDATAOBJECT,BOOL,DWORD); + HRESULT GetClipboardData(DWORD,LPDATAOBJECT*); + HRESULT DoVerb(LONG,LPMSG,LPOLECLIENTSITE,LONG,HWND,LPCRECT); + HRESULT EnumVerbs(LPENUMOLEVERB*); + HRESULT Update(); + HRESULT IsUpToDate(); + HRESULT GetUserClassID(LPCLSID); + HRESULT GetUserType(DWORD,LPOLESTR*); + HRESULT SetExtent(DWORD,SIZEL*); + HRESULT GetExtent(DWORD,SIZEL*); + HRESULT Advise(LPADVISESINK,PDWORD); + HRESULT Unadvise(DWORD); + HRESULT EnumAdvise(LPENUMSTATDATA*); + HRESULT GetMiscStatus(DWORD,PDWORD); + HRESULT SetColorScheme(LPLOGPALETTE); +} +alias IOleObject LPOLEOBJECT; + +interface IOleWindow : public IUnknown { + HRESULT GetWindow(HWND*); + HRESULT ContextSensitiveHelp(BOOL); +} +alias IOleWindow LPOLEWINDOW; + +interface IOleInPlaceUIWindow : public IOleWindow { + HRESULT GetBorder(LPRECT); + HRESULT RequestBorderSpace(LPCBORDERWIDTHS); + HRESULT SetBorderSpace(LPCBORDERWIDTHS); + HRESULT SetActiveObject(LPOLEINPLACEACTIVEOBJECT,LPCOLESTR); +} +alias IOleInPlaceUIWindow LPOLEINPLACEUIWINDOW; + +interface IOleInPlaceObject : public IOleWindow { + HRESULT InPlaceDeactivate(); + HRESULT UIDeactivate(); + HRESULT SetObjectRects(LPCRECT,LPCRECT); + HRESULT ReactivateAndUndo(); +} + + +interface IOleInPlaceActiveObject : public IOleWindow { + HRESULT TranslateAccelerator(LPMSG); + HRESULT OnFrameWindowActivate(BOOL); + HRESULT OnDocWindowActivate(BOOL); + HRESULT ResizeBorder(LPCRECT,LPOLEINPLACEUIWINDOW,BOOL); + HRESULT EnableModeless(BOOL); +} +alias IOleInPlaceActiveObject LPOLEINPLACEACTIVEOBJECT; + +interface IOleInPlaceFrame : public IOleInPlaceUIWindow { + HRESULT InsertMenus(HMENU,LPOLEMENUGROUPWIDTHS); + HRESULT SetMenu(HMENU,HOLEMENU,HWND); + HRESULT RemoveMenus(HMENU); + HRESULT SetStatusText(LPCOLESTR); + HRESULT EnableModeless(BOOL); + HRESULT TranslateAccelerator(LPMSG,WORD); +} +alias IOleInPlaceFrame LPOLEINPLACEFRAME; + +interface IOleInPlaceSite : public IOleWindow { + HRESULT CanInPlaceActivate(); + HRESULT OnInPlaceActivate(); + HRESULT OnUIActivate(); + HRESULT GetWindowContext(IOleInPlaceFrame*,IOleInPlaceUIWindow*,LPRECT,LPRECT,LPOLEINPLACEFRAMEINFO); + HRESULT Scroll(SIZE); + HRESULT OnUIDeactivate(BOOL); + HRESULT OnInPlaceDeactivate(); + HRESULT DiscardUndoState(); + HRESULT DeactivateAndUndo(); + HRESULT OnPosRectChange(LPCRECT); +} + +interface IOleAdviseHolder : public IUnknown { + HRESULT Advise(LPADVISESINK,PDWORD); + HRESULT Unadvise(DWORD); + HRESULT EnumAdvise(LPENUMSTATDATA*); + HRESULT SendOnRename(LPMONIKER); + HRESULT SendOnSave(); + HRESULT SendOnClose(); +} +alias IOleAdviseHolder LPOLEADVISEHOLDER; + +interface IDropSource : public IUnknown { + HRESULT QueryContinueDrag(BOOL,DWORD); + HRESULT GiveFeedback(DWORD); +} +alias IDropSource LPDROPSOURCE; + +interface IDropTarget : public IUnknown { + HRESULT DragEnter(LPDATAOBJECT,DWORD,POINTL,PDWORD); + HRESULT DragOver(DWORD,POINTL,PDWORD); + HRESULT DragLeave(); + HRESULT Drop(LPDATAOBJECT,DWORD,POINTL,PDWORD); +} +alias IDropTarget LPDROPTARGET; + +extern (Windows) { + alias BOOL function(DWORD) __IView_pfncont; +} + +interface IViewObject : public IUnknown { + HRESULT Draw(DWORD,LONG,PVOID,DVTARGETDEVICE*,HDC,HDC,LPCRECTL,LPCRECTL,__IView_pfncont pfnContinue,DWORD); + HRESULT GetColorSet(DWORD,LONG,PVOID,DVTARGETDEVICE*,HDC,LPLOGPALETTE*); + HRESULT Freeze(DWORD,LONG,PVOID,PDWORD); + HRESULT Unfreeze(DWORD); + HRESULT SetAdvise(DWORD,DWORD,IAdviseSink*); + HRESULT GetAdvise(PDWORD,PDWORD,IAdviseSink**); +} +alias IViewObject LPVIEWOBJECT; + +interface IViewObject2 : public IViewObject { + HRESULT GetExtent(DWORD,LONG,DVTARGETDEVICE*,LPSIZEL); +} +alias IViewObject2 LPVIEWOBJECT2; + +interface IOleCache : public IUnknown { + HRESULT Cache(FORMATETC*,DWORD,DWORD*); + HRESULT Uncache(DWORD); + HRESULT EnumCache(IEnumSTATDATA**); + HRESULT InitCache(LPDATAOBJECT); + HRESULT SetData(FORMATETC*,STGMEDIUM*,BOOL); +} +alias IOleCache LPOLECACHE; + +interface IOleCache2 : public IOleCache { + HRESULT UpdateCache(LPDATAOBJECT,DWORD,LPVOID); + HRESULT DiscardCache(DWORD); +} +alias IOleCache2 LPOLECACHE2; + +interface IOleCacheControl : public IUnknown { + HRESULT OnRun(LPDATAOBJECT); + HRESULT OnStop(); +} +alias IOleCacheControl LPOLECACHECONTROL; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/pbt.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/pbt.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,30 @@ +/***********************************************************************\ +* pbt.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.pbt; + +private import win32.windef; + +enum : WPARAM { + PBT_APMQUERYSUSPEND, + PBT_APMQUERYSTANDBY, + PBT_APMQUERYSUSPENDFAILED, + PBT_APMQUERYSTANDBYFAILED, + PBT_APMSUSPEND, + PBT_APMSTANDBY, + PBT_APMRESUMECRITICAL, + PBT_APMRESUMESUSPEND, + PBT_APMRESUMESTANDBY, + PBT_APMBATTERYLOW, + PBT_APMPOWERSTATUSCHANGE, + PBT_APMOEMEVENT // = 11 +} + +const LPARAM PBTF_APMRESUMEFROMFAILURE = 1; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/powrprof.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/powrprof.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,140 @@ +/***********************************************************************\ +* powrprof.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.powrprof; +pragma(lib, "powrprof.lib"); + +private import win32.windef; +private import win32.ntdef; + +// FIXME: look up Windows version support + +const ULONG + EnableSysTrayBatteryMeter = 1, + EnableMultiBatteryDisplay = 2, + EnablePasswordLogon = 4, + EnableWakeOnRing = 8, + EnableVideoDimDisplay = 16; + +const UINT NEWSCHEME = -1; + +struct GLOBAL_MACHINE_POWER_POLICY { + ULONG Revision; + SYSTEM_POWER_STATE LidOpenWakeAc; + SYSTEM_POWER_STATE LidOpenWakeDc; + ULONG BroadcastCapacityResolution; +} +alias GLOBAL_MACHINE_POWER_POLICY* PGLOBAL_MACHINE_POWER_POLICY; + +struct GLOBAL_USER_POWER_POLICY { + ULONG Revision; + POWER_ACTION_POLICY PowerButtonAc; + POWER_ACTION_POLICY PowerButtonDc; + POWER_ACTION_POLICY SleepButtonAc; + POWER_ACTION_POLICY SleepButtonDc; + POWER_ACTION_POLICY LidCloseAc; + POWER_ACTION_POLICY LidCloseDc; + SYSTEM_POWER_LEVEL[NUM_DISCHARGE_POLICIES] DischargePolicy; + ULONG GlobalFlags; +} +alias GLOBAL_USER_POWER_POLICY* PGLOBAL_USER_POWER_POLICY; + +struct GLOBAL_POWER_POLICY { + GLOBAL_USER_POWER_POLICY user; + GLOBAL_MACHINE_POWER_POLICY mach; +} +alias GLOBAL_POWER_POLICY* PGLOBAL_POWER_POLICY; + +struct MACHINE_POWER_POLICY { + ULONG Revision; + SYSTEM_POWER_STATE MinSleepAc; + SYSTEM_POWER_STATE MinSleepDc; + SYSTEM_POWER_STATE ReducedLatencySleepAc; + SYSTEM_POWER_STATE ReducedLatencySleepDc; + ULONG DozeTimeoutAc; + ULONG DozeTimeoutDc; + ULONG DozeS4TimeoutAc; + ULONG DozeS4TimeoutDc; + UCHAR MinThrottleAc; + UCHAR MinThrottleDc; + UCHAR[2] pad1; + POWER_ACTION_POLICY OverThrottledAc; + POWER_ACTION_POLICY OverThrottledDc; +} +alias MACHINE_POWER_POLICY* PMACHINE_POWER_POLICY; + +struct MACHINE_PROCESSOR_POWER_POLICY { + ULONG Revision; + PROCESSOR_POWER_POLICY ProcessorPolicyAc; + PROCESSOR_POWER_POLICY ProcessorPolicyDc; +} +alias MACHINE_PROCESSOR_POWER_POLICY* PMACHINE_PROCESSOR_POWER_POLICY; + +struct USER_POWER_POLICY { + ULONG Revision; + POWER_ACTION_POLICY IdleAc; + POWER_ACTION_POLICY IdleDc; + ULONG IdleTimeoutAc; + ULONG IdleTimeoutDc; + UCHAR IdleSensitivityAc; + UCHAR IdleSensitivityDc; + UCHAR ThrottlePolicyAc; + UCHAR ThrottlePolicyDc; + SYSTEM_POWER_STATE MaxSleepAc; + SYSTEM_POWER_STATE MaxSleepDc; + ULONG[2] Reserved; + ULONG VideoTimeoutAc; + ULONG VideoTimeoutDc; + ULONG SpindownTimeoutAc; + ULONG SpindownTimeoutDc; + BOOLEAN OptimizeForPowerAc; + BOOLEAN OptimizeForPowerDc; + UCHAR FanThrottleToleranceAc; + UCHAR FanThrottleToleranceDc; + UCHAR ForcedThrottleAc; + UCHAR ForcedThrottleDc; +} +alias USER_POWER_POLICY* PUSER_POWER_POLICY; + +struct POWER_POLICY { + USER_POWER_POLICY user; + MACHINE_POWER_POLICY mach; +} +alias POWER_POLICY* PPOWER_POLICY; + +extern (Windows) { + alias BOOLEAN function(UINT, DWORD, LPTSTR, DWORD, LPTSTR, PPOWER_POLICY, + LPARAM) PWRSCHEMESENUMPROC; + alias BOOLEAN function(POWER_ACTION, SYSTEM_POWER_STATE, ULONG, BOOLEAN) + PFNNTINITIATEPWRACTION; + + NTSTATUS CallNtPowerInformation(POWER_INFORMATION_LEVEL, PVOID, ULONG, + PVOID, ULONG); + BOOLEAN CanUserWritePwrScheme(); + BOOLEAN DeletePwrScheme(UINT); + BOOLEAN EnumPwrSchemes(PWRSCHEMESENUMPROC, LPARAM); + BOOLEAN GetActivePwrScheme(PUINT); + BOOLEAN GetCurrentPowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY); + BOOLEAN GetPwrCapabilities(PSYSTEM_POWER_CAPABILITIES); + BOOLEAN GetPwrDiskSpindownRange(PUINT, PUINT); + BOOLEAN IsAdminOverrideActive(PADMINISTRATOR_POWER_POLICY); + BOOLEAN IsPwrHibernateAllowed(); + BOOLEAN IsPwrShutdownAllowed(); + BOOLEAN IsPwrSuspendAllowed(); + BOOLEAN ReadGlobalPwrPolicy(PGLOBAL_POWER_POLICY); + BOOLEAN ReadProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY); + BOOLEAN ReadPwrScheme(UINT, PPOWER_POLICY); + BOOLEAN SetActivePwrScheme(UINT, PGLOBAL_POWER_POLICY, PPOWER_POLICY); + BOOLEAN SetSuspendState(BOOLEAN, BOOLEAN, BOOLEAN); + BOOLEAN WriteGlobalPwrPolicy(PGLOBAL_POWER_POLICY); + BOOLEAN WriteProcessorPwrScheme(UINT, PMACHINE_PROCESSOR_POWER_POLICY); + BOOLEAN ValidatePowerPolicies(PGLOBAL_POWER_POLICY, PPOWER_POLICY); + BOOLEAN WritePwrScheme(PUINT, LPTSTR, LPTSTR, PPOWER_POLICY); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/prsht.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/prsht.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,438 @@ +/***********************************************************************\ +* prsht.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Vladimir Vlasov * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.prsht; +pragma(lib, "comctl32.lib"); + +private import win32.w32api, win32.windef, win32.winuser; + +const MAXPROPPAGES = 100; + +enum { + PSP_DEFAULT = 0x00000000, + PSP_DLGINDIRECT = 0x00000001, + PSP_USEHICON = 0x00000002, + PSP_USEICONID = 0x00000004, + PSP_USETITLE = 0x00000008, + PSP_RTLREADING = 0x00000010, + PSP_HASHELP = 0x00000020, + PSP_USEREFPARENT = 0x00000040, + PSP_USECALLBACK = 0x00000080, + PSP_PREMATURE = 0x00000400 +} + +static if (_WIN32_IE >= 0x0400) { + enum { + PSP_HIDEHEADER = 0x00000800, + PSP_USEHEADERTITLE = 0x00001000, + PSP_USEHEADERSUBTITLE = 0x00002000 + } +} + +enum { + PSPCB_RELEASE = 1, + PSPCB_CREATE +} + +enum { + PSH_DEFAULT = 0x00000000, + PSH_PROPTITLE = 0x00000001, + PSH_USEHICON = 0x00000002, + PSH_USEICONID = 0x00000004, + PSH_PROPSHEETPAGE = 0x00000008, + PSH_WIZARDHASFINISH = 0x00000010, + PSH_WIZARD = 0x00000020, + PSH_USEPSTARTPAGE = 0x00000040, + PSH_NOAPPLYNOW = 0x00000080, + PSH_USECALLBACK = 0x00000100, + PSH_HASHELP = 0x00000200, + PSH_MODELESS = 0x00000400, + PSH_RTLREADING = 0x00000800, + PSH_WIZARDCONTEXTHELP = 0x00001000 +} + +static if (_WIN32_IE >= 0x0400) { + enum { + PSH_WATERMARK = 0x00008000, + PSH_USEHBMWATERMARK = 0x00010000, + PSH_USEHPLWATERMARK = 0x00020000, + PSH_STRETCHWATERMARK = 0x00040000, + PSH_HEADER = 0x00080000, + PSH_USEHBMHEADER = 0x00100000, + PSH_USEPAGELANG = 0x00200000 + } + static if (_WIN32_IE < 0x0500) { + enum { + PSH_WIZARD97 = 0x00002000 + } + } else { + enum { + PSH_WIZARD97 = 0x01000000 + } + } +} + +static if (_WIN32_IE >= 0x0500) { + enum { + PSH_WIZARD_LITE = 0x00400000, + PSH_NOCONTEXTHELP = 0x02000000 + } +} + +enum { + PSCB_INITIALIZED = 1, + PSCB_PRECREATE +} + +enum { + PSN_FIRST = (-200), + PSN_LAST = (-299), + PSN_SETACTIVE = (-200), + PSN_KILLACTIVE = (-201), + PSN_APPLY = (-202), + PSN_RESET = (-203), + PSN_HELP = (-205), + PSN_WIZBACK = (-206), + PSN_WIZNEXT = (-207), + PSN_WIZFINISH = (-208), + PSN_QUERYCANCEL = (-209) +} +static if (_WIN32_IE >= 0x0400) { + enum { + PSN_GETOBJECT = (-210) + } +} +static if (_WIN32_IE >= 0x0500) { + enum { + PSN_TRANSLATEACCELERATOR = (-212), + PSN_QUERYINITIALFOCUS = (-213) + } +} + +enum { + PSNRET_NOERROR, + PSNRET_INVALID, + PSNRET_INVALID_NOCHANGEPAGE, + PSNRET_MESSAGEHANDLED +} + +enum { + ID_PSRESTARTWINDOWS = 0x2, + ID_PSREBOOTSYSTEM = ID_PSRESTARTWINDOWS | 0x1 +} + +enum { + WIZ_CXDLG = 276, + WIZ_CYDLG = 140, + WIZ_CXBMP = 80, + WIZ_BODYX = 92, + WIZ_BODYCX = 184 +} + +enum { + PROP_SM_CXDLG = 212, + PROP_SM_CYDLG = 188, + PROP_MED_CXDLG = 227, + PROP_MED_CYDLG = 215, + PROP_LG_CXDLG = 252, + PROP_LG_CYDLG = 218 +} + +enum { + PSBTN_BACK, + PSBTN_NEXT, + PSBTN_FINISH, + PSBTN_OK, + PSBTN_APPLYNOW, + PSBTN_CANCEL, + PSBTN_HELP, + PSBTN_MAX = 6 +} + +enum { + PSWIZB_BACK = 1, + PSWIZB_NEXT = 2, + PSWIZB_FINISH = 4, + PSWIZB_DISABLEDFINISH = 8 +} + +enum { + PSM_SETCURSEL = WM_USER + 101, + PSM_REMOVEPAGE, + PSM_ADDPAGE, + PSM_CHANGED, + PSM_RESTARTWINDOWS, + PSM_REBOOTSYSTEM, + PSM_CANCELTOCLOSE, + PSM_QUERYSIBLINGS, + PSM_UNCHANGED, + PSM_APPLY, + PSM_SETTITLEA, + PSM_SETWIZBUTTONS, + PSM_PRESSBUTTON, + PSM_SETCURSELID, + PSM_SETFINISHTEXTA, + PSM_GETTABCONTROL, + PSM_ISDIALOGMESSAGE, + PSM_GETCURRENTPAGEHWND, + PSM_INSERTPAGE, + PSM_SETTITLEW, + PSM_SETFINISHTEXTW // = WM_USER + 121, +} + +alias UINT function(HWND, UINT, LPPROPSHEETPAGEA) LPFNPSPCALLBACKA; +alias UINT function(HWND, UINT, LPPROPSHEETPAGEW) LPFNPSPCALLBACKW; +alias int function(HWND, UINT, LPARAM) PFNPROPSHEETCALLBACK; + +align(4): + +struct PROPSHEETPAGEA { + DWORD dwSize = PROPSHEETPAGEA.sizeof; + DWORD dwFlags; + HINSTANCE hInstance; + union { + LPCSTR pszTemplate; + LPCDLGTEMPLATE pResource; + } + union { + HICON hIcon; + LPCSTR pszIcon; + } + LPCSTR pszTitle; + DLGPROC pfnDlgProc; + LPARAM lParam; + LPFNPSPCALLBACKA pfnCallback; + UINT* pcRefParent; + static if (_WIN32_IE >= 0x0400) { + LPCSTR pszHeaderTitle; + LPCSTR pszHeaderSubTitle; + } +} +alias PROPSHEETPAGEA* LPPROPSHEETPAGEA, LPCPROPSHEETPAGEA; + +struct PROPSHEETPAGEW { + DWORD dwSize = PROPSHEETPAGEW.sizeof; + DWORD dwFlags; + HINSTANCE hInstance; + union { + LPCWSTR pszTemplate; + LPCDLGTEMPLATE pResource; + } + union { + HICON hIcon; + LPCWSTR pszIcon; + } + LPCWSTR pszTitle; + DLGPROC pfnDlgProc; + LPARAM lParam; + LPFNPSPCALLBACKW pfnCallback; + UINT* pcRefParent; + static if (_WIN32_IE >= 0x0400) { + LPCWSTR pszHeaderTitle; + LPCWSTR pszHeaderSubTitle; + } +} +alias PROPSHEETPAGEW* LPPROPSHEETPAGEW, LPCPROPSHEETPAGEW; + +alias HANDLE HPROPSHEETPAGE; + +struct PROPSHEETHEADERA { + DWORD dwSize = PROPSHEETHEADERA.sizeof; + DWORD dwFlags; + HWND hwndParent; + HINSTANCE hInstance; + union { + HICON hIcon; + LPCSTR pszIcon; + } + LPCSTR pszCaption; + UINT nPages; + union { + UINT nStartPage; + LPCSTR pStartPage; + } + union { + LPCPROPSHEETPAGEA ppsp; + HPROPSHEETPAGE* phpage; + } + PFNPROPSHEETCALLBACK pfnCallback; + static if (_WIN32_IE >= 0x0400) { + union { + HBITMAP hbmWatermark; + LPCSTR pszbmWatermark; + } + HPALETTE hplWatermark; + union { + HBITMAP hbmHeader; + LPCSTR pszbmHeader; + } + } +} +alias PROPSHEETHEADERA* LPPROPSHEETHEADERA, LPCPROPSHEETHEADERA; + +struct PROPSHEETHEADERW { + DWORD dwSize = PROPSHEETHEADERW.sizeof; + DWORD dwFlags; + HWND hwndParent; + HINSTANCE hInstance; + union { + HICON hIcon; + LPCWSTR pszIcon; + } + LPCWSTR pszCaption; + UINT nPages; + union { + UINT nStartPage; + LPCWSTR pStartPage; + } + union { + LPCPROPSHEETPAGEW ppsp; + HPROPSHEETPAGE* phpage; + } + PFNPROPSHEETCALLBACK pfnCallback; + static if (_WIN32_IE >= 0x0400) { + union { + HBITMAP hbmWatermark; + LPCWSTR pszbmWatermark; + } + HPALETTE hplWatermark; + union { + HBITMAP hbmHeader; + LPCWSTR pszbmHeader; + } + } +} +alias PROPSHEETHEADERW* LPPROPSHEETHEADERW, LPCPROPSHEETHEADERW; + +alias BOOL function(HPROPSHEETPAGE, LPARAM) LPFNADDPROPSHEETPAGE; +alias BOOL function(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM) + LPFNADDPROPSHEETPAGES; + +struct PSHNOTIFY { + NMHDR hdr; + LPARAM lParam; +} +alias PSHNOTIFY* LPPSHNOTIFY; + +extern (Windows) { + HPROPSHEETPAGE CreatePropertySheetPageA(LPCPROPSHEETPAGEA); + HPROPSHEETPAGE CreatePropertySheetPageW(LPCPROPSHEETPAGEW); + BOOL DestroyPropertySheetPage(HPROPSHEETPAGE); + int PropertySheetA(LPCPROPSHEETHEADERA); + int PropertySheetW(LPCPROPSHEETHEADERW); +} + +version (Unicode) { + alias LPFNPSPCALLBACKW LPFNPSPCALLBACK; + alias PROPSHEETPAGEW PROPSHEETPAGE; + alias LPPROPSHEETPAGEW LPPROPSHEETPAGE; + alias LPCPROPSHEETPAGEW LPCPROPSHEETPAGE; + alias PROPSHEETHEADERW PROPSHEETHEADER; + alias LPPROPSHEETHEADERW LPPROPSHEETHEADER; + alias LPCPROPSHEETHEADERW LPCPROPSHEETHEADER; + alias PSM_SETTITLEW PSM_SETTITLE; + alias PSM_SETFINISHTEXTW PSM_SETFINISHTEXT; + alias CreatePropertySheetPageW CreatePropertySheetPage; + alias PropertySheetW PropertySheet; +} else { + alias LPFNPSPCALLBACKA LPFNPSPCALLBACK; + alias PROPSHEETPAGEA PROPSHEETPAGE; + alias LPPROPSHEETPAGEA LPPROPSHEETPAGE; + alias LPCPROPSHEETPAGEA LPCPROPSHEETPAGE; + alias PROPSHEETHEADERA PROPSHEETHEADER; + alias LPPROPSHEETHEADERA LPPROPSHEETHEADER; + alias LPCPROPSHEETHEADERA LPCPROPSHEETHEADER; + alias PSM_SETTITLEA PSM_SETTITLE; + alias PSM_SETFINISHTEXTA PSM_SETFINISHTEXT; + alias CreatePropertySheetPageA CreatePropertySheetPage; + alias PropertySheetA PropertySheet; +} + +BOOL PropSheet_SetCurSel(HWND hPropSheetDlg, HPROPSHEETPAGE hpage, + HPROPSHEETPAGE index) { + return cast(BOOL) SendMessage(hPropSheetDlg, PSM_SETCURSEL, + cast(WPARAM) index, cast(LPARAM) hpage); +} + +VOID PropSheet_RemovePage(HWND hPropSheetDlg, int index, HPROPSHEETPAGE hpage) { + SendMessage(hPropSheetDlg, PSM_REMOVEPAGE, index, cast(LPARAM) hpage); +} + +BOOL PropSheet_AddPage(HWND hPropSheetDlg, HPROPSHEETPAGE hpage) { + return cast(BOOL) SendMessage(hPropSheetDlg, PSM_ADDPAGE, + 0, cast(LPARAM) hpage); +} + +VOID PropSheet_Changed(HWND hPropSheetDlg, HWND hwndPage) { + SendMessage(hPropSheetDlg, PSM_CHANGED, cast(WPARAM) hwndPage, 0); +} + +VOID PropSheet_RestartWindows(HWND hPropSheetDlg) { + SendMessage(hPropSheetDlg, PSM_RESTARTWINDOWS, 0, 0); +} + +VOID PropSheet_RebootSystem(HWND hPropSheetDlg) { + SendMessage(hPropSheetDlg, PSM_REBOOTSYSTEM, 0, 0); +} + +VOID PropSheet_CancelToClose(HWND hPropSheetDlg) { + SendMessage(hPropSheetDlg, PSM_CANCELTOCLOSE, 0, 0); +} + +int PropSheet_QuerySiblings(HWND hPropSheetDlg, WPARAM param1, LPARAM param2) { + return SendMessage(hPropSheetDlg, PSM_QUERYSIBLINGS, param1, param2); +} + +VOID PropSheet_UnChanged(HWND hPropSheetDlg, HWND hwndPage) { + SendMessage(hPropSheetDlg, PSM_UNCHANGED, cast(WPARAM) hwndPage, 0); +} + +BOOL PropSheet_Apply(HWND hPropSheetDlg) { + return cast(BOOL) SendMessage(hPropSheetDlg, PSM_APPLY, 0, 0); +} + +VOID PropSheet_SetTitle(HWND hPropSheetDlg, DWORD wStyle, LPTSTR lpszText) { + SendMessage(hPropSheetDlg, PSM_SETTITLE, wStyle, cast(LPARAM) lpszText); +} + +VOID PropSheet_SetWizButtons(HWND hPropSheetDlg, DWORD dwFlags) { + PostMessage(hPropSheetDlg, PSM_SETWIZBUTTONS, 0, cast(LPARAM) dwFlags); +} + +BOOL PropSheet_PressButton(HWND hPropSheetDlg, int iButton) { + return cast(BOOL) SendMessage(hPropSheetDlg, PSM_PRESSBUTTON, iButton, 0); +} + +BOOL PropSheet_SetCurSelByID(HWND hPropSheetDlg, int id) { + return cast(BOOL) SendMessage(hPropSheetDlg, PSM_SETCURSELID, 0, id); +} + +VOID PropSheet_SetFinishText(HWND hPropSheetDlg, LPTSTR lpszText) { + SendMessage(hPropSheetDlg, PSM_SETFINISHTEXT, 0, cast(LPARAM) lpszText); +} + +HWND PropSheet_GetTabControl(HWND hPropSheetDlg) { + return cast(HWND) SendMessage(hPropSheetDlg, PSM_GETTABCONTROL, 0, 0); +} + +BOOL PropSheet_IsDialogMessage(HWND hDlg, LPMSG pMsg) { + return cast(BOOL) SendMessage(hDlg, PSM_ISDIALOGMESSAGE, + 0, cast(LPARAM) pMsg); +} + +HWND PropSheet_GetCurrentPageHwnd(HWND hDlg) { + return cast(HWND) SendMessage(hDlg, PSM_GETCURRENTPAGEHWND, 0, 0); +} + +BOOL PropSheet_InsertPage(HWND hPropSheetDlg, WPARAM wInsertAfter, + HPROPSHEETPAGE hpage) { + return cast(BOOL) SendMessage(hPropSheetDlg, PSM_INSERTPAGE, + wInsertAfter, cast(LPARAM) hpage); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/psapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/psapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,158 @@ +/***********************************************************************\ +* psapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +/* Comment from MinGW + * Process status API (PSAPI) + * http://windowssdk.msdn.microsoft.com/library/ms684884.aspx + */ + +module win32.psapi; + +private import win32.w32api; +private import win32.winbase; +private import win32.windef; + +struct MODULEINFO { + LPVOID lpBaseOfDll; + DWORD SizeOfImage; + LPVOID EntryPoint; +} +alias MODULEINFO* LPMODULEINFO; + +struct PSAPI_WS_WATCH_INFORMATION { + LPVOID FaultingPc; + LPVOID FaultingVa; +} +alias PSAPI_WS_WATCH_INFORMATION* PPSAPI_WS_WATCH_INFORMATION; + +struct PSAPI_WS_WATCH_INFORMATION_EX { + PSAPI_WS_WATCH_INFORMATION BasicInfo; + ULONG_PTR FaultingThreadId; + ULONG_PTR Flags; +} +alias PSAPI_WS_WATCH_INFORMATION_EX* PPSAPI_WS_WATCH_INFORMATION_EX; + +struct PROCESS_MEMORY_COUNTERS { + DWORD cb; + DWORD PageFaultCount; + DWORD PeakWorkingSetSize; + DWORD WorkingSetSize; + DWORD QuotaPeakPagedPoolUsage; + DWORD QuotaPagedPoolUsage; + DWORD QuotaPeakNonPagedPoolUsage; + DWORD QuotaNonPagedPoolUsage; + DWORD PagefileUsage; + DWORD PeakPagefileUsage; +} +alias PROCESS_MEMORY_COUNTERS* PPROCESS_MEMORY_COUNTERS; + +struct PERFORMANCE_INFORMATION { + DWORD cb; + SIZE_T CommitTotal; + SIZE_T CommitLimit; + SIZE_T CommitPeak; + SIZE_T PhysicalTotal; + SIZE_T PhysicalAvailable; + SIZE_T SystemCache; + SIZE_T KernelTotal; + SIZE_T KernelPaged; + SIZE_T KernelNonpaged; + SIZE_T PageSize; + DWORD HandleCount; + DWORD ProcessCount; + DWORD ThreadCount; +} +alias PERFORMANCE_INFORMATION* PPERFORMANCE_INFORMATION; + +struct ENUM_PAGE_FILE_INFORMATION { + DWORD cb; + DWORD Reserved; + SIZE_T TotalSize; + SIZE_T TotalInUse; + SIZE_T PeakUsage; +} +alias ENUM_PAGE_FILE_INFORMATION* PENUM_PAGE_FILE_INFORMATION; + +/* application-defined callback function used with the EnumPageFiles() + * http://windowssdk.msdn.microsoft.com/library/ms682627.aspx */ +version (Unicode) { + alias BOOL function(LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCWSTR) + PENUM_PAGE_FILE_CALLBACK; +} else { + alias BOOL function(LPVOID, PENUM_PAGE_FILE_INFORMATION, LPCSTR) + PENUM_PAGE_FILE_CALLBACK; +} + +// Grouped by application, not in alphabetical order. +extern (Windows) { + /* Process Information + * http://windowssdk.msdn.microsoft.com/library/ms684870.aspx */ + BOOL EnumProcesses(DWORD*, DWORD, DWORD*); /* NT/2000/XP/Server2003/Vista/Longhorn */ + DWORD GetProcessImageFileNameA(HANDLE, LPSTR, DWORD); /* XP/Server2003/Vista/Longhorn */ + DWORD GetProcessImageFileNameW(HANDLE, LPWSTR, DWORD); /* XP/Server2003/Vista/Longhorn */ + + /* Module Information + * http://windowssdk.msdn.microsoft.com/library/ms684232.aspx */ + BOOL EnumProcessModules(HANDLE, HMODULE*, DWORD, LPDWORD); + BOOL EnumProcessModulesEx(HANDLE, HMODULE*, DWORD, LPDWORD, DWORD); /* Vista/Longhorn */ + DWORD GetModuleBaseNameA(HANDLE, HMODULE, LPSTR, DWORD); + DWORD GetModuleBaseNameW(HANDLE, HMODULE, LPWSTR, DWORD); + DWORD GetModuleFileNameExA(HANDLE, HMODULE, LPSTR, DWORD); + DWORD GetModuleFileNameExW(HANDLE, HMODULE, LPWSTR, DWORD); + BOOL GetModuleInformation(HANDLE, HMODULE, LPMODULEINFO, DWORD); + + /* Device Driver Information + * http://windowssdk.msdn.microsoft.com/library/ms682578.aspx */ + BOOL EnumDeviceDrivers(LPVOID*, DWORD, LPDWORD); + DWORD GetDeviceDriverBaseNameA(LPVOID, LPSTR, DWORD); + DWORD GetDeviceDriverBaseNameW(LPVOID, LPWSTR, DWORD); + DWORD GetDeviceDriverFileNameA(LPVOID, LPSTR, DWORD); + DWORD GetDeviceDriverFileNameW(LPVOID, LPWSTR, DWORD); + + /* Process Memory Usage Information + * http://windowssdk.msdn.microsoft.com/library/ms684879.aspx */ + BOOL GetProcessMemoryInfo(HANDLE, PPROCESS_MEMORY_COUNTERS, DWORD); + + /* Working Set Information + * http://windowssdk.msdn.microsoft.com/library/ms687398.aspx */ + BOOL EmptyWorkingSet(HANDLE); + BOOL GetWsChanges(HANDLE, PPSAPI_WS_WATCH_INFORMATION, DWORD); + BOOL GetWsChangesEx(HANDLE, PPSAPI_WS_WATCH_INFORMATION_EX, DWORD); /* Vista/Longhorn */ + BOOL InitializeProcessForWsWatch(HANDLE); + BOOL QueryWorkingSet(HANDLE, PVOID, DWORD); + BOOL QueryWorkingSetEx(HANDLE, PVOID, DWORD); + + /* Memory-Mapped File Information + * http://windowssdk.msdn.microsoft.com/library/ms684212.aspx */ + DWORD GetMappedFileNameW(HANDLE, LPVOID, LPWSTR, DWORD); + DWORD GetMappedFileNameA(HANDLE, LPVOID, LPSTR, DWORD); + + /* Resources Information */ + BOOL GetPerformanceInfo(PPERFORMANCE_INFORMATION, DWORD); /* XP/Server2003/Vista/Longhorn */ + BOOL EnumPageFilesW(PENUM_PAGE_FILE_CALLBACK, LPVOID); /* 2000/XP/Server2003/Vista/Longhorn */ + BOOL EnumPageFilesA(PENUM_PAGE_FILE_CALLBACK, LPVOID); /* 2000/XP/Server2003/Vista/Longhorn */ +} + +version (Unicode) { + alias GetModuleBaseNameW GetModuleBaseName; + alias GetModuleFileNameExW GetModuleFileNameEx; + alias GetMappedFileNameW GetMappedFileName; + alias GetDeviceDriverBaseNameW GetDeviceDriverBaseName; + alias GetDeviceDriverFileNameW GetDeviceDriverFileName; + alias EnumPageFilesW EnumPageFiles; + alias GetProcessImageFileNameW GetProcessImageFileName; +} else { + alias GetModuleBaseNameA GetModuleBaseName; + alias GetModuleFileNameExA GetModuleFileNameEx; + alias GetMappedFileNameA GetMappedFileName; + alias GetDeviceDriverBaseNameA GetDeviceDriverBaseName; + alias GetDeviceDriverFileNameA GetDeviceDriverFileName; + alias EnumPageFilesA EnumPageFiles; + alias GetProcessImageFileNameA GetProcessImageFileName; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/rapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/rapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,61 @@ +/***********************************************************************\ +* rapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.rapi; + +/* Comment from MinGW + NOTE: This strictly does not belong in the Win32 API since it's + really part of Platform SDK. + */ + +private import win32.winbase, win32.windef; + +struct IRAPIStream { + IRAPIStreamVtbl* lpVtbl; +} + +enum RAPISTREAMFLAG { + STREAM_TIMEOUT_READ +} + +extern (Windows) { + alias HRESULT function(IRAPIStream*, RAPISTREAMFLAG, DWORD) _SetRapiStat; + alias HRESULT function(IRAPIStream*, RAPISTREAMFLAG, DWORD*) _GetRapiStat; +} + +struct IRAPIStreamVtbl { + _SetRapiStat SetRapiStat; + _GetRapiStat GetRapiStat; +} + +// FIXME: what's this? +//typedef HRESULT(STDAPICALLTYPE RAPIEXT)(DWORD, BYTE, DWORD, BYTE, IRAPIStream*); + +struct RAPIINIT { + DWORD cbSize = this.sizeof; + HANDLE heRapiInit; + HRESULT hrRapiInit; +} + +extern (Windows) { + HRESULT CeRapiInit(); + HRESULT CeRapiInitEx(RAPIINIT*); + BOOL CeCreateProcess(LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES, + LPSECURITY_ATTRIBUTES, BOOL, DWORD, LPVOID, LPWSTR, LPSTARTUPINFO, + LPPROCESS_INFORMATION); + HRESULT CeRapiUninit(); + BOOL CeWriteFile(HANDLE, LPCVOID, DWORD, LPDWORD, LPOVERLAPPED); + HANDLE CeCreateFile(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, + DWORD, HANDLE); + BOOL CeCreateDirectory(LPCWSTR, LPSECURITY_ATTRIBUTES); + DWORD CeGetLastError(); + BOOL CeGetFileTime(HANDLE, LPFILETIME, LPFILETIME, LPFILETIME); + BOOL CeCloseHandle(HANDLE); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ras.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ras.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1029 @@ +/***********************************************************************\ +* ras.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.ras; +pragma(lib, "rasapi32.lib"); + +private import win32.basetyps, win32.lmcons, win32.w32api, win32.windef; + +align(4): + +const RAS_MaxDeviceType = 16; +const RAS_MaxPhoneNumber = 128; +const RAS_MaxIpAddress = 15; +const RAS_MaxIpxAddress = 21; +const RAS_MaxEntryName = 256; +const RAS_MaxDeviceName = 128; +const RAS_MaxCallbackNumber = RAS_MaxPhoneNumber; +const RAS_MaxAreaCode = 10; +const RAS_MaxPadType = 32; +const RAS_MaxX25Address = 200; +const RAS_MaxFacilities = 200; +const RAS_MaxUserData = 200; +const RAS_MaxReplyMessage = 1024; + +const RDEOPT_UsePrefixSuffix = 0x00000001; +const RDEOPT_PausedStates = 0x00000002; +const RDEOPT_IgnoreModemSpeaker = 0x00000004; +const RDEOPT_SetModemSpeaker = 0x00000008; +const RDEOPT_IgnoreSoftwareCompression = 0x00000010; +const RDEOPT_SetSoftwareCompression = 0x00000020; +const RDEOPT_DisableConnectedUI = 0x00000040; +const RDEOPT_DisableReconnectUI = 0x00000080; +const RDEOPT_DisableReconnect = 0x00000100; +const RDEOPT_NoUser = 0x00000200; +const RDEOPT_PauseOnScript = 0x00000400; +const RDEOPT_Router = 0x00000800; + +const REN_User = 0x00000000; +const REN_AllUsers = 0x00000001; +const VS_Default = 0; +const VS_PptpOnly = 1; +const VS_PptpFirst = 2; +const VS_L2tpOnly = 3; +const VS_L2tpFirst = 4; + +const RASDIALEVENT = "RasDialEvent"; +const WM_RASDIALEVENT = 0xCCCD; + +const RASEO_UseCountryAndAreaCodes = 0x00000001; +const RASEO_SpecificIpAddr = 0x00000002; +const RASEO_SpecificNameServers = 0x00000004; +const RASEO_IpHeaderCompression = 0x00000008; +const RASEO_RemoteDefaultGateway = 0x00000010; +const RASEO_DisableLcpExtensions = 0x00000020; +const RASEO_TerminalBeforeDial = 0x00000040; +const RASEO_TerminalAfterDial = 0x00000080; +const RASEO_ModemLights = 0x00000100; +const RASEO_SwCompression = 0x00000200; +const RASEO_RequireEncryptedPw = 0x00000400; +const RASEO_RequireMsEncryptedPw = 0x00000800; +const RASEO_RequireDataEncryption = 0x00001000; +const RASEO_NetworkLogon = 0x00002000; +const RASEO_UseLogonCredentials = 0x00004000; +const RASEO_PromoteAlternates = 0x00008000; +const RASNP_NetBEUI = 0x00000001; +const RASNP_Ipx = 0x00000002; +const RASNP_Ip = 0x00000004; +const RASFP_Ppp = 0x00000001; +const RASFP_Slip = 0x00000002; +const RASFP_Ras = 0x00000004; + +const TCHAR[] + RASDT_Modem = "modem", + RASDT_Isdn = "isdn", + RASDT_X25 = "x25", + RASDT_Vpn = "vpn", + RASDT_Pad = "pad", + RASDT_Generic = "GENERIC", + RASDT_Serial = "SERIAL", + RASDT_FrameRelay = "FRAMERELAY", + RASDT_Atm = "ATM", + RASDT_Sonet = "SONET", + RASDT_SW56 = "SW56", + RASDT_Irda = "IRDA", + RASDT_Parallel = "PARALLEL"; + +const RASET_Phone = 1; +const RASET_Vpn = 2; +const RASET_Direct = 3; +const RASET_Internet = 4; + +static if (WINVER >= 0x0401) { + const RASEO_SecureLocalFiles = 0x00010000; + const RASCN_Connection = 0x00000001; + const RASCN_Disconnection = 0x00000002; + const RASCN_BandwidthAdded = 0x00000004; + const RASCN_BandwidthRemoved = 0x00000008; + const RASEDM_DialAll = 1; + const RASEDM_DialAsNeeded = 2; + const RASIDS_Disabled = 0xffffffff; + const RASIDS_UseGlobalValue = 0; + const RASADFLG_PositionDlg = 0x00000001; + const RASCM_UserName = 0x00000001; + const RASCM_Password = 0x00000002; + const RASCM_Domain = 0x00000004; + const RASADP_DisableConnectionQuery = 0; + const RASADP_LoginSessionDisable = 1; + const RASADP_SavedAddressesLimit = 2; + const RASADP_FailedConnectionTimeout = 3; + const RASADP_ConnectionQueryTimeout = 4; +} +static if (WINVER >= 0x0500) { + const RDEOPT_CustomDial = 0x00001000; + const RASLCPAP_PAP = 0xC023; + const RASLCPAP_SPAP = 0xC027; + const RASLCPAP_CHAP = 0xC223; + const RASLCPAP_EAP = 0xC227; + const RASLCPAD_CHAP_MD5 = 0x05; + const RASLCPAD_CHAP_MS = 0x80; + const RASLCPAD_CHAP_MSV2 = 0x81; + const RASLCPO_PFC = 0x00000001; + const RASLCPO_ACFC = 0x00000002; + const RASLCPO_SSHF = 0x00000004; + const RASLCPO_DES_56 = 0x00000008; + const RASLCPO_3_DES = 0x00000010; + + const RASCCPCA_MPPC = 0x00000006; + const RASCCPCA_STAC = 0x00000005; + + const RASCCPO_Compression = 0x00000001; + const RASCCPO_HistoryLess = 0x00000002; + const RASCCPO_Encryption56bit = 0x00000010; + const RASCCPO_Encryption40bit = 0x00000020; + const RASCCPO_Encryption128bit = 0x00000040; + + const RASEO_RequireEAP = 0x00020000; + const RASEO_RequirePAP = 0x00040000; + const RASEO_RequireSPAP = 0x00080000; + const RASEO_Custom = 0x00100000; + const RASEO_PreviewPhoneNumber = 0x00200000; + const RASEO_SharedPhoneNumbers = 0x00800000; + const RASEO_PreviewUserPw = 0x01000000; + const RASEO_PreviewDomain = 0x02000000; + const RASEO_ShowDialingProgress = 0x04000000; + const RASEO_RequireCHAP = 0x08000000; + const RASEO_RequireMsCHAP = 0x10000000; + const RASEO_RequireMsCHAP2 = 0x20000000; + const RASEO_RequireW95MSCHAP = 0x40000000; + const RASEO_CustomScript = 0x80000000; + + const RASIPO_VJ = 0x00000001; + const RCD_SingleUser = 0; + const RCD_AllUsers = 0x00000001; + const RCD_Eap = 0x00000002; + const RASEAPF_NonInteractive = 0x00000002; + const RASEAPF_Logon = 0x00000004; + const RASEAPF_Preview = 0x00000008; + const ET_40Bit = 1; + const ET_128Bit = 2; + const ET_None = 0; + const ET_Require = 1; + const ET_RequireMax = 2; + const ET_Optional = 3; +} + +const RASCS_PAUSED = 0x1000; +const RASCS_DONE = 0x2000; +enum RASCONNSTATE { + RASCS_OpenPort = 0, + RASCS_PortOpened, + RASCS_ConnectDevice, + RASCS_DeviceConnected, + RASCS_AllDevicesConnected, + RASCS_Authenticate, + RASCS_AuthNotify, + RASCS_AuthRetry, + RASCS_AuthCallback, + RASCS_AuthChangePassword, + RASCS_AuthProject, + RASCS_AuthLinkSpeed, + RASCS_AuthAck, + RASCS_ReAuthenticate, + RASCS_Authenticated, + RASCS_PrepareForCallback, + RASCS_WaitForModemReset, + RASCS_WaitForCallback, + RASCS_Projected, + RASCS_StartAuthentication, + RASCS_CallbackComplete, + RASCS_LogonNetwork, + RASCS_SubEntryConnected, + RASCS_SubEntryDisconnected, + RASCS_Interactive = RASCS_PAUSED, + RASCS_RetryAuthentication, + RASCS_CallbackSetByCaller, + RASCS_PasswordExpired, +// static if (WINVER >= 0x0500) { + RASCS_InvokeEapUI, +// } + RASCS_Connected = RASCS_DONE, + RASCS_Disconnected +} +alias RASCONNSTATE* LPRASCONNSTATE; + +enum RASPROJECTION { + RASP_Amb = 0x10000, + RASP_PppNbf = 0x803F, + RASP_PppIpx = 0x802B, + RASP_PppIp = 0x8021, +// static if (WINVER >= 0x0500) { + RASP_PppCcp = 0x80FD, +// } + RASP_PppLcp = 0xC021, + RASP_Slip = 0x20000 +} +alias RASPROJECTION* LPRASPROJECTION; + +typedef HANDLE HRASCONN; +alias HRASCONN* LPHRASCONN; + +struct RASCONNW { + DWORD dwSize; + HRASCONN hrasconn; + WCHAR szEntryName[RAS_MaxEntryName + 1]; + static if (WINVER >= 0x0400) { + WCHAR szDeviceType[RAS_MaxDeviceType + 1]; + WCHAR szDeviceName[RAS_MaxDeviceName + 1]; + } + static if (WINVER >= 0x0401) { + WCHAR szPhonebook[MAX_PATH]; + DWORD dwSubEntry; + } + static if (WINVER >= 0x0500) { + GUID guidEntry; + } + static if (WINVER >= 0x0501) { + DWORD dwFlags; + LUID luid; + } +} +alias RASCONNW* LPRASCONNW; + +struct RASCONNA { + DWORD dwSize; + HRASCONN hrasconn; + CHAR szEntryName[RAS_MaxEntryName + 1]; + static if (WINVER >= 0x0400) { + CHAR szDeviceType[RAS_MaxDeviceType + 1]; + CHAR szDeviceName[RAS_MaxDeviceName + 1]; + } + static if (WINVER >= 0x0401) { + CHAR szPhonebook[MAX_PATH]; + DWORD dwSubEntry; + } + static if (WINVER >= 0x0500) { + GUID guidEntry; + } + static if (WINVER >= 0x0501) { + DWORD dwFlags; + LUID luid; + } +} +alias RASCONNA* LPRASCONNA; + +struct RASCONNSTATUSW { + DWORD dwSize; + RASCONNSTATE rasconnstate; + DWORD dwError; + WCHAR szDeviceType[RAS_MaxDeviceType + 1]; + WCHAR szDeviceName[RAS_MaxDeviceName + 1]; + static if (WINVER >= 0x0401) { + WCHAR szPhoneNumber[RAS_MaxPhoneNumber + 1]; + } +} +alias RASCONNSTATUSW* LPRASCONNSTATUSW; + +struct RASCONNSTATUSA { + DWORD dwSize; + RASCONNSTATE rasconnstate; + DWORD dwError; + CHAR szDeviceType[RAS_MaxDeviceType + 1]; + CHAR szDeviceName[RAS_MaxDeviceName + 1]; + static if (WINVER >= 0x0401) { + CHAR szPhoneNumber[RAS_MaxPhoneNumber + 1]; + } +} +alias RASCONNSTATUSA* LPRASCONNSTATUSA; + +struct RASDIALPARAMSW { + DWORD dwSize; + WCHAR szEntryName[RAS_MaxEntryName + 1]; + WCHAR szPhoneNumber[RAS_MaxPhoneNumber + 1]; + WCHAR szCallbackNumber[RAS_MaxCallbackNumber + 1]; + WCHAR szUserName[UNLEN + 1]; + WCHAR szPassword[PWLEN + 1]; + WCHAR szDomain[DNLEN + 1]; + static if (WINVER >= 0x0401) { + DWORD dwSubEntry; + ULONG_PTR dwCallbackId; + } +} +alias RASDIALPARAMSW* LPRASDIALPARAMSW; + +struct RASDIALPARAMSA{ + DWORD dwSize; + CHAR szEntryName[RAS_MaxEntryName + 1]; + CHAR szPhoneNumber[RAS_MaxPhoneNumber + 1]; + CHAR szCallbackNumber[RAS_MaxCallbackNumber + 1]; + CHAR szUserName[UNLEN + 1]; + CHAR szPassword[PWLEN + 1]; + CHAR szDomain[DNLEN + 1]; + static if (WINVER >= 0x0401) { + DWORD dwSubEntry; + ULONG_PTR dwCallbackId; + } +} +alias RASDIALPARAMSA* LPRASDIALPARAMSA; + +static if (WINVER >= 0x0500) { + struct RASEAPINFO { + DWORD dwSizeofEapInfo; + BYTE *pbEapInfo; + } +} + +struct RASDIALEXTENSIONS { + DWORD dwSize; + DWORD dwfOptions; + HWND hwndParent; + ULONG_PTR reserved; + static if (WINVER >= 0x0500) { + ULONG_PTR reserved1; + RASEAPINFO RasEapInfo; + } +} +alias RASDIALEXTENSIONS* LPRASDIALEXTENSIONS; + +struct RASENTRYNAMEW { + DWORD dwSize; + WCHAR szEntryName[RAS_MaxEntryName + 1]; + static if (WINVER >= 0x0500) { + DWORD dwFlags; + WCHAR szPhonebookPath[MAX_PATH + 1]; + } +} +alias RASENTRYNAMEW* LPRASENTRYNAMEW; + +struct RASENTRYNAMEA{ + DWORD dwSize; + CHAR szEntryName[RAS_MaxEntryName + 1]; + static if (WINVER >= 0x0500) { + DWORD dwFlags; + CHAR szPhonebookPath[MAX_PATH + 1]; + } +} +alias RASENTRYNAMEA* LPRASENTRYNAMEA; + +struct RASAMBW{ + DWORD dwSize; + DWORD dwError; + WCHAR szNetBiosError[NETBIOS_NAME_LEN + 1]; + BYTE bLana; +} +alias RASAMBW* LPRASAMBW; + +struct RASAMBA{ + DWORD dwSize; + DWORD dwError; + CHAR szNetBiosError[NETBIOS_NAME_LEN + 1]; + BYTE bLana; +} +alias RASAMBA* LPRASAMBA; + +struct RASPPPNBFW{ + DWORD dwSize; + DWORD dwError; + DWORD dwNetBiosError; + WCHAR szNetBiosError[NETBIOS_NAME_LEN + 1]; + WCHAR szWorkstationName[NETBIOS_NAME_LEN + 1]; + BYTE bLana; +} +alias RASPPPNBFW* LPRASPPPNBFW; + +struct RASPPPNBFA{ + DWORD dwSize; + DWORD dwError; + DWORD dwNetBiosError; + CHAR szNetBiosError[NETBIOS_NAME_LEN + 1]; + CHAR szWorkstationName[NETBIOS_NAME_LEN + 1]; + BYTE bLana; +} +alias RASPPPNBFA* LPRASPPPNBFA; + +struct RASPPPIPXW { + DWORD dwSize; + DWORD dwError; + WCHAR szIpxAddress[RAS_MaxIpxAddress + 1]; +} +alias RASPPPIPXW* LPRASPPPIPXW; + +struct RASPPPIPXA { + DWORD dwSize; + DWORD dwError; + CHAR szIpxAddress[RAS_MaxIpxAddress + 1]; +} +alias RASPPPIPXA* LPRASPPPIPXA; + +struct RASPPPIPW{ + DWORD dwSize; + DWORD dwError; + WCHAR szIpAddress[RAS_MaxIpAddress + 1]; + //#ifndef WINNT35COMPATIBLE + WCHAR szServerIpAddress[RAS_MaxIpAddress + 1]; + //#endif + static if (WINVER >= 0x0500) { + DWORD dwOptions; + DWORD dwServerOptions; + } +} +alias RASPPPIPW* LPRASPPPIPW; + +struct RASPPPIPA{ + DWORD dwSize; + DWORD dwError; + CHAR szIpAddress[RAS_MaxIpAddress + 1]; + //#ifndef WINNT35COMPATIBLE + CHAR szServerIpAddress[RAS_MaxIpAddress + 1]; + //#endif + static if (WINVER >= 0x0500) { + DWORD dwOptions; + DWORD dwServerOptions; + } +} +alias RASPPPIPA* LPRASPPPIPA; + +struct RASPPPLCPW{ + DWORD dwSize; + BOOL fBundled; + static if (WINVER >= 0x0500) { + DWORD dwError; + DWORD dwAuthenticationProtocol; + DWORD dwAuthenticationData; + DWORD dwEapTypeId; + DWORD dwServerAuthenticationProtocol; + DWORD dwServerAuthenticationData; + DWORD dwServerEapTypeId; + BOOL fMultilink; + DWORD dwTerminateReason; + DWORD dwServerTerminateReason; + WCHAR szReplyMessage[RAS_MaxReplyMessage]; + DWORD dwOptions; + DWORD dwServerOptions; + } +} +alias RASPPPLCPW* LPRASPPPLCPW; + +struct RASPPPLCPA{ + DWORD dwSize; + BOOL fBundled; + static if (WINVER >= 0x0500) { + DWORD dwError; + DWORD dwAuthenticationProtocol; + DWORD dwAuthenticationData; + DWORD dwEapTypeId; + DWORD dwServerAuthenticationProtocol; + DWORD dwServerAuthenticationData; + DWORD dwServerEapTypeId; + BOOL fMultilink; + DWORD dwTerminateReason; + DWORD dwServerTerminateReason; + CHAR szReplyMessage[RAS_MaxReplyMessage]; + DWORD dwOptions; + DWORD dwServerOptions; + } +} +alias RASPPPLCPA* LPRASPPPLCPA; + +struct RASSLIPW{ + DWORD dwSize; + DWORD dwError; + WCHAR szIpAddress[RAS_MaxIpAddress + 1]; +} +alias RASSLIPW* LPRASSLIPW; + +struct RASSLIPA{ + DWORD dwSize; + DWORD dwError; + CHAR szIpAddress[RAS_MaxIpAddress + 1]; +} +alias RASSLIPA* LPRASSLIPA; + +struct RASDEVINFOW{ + DWORD dwSize; + WCHAR szDeviceType[RAS_MaxDeviceType + 1]; + WCHAR szDeviceName[RAS_MaxDeviceName + 1]; +} +alias RASDEVINFOW* LPRASDEVINFOW; + +struct RASDEVINFOA{ + DWORD dwSize; + CHAR szDeviceType[RAS_MaxDeviceType + 1]; + CHAR szDeviceName[RAS_MaxDeviceName + 1]; +} +alias RASDEVINFOA* LPRASDEVINFOA; + +struct RASCTRYINFO { + DWORD dwSize; + DWORD dwCountryID; + DWORD dwNextCountryID; + DWORD dwCountryCode; + DWORD dwCountryNameOffset; +} +alias RASCTRYINFO* LPRASCTRYINFO; +alias RASCTRYINFO RASCTRYINFOW, RASCTRYINFOA; +alias RASCTRYINFOW* LPRASCTRYINFOW; +alias RASCTRYINFOA* LPRASCTRYINFOA; + +struct RASIPADDR { + BYTE a; + BYTE b; + BYTE c; + BYTE d; +} + +struct RASENTRYW { + DWORD dwSize; + DWORD dwfOptions; + DWORD dwCountryID; + DWORD dwCountryCode; + WCHAR szAreaCode[RAS_MaxAreaCode + 1]; + WCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1]; + DWORD dwAlternateOffset; + RASIPADDR ipaddr; + RASIPADDR ipaddrDns; + RASIPADDR ipaddrDnsAlt; + RASIPADDR ipaddrWins; + RASIPADDR ipaddrWinsAlt; + DWORD dwFrameSize; + DWORD dwfNetProtocols; + DWORD dwFramingProtocol; + WCHAR szScript[MAX_PATH]; + WCHAR szAutodialDll[MAX_PATH]; + WCHAR szAutodialFunc[MAX_PATH]; + WCHAR szDeviceType[RAS_MaxDeviceType + 1]; + WCHAR szDeviceName[RAS_MaxDeviceName + 1]; + WCHAR szX25PadType[RAS_MaxPadType + 1]; + WCHAR szX25Address[RAS_MaxX25Address + 1]; + WCHAR szX25Facilities[RAS_MaxFacilities + 1]; + WCHAR szX25UserData[RAS_MaxUserData + 1]; + DWORD dwChannels; + DWORD dwReserved1; + DWORD dwReserved2; + static if (WINVER >= 0x0401) { + DWORD dwSubEntries; + DWORD dwDialMode; + DWORD dwDialExtraPercent; + DWORD dwDialExtraSampleSeconds; + DWORD dwHangUpExtraPercent; + DWORD dwHangUpExtraSampleSeconds; + DWORD dwIdleDisconnectSeconds; + } + static if (WINVER >= 0x0500) { + DWORD dwType; + DWORD dwEncryptionType; + DWORD dwCustomAuthKey; + GUID guidId; + WCHAR szCustomDialDll[MAX_PATH]; + DWORD dwVpnStrategy; + } +} +alias RASENTRYW* LPRASENTRYW; + +struct RASENTRYA { + DWORD dwSize; + DWORD dwfOptions; + DWORD dwCountryID; + DWORD dwCountryCode; + CHAR szAreaCode[RAS_MaxAreaCode + 1]; + CHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1]; + DWORD dwAlternateOffset; + RASIPADDR ipaddr; + RASIPADDR ipaddrDns; + RASIPADDR ipaddrDnsAlt; + RASIPADDR ipaddrWins; + RASIPADDR ipaddrWinsAlt; + DWORD dwFrameSize; + DWORD dwfNetProtocols; + DWORD dwFramingProtocol; + CHAR szScript[MAX_PATH]; + CHAR szAutodialDll[MAX_PATH]; + CHAR szAutodialFunc[MAX_PATH]; + CHAR szDeviceType[RAS_MaxDeviceType + 1]; + CHAR szDeviceName[RAS_MaxDeviceName + 1]; + CHAR szX25PadType[RAS_MaxPadType + 1]; + CHAR szX25Address[RAS_MaxX25Address + 1]; + CHAR szX25Facilities[RAS_MaxFacilities + 1]; + CHAR szX25UserData[RAS_MaxUserData + 1]; + DWORD dwChannels; + DWORD dwReserved1; + DWORD dwReserved2; + static if (WINVER >= 0x0401) { + DWORD dwSubEntries; + DWORD dwDialMode; + DWORD dwDialExtraPercent; + DWORD dwDialExtraSampleSeconds; + DWORD dwHangUpExtraPercent; + DWORD dwHangUpExtraSampleSeconds; + DWORD dwIdleDisconnectSeconds; + } + static if (WINVER >= 0x0500) { + DWORD dwType; + DWORD dwEncryptionType; + DWORD dwCustomAuthKey; + GUID guidId; + CHAR szCustomDialDll[MAX_PATH]; + DWORD dwVpnStrategy; + } +} +alias RASENTRYA* LPRASENTRYA; + + +static if (WINVER >= 0x0401) { + struct RASADPARAMS { + DWORD dwSize; + HWND hwndOwner; + DWORD dwFlags; + LONG xDlg; + LONG yDlg; + } + alias RASADPARAMS* LPRASADPARAMS; + + struct RASSUBENTRYW{ + DWORD dwSize; + DWORD dwfFlags; + WCHAR szDeviceType[RAS_MaxDeviceType + 1]; + WCHAR szDeviceName[RAS_MaxDeviceName + 1]; + WCHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1]; + DWORD dwAlternateOffset; + } + alias RASSUBENTRYW* LPRASSUBENTRYW; + + struct RASSUBENTRYA{ + DWORD dwSize; + DWORD dwfFlags; + CHAR szDeviceType[RAS_MaxDeviceType + 1]; + CHAR szDeviceName[RAS_MaxDeviceName + 1]; + CHAR szLocalPhoneNumber[RAS_MaxPhoneNumber + 1]; + DWORD dwAlternateOffset; + } + alias RASSUBENTRYA* LPRASSUBENTRYA; + + struct RASCREDENTIALSW{ + DWORD dwSize; + DWORD dwMask; + WCHAR szUserName[UNLEN + 1]; + WCHAR szPassword[PWLEN + 1]; + WCHAR szDomain[DNLEN + 1]; + } + alias RASCREDENTIALSW* LPRASCREDENTIALSW; + + struct RASCREDENTIALSA{ + DWORD dwSize; + DWORD dwMask; + CHAR szUserName[UNLEN + 1]; + CHAR szPassword[PWLEN + 1]; + CHAR szDomain[DNLEN + 1]; + } + alias RASCREDENTIALSA* LPRASCREDENTIALSA; + + struct RASAUTODIALENTRYW{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwDialingLocation; + WCHAR szEntry[RAS_MaxEntryName + 1]; + } + alias RASAUTODIALENTRYW* LPRASAUTODIALENTRYW; + + struct RASAUTODIALENTRYA{ + DWORD dwSize; + DWORD dwFlags; + DWORD dwDialingLocation; + CHAR szEntry[RAS_MaxEntryName + 1]; + } + alias RASAUTODIALENTRYA* LPRASAUTODIALENTRYA; +} + +static if (WINVER >= 0x0500) { + struct RASPPPCCP{ + DWORD dwSize; + DWORD dwError; + DWORD dwCompressionAlgorithm; + DWORD dwOptions; + DWORD dwServerCompressionAlgorithm; + DWORD dwServerOptions; + } + alias RASPPPCCP* LPRASPPPCCP; + + struct RASEAPUSERIDENTITYW{ + WCHAR szUserName[UNLEN + 1]; + DWORD dwSizeofEapInfo; + BYTE pbEapInfo[1]; + } + alias RASEAPUSERIDENTITYW* LPRASEAPUSERIDENTITYW; + + struct RASEAPUSERIDENTITYA{ + CHAR szUserName[UNLEN + 1]; + DWORD dwSizeofEapInfo; + BYTE pbEapInfo[1]; + } + alias RASEAPUSERIDENTITYA* LPRASEAPUSERIDENTITYA; + + struct RAS_STATS{ + DWORD dwSize; + DWORD dwBytesXmited; + DWORD dwBytesRcved; + DWORD dwFramesXmited; + DWORD dwFramesRcved; + DWORD dwCrcErr; + DWORD dwTimeoutErr; + DWORD dwAlignmentErr; + DWORD dwHardwareOverrunErr; + DWORD dwFramingErr; + DWORD dwBufferOverrunErr; + DWORD dwCompressionRatioIn; + DWORD dwCompressionRatioOut; + DWORD dwBps; + DWORD dwConnectDuration; + } + alias RAS_STATS* PRAS_STATS; +} + + +/* UNICODE typedefs for structures*/ +version (Unicode) { + alias RASCONNW RASCONN; + alias RASENTRYW RASENTRY; + alias RASCONNSTATUSW RASCONNSTATUS; + alias RASDIALPARAMSW RASDIALPARAMS; + alias RASAMBW RASAMB; + alias RASPPPNBFW RASPPPNBF; + alias RASPPPIPXW RASPPPIPX; + alias RASPPPIPW RASPPPIP; + alias RASPPPLCPW RASPPPLCP; + alias RASSLIPW RASSLIP; + alias RASDEVINFOW RASDEVINFO; + alias RASENTRYNAMEW RASENTRYNAME; + + static if (WINVER >= 0x0401) { + alias RASSUBENTRYW RASSUBENTRY; + alias RASCREDENTIALSW RASCREDENTIALS; + alias RASAUTODIALENTRYW RASAUTODIALENTRY; + } + + static if (WINVER >= 0x0500) { + alias RASEAPUSERIDENTITYW RASEAPUSERIDENTITY; + } + +} else { // ! defined UNICODE + + alias RASCONNA RASCONN; + alias RASENTRYA RASENTRY; + alias RASCONNSTATUSA RASCONNSTATUS; + alias RASDIALPARAMSA RASDIALPARAMS; + alias RASAMBA RASAMB; + alias RASPPPNBFA RASPPPNBF; + alias RASPPPIPXA RASPPPIPX; + alias RASPPPIPA RASPPPIP; + alias RASPPPLCPA RASPPPLCP; + alias RASSLIPA RASSLIP; + alias RASDEVINFOA RASDEVINFO; + alias RASENTRYNAMEA RASENTRYNAME; + + static if (WINVER >= 0x0401) { + alias RASSUBENTRYA RASSUBENTRY; + alias RASCREDENTIALSA RASCREDENTIALS; + alias RASAUTODIALENTRYA RASAUTODIALENTRY; + } + static if (WINVER >= 0x0500) { + alias RASEAPUSERIDENTITYA RASEAPUSERIDENTITY; + } +}// ! UNICODE + + +alias RASCONN* LPRASCONN; +alias RASENTRY* LPRASENTRY; +alias RASCONNSTATUS* LPRASCONNSTATUS; +alias RASDIALPARAMS* LPRASDIALPARAMS; +alias RASAMB* LPRASAM; +alias RASPPPNBF* LPRASPPPNBF; +alias RASPPPIPX* LPRASPPPIPX; +alias RASPPPIP* LPRASPPPIP; +alias RASPPPLCP* LPRASPPPLCP; +alias RASSLIP* LPRASSLIP; +alias RASDEVINFO* LPRASDEVINFO; +alias RASENTRYNAME* LPRASENTRYNAME; + +static if (WINVER >= 0x0401) { + alias RASSUBENTRY* LPRASSUBENTRY; + alias RASCREDENTIALS* LPRASCREDENTIALS; + alias RASAUTODIALENTRY* LPRASAUTODIALENTRY; +} +static if (WINVER >= 0x0500) { + alias RASEAPUSERIDENTITY* LPRASEAPUSERIDENTITY; +} + +/* Callback prototypes */ +deprecated { + alias BOOL function (HWND, LPSTR, DWORD, LPDWORD) ORASADFUNC; +} + +alias void function (UINT, RASCONNSTATE, DWORD) RASDIALFUNC; +alias void function(HRASCONN, UINT, RASCONNSTATE, DWORD, +DWORD) RASDIALFUNC1; +alias DWORD function (ULONG_PTR, DWORD, HRASCONN, UINT, +RASCONNSTATE, DWORD, DWORD) RASDIALFUNC2; + +/* External functions */ +DWORD RasDialA (LPRASDIALEXTENSIONS, LPCSTR, LPRASDIALPARAMSA, +DWORD, LPVOID, LPHRASCONN); +DWORD RasDialW (LPRASDIALEXTENSIONS, LPCWSTR, LPRASDIALPARAMSW, +DWORD, LPVOID, LPHRASCONN); +DWORD RasEnumConnectionsA (LPRASCONNA, LPDWORD, LPDWORD); +DWORD RasEnumConnectionsW (LPRASCONNW, LPDWORD, LPDWORD); +DWORD RasEnumEntriesA (LPCSTR, LPCSTR, LPRASENTRYNAMEA, LPDWORD, +LPDWORD); +DWORD RasEnumEntriesW (LPCWSTR, LPCWSTR, LPRASENTRYNAMEW, LPDWORD, +LPDWORD); +DWORD RasGetConnectStatusA (HRASCONN, LPRASCONNSTATUSA); +DWORD RasGetConnectStatusW (HRASCONN, LPRASCONNSTATUSW); +DWORD RasGetErrorStringA (UINT, LPSTR, DWORD); +DWORD RasGetErrorStringW (UINT, LPWSTR, DWORD); +DWORD RasHangUpA (HRASCONN); +DWORD RasHangUpW (HRASCONN); +DWORD RasGetProjectionInfoA (HRASCONN, RASPROJECTION, LPVOID, +LPDWORD); +DWORD RasGetProjectionInfoW (HRASCONN, RASPROJECTION, LPVOID, +LPDWORD); +DWORD RasCreatePhonebookEntryA (HWND, LPCSTR); +DWORD RasCreatePhonebookEntryW (HWND, LPCWSTR); +DWORD RasEditPhonebookEntryA (HWND, LPCSTR, LPCSTR); +DWORD RasEditPhonebookEntryW (HWND, LPCWSTR, LPCWSTR); +DWORD RasSetEntryDialParamsA (LPCSTR, LPRASDIALPARAMSA, BOOL); +DWORD RasSetEntryDialParamsW (LPCWSTR, LPRASDIALPARAMSW, BOOL); +DWORD RasGetEntryDialParamsA (LPCSTR, LPRASDIALPARAMSA, LPBOOL); +DWORD RasGetEntryDialParamsW (LPCWSTR, LPRASDIALPARAMSW, LPBOOL); +DWORD RasEnumDevicesA (LPRASDEVINFOA, LPDWORD, LPDWORD); +DWORD RasEnumDevicesW (LPRASDEVINFOW, LPDWORD, LPDWORD); +DWORD RasGetCountryInfoA (LPRASCTRYINFOA, LPDWORD); +DWORD RasGetCountryInfoW (LPRASCTRYINFOW, LPDWORD); +DWORD RasGetEntryPropertiesA (LPCSTR, LPCSTR, LPRASENTRYA, LPDWORD, +LPBYTE, LPDWORD); +DWORD RasGetEntryPropertiesW (LPCWSTR, LPCWSTR, LPRASENTRYW, +LPDWORD, LPBYTE, LPDWORD); +DWORD RasSetEntryPropertiesA (LPCSTR, LPCSTR, LPRASENTRYA, DWORD, +LPBYTE, DWORD); +DWORD RasSetEntryPropertiesW (LPCWSTR, LPCWSTR, LPRASENTRYW, DWORD, +LPBYTE, DWORD); +DWORD RasRenameEntryA (LPCSTR, LPCSTR, LPCSTR); +DWORD RasRenameEntryW (LPCWSTR, LPCWSTR, LPCWSTR); +DWORD RasDeleteEntryA (LPCSTR, LPCSTR); +DWORD RasDeleteEntryW (LPCWSTR, LPCWSTR); +DWORD RasValidateEntryNameA (LPCSTR, LPCSTR); +DWORD RasValidateEntryNameW (LPCWSTR, LPCWSTR); + +static if (WINVER >= 0x0401) { + alias BOOL function (LPSTR, LPSTR, LPRASADPARAMS, LPDWORD) RASADFUNCA; + alias BOOL function (LPWSTR, LPWSTR, LPRASADPARAMS, LPDWORD) RASADFUNCW; + + DWORD RasGetSubEntryHandleA (HRASCONN, DWORD, LPHRASCONN); + DWORD RasGetSubEntryHandleW (HRASCONN, DWORD, LPHRASCONN); + DWORD RasGetCredentialsA (LPCSTR, LPCSTR, LPRASCREDENTIALSA); + DWORD RasGetCredentialsW (LPCWSTR, LPCWSTR, LPRASCREDENTIALSW); + DWORD RasSetCredentialsA (LPCSTR, LPCSTR, LPRASCREDENTIALSA, BOOL); + DWORD RasSetCredentialsW (LPCWSTR, LPCWSTR, LPRASCREDENTIALSW, BOOL); + DWORD RasConnectionNotificationA (HRASCONN, HANDLE, DWORD); + DWORD RasConnectionNotificationW (HRASCONN, HANDLE, DWORD); + DWORD RasGetSubEntryPropertiesA (LPCSTR, LPCSTR, DWORD, + LPRASSUBENTRYA, LPDWORD, LPBYTE, LPDWORD); + DWORD RasGetSubEntryPropertiesW (LPCWSTR, LPCWSTR, DWORD, + LPRASSUBENTRYW, LPDWORD, LPBYTE, LPDWORD); + DWORD RasSetSubEntryPropertiesA (LPCSTR, LPCSTR, DWORD, + LPRASSUBENTRYA, DWORD, LPBYTE, DWORD); + DWORD RasSetSubEntryPropertiesW (LPCWSTR, LPCWSTR, DWORD, + LPRASSUBENTRYW, DWORD, LPBYTE, DWORD); + DWORD RasGetAutodialAddressA (LPCSTR, LPDWORD, LPRASAUTODIALENTRYA, + LPDWORD, LPDWORD); + DWORD RasGetAutodialAddressW (LPCWSTR, LPDWORD, + LPRASAUTODIALENTRYW, LPDWORD, LPDWORD); + DWORD RasSetAutodialAddressA (LPCSTR, DWORD, LPRASAUTODIALENTRYA, + DWORD, DWORD); + DWORD RasSetAutodialAddressW (LPCWSTR, DWORD, LPRASAUTODIALENTRYW, + DWORD, DWORD); + DWORD RasEnumAutodialAddressesA (LPSTR *, LPDWORD, LPDWORD); + DWORD RasEnumAutodialAddressesW (LPWSTR *, LPDWORD, LPDWORD); + DWORD RasGetAutodialEnableA (DWORD, LPBOOL); + DWORD RasGetAutodialEnableW (DWORD, LPBOOL); + DWORD RasSetAutodialEnableA (DWORD, BOOL); + DWORD RasSetAutodialEnableW (DWORD, BOOL); + DWORD RasGetAutodialParamA (DWORD, LPVOID, LPDWORD); + DWORD RasGetAutodialParamW (DWORD, LPVOID, LPDWORD); + DWORD RasSetAutodialParamA (DWORD, LPVOID, DWORD); + DWORD RasSetAutodialParamW (DWORD, LPVOID, DWORD); +} + +static if (WINVER >= 0x0500) { + alias DWORD function (HRASCONN) RasCustomHangUpFn; + alias DWORD function (LPCTSTR, LPCTSTR, DWORD) RasCustomDeleteEntryNotifyFn; + alias DWORD function (HINSTANCE, LPRASDIALEXTENSIONS, + LPCTSTR, LPRASDIALPARAMS, DWORD, LPVOID, LPHRASCONN, DWORD) RasCustomDialFn; + + DWORD RasInvokeEapUI (HRASCONN, DWORD, LPRASDIALEXTENSIONS, HWND); + DWORD RasGetLinkStatistics (HRASCONN, DWORD, RAS_STATS*); + DWORD RasGetConnectionStatistics (HRASCONN, RAS_STATS*); + DWORD RasClearLinkStatistics (HRASCONN, DWORD); + DWORD RasClearConnectionStatistics (HRASCONN); + DWORD RasGetEapUserDataA (HANDLE, LPCSTR, LPCSTR, BYTE*, DWORD*); + DWORD RasGetEapUserDataW (HANDLE, LPCWSTR, LPCWSTR, BYTE*, DWORD*); + DWORD RasSetEapUserDataA (HANDLE, LPCSTR, LPCSTR, BYTE*, DWORD); + DWORD RasSetEapUserDataW (HANDLE, LPCWSTR, LPCWSTR, BYTE*, DWORD); + DWORD RasGetCustomAuthDataA (LPCSTR, LPCSTR, BYTE*, DWORD*); + DWORD RasGetCustomAuthDataW (LPCWSTR, LPCWSTR, BYTE*, DWORD*); + DWORD RasSetCustomAuthDataA (LPCSTR, LPCSTR, BYTE*, DWORD); + DWORD RasSetCustomAuthDataW (LPCWSTR, LPCWSTR, BYTE*, DWORD); + DWORD RasGetEapUserIdentityW (LPCWSTR, LPCWSTR, DWORD, HWND, LPRASEAPUSERIDENTITYW*); + DWORD RasGetEapUserIdentityA (LPCSTR, LPCSTR, DWORD, HWND, LPRASEAPUSERIDENTITYA*); + void RasFreeEapUserIdentityW (LPRASEAPUSERIDENTITYW); + void RasFreeEapUserIdentityA (LPRASEAPUSERIDENTITYA); +} + + +/* UNICODE defines for functions */ +version(Unicode) { + alias RasDialW RasDial; + alias RasEnumConnectionsW RasEnumConnections; + alias RasEnumEntriesW RasEnumEntries; + alias RasGetConnectStatusW RasGetConnectStatus; + alias RasGetErrorStringW RasGetErrorString; + alias RasHangUpW RasHangUp; + alias RasGetProjectionInfoW RasGetProjectionInfo; + alias RasCreatePhonebookEntryW RasCreatePhonebookEntry; + alias RasEditPhonebookEntryW RasEditPhonebookEntry; + alias RasSetEntryDialParamsW RasSetEntryDialParams; + alias RasGetEntryDialParamsW RasGetEntryDialParams; + alias RasEnumDevicesW RasEnumDevices; + alias RasGetCountryInfoW RasGetCountryInfo; + alias RasGetEntryPropertiesW RasGetEntryProperties; + alias RasSetEntryPropertiesW RasSetEntryProperties; + alias RasRenameEntryW RasRenameEntry; + alias RasDeleteEntryW RasDeleteEntry; + alias RasValidateEntryNameW RasValidateEntryName; + + static if (WINVER >= 0x0401) { + alias RASADFUNCW RASADFUNC; + alias RasGetSubEntryHandleW RasGetSubEntryHandle; + alias RasConnectionNotificationW RasConnectionNotification; + alias RasGetSubEntryPropertiesW RasGetSubEntryProperties; + alias RasSetSubEntryPropertiesW RasSetSubEntryProperties; + alias RasGetCredentialsW RasGetCredentials; + alias RasSetCredentialsW RasSetCredentials; + alias RasGetAutodialAddressW RasGetAutodialAddress; + alias RasSetAutodialAddressW RasSetAutodialAddress; + alias RasEnumAutodialAddressesW RasEnumAutodialAddresses; + alias RasGetAutodialEnableW RasGetAutodialEnable; + alias RasSetAutodialEnableW RasSetAutodialEnable; + alias RasGetAutodialParamW RasGetAutodialParam; + alias RasSetAutodialParamW RasSetAutodialParam; + } + + static if (WINVER >= 0x0500) { + alias RasGetEapUserDataW RasGetEapUserData; + alias RasSetEapUserDataW RasSetEapUserData; + alias RasGetCustomAuthDataW RasGetCustomAuthData; + alias RasSetCustomAuthDataW RasSetCustomAuthData; + alias RasGetEapUserIdentityW RasGetEapUserIdentity; + alias RasFreeEapUserIdentityW RasFreeEapUserIdentity; + } + +} else { // ! defined UNICODE + alias RasDialA RasDial; + alias RasEnumConnectionsA RasEnumConnections; + alias RasEnumEntriesA RasEnumEntries; + alias RasGetConnectStatusA RasGetConnectStatus; + alias RasGetErrorStringA RasGetErrorString; + alias RasHangUpA RasHangUp; + alias RasGetProjectionInfoA RasGetProjectionInfo; + alias RasCreatePhonebookEntryA RasCreatePhonebookEntry; + alias RasEditPhonebookEntryA RasEditPhonebookEntry; + alias RasSetEntryDialParamsA RasSetEntryDialParams; + alias RasGetEntryDialParamsA RasGetEntryDialParams; + alias RasEnumDevicesA RasEnumDevices; + alias RasGetCountryInfoA RasGetCountryInfo; + alias RasGetEntryPropertiesA RasGetEntryProperties; + alias RasSetEntryPropertiesA RasSetEntryProperties; + alias RasRenameEntryA RasRenameEntry; + alias RasDeleteEntryA RasDeleteEntry; + alias RasValidateEntryNameA RasValidateEntryName; + + static if (WINVER >= 0x0401) { + alias RASADFUNCA RASADFUNC; + alias RasGetSubEntryHandleA RasGetSubEntryHandle; + alias RasConnectionNotificationA RasConnectionNotification; + alias RasGetSubEntryPropertiesA RasGetSubEntryProperties; + alias RasSetSubEntryPropertiesA RasSetSubEntryProperties; + alias RasGetCredentialsA RasGetCredentials; + alias RasSetCredentialsA RasSetCredentials; + alias RasGetAutodialAddressA RasGetAutodialAddress; + alias RasSetAutodialAddressA RasSetAutodialAddress; + alias RasEnumAutodialAddressesA RasEnumAutodialAddresses; + alias RasGetAutodialEnableA RasGetAutodialEnable; + alias RasSetAutodialEnableA RasSetAutodialEnable; + alias RasGetAutodialParamA RasGetAutodialParam; + alias RasSetAutodialParamA RasSetAutodialParam; + } + + static if (WINVER >= 0x0500) { + alias RasGetEapUserDataA RasGetEapUserData; + alias RasSetEapUserDataA RasSetEapUserData; + alias RasGetCustomAuthDataA RasGetCustomAuthData; + alias RasSetCustomAuthDataA RasSetCustomAuthData; + alias RasGetEapUserIdentityA RasGetEapUserIdentity; + alias RasFreeEapUserIdentityA RasFreeEapUserIdentity; + } +} //#endif // ! UNICODE diff -r 586e4a649642 -r 4a9dcbd9e54f win32/rasdlg.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/rasdlg.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,159 @@ +/***********************************************************************\ +* rasdlg.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.rasdlg; + +import win32.ras; +private import win32.lmcons, win32.windef; + +enum { + RASPBDEVENT_AddEntry = 1, + RASPBDEVENT_EditEntry, + RASPBDEVENT_RemoveEntry, + RASPBDEVENT_DialEntry, + RASPBDEVENT_EditGlobals, + RASPBDEVENT_NoUser, + RASPBDEVENT_NoUserEdit +} + +const RASPBDFLAG_PositionDlg = 1; +const RASPBDFLAG_ForceCloseOnDial = 2; +const RASPBDFLAG_NoUser = 16; + +const RASEDFLAG_PositionDlg = 1; +const RASEDFLAG_NewEntry = 2; +const RASEDFLAG_CloneEntry = 4; + +const RASDDFLAG_PositionDlg = 1; + +align(4): + +struct RASENTRYDLGA { + DWORD dwSize = RASENTRYDLGA.sizeof; + HWND hwndOwner; + DWORD dwFlags; + LONG xDlg; + LONG yDlg; + CHAR[RAS_MaxEntryName + 1] szEntry; + DWORD dwError; + ULONG_PTR reserved; + ULONG_PTR reserved2; +} +alias RASENTRYDLGA* LPRASENTRYDLGA; + +struct RASENTRYDLGW { + DWORD dwSize = RASENTRYDLGW.sizeof; + HWND hwndOwner; + DWORD dwFlags; + LONG xDlg; + LONG yDlg; + WCHAR[RAS_MaxEntryName + 1] szEntry; + DWORD dwError; + ULONG_PTR reserved; + ULONG_PTR reserved2; +} +alias RASENTRYDLGW* LPRASENTRYDLGW; + +struct RASDIALDLG { + DWORD dwSize; + HWND hwndOwner; + DWORD dwFlags; + LONG xDlg; + LONG yDlg; + DWORD dwSubEntry; + DWORD dwError; + ULONG_PTR reserved; + ULONG_PTR reserved2; +} +alias RASDIALDLG* LPRASDIALDLG; + +// Application-defined callback functions +extern (Windows) { + alias VOID function(DWORD, DWORD, LPWSTR, LPVOID) RASPBDLGFUNCW; + alias VOID function(DWORD, DWORD, LPSTR, LPVOID) RASPBDLGFUNCA; +} + +struct RASPBDLGA { + DWORD dwSize = RASPBDLGA.sizeof; + HWND hwndOwner; + DWORD dwFlags; + LONG xDlg; + LONG yDlg; + ULONG_PTR dwCallbackId; + RASPBDLGFUNCA pCallback; + DWORD dwError; + ULONG_PTR reserved; + ULONG_PTR reserved2; +} +alias RASPBDLGA* LPRASPBDLGA; + +struct RASPBDLGW { + DWORD dwSize = RASPBDLGW.sizeof; + HWND hwndOwner; + DWORD dwFlags; + LONG xDlg; + LONG yDlg; + ULONG_PTR dwCallbackId; + RASPBDLGFUNCW pCallback; + DWORD dwError; + ULONG_PTR reserved; + ULONG_PTR reserved2; +} +alias RASPBDLGW* LPRASPBDLGW; + +struct RASNOUSERA +{ + DWORD dwSize = RASNOUSERA.sizeof; + DWORD dwFlags; + DWORD dwTimeoutMs; + CHAR[UNLEN + 1] szUserName; + CHAR[PWLEN + 1] szPassword; + CHAR[DNLEN + 1] szDomain; +} +alias RASNOUSERA* LPRASNOUSERA; + +struct RASNOUSERW { + DWORD dwSize = RASNOUSERW.sizeof; + DWORD dwFlags; + DWORD dwTimeoutMs; + WCHAR[UNLEN + 1] szUserName; + WCHAR[PWLEN + 1] szPassword; + WCHAR[DNLEN + 1] szDomain; +} +alias RASNOUSERW* LPRASNOUSERW; + +extern (Windows) { + BOOL RasDialDlgA(LPSTR, LPSTR, LPSTR, LPRASDIALDLG); + BOOL RasDialDlgW(LPWSTR, LPWSTR, LPWSTR, LPRASDIALDLG); + BOOL RasEntryDlgA(LPSTR, LPSTR, LPRASENTRYDLGA); + BOOL RasEntryDlgW(LPWSTR, LPWSTR, LPRASENTRYDLGW); + BOOL RasPhonebookDlgA(LPSTR, LPSTR, LPRASPBDLGA); + BOOL RasPhonebookDlgW(LPWSTR, LPWSTR, LPRASPBDLGW); +} + +version (Unicode) { + alias RASENTRYDLGW RASENTRYDLG; + alias RASPBDLGW RASPBDLG; + alias RASNOUSERW RASNOUSER; + alias RasDialDlgW RasDialDlg; + alias RasEntryDlgW RasEntryDlg; + alias RasPhonebookDlgW RasPhonebookDlg; +} else { + alias RASENTRYDLGA RASENTRYDLG; + alias RASPBDLGA RASPBDLG; + alias RASNOUSERA RASNOUSER; + alias RasDialDlgA RasDialDlg; + alias RasEntryDlgA RasEntryDlg; + alias RasPhonebookDlgA RasPhonebookDlg; +} + +alias RASENTRYDLG* LPRASENTRYDLG; +alias RASPBDLG* LPRASPBDLG; +alias RASNOUSER* LPRASNOUSER; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/raserror.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/raserror.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,215 @@ +/***********************************************************************\ +* raserror.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.raserror; + +enum { + SUCCESS = 0, + RASBASE = 600, + PENDING = RASBASE, + ERROR_INVALID_PORT_HANDLE, + ERROR_PORT_ALREADY_OPEN, + ERROR_BUFFER_TOO_SMALL, + ERROR_WRONG_INFO_SPECIFIED, + ERROR_CANNOT_SET_PORT_INFO, + ERROR_PORT_NOT_CONNECTED, + ERROR_EVENT_INVALID, + ERROR_DEVICE_DOES_NOT_EXIST, + ERROR_DEVICETYPE_DOES_NOT_EXIST, + ERROR_BUFFER_INVALID, + ERROR_ROUTE_NOT_AVAILABLE, + ERROR_ROUTE_NOT_ALLOCATED, + ERROR_INVALID_COMPRESSION_SPECIFIED, + ERROR_OUT_OF_BUFFERS, + ERROR_PORT_NOT_FOUND, + ERROR_ASYNC_REQUEST_PENDING, + ERROR_ALREADY_DISCONNECTING, + ERROR_PORT_NOT_OPEN, + ERROR_PORT_DISCONNECTED, + ERROR_NO_ENDPOINTS, + ERROR_CANNOT_OPEN_PHONEBOOK, + ERROR_CANNOT_LOAD_PHONEBOOK, + ERROR_CANNOT_FIND_PHONEBOOK_ENTRY, + ERROR_CANNOT_WRITE_PHONEBOOK, + ERROR_CORRUPT_PHONEBOOK, + ERROR_CANNOT_LOAD_STRING, + ERROR_KEY_NOT_FOUND, + ERROR_DISCONNECTION, + ERROR_REMOTE_DISCONNECTION, + ERROR_HARDWARE_FAILURE, + ERROR_USER_DISCONNECTION, + ERROR_INVALID_SIZE, + ERROR_PORT_NOT_AVAILABLE, + ERROR_CANNOT_PROJECT_CLIENT, + ERROR_UNKNOWN, + ERROR_WRONG_DEVICE_ATTACHED, + ERROR_BAD_STRING, + ERROR_REQUEST_TIMEOUT, + ERROR_CANNOT_GET_LANA, + ERROR_NETBIOS_ERROR, + ERROR_SERVER_OUT_OF_RESOURCES, + ERROR_NAME_EXISTS_ON_NET, + ERROR_SERVER_GENERAL_NET_FAILURE, + WARNING_MSG_ALIAS_NOT_ADDED, + ERROR_AUTH_INTERNAL, + ERROR_RESTRICTED_LOGON_HOURS, + ERROR_ACCT_DISABLED, + ERROR_PASSWD_EXPIRED, + ERROR_NO_DIALIN_PERMISSION, + ERROR_SERVER_NOT_RESPONDING, + ERROR_FROM_DEVICE, + ERROR_UNRECOGNIZED_RESPONSE, + ERROR_MACRO_NOT_FOUND, + ERROR_MACRO_NOT_DEFINED, + ERROR_MESSAGE_MACRO_NOT_FOUND, + ERROR_DEFAULTOFF_MACRO_NOT_FOUND, + ERROR_FILE_COULD_NOT_BE_OPENED, + ERROR_DEVICENAME_TOO_LONG, + ERROR_DEVICENAME_NOT_FOUND, + ERROR_NO_RESPONSES, + ERROR_NO_COMMAND_FOUND, + ERROR_WRONG_KEY_SPECIFIED, + ERROR_UNKNOWN_DEVICE_TYPE, + ERROR_ALLOCATING_MEMORY, + ERROR_PORT_NOT_CONFIGURED, + ERROR_DEVICE_NOT_READY, + ERROR_READING_INI_FILE, + ERROR_NO_CONNECTION, + ERROR_BAD_USAGE_IN_INI_FILE, + ERROR_READING_SECTIONNAME, + ERROR_READING_DEVICETYPE, + ERROR_READING_DEVICENAME, + ERROR_READING_USAGE, + ERROR_READING_MAXCONNECTBPS, + ERROR_READING_MAXCARRIERBPS, + ERROR_LINE_BUSY, + ERROR_VOICE_ANSWER, + ERROR_NO_ANSWER, + ERROR_NO_CARRIER, + ERROR_NO_DIALTONE, + ERROR_IN_COMMAND, + ERROR_WRITING_SECTIONNAME, + ERROR_WRITING_DEVICETYPE, + ERROR_WRITING_DEVICENAME, + ERROR_WRITING_MAXCONNECTBPS, + ERROR_WRITING_MAXCARRIERBPS, + ERROR_WRITING_USAGE, + ERROR_WRITING_DEFAULTOFF, + ERROR_READING_DEFAULTOFF, + ERROR_EMPTY_INI_FILE, + ERROR_AUTHENTICATION_FAILURE, + ERROR_PORT_OR_DEVICE, + ERROR_NOT_BINARY_MACRO, + ERROR_DCB_NOT_FOUND, + ERROR_STATE_MACHINES_NOT_STARTED, + ERROR_STATE_MACHINES_ALREADY_STARTED, + ERROR_PARTIAL_RESPONSE_LOOPING, + ERROR_UNKNOWN_RESPONSE_KEY, + ERROR_RECV_BUF_FULL, + ERROR_CMD_TOO_LONG, + ERROR_UNSUPPORTED_BPS, + ERROR_UNEXPECTED_RESPONSE, + ERROR_INTERACTIVE_MODE, + ERROR_BAD_CALLBACK_NUMBER, + ERROR_INVALID_AUTH_STATE, + ERROR_WRITING_INITBPS, + ERROR_X25_DIAGNOSTIC, + ERROR_ACCT_EXPIRED, + ERROR_CHANGING_PASSWORD, + ERROR_OVERRUN, + ERROR_RASMAN_CANNOT_INITIALIZE, + ERROR_BIPLEX_PORT_NOT_AVAILABLE, + ERROR_NO_ACTIVE_ISDN_LINES, + ERROR_NO_ISDN_CHANNELS_AVAILABLE, + ERROR_TOO_MANY_LINE_ERRORS, + ERROR_IP_CONFIGURATION, + ERROR_NO_IP_ADDRESSES, + ERROR_PPP_TIMEOUT, + ERROR_PPP_REMOTE_TERMINATED, + ERROR_PPP_NO_PROTOCOLS_CONFIGURED, + ERROR_PPP_NO_RESPONSE, + ERROR_PPP_INVALID_PACKET, + ERROR_PHONE_NUMBER_TOO_LONG, + ERROR_IPXCP_NO_DIALOUT_CONFIGURED, + ERROR_IPXCP_NO_DIALIN_CONFIGURED, + ERROR_IPXCP_DIALOUT_ALREADY_ACTIVE, + ERROR_ACCESSING_TCPCFGDLL, + ERROR_NO_IP_RAS_ADAPTER, + ERROR_SLIP_REQUIRES_IP, + ERROR_PROJECTION_NOT_COMPLETE, + ERROR_PROTOCOL_NOT_CONFIGURED, + ERROR_PPP_NOT_CONVERGING, + ERROR_PPP_CP_REJECTED, + ERROR_PPP_LCP_TERMINATED, + ERROR_PPP_REQUIRED_ADDRESS_REJECTED, + ERROR_PPP_NCP_TERMINATED, + ERROR_PPP_LOOPBACK_DETECTED, + ERROR_PPP_NO_ADDRESS_ASSIGNED, + ERROR_CANNOT_USE_LOGON_CREDENTIALS, + ERROR_TAPI_CONFIGURATION, + ERROR_NO_LOCAL_ENCRYPTION, + ERROR_NO_REMOTE_ENCRYPTION, + ERROR_REMOTE_REQUIRES_ENCRYPTION, + ERROR_IPXCP_NET_NUMBER_CONFLICT, + ERROR_INVALID_SMM, + ERROR_SMM_UNINITIALIZED, + ERROR_NO_MAC_FOR_PORT, + ERROR_SMM_TIMEOUT, + ERROR_BAD_PHONE_NUMBER, + ERROR_WRONG_MODULE, + ERROR_INVALID_CALLBACK_NUMBER, + ERROR_SCRIPT_SYNTAX, + ERROR_HANGUP_FAILED, + ERROR_BUNDLE_NOT_FOUND, + ERROR_CANNOT_DO_CUSTOMDIAL, + ERROR_DIAL_ALREADY_IN_PROGRESS, + ERROR_RASAUTO_CANNOT_INITIALIZE, + ERROR_CONNECTION_ALREADY_SHARED, + ERROR_SHARING_CHANGE_FAILED, + ERROR_SHARING_ROUTER_INSTALL, + ERROR_SHARE_CONNECTION_FAILED, + ERROR_SHARING_PRIVATE_INSTALL, + ERROR_CANNOT_SHARE_CONNECTION, + ERROR_NO_SMART_CARD_READER, + ERROR_SHARING_ADDRESS_EXISTS, + ERROR_NO_CERTIFICATE, + ERROR_SHARING_MULTIPLE_ADDRESSES, + ERROR_FAILED_TO_ENCRYPT, + ERROR_BAD_ADDRESS_SPECIFIED, + ERROR_CONNECTION_REJECT, + ERROR_CONGESTION, + ERROR_INCOMPATIBLE, + ERROR_NUMBERCHANGED, + ERROR_TEMPFAILURE, + ERROR_BLOCKED, + ERROR_DONOTDISTURB, + ERROR_OUTOFORDER, + ERROR_UNABLE_TO_AUTHENTICATE_SERVER, + ERROR_SMART_CARD_REQUIRED, + ERROR_INVALID_FUNCTION_FOR_ENTRY, + ERROR_CERT_FOR_ENCRYPTION_NOT_FOUND, + ERROR_SHARING_RRAS_CONFLICT, + ERROR_SHARING_NO_PRIVATE_LAN, + ERROR_NO_DIFF_USER_AT_LOGON, + ERROR_NO_REG_CERT_AT_LOGON, + ERROR_OAKLEY_NO_CERT, + ERROR_OAKLEY_AUTH_FAIL, + ERROR_OAKLEY_ATTRIB_FAIL, + ERROR_OAKLEY_GENERAL_PROCESSING, + ERROR_OAKLEY_NO_PEER_CERT, + ERROR_OAKLEY_NO_POLICY, + ERROR_OAKLEY_TIMED_OUT, + ERROR_OAKLEY_ERROR, + ERROR_UNKNOWN_FRAMED_PROTOCOL, + ERROR_WRONG_TUNNEL_TYPE, + ERROR_UNKNOWN_SERVICE_TYPE, + ERROR_CONNECTING_DEVICE_NOT_FOUND, + ERROR_NO_EAPTLS_CERTIFICATE, // = RASBASE+198 + RASBASEEND = ERROR_NO_EAPTLS_CERTIFICATE +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/rassapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/rassapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,220 @@ +/***********************************************************************\ +* rassapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.rassapi; + +private import win32.lmcons, win32.windef; + +// FIXME: check types of constants + +const size_t + RASSAPI_MAX_PHONENUMBER_SIZE = 128, + RASSAPI_MAX_MEDIA_NAME = 16, + RASSAPI_MAX_PORT_NAME = 16, + RASSAPI_MAX_DEVICE_NAME = 128, + RASSAPI_MAX_DEVICETYPE_NAME = 16, + RASSAPI_MAX_PARAM_KEY_SIZE = 32; + +const RASPRIV_NoCallback = 0x01; +const RASPRIV_AdminSetCallback = 0x02; +const RASPRIV_CallerSetCallback = 0x04; +const RASPRIV_DialinPrivilege = 0x08; +const RASPRIV_CallbackType = 0x07; + +enum { + RAS_MODEM_OPERATIONAL = 1, + RAS_MODEM_NOT_RESPONDING, + RAS_MODEM_HARDWARE_FAILURE, + RAS_MODEM_INCORRECT_RESPONSE, + RAS_MODEM_UNKNOWN // = 5 +} + +enum { + RAS_PORT_NON_OPERATIONAL = 1, + RAS_PORT_DISCONNECTED, + RAS_PORT_CALLING_BACK, + RAS_PORT_LISTENING, + RAS_PORT_AUTHENTICATING, + RAS_PORT_AUTHENTICATED, + RAS_PORT_INITIALIZING // = 7 +} + +enum { + MEDIA_UNKNOWN, + MEDIA_SERIAL, + MEDIA_RAS10_SERIAL, + MEDIA_X25, + MEDIA_ISDN +} + +const USER_AUTHENTICATED = 0x0001; +const MESSENGER_PRESENT = 0x0002; +const PPP_CLIENT = 0x0004; +const GATEWAY_ACTIVE = 0x0008; +const REMOTE_LISTEN = 0x0010; +const PORT_MULTILINKED = 0x0020; + +const size_t + RAS_IPADDRESSLEN = 15, + RAS_IPXADDRESSLEN = 22, + RAS_ATADDRESSLEN = 32; + +// FIXME: should these be grouped together? +enum { + RASDOWNLEVEL = 10, + RASADMIN_35 = 35, + RASADMIN_CURRENT = 40 +} + +alias ULONG IPADDR; + +enum RAS_PARAMS_FORMAT { + ParamNumber = 0, + ParamString +} + +union RAS_PARAMS_VALUE { + DWORD Number; + struct _String { + DWORD Length; + PCHAR Data; + } + _String String; +} + +struct RAS_PARAMETERS { + CHAR[RASSAPI_MAX_PARAM_KEY_SIZE] P_Key; + RAS_PARAMS_FORMAT P_Type; + BYTE P_Attributes; + RAS_PARAMS_VALUE P_Value; +} + +struct RAS_USER_0 { + BYTE bfPrivilege; + WCHAR[RASSAPI_MAX_PHONENUMBER_SIZE + 1] szPhoneNumber; +} +alias RAS_USER_0* PRAS_USER_0; + +struct RAS_PORT_0 { + WCHAR[RASSAPI_MAX_PORT_NAME] wszPortName; + WCHAR[RASSAPI_MAX_DEVICETYPE_NAME] wszDeviceType; + WCHAR[RASSAPI_MAX_DEVICE_NAME] wszDeviceName; + WCHAR[RASSAPI_MAX_MEDIA_NAME] wszMediaName; + DWORD reserved; + DWORD Flags; + WCHAR[UNLEN + 1] wszUserName; + WCHAR[NETBIOS_NAME_LEN] wszComputer; + DWORD dwStartSessionTime; // seconds from 1/1/1970 + WCHAR[DNLEN + 1] wszLogonDomain; + BOOL fAdvancedServer; +} +alias RAS_PORT_0* PRAS_PORT_0; + +struct RAS_PPP_NBFCP_RESULT { + DWORD dwError; + DWORD dwNetBiosError; + CHAR[NETBIOS_NAME_LEN + 1] szName; + WCHAR[NETBIOS_NAME_LEN + 1] wszWksta; +} + +struct RAS_PPP_IPCP_RESULT { + DWORD dwError; + WCHAR[RAS_IPADDRESSLEN + 1] wszAddress; +} + +struct RAS_PPP_IPXCP_RESULT { + DWORD dwError; + WCHAR[RAS_IPXADDRESSLEN + 1] wszAddress; +} + +struct RAS_PPP_ATCP_RESULT { + DWORD dwError; + WCHAR[RAS_ATADDRESSLEN + 1] wszAddress; +} + +struct RAS_PPP_PROJECTION_RESULT { + RAS_PPP_NBFCP_RESULT nbf; + RAS_PPP_IPCP_RESULT ip; + RAS_PPP_IPXCP_RESULT ipx; + RAS_PPP_ATCP_RESULT at; +} + +struct RAS_PORT_1 { + RAS_PORT_0 rasport0; + DWORD LineCondition; + DWORD HardwareCondition; + DWORD LineSpeed; + WORD NumStatistics; + WORD NumMediaParms; + DWORD SizeMediaParms; + RAS_PPP_PROJECTION_RESULT ProjResult; +} +alias RAS_PORT_1* PRAS_PORT_1; + +struct RAS_PORT_STATISTICS { + DWORD dwBytesXmited; + DWORD dwBytesRcved; + DWORD dwFramesXmited; + DWORD dwFramesRcved; + DWORD dwCrcErr; + DWORD dwTimeoutErr; + DWORD dwAlignmentErr; + DWORD dwHardwareOverrunErr; + DWORD dwFramingErr; + DWORD dwBufferOverrunErr; + DWORD dwBytesXmitedUncompressed; + DWORD dwBytesRcvedUncompressed; + DWORD dwBytesXmitedCompressed; + DWORD dwBytesRcvedCompressed; + DWORD dwPortBytesXmited; + DWORD dwPortBytesRcved; + DWORD dwPortFramesXmited; + DWORD dwPortFramesRcved; + DWORD dwPortCrcErr; + DWORD dwPortTimeoutErr; + DWORD dwPortAlignmentErr; + DWORD dwPortHardwareOverrunErr; + DWORD dwPortFramingErr; + DWORD dwPortBufferOverrunErr; + DWORD dwPortBytesXmitedUncompressed; + DWORD dwPortBytesRcvedUncompressed; + DWORD dwPortBytesXmitedCompressed; + DWORD dwPortBytesRcvedCompressed; +} +alias RAS_PORT_STATISTICS* PRAS_PORT_STATISTICS; + +struct RAS_SERVER_0 { + WORD TotalPorts; + WORD PortsInUse; + DWORD RasVersion; +} +alias RAS_SERVER_0* PRAS_SERVER_0; + +extern (Windows) { + DWORD RasAdminServerGetInfo(WCHAR*, PRAS_SERVER_0); + DWORD RasAdminGetUserAccountServer(WCHAR*, WCHAR*, LPWSTR); + DWORD RasAdminUserGetInfo(WCHAR*, WCHAR*, PRAS_USER_0); + DWORD RasAdminUserSetInfo(WCHAR*, WCHAR*, PRAS_USER_0); + DWORD RasAdminPortEnum(WCHAR*, PRAS_PORT_0*, WORD*); + DWORD RasAdminPortGetInfo(WCHAR*, WCHAR*, RAS_PORT_1*, + RAS_PORT_STATISTICS*, RAS_PARAMETERS**); + DWORD RasAdminPortClearStatistics(WCHAR*, WCHAR*); + DWORD RasAdminPortDisconnect(WCHAR*, WCHAR*); + DWORD RasAdminFreeBuffer(PVOID); + DWORD RasAdminGetErrorString(UINT, WCHAR*, DWORD); + BOOL RasAdminAcceptNewConnection(RAS_PORT_1*, RAS_PORT_STATISTICS*, + RAS_PARAMETERS*); + VOID RasAdminConnectionHangupNotification(RAS_PORT_1*, + RAS_PORT_STATISTICS*, RAS_PARAMETERS*); + DWORD RasAdminGetIpAddressForUser (WCHAR*, WCHAR*, IPADDR*, BOOL*); + VOID RasAdminReleaseIpAddress (WCHAR*, WCHAR*,IPADDR*); + DWORD RasAdminGetUserParms(WCHAR*, PRAS_USER_0); + DWORD RasAdminSetUserParms(WCHAR*, DWORD, PRAS_USER_0); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/readme.txt --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/readme.txt Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,15 @@ ++--------------------------------------+ +| Translation of the Win32 API headers | ++--------------------------------------+ + +This is a project to create a well-crafted translation of the Windows 32-bit API headers in the D programming language. + +The project started off as an improvement of Y. Tomino's translation, but is now a derivative of the public domain MinGW Windows headers. + +The official project page is at + +http://www.dsource.org/projects/bindings/wiki/WindowsApi + +If you wish to contribute to this project, please assign modules to yourself at that site, and refer to the translation instructions. + +Email me with comments/suggestions/bug reports: smjg@iname.com diff -r 586e4a649642 -r 4a9dcbd9e54f win32/reason.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/reason.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,63 @@ +/***********************************************************************\ +* reason.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.reason; + +private import win32.w32api, win32.windef; + +static assert (_WIN32_WINNT >= 0x501, + "win32.reason is only available on WindowsXP and later"); + + +enum : DWORD { + SHTDN_REASON_MAJOR_OTHER = 0x00000000, + SHTDN_REASON_MAJOR_HARDWARE = 0x00010000, + SHTDN_REASON_MAJOR_OPERATINGSYSTEM = 0x00020000, + SHTDN_REASON_MAJOR_SOFTWARE = 0x00030000, + SHTDN_REASON_MAJOR_APPLICATION = 0x00040000, + SHTDN_REASON_MAJOR_SYSTEM = 0x00050000, + SHTDN_REASON_MAJOR_POWER = 0x00060000, + SHTDN_REASON_MAJOR_LEGACY_API = 0x00070000 +} + +enum : DWORD { + SHTDN_REASON_MINOR_OTHER, + SHTDN_REASON_MINOR_MAINTENANCE, + SHTDN_REASON_MINOR_INSTALLATION, + SHTDN_REASON_MINOR_UPGRADE, + SHTDN_REASON_MINOR_RECONFIG, + SHTDN_REASON_MINOR_HUNG, + SHTDN_REASON_MINOR_UNSTABLE, + SHTDN_REASON_MINOR_DISK, + SHTDN_REASON_MINOR_PROCESSOR, + SHTDN_REASON_MINOR_NETWORKCARD, + SHTDN_REASON_MINOR_POWER_SUPPLY, + SHTDN_REASON_MINOR_CORDUNPLUGGED, + SHTDN_REASON_MINOR_ENVIRONMENT, + SHTDN_REASON_MINOR_HARDWARE_DRIVER, + SHTDN_REASON_MINOR_OTHERDRIVER, + SHTDN_REASON_MINOR_BLUESCREEN, + SHTDN_REASON_MINOR_SERVICEPACK, + SHTDN_REASON_MINOR_HOTFIX, + SHTDN_REASON_MINOR_SECURITYFIX, + SHTDN_REASON_MINOR_SECURITY, + SHTDN_REASON_MINOR_NETWORK_CONNECTIVITY, + SHTDN_REASON_MINOR_WMI, + SHTDN_REASON_MINOR_SERVICEPACK_UNINSTALL, + SHTDN_REASON_MINOR_HOTFIX_UNINSTALL, + SHTDN_REASON_MINOR_SECURITYFIX_UNINSTALL, + SHTDN_REASON_MINOR_MMC, // = 0x00000019 + SHTDN_REASON_MINOR_TERMSRV = 0x00000020 +} + +enum : DWORD { + SHTDN_REASON_FLAG_USER_DEFINED = 0x40000000, + SHTDN_REASON_FLAG_PLANNED = 0x80000000 +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/regstr.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/regstr.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,816 @@ +/***********************************************************************\ +* regstr.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.regstr; + +// TODO: fix possible conflict with shloj. Sort out NEC_98 issue. + +private import win32.windef; + +const REGSTR_MAX_VALUE_LENGTH = 256; + +enum { + IT_COMPACT = 0, + IT_TYPICAL, + IT_PORTABLE, + IT_CUSTOM // = 3 +} + +const DOSOPTGF_DEFCLEAN = 1; + +const DOSOPTF_DEFAULT = 0x01; +const DOSOPTF_SUPPORTED = 0x02; +const DOSOPTF_ALWAYSUSE = 0x04; +const DOSOPTF_USESPMODE = 0x08; +const DOSOPTF_PROVIDESUMB = 0x10; +const DOSOPTF_NEEDSETUP = 0x20; +const DOSOPTF_INDOSSTART = 0x40; +const DOSOPTF_MULTIPLE = 0x80; + +const SUF_FIRSTTIME = 0x0001; +const SUF_EXPRESS = 0x0002; +const SUF_BATCHINF = 0x0004; +const SUF_CLEAN = 0x0008; +const SUF_INSETUP = 0x0010; +const SUF_NETSETUP = 0x0020; +const SUF_NETHDBOOT = 0x0040; +const SUF_NETRPLBOOT = 0x0080; +const SUF_SBSCOPYOK = 0x0100; + +const VPDF_DISABLEPWRMGMT = 1; +const VPDF_FORCEAPM10MODE = 2; +const VPDF_SKIPINTELSLCHECK = 4; +const VPDF_DISABLEPWRSTATUSPOLL = 8; + +const PCMCIA_OPT_HAVE_SOCKET = 0x01; +const PCMCIA_OPT_AUTOMEM = 0x04; +const PCMCIA_OPT_NO_SOUND = 0x08; +const PCMCIA_OPT_NO_AUDIO = 0x10; +const PCMCIA_OPT_NO_APMREMOVE = 0x20; + +const PCMCIA_DEF_MEMBEGIN = 0x0C0000; +const PCMCIA_DEF_MEMEND = 0xFFFFFF; +const PCMCIA_DEF_MEMLEN = 0x001000; +const PCMCIA_DEF_MIN_REGION = 0x010000; + +enum { + PCI_OPTIONS_USE_BIOS = 1, + PCI_OPTIONS_USE_IRQ_STEERING = 2 +} + +const PCI_FLAG_NO_VIDEO_IRQ = 0x0001; +const PCI_FLAG_PCMCIA_WANT_IRQ = 0x0002; +const PCI_FLAG_DUAL_IDE = 0x0004; +const PCI_FLAG_NO_ENUM_AT_ALL = 0x0008; +const PCI_FLAG_ENUM_NO_RESOURCE = 0x0010; +const PCI_FLAG_NEED_DWORD_ACCESS = 0x0020; +const PCI_FLAG_SINGLE_FUNCTION = 0x0040; +const PCI_FLAG_ALWAYS_ENABLED = 0x0080; +const PCI_FLAG_IS_IDE = 0x0100; +const PCI_FLAG_IS_VIDEO = 0x0200; +const PCI_FLAG_FAIL_START = 0x0400; + +const size_t REGSTR_VAL_MAX_HCID_LEN = 1024; + +const REGDF_NOTDETIO = 0x00000001; +const REGDF_NOTDETMEM = 0x00000002; +const REGDF_NOTDETIRQ = 0x00000004; +const REGDF_NOTDETDMA = 0x00000008; +const REGDF_NOTDETALL = REGDF_NOTDETIO | REGDF_NOTDETMEM | REGDF_NOTDETIRQ | REGDF_NOTDETDMA; +const REGDF_NEEDFULLCONFIG = 0x00000010; +const REGDF_GENFORCEDCONFIG = 0x00000020; +const REGDF_NODETCONFIG = 0x00008000; +const REGDF_CONFLICTIO = 0x00010000; +const REGDF_CONFLICTMEM = 0x00020000; +const REGDF_CONFLICTIRQ = 0x00040000; +const REGDF_CONFLICTDMA = 0x00080000; +const REGDF_CONFLICTALL = REGDF_CONFLICTIO | REGDF_CONFLICTMEM | REGDF_CONFLICTIRQ | REGDF_CONFLICTDMA; +const REGDF_MAPIRQ2TO9 = 0x00100000; +const REGDF_NOTVERIFIED = 0x80000000; + +const CONFIGFLAG_DISABLED = 0x0001; +const CONFIGFLAG_REMOVED = 0x0002; +const CONFIGFLAG_MANUAL_INSTALL = 0x0004; +const CONFIGFLAG_IGNORE_BOOT_LC = 0x0008; +const CONFIGFLAG_NET_BOOT = 0x0010; +const CONFIGFLAG_REINSTALL = 0x0020; +const CONFIGFLAG_FAILEDINSTALL = 0x0040; +const CONFIGFLAG_CANTSTOPACHILD = 0x0080; +const CONFIGFLAG_OKREMOVEROM = 0x0100; +const CONFIGFLAG_NOREMOVEEXIT = 0x0200; + +const CSCONFIGFLAG_DISABLED = 1; +const CSCONFIGFLAG_DO_NOT_CREATE = 2; +const CSCONFIGFLAG_DO_NOT_START = 4; +const CSCONFIGFLAG_BITS = 7; + +const DMSTATEFLAG_APPLYTOALL = 1; + +const NUM_RESOURCE_MAP = 256; + +const MF_FLAGS_EVEN_IF_NO_RESOURCE = 1; +const MF_FLAGS_NO_CREATE_IF_NO_RESOURCE = 2; +const MF_FLAGS_FILL_IN_UNKNOWN_RESOURCE = 4; +const MF_FLAGS_CREATE_BUT_NO_SHOW_DISABLED = 8; + +const EISAFLAG_NO_IO_MERGE = 1; +const EISAFLAG_SLOT_IO_FIRST = 2; + +const EISA_NO_MAX_FUNCTION = 0xFF; + +const NUM_EISA_RANGES = 4; + +const APMMENUSUSPEND_DISABLED = 0; +const APMMENUSUSPEND_ENABLED = 1; +const APMMENUSUSPEND_UNDOCKED = 2; +const APMMENUSUSPEND_NOCHANGE = 128; + +//#ifndef NEC_98 +const TCHAR[] + REGSTR_KEY_ISAENUM = "ISAPnP", + REGSTR_KEY_EISAENUM = "EISA", + REGSTR_VAL_EISA_RANGES = "EISARanges", + REGSTR_VAL_EISA_FUNCTIONS = "EISAFunctions", + REGSTR_VAL_EISA_FUNCTIONS_MASK = "EISAFunctionsMask", + REGSTR_VAL_EISA_FLAGS = "EISAFlags", + REGSTR_VAL_EISA_SIMULATE_INT15 = "EISASimulateInt15"; +// #else +// #define REGSTR_KEY_ISAENUM TEXT("C98PnP") +// #define REGSTR_KEY_EISAENUM TEXT("NESA") +// #define REGSTR_VAL_EISA_RANGES TEXT("NESARanges") +// #define REGSTR_VAL_EISA_FUNCTIONS TEXT("NESAFunctions") +// #define REGSTR_VAL_EISA_FUNCTIONS_MASK TEXT("NESAFunctionsMask") +// #define REGSTR_VAL_EISA_FLAGS TEXT("NESAFlags") +// #define REGSTR_VAL_EISA_SIMULATE_INT15 TEXT("NESASimulateInt15") +// #endif + +const TCHAR[] + REGSTR_KEY_CLASS = `Class`, + REGSTR_KEY_CONFIG = `Config`, + REGSTR_KEY_ENUM = `Enum`, + REGSTR_KEY_ROOTENUM = `Root`, + REGSTR_KEY_BIOSENUM = `BIOS`, + REGSTR_KEY_PCMCIAENUM = `PCMCIA`, + REGSTR_KEY_PCIENUM = `PCI`, + REGSTR_KEY_LOGCONFIG = `LogConfig`, + REGSTR_KEY_SYSTEMBOARD = `*PNP0C01`, + REGSTR_KEY_APM = `*PNP0C05`, + REGSTR_KEY_INIUPDATE = `IniUpdate`, + REG_KEY_INSTDEV = `Installed`, + REGSTR_KEY_DOSOPTCDROM = `CD-ROM`, + REGSTR_KEY_DOSOPTMOUSE = `MOUSE`, + REGSTR_DEFAULT_INSTANCE = `0000`, + REGSTR_PATH_MOTHERBOARD = REGSTR_KEY_SYSTEMBOARD ~ `\` ~ REGSTR_DEFAULT_INSTANCE, + REGSTR_PATH_SETUP = `Software\Microsoft\Windows\CurrentVersion`, + REGSTR_PATH_PIFCONVERT = `Software\Microsoft\Windows\CurrentVersion\PIFConvert`, + REGSTR_PATH_MSDOSOPTS = `Software\Microsoft\Windows\CurrentVersion\MS-DOSOptions`, + REGSTR_PATH_MSDOSEMU = `Software\Microsoft\Windows\CurrentVersion\MS-DOS Emulation`, + REGSTR_PATH_NEWDOSBOX = `Software\Microsoft\Windows\CurrentVersion\MS-DOS Emulation\AppCompat`, + REGSTR_PATH_RUNONCE = `Software\Microsoft\Windows\CurrentVersion\RunOnce`, + REGSTR_PATH_RUN = `Software\Microsoft\Windows\CurrentVersion\Run`, + REGSTR_PATH_RUNSERVICESONCE = `Software\Microsoft\Windows\CurrentVersion\RunServicesOnce`, + REGSTR_PATH_RUNSERVICES = `Software\Microsoft\Windows\CurrentVersion\RunServices`, + +//#ifndef REGSTR_PATH_EXPLORER /* also in shlobj.h */ + REGSTR_PATH_EXPLORER = `Software\Microsoft\Windows\CurrentVersion\Explorer`, +//#endif + + REGSTR_PATH_DETECT = `Software\Microsoft\Windows\CurrentVersion\Detect`, + REGSTR_PATH_APPPATHS = `Software\Microsoft\Windows\CurrentVersion\App Paths`, + REGSTR_PATH_UNINSTALL = `Software\Microsoft\Windows\CurrentVersion\Uninstall`, + REGSTR_PATH_REALMODENET = `Software\Microsoft\Windows\CurrentVersion\Network\Real Mode Net`, + REGSTR_PATH_NETEQUIV = `Software\Microsoft\Windows\CurrentVersion\Network\Equivalent`, + REGSTR_PATH_CVNETWORK = `Software\Microsoft\Windows\CurrentVersion\Network`, + REGSTR_PATH_IDCONFIGDB = `System\CurrentControlSet\Control\IDConfigDB`, + REGSTR_PATH_CLASS = `System\CurrentControlSet\Services\Class`, + REGSTR_PATH_DISPLAYSETTINGS = `Display\Settings`, + REGSTR_PATH_FONTS = `Display\Fonts`, + REGSTR_PATH_ENUM = `Enum`, + REGSTR_PATH_ROOT = `Enum\Root`, + REGSTR_PATH_SERVICES = `System\CurrentControlSet\Services`, + REGSTR_PATH_VXD = `System\CurrentControlSet\Services\VxD`, + REGSTR_PATH_IOS = `System\CurrentControlSet\Services\VxD\IOS`, + REGSTR_PATH_VMM = `System\CurrentControlSet\Services\VxD\VMM`, + REGSTR_PATH_VPOWERD = `System\CurrentControlSet\Services\VxD\VPOWERD`, + REGSTR_PATH_VNETSUP = `System\CurrentControlSet\Services\VxD\VNETSUP`, + REGSTR_PATH_NWREDIR = `System\CurrentControlSet\Services\VxD\NWREDIR`, + REGSTR_PATH_NCPSERVER = `System\CurrentControlSet\Services\NcpServer\Parameters`, + REGSTR_PATH_IOARB = `System\CurrentControlSet\Services\Arbitrators\IOArb`, + REGSTR_PATH_ADDRARB = `System\CurrentControlSet\Services\Arbitrators\AddrArb`, + REGSTR_PATH_DMAARB = `System\CurrentControlSet\Services\Arbitrators\DMAArb`, + REGSTR_PATH_IRQARB = `System\CurrentControlSet\Services\Arbitrators\IRQArb`, + REGSTR_PATH_CODEPAGE = `System\CurrentControlSet\Control\Nls\Codepage`, + REGSTR_PATH_FILESYSTEM = `System\CurrentControlSet\Control\FileSystem`, + REGSTR_PATH_FILESYSTEM_NOVOLTRACK = `System\CurrentControlSet\Control\FileSystem\NoVolTrack`, + REGSTR_PATH_CDFS = `System\CurrentControlSet\Control\FileSystem\CDFS`, + REGSTR_PATH_WINBOOT = `System\CurrentControlSet\Control\WinBoot`, + REGSTR_PATH_INSTALLEDFILES = `System\CurrentControlSet\Control\InstalledFiles`, + REGSTR_PATH_VMM32FILES = `System\CurrentControlSet\Control\VMM32Files`, + + REGSTR_VAL_BITSPERPIXEL = `BitsPerPixel`, + REGSTR_VAL_RESOLUTION = `Resolution`, + REGSTR_VAL_DPILOGICALX = `DPILogicalX`, + REGSTR_VAL_DPILOGICALY = `DPILogicalY`, + REGSTR_VAL_DPIPHYSICALX = `DPIPhysicalX`, + REGSTR_VAL_DPIPHYSICALY = `DPIPhysicalY`, + REGSTR_VAL_REFRESHRATE = `RefreshRate`, + REGSTR_VAL_DISPLAYFLAGS = `DisplayFlags`, + REGSTR_PATH_CONTROLPANEL = `Control Panel`, + REGSTR_PATH_CONTROLSFOLDER = `Software\Microsoft\Windows\CurrentVersion\Controls Folder`, + REGSTR_VAL_DOSCP = `OEMCP`, + REGSTR_VAL_WINCP = `ACP`, + REGSTR_PATH_DYNA_ENUM = `Config Manager\Enum`, + REGSTR_VAL_HARDWARE_KEY = `HardWareKey`, + REGSTR_VAL_ALLOCATION = `Allocation`, + REGSTR_VAL_PROBLEM = `Problem`, + REGSTR_VAL_STATUS = `Status`, + REGSTR_VAL_DONTUSEMEM = `DontAllocLastMem`, + REGSTR_VAL_SYSTEMROOT = `SystemRoot`, + REGSTR_VAL_BOOTCOUNT = `BootCount`, + REGSTR_VAL_REALNETSTART = `RealNetStart`, + REGSTR_VAL_MEDIA = `MediaPath`, + REGSTR_VAL_CONFIG = `ConfigPath`, + REGSTR_VAL_DEVICEPATH = `DevicePath`, + REGSTR_VAL_SRCPATH = `SourcePath`, + REGSTR_VAL_OLDWINDIR = `OldWinDir`, + REGSTR_VAL_SETUPFLAGS = `SetupFlags`, + REGSTR_VAL_REGOWNER = `RegisteredOwner`, + REGSTR_VAL_REGORGANIZATION = `RegisteredOrganization`, + REGSTR_VAL_LICENSINGINFO = `LicensingInfo`, + REGSTR_VAL_OLDMSDOSVER = `OldMSDOSVer`, + REGSTR_VAL_FIRSTINSTALLDATETIME = `FirstInstallDateTime`, + REGSTR_VAL_INSTALLTYPE = `InstallType`, + REGSTR_VAL_WRAPPER = `Wrapper`, + + REGSTR_KEY_SETUP = `\Setup`, + REGSTR_VAL_BOOTDIR = `BootDir`, + REGSTR_VAL_WINBOOTDIR = `WinbootDir`, + REGSTR_VAL_WINDIR = `WinDir`, + REGSTR_VAL_APPINSTPATH = `AppInstallPath`, + REGSTR_PATH_EBD = REGSTR_PATH_SETUP ~ REGSTR_KEY_SETUP ~ `\EBD`, + REGSTR_KEY_EBDFILESLOCAL = `EBDFilesLocale`, + REGSTR_KEY_EBDFILESKEYBOARD = `EBDFilesKeyboard`, + REGSTR_KEY_EBDAUTOEXECBATLOCAL = `EBDAutoexecBatLocale`, + REGSTR_KEY_EBDAUTOEXECBATKEYBOARD = `EBDAutoexecBatKeyboard`, + REGSTR_KEY_EBDCONFIGSYSLOCAL = `EBDConfigSysLocale`, + REGSTR_KEY_EBDCONFIGSYSKEYBOARD = `EBDConfigSysKeyboard`, + REGSTR_VAL_MSDOSMODE = `MSDOSMode`, + REGSTR_VAL_MSDOSMODEDISCARD = `Discard`, + REGSTR_VAL_DOSOPTGLOBALFLAGS = `GlobalFlags`, + REGSTR_VAL_DOSOPTFLAGS = `Flags`, + REGSTR_VAL_OPTORDER = `Order`, + REGSTR_VAL_CONFIGSYS = `Config.Sys`, + REGSTR_VAL_AUTOEXEC = `Autoexec.Bat`, + REGSTR_VAL_STDDOSOPTION = `StdOption`, + REGSTR_VAL_DOSOPTTIP = `TipText`, + + REGSTR_VAL_DOSPAGER = `DOSPager`, + REGSTR_VAL_VXDGROUPS = `VXDGroups`, + REGSTR_VAL_VPOWERDFLAGS = `Flags`, + + REGSTR_VAL_WORKGROUP = `Workgroup`, + REGSTR_VAL_DIRECTHOST = `DirectHost`, + REGSTR_VAL_FILESHARING = `FileSharing`, + REGSTR_VAL_PRINTSHARING = `PrintSharing`, + REGSTR_VAL_FIRSTNETDRIVE = `FirstNetworkDrive`, + REGSTR_VAL_MAXCONNECTIONS = `MaxConnections`, + REGSTR_VAL_APISUPPORT = `APISupport`, + REGSTR_VAL_MAXRETRY = `MaxRetry`, + REGSTR_VAL_MINRETRY = `MinRetry`, + REGSTR_VAL_SUPPORTLFN = `SupportLFN`, + REGSTR_VAL_SUPPORTBURST = `SupportBurst`, + REGSTR_VAL_SUPPORTTUNNELLING = `SupportTunnelling`, + REGSTR_VAL_FULLTRACE = `FullTrace`, + REGSTR_VAL_READCACHING = `ReadCaching`, + REGSTR_VAL_SHOWDOTS = `ShowDots`, + REGSTR_VAL_GAPTIME = `GapTime`, + REGSTR_VAL_SEARCHMODE = `SearchMode`, + REGSTR_VAL_SHELLVERSION = `ShellVersion`, + REGSTR_VAL_MAXLIP = `MaxLIP`, + REGSTR_VAL_PRESERVECASE = `PreserveCase`, + REGSTR_VAL_OPTIMIZESFN = `OptimizeSFN`, + REGSTR_VAL_NCP_BROWSEMASTER = `BrowseMaster`, + REGSTR_VAL_NCP_USEPEERBROWSING = `Use_PeerBrowsing`, + REGSTR_VAL_NCP_USESAP = `Use_Sap`, + REGSTR_VAL_WIN31FILESYSTEM = `Win31FileSystem`, + REGSTR_VAL_PRESERVELONGNAMES = `PreserveLongNames`, + REGSTR_VAL_DRIVEWRITEBEHIND = `DriveWriteBehind`, + REGSTR_VAL_ASYNCFILECOMMIT = `AsyncFileCommit`, + REGSTR_VAL_PATHCACHECOUNT = `PathCache`, + REGSTR_VAL_NAMECACHECOUNT = `NameCache`, + REGSTR_VAL_CONTIGFILEALLOC = `ContigFileAllocSize`, + REGSTR_VAL_VOLIDLETIMEOUT = `VolumeIdleTimeout`, + REGSTR_VAL_BUFFIDLETIMEOUT = `BufferIdleTimeout`, + REGSTR_VAL_BUFFAGETIMEOUT = `BufferAgeTimeout`, + REGSTR_VAL_NAMENUMERICTAIL = `NameNumericTail`, + REGSTR_VAL_READAHEADTHRESHOLD = `ReadAheadThreshold`, + REGSTR_VAL_DOUBLEBUFFER = `DoubleBuffer`, + REGSTR_VAL_SOFTCOMPATMODE = `SoftCompatMode`, + REGSTR_VAL_DRIVESPINDOWN = `DriveSpinDown`, + REGSTR_VAL_FORCEPMIO = `ForcePMIO`, + REGSTR_VAL_FORCERMIO = `ForceRMIO`, + REGSTR_VAL_LASTBOOTPMDRVS = `LastBootPMDrvs`, + REGSTR_VAL_VIRTUALHDIRQ = `VirtualHDIRQ`, + REGSTR_VAL_SRVNAMECACHECOUNT = `ServerNameCacheMax`, + REGSTR_VAL_SRVNAMECACHE = `ServerNameCache`, + REGSTR_VAL_SRVNAMECACHENETPROV = `ServerNameCacheNumNets`, + REGSTR_VAL_AUTOMOUNT = `AutoMountDrives`, + REGSTR_VAL_COMPRESSIONMETHOD = `CompressionAlgorithm`, + REGSTR_VAL_COMPRESSIONTHRESHOLD = `CompressionThreshold`, + REGSTR_VAL_CDCACHESIZE = `CacheSize`, + REGSTR_VAL_CDPREFETCH = `Prefetch`, + REGSTR_VAL_CDPREFETCHTAIL = `PrefetchTail`, + REGSTR_VAL_CDRAWCACHE = `RawCache`, + REGSTR_VAL_CDEXTERRORS = `ExtendedErrors`, + REGSTR_VAL_CDSVDSENSE = `SVDSense`, + REGSTR_VAL_CDSHOWVERSIONS = `ShowVersions`, + REGSTR_VAL_CDCOMPATNAMES = `MSCDEXCompatNames`, + REGSTR_VAL_CDNOREADAHEAD = `NoReadAhead`, + REGSTR_VAL_SCSI = `SCSI\`, + REGSTR_VAL_ESDI = `ESDI\`, + REGSTR_VAL_FLOP = `FLOP\`, + REGSTR_VAL_DISK = `GenDisk`, + REGSTR_VAL_CDROM = `GenCD`, + REGSTR_VAL_TAPE = `TAPE`, + REGSTR_VAL_SCANNER = `SCANNER`, + REGSTR_VAL_FLOPPY = `FLOPPY`, + REGSTR_VAL_SCSITID = `SCSITargetID`, + REGSTR_VAL_SCSILUN = `SCSILUN`, + REGSTR_VAL_REVLEVEL = `RevisionLevel`, + REGSTR_VAL_PRODUCTID = `ProductId`, + REGSTR_VAL_PRODUCTTYPE = `ProductType`, + REGSTR_VAL_DEVTYPE = `DeviceType`, + REGSTR_VAL_REMOVABLE = `Removable`, + REGSTR_VAL_CURDRVLET = `CurrentDriveLetterAssignment`, + REGSTR_VAL_USRDRVLET = `UserDriveLetterAssignment`, + REGSTR_VAL_SYNCDATAXFER = `SyncDataXfer`, + REGSTR_VAL_AUTOINSNOTE = `AutoInsertNotification`, + REGSTR_VAL_DISCONNECT = `Disconnect`, + REGSTR_VAL_INT13 = `Int13`, + REGSTR_VAL_PMODE_INT13 = `PModeInt13`, + REGSTR_VAL_USERSETTINGS = `AdapterSettings`, + REGSTR_VAL_NOIDE = `NoIDE`, + REGSTR_VAL_DISKCLASSNAME = `DiskDrive`, + REGSTR_VAL_CDROMCLASSNAME = `CDROM`, + REGSTR_VAL_FORCELOAD = `ForceLoadPD`, + REGSTR_VAL_FORCEFIFO = `ForceFIFO`, + REGSTR_VAL_FORCECL = `ForceChangeLine`, + REGSTR_VAL_NOUSECLASS = `NoUseClass`, + REGSTR_VAL_NOINSTALLCLASS = `NoInstallClass`, + REGSTR_VAL_NODISPLAYCLASS = `NoDisplayClass`, + REGSTR_VAL_SILENTINSTALL = `SilentInstall`, + REGSTR_KEY_PCMCIA_CLASS = `PCMCIA`, + REGSTR_KEY_SCSI_CLASS = `SCSIAdapter`, + REGSTR_KEY_PORTS_CLASS = `ports`, + REGSTR_KEY_MEDIA_CLASS = `MEDIA`, + REGSTR_KEY_DISPLAY_CLASS = `Display`, + REGSTR_KEY_KEYBOARD_CLASS = `Keyboard`, + REGSTR_KEY_MOUSE_CLASS = `Mouse`, + REGSTR_KEY_MONITOR_CLASS = `Monitor`, + REGSTR_VAL_PCMCIA_OPT = `Options`, + REGSTR_VAL_PCMCIA_MEM = `Memory`, + REGSTR_VAL_PCMCIA_ALLOC = `AllocMemWin`, + REGSTR_VAL_PCMCIA_ATAD = `ATADelay`, + REGSTR_VAL_PCMCIA_SIZ = `MinRegionSize`, + REGSTR_VAL_P1284MDL = `Model`, + REGSTR_VAL_P1284MFG = `Manufacturer`, + REGSTR_VAL_ISAPNP = `ISAPNP`, + REGSTR_VAL_ISAPNP_RDP_OVERRIDE = `RDPOverRide`, + REGSTR_VAL_PCI = `PCI`, + REGSTR_PCI_OPTIONS = `Options`, + REGSTR_PCI_DUAL_IDE = `PCIDualIDE`, + + REGSTR_KEY_CRASHES = `Crashes`, + REGSTR_KEY_DANGERS = `Dangers`, + REGSTR_KEY_DETMODVARS = `DetModVars`, + REGSTR_KEY_NDISINFO = `NDISInfo`, + REGSTR_VAL_PROTINIPATH = `ProtIniPath`, + REGSTR_VAL_RESOURCES = `Resources`, + REGSTR_VAL_CRASHFUNCS = `CrashFuncs`, + REGSTR_VAL_CLASS = `Class`, + REGSTR_VAL_DEVDESC = `DeviceDesc`, + REGSTR_VAL_BOOTCONFIG = `BootConfig`, + REGSTR_VAL_DETFUNC = `DetFunc`, + REGSTR_VAL_DETFLAGS = `DetFlags`, + REGSTR_VAL_COMPATIBLEIDS = `CompatibleIDs`, + REGSTR_VAL_DETCONFIG = `DetConfig`, + REGSTR_VAL_VERIFYKEY = `VerifyKey`, + REGSTR_VAL_COMINFO = `ComInfo`, + REGSTR_VAL_INFNAME = `InfName`, + REGSTR_VAL_CARDSPECIFIC = `CardSpecific`, + REGSTR_VAL_NETOSTYPE = `NetOSType`, + REGSTR_DATA_NETOS_NDIS = `NDIS`, + REGSTR_DATA_NETOS_ODI = `ODI`, + REGSTR_DATA_NETOS_IPX = `IPX`, + REGSTR_VAL_MFG = `Mfg`, + REGSTR_VAL_SCAN_ONLY_FIRST = `ScanOnlyFirstDrive`, + REGSTR_VAL_SHARE_IRQ = `ForceIRQSharing`, + REGSTR_VAL_NONSTANDARD_ATAPI = `NonStandardATAPI`, + REGSTR_VAL_IDE_FORCE_SERIALIZE = `ForceSerialization`, + REGSTR_VAL_HWREV = `HWRevision`, + REGSTR_VAL_ENABLEINTS = `EnableInts`, + + REGSTR_VAL_APMBIOSVER = `APMBiosVer`, + REGSTR_VAL_APMFLAGS = `APMFlags`, + REGSTR_VAL_SLSUPPORT = `SLSupport`, + REGSTR_VAL_MACHINETYPE = `MachineType`, + REGSTR_VAL_SETUPMACHINETYPE = `SetupMachineType`, + REGSTR_MACHTYPE_UNKNOWN = `Unknown`, + REGSTR_MACHTYPE_IBMPC = `IBM PC`, + REGSTR_MACHTYPE_IBMPCJR = `IBM PCjr`, + REGSTR_MACHTYPE_IBMPCCONV = `IBM PC Convertible`, + REGSTR_MACHTYPE_IBMPCXT = `IBM PC/XT`, + REGSTR_MACHTYPE_IBMPCXT_286 = `IBM PC/XT 286`, + REGSTR_MACHTYPE_IBMPCAT = `IBM PC/AT`, + REGSTR_MACHTYPE_IBMPS2_25 = `IBM PS/2-25`, + REGSTR_MACHTYPE_IBMPS2_30_286 = `IBM PS/2-30 286`, + REGSTR_MACHTYPE_IBMPS2_30 = `IBM PS/2-30`, + REGSTR_MACHTYPE_IBMPS2_50 = `IBM PS/2-50`, + REGSTR_MACHTYPE_IBMPS2_50Z = `IBM PS/2-50Z`, + REGSTR_MACHTYPE_IBMPS2_55SX = `IBM PS/2-55SX`, + REGSTR_MACHTYPE_IBMPS2_60 = `IBM PS/2-60`, + REGSTR_MACHTYPE_IBMPS2_65SX = `IBM PS/2-65SX`, + REGSTR_MACHTYPE_IBMPS2_70 = `IBM PS/2-70`, + REGSTR_MACHTYPE_IBMPS2_P70 = `IBM PS/2-P70`, + REGSTR_MACHTYPE_IBMPS2_70_80 = `IBM PS/2-70/80`, + REGSTR_MACHTYPE_IBMPS2_80 = `IBM PS/2-80`, + REGSTR_MACHTYPE_IBMPS2_90 = `IBM PS/2-90`, + REGSTR_MACHTYPE_IBMPS1 = `IBM PS/1`, + REGSTR_MACHTYPE_PHOENIX_PCAT = `Phoenix PC/AT Compatible`, + REGSTR_MACHTYPE_HP_VECTRA = `HP Vectra`, + REGSTR_MACHTYPE_ATT_PC = `AT&T PC`, + REGSTR_MACHTYPE_ZENITH_PC = `Zenith PC`, + REGSTR_VAL_APMMENUSUSPEND = `APMMenuSuspend`, + + REGSTR_VAL_BUSTYPE = `BusType`, + REGSTR_VAL_CPU = `CPU`, + REGSTR_VAL_NDP = `NDP`, + REGSTR_VAL_PNPBIOSVER = `PnPBIOSVer`, + REGSTR_VAL_PNPSTRUCOFFSET = `PnPStrucOffset`, + REGSTR_VAL_PCIBIOSVER = `PCIBIOSVer`, + REGSTR_VAL_HWMECHANISM = `HWMechanism`, + REGSTR_VAL_LASTPCIBUSNUM = `LastPCIBusNum`, + REGSTR_VAL_CONVMEM = `ConvMem`, + REGSTR_VAL_EXTMEM = `ExtMem`, + REGSTR_VAL_COMPUTERNAME = `ComputerName`, + REGSTR_VAL_BIOSNAME = `BIOSName`, + REGSTR_VAL_BIOSVERSION = `BIOSVersion`, + REGSTR_VAL_BIOSDATE = `BIOSDate`, + REGSTR_VAL_MODEL = `Model`, + REGSTR_VAL_SUBMODEL = `Submodel`, + REGSTR_VAL_REVISION = `Revision`, + REGSTR_VAL_FIFODEPTH = `FIFODepth`, + REGSTR_VAL_RDINTTHRESHOLD = `RDIntThreshold`, + REGSTR_VAL_WRINTTHRESHOLD = `WRIntThreshold`, + REGSTR_VAL_PRIORITY = `Priority`, + REGSTR_VAL_DRIVER = `Driver`, + REGSTR_VAL_FUNCDESC = `FunctionDesc`, + REGSTR_VAL_FORCEDCONFIG = `ForcedConfig`, + REGSTR_VAL_CONFIGFLAGS = `ConfigFlags`, + REGSTR_VAL_CSCONFIGFLAGS = `CSConfigFlags`, + + REGSTR_VAL_ROOT_DEVNODE = `HTREE\ROOT\0`, + REGSTR_VAL_RESERVED_DEVNODE = `HTREE\RESERVED\0`, + REGSTR_PATH_READDATAPORT = REGSTR_KEY_ISAENUM ~ `\ReadDataPort\0`, + REGSTR_PATH_MULTI_FUNCTION = `MF`, + REGSTR_VAL_RESOURCE_MAP = `ResourceMap`, + REGSTR_PATH_CHILD_PREFIX = `Child`, + REGSTR_VAL_MF_FLAGS = `MFFlags`, + REGSTR_VAL_DRVDESC = `DriverDesc`, + REGSTR_VAL_DEVLOADER = `DevLoader`, + REGSTR_VAL_STATICVXD = `StaticVxD`, + REGSTR_VAL_PROPERTIES = `Properties`, + REGSTR_VAL_MANUFACTURER = `Manufacturer`, + REGSTR_VAL_EXISTS = `Exists`, + REGSTR_VAL_CMENUMFLAGS = `CMEnumFlags`, + REGSTR_VAL_CMDRIVFLAGS = `CMDrivFlags`, + REGSTR_VAL_ENUMERATOR = `Enumerator`, + REGSTR_VAL_DEVICEDRIVER = `DeviceDriver`, + REGSTR_VAL_PORTNAME = `PortName`, + REGSTR_VAL_INFPATH = `InfPath`, + REGSTR_VAL_INFSECTION = `InfSection`, + REGSTR_VAL_POLLING = `Polling`, + REGSTR_VAL_DONTLOADIFCONFLICT = `DontLoadIfConflict`, + REGSTR_VAL_PORTSUBCLASS = `PortSubClass`, + REGSTR_VAL_NETCLEAN = `NetClean`, + REGSTR_VAL_IDE_NO_SERIALIZE = `IDENoSerialize`, + REGSTR_VAL_NOCMOSORFDPT = `NoCMOSorFDPT`, + REGSTR_VAL_COMVERIFYBASE = `COMVerifyBase`, + REGSTR_KEY_OVERRIDE = `Override`, + REGSTR_VAL_CONFIGMG = `CONFIGMG`, + REGSTR_VAL_SYSDM = `SysDM`, + REGSTR_VAL_SYSDMFUNC = `SysDMFunc`, + REGSTR_VAL_PRIVATE = `Private`, + REGSTR_VAL_PRIVATEFUNC = `PrivateFunc`, + REGSTR_VAL_DETECT = `Detect`, + REGSTR_VAL_DETECTFUNC = `DetectFunc`, + REGSTR_VAL_ASKFORCONFIG = `AskForConfig`, + REGSTR_VAL_ASKFORCONFIGFUNC = `AskForConfigFunc`, + REGSTR_VAL_WAITFORUNDOCK = `WaitForUndock`, + REGSTR_VAL_WAITFORUNDOCKFUNC = `WaitForUndockFunc`, + REGSTR_VAL_REMOVEROMOKAY = `RemoveRomOkay`, + REGSTR_VAL_REMOVEROMOKAYFUNC = `RemoveRomOkayFunc`, + REGSTR_VAL_CURCONFIG = `CurrentConfig`, + REGSTR_VAL_FRIENDLYNAME = `FriendlyName`, + REGSTR_VAL_CURRENTCONFIG = `CurrentConfig`, + REGSTR_VAL_MAP = `Map`, + REGSTR_VAL_ID = `CurrentID`, + REGSTR_VAL_DOCKED = `CurrentDockedState`, + REGSTR_VAL_CHECKSUM = `CurrentChecksum`, + REGSTR_VAL_HWDETECT = `HardwareDetect`, + REGSTR_VAL_INHIBITRESULTS = `InhibitResults`, + REGSTR_VAL_PROFILEFLAGS = `ProfileFlags`, + REGSTR_KEY_PCMCIA = `PCMCIA\`, + REGSTR_KEY_PCUNKNOWN = `UNKNOWN_MANUFACTURER`, + REGSTR_VAL_PCSSDRIVER = `Driver`, + REGSTR_KEY_PCMTD = `MTD-`, + REGSTR_VAL_PCMTDRIVER = `MTD`, + REGSTR_VAL_HARDWAREID = `HardwareID`, + REGSTR_VAL_INSTALLER = `Installer`, + REGSTR_VAL_INSICON = `Icon`, + REGSTR_VAL_ENUMPROPPAGES = `EnumPropPages`, + REGSTR_VAL_BASICPROPERTIES = `BasicProperties`, + REGSTR_VAL_PRIVATEPROBLEM = `PrivateProblem`, + REGSTR_KEY_CURRENT = `Current`, + REGSTR_KEY_DEFAULT = `Default`, + REGSTR_KEY_MODES = `Modes`, + REGSTR_VAL_MODE = `Mode`, + REGSTR_VAL_BPP = `BPP`, + REGSTR_VAL_HRES = `HRes`, + REGSTR_VAL_VRES = `VRes`, + REGSTR_VAL_FONTSIZE = `FontSize`, + REGSTR_VAL_DRV = `drv`, + REGSTR_VAL_GRB = `grb`, + REGSTR_VAL_VDD = `vdd`, + REGSTR_VAL_VER = `Ver`, + REGSTR_VAL_MAXRES = `MaxResolution`, + REGSTR_VAL_DPMS = `DPMS`, + REGSTR_VAL_RESUMERESET = `ResumeReset`, + REGSTR_VAL_DESCRIPTION = `Description`, + REGSTR_KEY_SYSTEM = `System`, + REGSTR_KEY_USER = `User`, + REGSTR_VAL_DPI = `dpi`, + REGSTR_VAL_PCICOPTIONS = `PCICOptions`, + + REGSTR_VAL_PCICIRQMAP = `PCICIRQMap`, + REGSTR_PATH_APPEARANCE = `Control Panel\Appearance`, + REGSTR_PATH_LOOKSCHEMES = `Control Panel\Appearance\Schemes`, + REGSTR_VAL_CUSTOMCOLORS = `CustomColors`, + REGSTR_PATH_SCREENSAVE = `Control Panel\Desktop`, + REGSTR_VALUE_USESCRPASSWORD = `ScreenSaveUsePassword`, + REGSTR_VALUE_SCRPASSWORD = `ScreenSave_Data`, + REGSTR_VALUE_LOWPOWERTIMEOUT = `ScreenSaveLowPowerTimeout`, + REGSTR_VALUE_POWEROFFTIMEOUT = `ScreenSavePowerOffTimeout`, + REGSTR_VALUE_LOWPOWERACTIVE = `ScreenSaveLowPowerActive`, + REGSTR_VALUE_POWEROFFACTIVE = `ScreenSavePowerOffActive`, + REGSTR_PATH_WINDOWSAPPLETS = `Software\Microsoft\Windows\CurrentVersion\Applets`, + REGSTR_PATH_SYSTRAY = `Software\Microsoft\Windows\CurrentVersion\Applets\SysTray`, + REGSTR_VAL_SYSTRAYSVCS = `Services`, + REGSTR_VAL_SYSTRAYBATFLAGS = `PowerFlags`, + REGSTR_VAL_SYSTRAYPCCARDFLAGS = `PCMCIAFlags`, + REGSTR_PATH_NETWORK_USERSETTINGS = `Network`, + REGSTR_KEY_NETWORK_PERSISTENT = `\Persistent`, + REGSTR_KEY_NETWORK_RECENT = `\Recent`, + REGSTR_VAL_REMOTE_PATH = `RemotePath`, + REGSTR_VAL_USER_NAME = `UserName`, + REGSTR_VAL_PROVIDER_NAME = `ProviderName`, + REGSTR_VAL_CONNECTION_TYPE = `ConnectionType`, + REGSTR_VAL_UPGRADE = `Upgrade`, + REGSTR_KEY_LOGON = `\Logon`, + REGSTR_VAL_MUSTBEVALIDATED = `MustBeValidated`, + REGSTR_VAL_RUNLOGINSCRIPT = `ProcessLoginScript`, + REGSTR_KEY_NETWORKPROVIDER = `\NetworkProvider`, + REGSTR_PATH_NW32NETPROVIDER =REGSTR_PATH_SERVICES ~ `\NWNP32` ~ REGSTR_KEY_NETWORKPROVIDER, + REGSTR_PATH_MS32NETPROVIDER =REGSTR_PATH_SERVICES ~ `\MSNP32` ~ REGSTR_KEY_NETWORKPROVIDER, + REGSTR_VAL_AUTHENT_AGENT = `AuthenticatingAgent`, + REGSTR_VAL_PREFREDIR = `PreferredRedir`, + REGSTR_VAL_AUTOSTART = `AutoStart`, + REGSTR_VAL_AUTOLOGON = `AutoLogon`, + REGSTR_VAL_NETCARD = `Netcard`, + REGSTR_VAL_TRANSPORT = `Transport`, + REGSTR_VAL_DYNAMIC = `Dynamic`, + REGSTR_VAL_TRANSITION = `Transition`, + REGSTR_VAL_STATICDRIVE = `StaticDrive`, + REGSTR_VAL_LOADHI = `LoadHi`, + REGSTR_VAL_LOADRMDRIVERS = `LoadRMDrivers`, + REGSTR_VAL_SETUPN = `SetupN`, + REGSTR_VAL_SETUPNPATH = `SetupNPath`, + REGSTR_VAL_WRKGRP_FORCEMAPPING = `WrkgrpForceMapping`, + REGSTR_VAL_WRKGRP_REQUIRED = `WrkgrpRequired`, + REGSTR_PATH_CURRENT_CONTROL_SET = `System\CurrentControlSet\Control`, + REGSTR_VAL_CURRENT_USER = `Current User`, + REGSTR_PATH_PWDPROVIDER = `System\CurrentControlSet\Control\PwdProvider`, + REGSTR_VAL_PWDPROVIDER_PATH = `ProviderPath`, + REGSTR_VAL_PWDPROVIDER_DESC = `Description`, + REGSTR_VAL_PWDPROVIDER_CHANGEPWD = `ChangePassword`, + REGSTR_VAL_PWDPROVIDER_CHANGEPWDHWND = `ChangePasswordHwnd`, + REGSTR_VAL_PWDPROVIDER_GETPWDSTATUS = `GetPasswordStatus`, + REGSTR_VAL_PWDPROVIDER_ISNP = `NetworkProvider`, + REGSTR_VAL_PWDPROVIDER_CHANGEORDER = `ChangeOrder`, + REGSTR_PATH_POLICIES = `Software\Microsoft\Windows\CurrentVersion\Policies`, + REGSTR_PATH_UPDATE = `System\CurrentControlSet\Control\Update`, + REGSTR_VALUE_ENABLE = `Enable`, + REGSTR_VALUE_VERBOSE = `Verbose`, + REGSTR_VALUE_NETPATH = `NetworkPath`, + REGSTR_VALUE_DEFAULTLOC = `UseDefaultNetLocation`, + REGSTR_KEY_NETWORK = `Network`, +// [Redefined] REGSTR_KEY_SYSTEM = `System`) + REGSTR_KEY_PRINTERS = `Printers`, + REGSTR_KEY_WINOLDAPP = `WinOldApp`, + REGSTR_VAL_NOFILESHARING = `NoFileSharing`, + REGSTR_VAL_NOPRINTSHARING = `NoPrintSharing`, + REGSTR_VAL_NOFILESHARINGCTRL = `NoFileSharingControl`, + REGSTR_VAL_NOPRINTSHARINGCTRL = `NoPrintSharingControl`, + REGSTR_VAL_HIDESHAREPWDS = `HideSharePwds`, + REGSTR_VAL_DISABLEPWDCACHING = `DisablePwdCaching`, + REGSTR_VAL_ALPHANUMPWDS = `AlphanumPwds`, + REGSTR_VAL_NETSETUP_DISABLE = `NoNetSetup`, + REGSTR_VAL_NETSETUP_NOCONFIGPAGE = `NoNetSetupConfigPage`, + REGSTR_VAL_NETSETUP_NOIDPAGE = `NoNetSetupIDPage`, + REGSTR_VAL_NETSETUP_NOSECURITYPAGE = `NoNetSetupSecurityPage`, + REGSTR_VAL_SYSTEMCPL_NOVIRTMEMPAGE = `NoVirtMemPage`, + REGSTR_VAL_SYSTEMCPL_NODEVMGRPAGE = `NoDevMgrPage`, + REGSTR_VAL_SYSTEMCPL_NOCONFIGPAGE = `NoConfigPage`, + REGSTR_VAL_SYSTEMCPL_NOFILESYSPAGE = `NoFileSysPage`, + REGSTR_VAL_DISPCPL_NODISPCPL = `NoDispCPL`, + REGSTR_VAL_DISPCPL_NOBACKGROUNDPAGE = `NoDispBackgroundPage`, + REGSTR_VAL_DISPCPL_NOSCRSAVPAGE = `NoDispScrSavPage`, + REGSTR_VAL_DISPCPL_NOAPPEARANCEPAGE = `NoDispAppearancePage`, + REGSTR_VAL_DISPCPL_NOSETTINGSPAGE = `NoDispSettingsPage`, + REGSTR_VAL_SECCPL_NOSECCPL = `NoSecCPL`, + REGSTR_VAL_SECCPL_NOPWDPAGE = `NoPwdPage`, + REGSTR_VAL_SECCPL_NOADMINPAGE = `NoAdminPage`, + REGSTR_VAL_SECCPL_NOPROFILEPAGE = `NoProfilePage`, + REGSTR_VAL_PRINTERS_HIDETABS = `NoPrinterTabs`, + REGSTR_VAL_PRINTERS_NODELETE = `NoDeletePrinter`, + REGSTR_VAL_PRINTERS_NOADD = `NoAddPrinter`, + REGSTR_VAL_WINOLDAPP_DISABLED = `Disabled`, + REGSTR_VAL_WINOLDAPP_NOREALMODE = `NoRealMode`, + REGSTR_VAL_NOENTIRENETWORK = `NoEntireNetwork`, + REGSTR_VAL_NOWORKGROUPCONTENTS = `NoWorkgroupContents`, + REGSTR_VAL_MINPWDLEN = `MinPwdLen`, + REGSTR_VAL_PWDEXPIRATION = `PwdExpiration`, + REGSTR_VAL_WIN31PROVIDER = `Win31Provider`, + REGSTR_VAL_DISABLEREGTOOLS = `DisableRegistryTools`, + REGSTR_PATH_WINLOGON = `Software\Microsoft\Windows\CurrentVersion\Winlogon`, + REGSTR_VAL_LEGALNOTICECAPTION = `LegalNoticeCaption`, + REGSTR_VAL_LEGALNOTICETEXT = `LegalNoticeText`, + REGSTR_VAL_RESTRICTRUN = `RestrictRun`, + REGSTR_KEY_POL_USERS = `Users`, + REGSTR_KEY_POL_COMPUTERS = `Computers`, + REGSTR_KEY_POL_USERGROUPS = `UserGroups`, + REGSTR_KEY_POL_DEFAULT = `.default`, + REGSTR_KEY_POL_USERGROUPDATA = `GroupData\UserGroups\Priority`, + REGSTR_PATH_TIMEZONE = `System\CurrentControlSet\Control\TimeZoneInformation`, + REGSTR_VAL_TZBIAS = `Bias`, + REGSTR_VAL_TZDLTBIAS = `DaylightBias`, + REGSTR_VAL_TZSTDBIAS = `StandardBias`, + REGSTR_VAL_TZACTBIAS = `ActiveTimeBias`, + REGSTR_VAL_TZDLTFLAG = `DaylightFlag`, + REGSTR_VAL_TZSTDSTART = `StandardStart`, + REGSTR_VAL_TZDLTSTART = `DaylightStart`, + REGSTR_VAL_TZDLTNAME = `DaylightName`, + REGSTR_VAL_TZSTDNAME = `StandardName`, + REGSTR_VAL_TZNOCHANGESTART = `NoChangeStart`, + REGSTR_VAL_TZNOCHANGEEND = `NoChangeEnd`, + REGSTR_VAL_TZNOAUTOTIME = `DisableAutoDaylightTimeSet`, + REGSTR_PATH_FLOATINGPOINTPROCESSOR = `HARDWARE\DESCRIPTION\System\FloatingPointProcessor`, + REGSTR_PATH_FLOATINGPOINTPROCESSOR0 = `HARDWARE\DESCRIPTION\System\FloatingPointProcessor\0`, + REGSTR_PATH_COMPUTRNAME = `System\CurrentControlSet\Control\ComputerName\ComputerName`, + REGSTR_VAL_COMPUTRNAME = `ComputerName`, + REGSTR_PATH_SHUTDOWN = `System\CurrentControlSet\Control\Shutdown`, + REGSTR_VAL_FORCEREBOOT = `ForceReboot`, + REGSTR_VAL_SETUPPROGRAMRAN = `SetupProgramRan`, + REGSTR_VAL_DOES_POLLING = `PollingSupportNeeded`, + REGSTR_PATH_KNOWNDLLS = `System\CurrentControlSet\Control\SessionManager\KnownDLLs`, + REGSTR_PATH_KNOWN16DLLS = `System\CurrentControlSet\Control\SessionManager\Known16DLLs`, + REGSTR_PATH_CHECKVERDLLS = `System\CurrentControlSet\Control\SessionManager\CheckVerDLLs`, + REGSTR_PATH_WARNVERDLLS = `System\CurrentControlSet\Control\SessionManager\WarnVerDLLs`, + REGSTR_PATH_HACKINIFILE = `System\CurrentControlSet\Control\SessionManager\HackIniFiles`, + REGSTR_PATH_CHECKBADAPPS = `System\CurrentControlSet\Control\SessionManager\CheckBadApps`, + REGSTR_PATH_APPPATCH = `System\CurrentControlSet\Control\SessionManager\AppPatches`, + REGSTR_PATH_KNOWNVXDS = `System\CurrentControlSet\Control\SessionManager\KnownVxDs`, + REGSTR_VAL_UNINSTALLER_DISPLAYNAME = `DisplayName`, + REGSTR_VAL_UNINSTALLER_COMMANDLINE = `UninstallString`, + REGSTR_PATH_DESKTOP = REGSTR_PATH_SCREENSAVE, + REGSTR_PATH_MOUSE = `Control Panel\Mouse`, + REGSTR_PATH_KEYBOARD = `Control Panel\Keyboard`, + REGSTR_PATH_COLORS = `Control Panel\Colors`, + REGSTR_PATH_SOUND = `Control Panel\Sound`, + REGSTR_PATH_METRICS = `Control Panel\Desktop\WindowMetrics`, + REGSTR_PATH_ICONS = `Control Panel\Icons`, + REGSTR_PATH_CURSORS = `Control Panel\Cursors`, + REGSTR_PATH_CHECKDISK = `Software\Microsoft\Windows\CurrentVersion\Applets\Check Drive`, + REGSTR_PATH_CHECKDISKSET = `Settings`, + REGSTR_PATH_CHECKDISKUDRVS = `NoUnknownDDErrDrvs`, + REGSTR_PATH_FAULT = `Software\Microsoft\Windows\CurrentVersion\Fault`, + REGSTR_VAL_FAULT_LOGFILE = `LogFile`, + REGSTR_PATH_AEDEBUG = `Software\Microsoft\Windows NT\CurrentVersion\AeDebug`, + REGSTR_VAL_AEDEBUG_DEBUGGER = `Debugger`, + REGSTR_VAL_AEDEBUG_AUTO = `Auto`, + REGSTR_PATH_GRPCONV = `Software\Microsoft\Windows\CurrentVersion\GrpConv`, + REGSTR_VAL_REGITEMDELETEMESSAGE = `Removal Message`, + REGSTR_PATH_LASTCHECK = `Software\Microsoft\Windows\CurrentVersion\Explorer\LastCheck`, + REGSTR_PATH_LASTOPTIMIZE = `Software\Microsoft\Windows\CurrentVersion\Explorer\LastOptimize`, + REGSTR_PATH_LASTBACKUP = `Software\Microsoft\Windows\CurrentVersion\Explorer\LastBackup`, + REGSTR_PATH_CHKLASTCHECK = `Software\Microsoft\Windows\CurrentVersion\Applets\Check Drive\LastCheck`, + REGSTR_PATH_CHKLASTSURFAN = `Software\Microsoft\Windows\CurrentVersion\Applets\Check Drive\LastSurfaceAnalysis`, + REGSTR_KEY_SHARES = `Software\Microsoft\Windows\CurrentVersion\Network\LanMan`, + REGSTR_VAL_SHARES_FLAGS = `Flags`, + REGSTR_VAL_SHARES_TYPE = `Type`, + REGSTR_VAL_SHARES_PATH = `Path`, + REGSTR_VAL_SHARES_REMARK = `Remark`, + REGSTR_VAL_SHARES_RW_PASS = `Parm1`, + REGSTR_VAL_SHARES_RO_PASS = `Parm2`, + REGSTR_PATH_PRINT = `System\CurrentControlSet\Control\Print`, + REGSTR_PATH_PRINTERS = `System\CurrentControlSet\Control\Print\Printers`, + REGSTR_PATH_PROVIDERS = `System\CurrentControlSet\Control\Print\Providers`, + REGSTR_PATH_MONITORS = `System\CurrentControlSet\Control\Print\Monitors`, + REGSTR_PATH_ENVIRONMENTS = `System\CurrentControlSet\Control\Print\Environments`, + REGSTR_VAL_START_ON_BOOT = `StartOnBoot`, + REGSTR_VAL_PRINTERS_MASK = `PrintersMask`, + REGSTR_VAL_DOS_SPOOL_MASK = `DOSSpoolMask`, + REGSTR_KEY_CURRENT_ENV = `\Windows 4.0`, + REGSTR_KEY_DRIVERS = `\Drivers`, + REGSTR_KEY_PRINT_PROC = `\Print Processors`, + REGSTR_PATH_EVENTLABELS = `AppEvents\EventLabels`, + REGSTR_PATH_SCHEMES = `AppEvents\Schemes`, + REGSTR_PATH_APPS = REGSTR_PATH_SCHEMES ~ `\Apps`, + REGSTR_PATH_APPS_DEFAULT = REGSTR_PATH_SCHEMES ~ `\Apps\.Default`, + REGSTR_PATH_NAMES = REGSTR_PATH_SCHEMES ~ `\Names`, + REGSTR_PATH_MULTIMEDIA = REGSTR_PATH_SETUP ~ `\Multimedia`, + REGSTR_PATH_MULTIMEDIA_AUDIO = `Software\Microsoft\Multimedia\Audio`, + REGSTR_PATH_MEDIARESOURCES = REGSTR_PATH_CURRENT_CONTROL_SET ~ `\MediaResources`, + REGSTR_PATH_MEDIAPROPERTIES = REGSTR_PATH_CURRENT_CONTROL_SET ~ `\MediaProperties`, + REGSTR_PATH_PRIVATEPROPERTIES = REGSTR_PATH_MEDIAPROPERTIES ~ `\PrivateProperties`, + REGSTR_PATH_PUBLICPROPERTIES = REGSTR_PATH_MEDIAPROPERTIES ~ `\PublicProperties`, + REGSTR_PATH_JOYOEM = REGSTR_PATH_PRIVATEPROPERTIES ~ `\Joystick\OEM`, + REGSTR_PATH_JOYCONFIG = REGSTR_PATH_MEDIARESOURCES ~ `\Joystick`, + REGSTR_KEY_JOYCURR = `CurrentJoystickSettings`, + REGSTR_KEY_JOYSETTINGS = `JoystickSettings`, + REGSTR_VAL_JOYUSERVALUES = `JoystickUserValues`, + REGSTR_VAL_JOYCALLOUT = `JoystickCallout`, + REGSTR_VAL_JOYNCONFIG = `Joystick%dConfiguration`, + REGSTR_VAL_JOYNOEMNAME = `Joystick%dOEMName`, + REGSTR_VAL_JOYNOEMCALLOUT = `Joystick%dOEMCallout`, + REGSTR_VAL_JOYOEMCALLOUT = `OEMCallout`, + REGSTR_VAL_JOYOEMNAME = `OEMName`, + REGSTR_VAL_JOYOEMDATA = `OEMData`, + REGSTR_VAL_JOYOEMXYLABEL = `OEMXYLabel`, + REGSTR_VAL_JOYOEMZLABEL = `OEMZLabel`, + REGSTR_VAL_JOYOEMRLABEL = `OEMRLabel`, + REGSTR_VAL_JOYOEMPOVLABEL = `OEMPOVLabel`, + REGSTR_VAL_JOYOEMULABEL = `OEMULabel`, + REGSTR_VAL_JOYOEMVLABEL = `OEMVLabel`, + REGSTR_VAL_JOYOEMTESTMOVEDESC = `OEMTestMoveDesc`, + REGSTR_VAL_JOYOEMTESTBUTTONDESC = `OEMTestButtonDesc`, + REGSTR_VAL_JOYOEMTESTMOVECAP = `OEMTestMoveCap`, + REGSTR_VAL_JOYOEMTESTBUTTONCAP = `OEMTestButtonCap`, + REGSTR_VAL_JOYOEMTESTWINCAP = `OEMTestWinCap`, + REGSTR_VAL_JOYOEMCALCAP = `OEMCalCap`, + REGSTR_VAL_JOYOEMCALWINCAP = `OEMCalWinCap`, + REGSTR_VAL_JOYOEMCAL1 = `OEMCal1`, + REGSTR_VAL_JOYOEMCAL2 = `OEMCal2`, + REGSTR_VAL_JOYOEMCAL3 = `OEMCal3`, + REGSTR_VAL_JOYOEMCAL4 = `OEMCal4`, + REGSTR_VAL_JOYOEMCAL5 = `OEMCal5`, + REGSTR_VAL_JOYOEMCAL6 = `OEMCal6`, + REGSTR_VAL_JOYOEMCAL7 = `OEMCal7`, + REGSTR_VAL_JOYOEMCAL8 = `OEMCal8`, + REGSTR_VAL_JOYOEMCAL9 = `OEMCal9`, + REGSTR_VAL_JOYOEMCAL10 = `OEMCal10`, + REGSTR_VAL_JOYOEMCAL11 = `OEMCal11`, + REGSTR_VAL_JOYOEMCAL12 = `OEMCal12`; + +enum { + DTRESULTOK, + DTRESULTFIX, + DTRESULTPROB, + DTRESULTPART +} + +//#ifndef NEC_98 +const PCIC_DEFAULT_IRQMASK = 0x4EB8; +//#else +//#define PCIC_DEFAULT_IRQMASK 0x1468 +//#endif +const PCIC_DEFAULT_NUMSOCKETS = 0; + +struct DSKTLSYSTEMTIME { + WORD wYear; + WORD wMonth; + WORD wDayOfWeek; + WORD wDay; + WORD wHour; + WORD wMinute; + WORD wSecond; + WORD wMilliseconds; + WORD wResult; +} +alias DSKTLSYSTEMTIME* PDSKTLSYSTEMTIME, LPDSKTLSYSTEMTIME; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/richedit.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/richedit.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,581 @@ +/***********************************************************************\ +* richedit.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.richedit; + +private import win32.windef, win32.winuser; +private import win32.wingdi; // for LF_FACESIZE + +align(4): + +version(Unicode) { + const wchar[] RICHEDIT_CLASS = "RichEdit20W"; +} else { + const char[] RICHEDIT_CLASS = "RichEdit20A"; +} + +const RICHEDIT_CLASS10A = "RICHEDIT"; + +const TCHAR[] + CF_RTF = "Rich Text Format", + CF_RTFNOOBJS = "Rich Text Format Without Objects", + CF_RETEXTOBJ = "RichEdit Text and Objects"; + +const DWORD + CFM_BOLD = 1, + CFM_ITALIC = 2, + CFM_UNDERLINE = 4, + CFM_STRIKEOUT = 8, + CFM_PROTECTED = 16, + CFM_LINK = 32, + CFM_SIZE = 0x80000000, + CFM_COLOR = 0x40000000, + CFM_FACE = 0x20000000, + CFM_OFFSET = 0x10000000, + CFM_CHARSET = 0x08000000, + CFM_SUBSCRIPT = 0x00030000, + CFM_SUPERSCRIPT = 0x00030000; + +const DWORD + CFE_BOLD = 1, + CFE_ITALIC = 2, + CFE_UNDERLINE = 4, + CFE_STRIKEOUT = 8, + CFE_PROTECTED = 16, + CFE_SUBSCRIPT = 0x00010000, + CFE_SUPERSCRIPT = 0x00020000, + CFE_AUTOCOLOR = 0x40000000; + +const CFM_EFFECTS = CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_COLOR + | CFM_STRIKEOUT | CFE_PROTECTED | CFM_LINK; + +// flags for EM_SETIMEOPTIONS +const LPARAM + IMF_FORCENONE = 1, + IMF_FORCEENABLE = 2, + IMF_FORCEDISABLE = 4, + IMF_CLOSESTATUSWINDOW = 8, + IMF_VERTICAL = 32, + IMF_FORCEACTIVE = 64, + IMF_FORCEINACTIVE = 128, + IMF_FORCEREMEMBER = 256; + +const SEL_EMPTY=0; +const SEL_TEXT=1; +const SEL_OBJECT=2; +const SEL_MULTICHAR=4; +const SEL_MULTIOBJECT=8; + +const MAX_TAB_STOPS=32; + +const PFM_ALIGNMENT=8; +const PFM_NUMBERING=32; +const PFM_OFFSET=4; +const PFM_OFFSETINDENT=0x80000000; +const PFM_RIGHTINDENT=2; +const PFM_STARTINDENT=1; +const PFM_TABSTOPS=16; +const PFM_BORDER=2048; +const PFM_LINESPACING=256; +const PFM_NUMBERINGSTART=32768; +const PFM_NUMBERINGSTYLE=8192; +const PFM_NUMBERINGTAB=16384; +const PFM_SHADING=4096; +const PFM_SPACEAFTER=128; +const PFM_SPACEBEFORE=64; +const PFM_STYLE=1024; +const PFM_DONOTHYPHEN=4194304; +const PFM_KEEP=131072; +const PFM_KEEPNEXT=262144; +const PFM_NOLINENUMBER=1048576; +const PFM_NOWIDOWCONTROL=2097152; +const PFM_PAGEBREAKBEFORE=524288; +const PFM_RTLPARA=65536; +const PFM_SIDEBYSIDE=8388608; +const PFM_TABLE=1073741824; +const PFN_BULLET=1; + +const PFE_DONOTHYPHEN=64; +const PFE_KEEP=2; +const PFE_KEEPNEXT=4; +const PFE_NOLINENUMBER=16; +const PFE_NOWIDOWCONTROL=32; +const PFE_PAGEBREAKBEFORE=8; +const PFE_RTLPARA=1; +const PFE_SIDEBYSIDE=128; +const PFE_TABLE=16384; +const PFA_LEFT=1; +const PFA_RIGHT=2; +const PFA_CENTER=3; +const PFA_JUSTIFY=4; +const PFA_FULL_INTERWORD=4; + +const SF_TEXT=1; +const SF_RTF=2; +const SF_RTFNOOBJS=3; +const SF_TEXTIZED=4; +const SF_UNICODE=16; +const SF_USECODEPAGE=32; +const SF_NCRFORNONASCII=64; +const SF_RTFVAL=0x0700; + +const SFF_PWD=0x0800; +const SFF_KEEPDOCINFO=0x1000; +const SFF_PERSISTVIEWSCALE=0x2000; +const SFF_PLAINRTF=0x4000; +const SFF_SELECTION=0x8000; + +const WB_CLASSIFY = 3; +const WB_MOVEWORDLEFT = 4; +const WB_MOVEWORDRIGHT = 5; +const WB_LEFTBREAK = 6; +const WB_RIGHTBREAK = 7; +const WB_MOVEWORDPREV = 4; +const WB_MOVEWORDNEXT = 5; +const WB_PREVBREAK = 6; +const WB_NEXTBREAK = 7; + +const WBF_WORDWRAP = 16; +const WBF_WORDBREAK = 32; +const WBF_OVERFLOW = 64; +const WBF_LEVEL1 = 128; +const WBF_LEVEL2 = 256; +const WBF_CUSTOM = 512; + +const ES_DISABLENOSCROLL = 8192; +const ES_SUNKEN = 16384; +const ES_SAVESEL = 32768; +const ES_EX_NOCALLOLEINIT = 16777216; +const ES_NOIME = 524288; +const ES_NOOLEDRAGDROP = 8; +const ES_SELECTIONBAR = 16777216; +const ES_SELFIME = 262144; +const ES_VERTICAL = 4194304; + +const EM_CANPASTE = WM_USER+50; +const EM_DISPLAYBAND = WM_USER+51; +const EM_EXGETSEL = WM_USER+52; +const EM_EXLIMITTEXT = WM_USER+53; +const EM_EXLINEFROMCHAR = WM_USER+54; +const EM_EXSETSEL = WM_USER+55; +const EM_FINDTEXT = WM_USER+56; +const EM_FORMATRANGE = WM_USER+57; +const EM_GETCHARFORMAT = WM_USER+58; +const EM_GETEVENTMASK = WM_USER+59; +const EM_GETOLEINTERFACE = WM_USER+60; +const EM_GETPARAFORMAT = WM_USER+61; +const EM_GETSELTEXT = WM_USER+62; +const EM_HIDESELECTION = WM_USER+63; +const EM_PASTESPECIAL = WM_USER+64; +const EM_REQUESTRESIZE = WM_USER+65; +const EM_SELECTIONTYPE = WM_USER+66; +const EM_SETBKGNDCOLOR = WM_USER+67; +const EM_SETCHARFORMAT = WM_USER+68; +const EM_SETEVENTMASK = WM_USER+69; +const EM_SETOLECALLBACK = WM_USER+70; +const EM_SETPARAFORMAT = WM_USER+71; +const EM_SETTARGETDEVICE = WM_USER+72; +const EM_STREAMIN = WM_USER+73; +const EM_STREAMOUT = WM_USER+74; +const EM_GETTEXTRANGE = WM_USER+75; +const EM_FINDWORDBREAK = WM_USER+76; +const EM_SETOPTIONS = WM_USER+77; +const EM_GETOPTIONS = WM_USER+78; +const EM_FINDTEXTEX = WM_USER+79; +const EM_GETWORDBREAKPROCEX = WM_USER+80; +const EM_SETWORDBREAKPROCEX = WM_USER+81; +/* RichEdit 2.0 messages */ +const EM_SETUNDOLIMIT = WM_USER+82; +const EM_REDO = WM_USER+84; +const EM_CANREDO = WM_USER+85; +const EM_GETUNDONAME = WM_USER+86; +const EM_GETREDONAME = WM_USER+87; +const EM_STOPGROUPTYPING = WM_USER+88; +const EM_SETTEXTMODE = WM_USER+89; +const EM_GETTEXTMODE = WM_USER+90; +const EM_AUTOURLDETECT = WM_USER+91; +const EM_GETAUTOURLDETECT = WM_USER + 92; +const EM_SETPALETTE = WM_USER + 93; +const EM_GETTEXTEX = WM_USER+94; +const EM_GETTEXTLENGTHEX = WM_USER+95; +const EM_SHOWSCROLLBAR = WM_USER+96; +const EM_SETTEXTEX = WM_USER + 97; +const EM_SETPUNCTUATION = WM_USER + 100; +const EM_GETPUNCTUATION = WM_USER + 101; +const EM_SETWORDWRAPMODE = WM_USER + 102; +const EM_GETWORDWRAPMODE = WM_USER + 103; +const EM_SETIMECOLOR = WM_USER + 104; +const EM_GETIMECOLOR = WM_USER + 105; +const EM_SETIMEOPTIONS = WM_USER + 106; +const EM_GETIMEOPTIONS = WM_USER + 107; +const EM_SETLANGOPTIONS = WM_USER+120; +const EM_GETLANGOPTIONS = WM_USER+121; +const EM_GETIMECOMPMODE = WM_USER+122; +const EM_FINDTEXTW = WM_USER + 123; +const EM_FINDTEXTEXW = WM_USER + 124; +const EM_RECONVERSION = WM_USER + 125; +const EM_SETBIDIOPTIONS = WM_USER + 200; +const EM_GETBIDIOPTIONS = WM_USER + 201; +const EM_SETTYPOGRAPHYOPTIONS = WM_USER+202; +const EM_GETTYPOGRAPHYOPTIONS = WM_USER+203; +const EM_SETEDITSTYLE = WM_USER + 204; +const EM_GETEDITSTYLE = WM_USER + 205; +const EM_GETSCROLLPOS = WM_USER+221; +const EM_SETSCROLLPOS = WM_USER+222; +const EM_SETFONTSIZE = WM_USER+223; +const EM_GETZOOM = WM_USER+224; +const EM_SETZOOM = WM_USER+225; + +const EN_MSGFILTER = 1792; +const EN_REQUESTRESIZE = 1793; +const EN_SELCHANGE = 1794; +const EN_DROPFILES = 1795; +const EN_PROTECTED = 1796; +const EN_CORRECTTEXT = 1797; +const EN_STOPNOUNDO = 1798; +const EN_IMECHANGE = 1799; +const EN_SAVECLIPBOARD = 1800; +const EN_OLEOPFAILED = 1801; +const EN_LINK = 1803; + +const ENM_NONE = 0; +const ENM_CHANGE = 1; +const ENM_UPDATE = 2; +const ENM_SCROLL = 4; +const ENM_SCROLLEVENTS = 8; +const ENM_DRAGDROPDONE = 16; +const ENM_KEYEVENTS = 65536; +const ENM_MOUSEEVENTS = 131072; +const ENM_REQUESTRESIZE = 262144; +const ENM_SELCHANGE = 524288; +const ENM_DROPFILES = 1048576; +const ENM_PROTECTED = 2097152; +const ENM_CORRECTTEXT = 4194304; +const ENM_IMECHANGE = 8388608; +const ENM_LANGCHANGE = 16777216; +const ENM_OBJECTPOSITIONS = 33554432; +const ENM_LINK = 67108864; + +const ECO_AUTOWORDSELECTION=1; +const ECO_AUTOVSCROLL=64; +const ECO_AUTOHSCROLL=128; +const ECO_NOHIDESEL=256; +const ECO_READONLY=2048; +const ECO_WANTRETURN=4096; +const ECO_SAVESEL=0x8000; +const ECO_SELECTIONBAR=0x1000000; +const ECO_VERTICAL=0x400000; + +enum { + ECOOP_SET = 1, + ECOOP_OR, + ECOOP_AND, + ECOOP_XOR +} + +const SCF_DEFAULT = 0; +const SCF_SELECTION = 1; +const SCF_WORD = 2; +const SCF_ALL = 4; +const SCF_USEUIRULES = 8; + +const TM_PLAINTEXT=1; +const TM_RICHTEXT=2; +const TM_SINGLELEVELUNDO=4; +const TM_MULTILEVELUNDO=8; +const TM_SINGLECODEPAGE=16; +const TM_MULTICODEPAGE=32; + +const GT_DEFAULT=0; +const GT_USECRLF=1; + +const yHeightCharPtsMost=1638; +const lDefaultTab=720; + +struct CHARFORMATA { + UINT cbSize = this.sizeof; + DWORD dwMask; + DWORD dwEffects; + LONG yHeight; + LONG yOffset; + COLORREF crTextColor; + BYTE bCharSet; + BYTE bPitchAndFamily; + char szFaceName[LF_FACESIZE]; +} +struct CHARFORMATW { + UINT cbSize = this.sizeof; + DWORD dwMask; + DWORD dwEffects; + LONG yHeight; + LONG yOffset; + COLORREF crTextColor; + BYTE bCharSet; + BYTE bPitchAndFamily; + WCHAR szFaceName[LF_FACESIZE]; +} + +struct CHARFORMAT2A { + UINT cbSize = this.sizeof; + DWORD dwMask; + DWORD dwEffects; + LONG yHeight; + LONG yOffset; + COLORREF crTextColor; + BYTE bCharSet; + BYTE bPitchAndFamily; + char szFaceName[LF_FACESIZE]; + WORD wWeight; + SHORT sSpacing; + COLORREF crBackColor; + LCID lcid; + DWORD dwReserved; + SHORT sStyle; + WORD wKerning; + BYTE bUnderlineType; + BYTE bAnimation; + BYTE bRevAuthor; +} + +struct CHARFORMAT2W { + UINT cbSize = this.sizeof; + DWORD dwMask; + DWORD dwEffects; + LONG yHeight; + LONG yOffset; + COLORREF crTextColor; + BYTE bCharSet; + BYTE bPitchAndFamily; + WCHAR szFaceName[LF_FACESIZE]; + WORD wWeight; + SHORT sSpacing; + COLORREF crBackColor; + LCID lcid; + DWORD dwReserved; + SHORT sStyle; + WORD wKerning; + BYTE bUnderlineType; + BYTE bAnimation; + BYTE bRevAuthor; +} + +struct CHARRANGE { + LONG cpMin; + LONG cpMax; +} + +struct COMPCOLOR { + COLORREF crText; + COLORREF crBackground; + DWORD dwEffects; +} + +extern (Windows) { + alias DWORD function(DWORD,PBYTE,LONG,LONG*) EDITSTREAMCALLBACK; +} + +struct EDITSTREAM { + DWORD dwCookie; + DWORD dwError; + EDITSTREAMCALLBACK pfnCallback; +} + +struct ENCORRECTTEXT { + NMHDR nmhdr; + CHARRANGE chrg; + WORD seltyp; +} + +struct ENDROPFILES { + NMHDR nmhdr; + HANDLE hDrop; + LONG cp; + BOOL fProtected; +} + +struct ENLINK { + NMHDR nmhdr; + UINT msg; + WPARAM wParam; + LPARAM lParam; + CHARRANGE chrg; +} + +struct ENOLEOPFAILED { + NMHDR nmhdr; + LONG iob; + LONG lOper; + HRESULT hr; +} + +struct ENPROTECTED { + NMHDR nmhdr; + UINT msg; + WPARAM wParam; + LPARAM lParam; + CHARRANGE chrg; +} +alias ENPROTECTED* LPENPROTECTED; + +struct ENSAVECLIPBOARD { + NMHDR nmhdr; + LONG cObjectCount; + LONG cch; +} + +struct FINDTEXTA { + CHARRANGE chrg; + LPSTR lpstrText; +} + +struct FINDTEXTW { + CHARRANGE chrg; + LPWSTR lpstrText; +} + +struct FINDTEXTEXA { + CHARRANGE chrg; + LPSTR lpstrText; + CHARRANGE chrgText; +} + +struct FINDTEXTEXW { + CHARRANGE chrg; + LPWSTR lpstrText; + CHARRANGE chrgText; +} + +struct FORMATRANGE { + HDC hdc; + HDC hdcTarget; + RECT rc; + RECT rcPage; + CHARRANGE chrg; +} + +struct MSGFILTER { + NMHDR nmhdr; + UINT msg; + WPARAM wParam; + LPARAM lParam; +} + +struct PARAFORMAT { + UINT cbSize = this.sizeof; + DWORD dwMask; + WORD wNumbering; + WORD wReserved; + LONG dxStartIndent; + LONG dxRightIndent; + LONG dxOffset; + WORD wAlignment; + SHORT cTabCount; + LONG rgxTabs[MAX_TAB_STOPS]; +} + +struct PARAFORMAT2 { + UINT cbSize = this.sizeof; + DWORD dwMask; + WORD wNumbering; + WORD wEffects; + LONG dxStartIndent; + LONG dxRightIndent; + LONG dxOffset; + WORD wAlignment; + SHORT cTabCount; + LONG rgxTabs[MAX_TAB_STOPS]; + LONG dySpaceBefore; + LONG dySpaceAfter; + LONG dyLineSpacing; + SHORT sStype; + BYTE bLineSpacingRule; + BYTE bOutlineLevel; + WORD wShadingWeight; + WORD wShadingStyle; + WORD wNumberingStart; + WORD wNumberingStyle; + WORD wNumberingTab; + WORD wBorderSpace; + WORD wBorderWidth; + WORD wBorders; +} + +struct SELCHANGE { + NMHDR nmhdr; + CHARRANGE chrg; + WORD seltyp; +} + +struct TEXTRANGEA { + CHARRANGE chrg; + LPSTR lpstrText; +} + +struct TEXTRANGEW { + CHARRANGE chrg; + LPWSTR lpstrText; +} + +struct REQRESIZE { + NMHDR nmhdr; + RECT rc; +} + +struct REPASTESPECIAL { + DWORD dwAspect; + DWORD dwParam; +} + +struct PUNCTUATION { + UINT iSize; + LPSTR szPunctuation; +} + +struct GETTEXTEX { + DWORD cb; + DWORD flags; + UINT codepage; + LPCSTR lpDefaultChar; + LPBOOL lpUsedDefaultChar; +} + +extern (Windows) { +alias LONG function(char*,LONG,BYTE,INT) EDITWORDBREAKPROCEX; +} + +/* Defines for EM_SETTYPOGRAPHYOPTIONS */ +const TO_ADVANCEDTYPOGRAPHY = 1; +const TO_SIMPLELINEBREAK = 2; + +/* Defines for GETTEXTLENGTHEX */ +const GTL_DEFAULT = 0; +const GTL_USECRLF = 1; +const GTL_PRECISE = 2; +const GTL_CLOSE = 4; +const GTL_NUMCHARS = 8; +const GTL_NUMBYTES = 16; + +struct GETTEXTLENGTHEX { + DWORD flags; + UINT codepage; +} + +version(Unicode) { + alias CHARFORMATW CHARFORMAT; + alias CHARFORMAT2W CHARFORMAT2; + alias FINDTEXTW FINDTEXT; + alias FINDTEXTEXW FINDTEXTEX; + alias TEXTRANGEW TEXTRANGE; +} else { + alias CHARFORMATA CHARFORMAT; + alias CHARFORMAT2A CHARFORMAT2; + alias FINDTEXTA FINDTEXT; + alias FINDTEXTEXA FINDTEXTEX; + alias TEXTRANGEA TEXTRANGE; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/richole.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/richole.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,101 @@ +/***********************************************************************\ +* richole.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.richole; + +private import win32.objfwd, win32.objidl, win32.ole2, win32.unknwn, + win32.windef; +private import win32.richedit; // for CHARRANGE + +align(4): + +const ULONG + REO_GETOBJ_NO_INTERFACES = 0, + REO_GETOBJ_POLEOBJ = 1, + REO_GETOBJ_PSTG = 2, + REO_GETOBJ_POLESITE = 4, + REO_GETOBJ_ALL_INTERFACES = 7, + REO_CP_SELECTION = -1, + REO_IOB_SELECTION = -1, + REO_IOB_USE_CP = -2, + REO_NULL = 0, + REO_READWRITEMASK = 0x3F, + REO_DONTNEEDPALETTE = 32, + REO_BLANK = 16, + REO_DYNAMICSIZE = 8, + REO_INVERTEDSELECT = 4, + REO_BELOWBASELINE = 2, + REO_RESIZABLE = 1, + REO_LINK = 0x80000000, + REO_STATIC = 0x40000000, + REO_SELECTED = 0x08000000, + REO_OPEN = 0x4000000, + REO_INPLACEACTIVE = 0x2000000, + REO_HILITED = 0x1000000, + REO_LINKAVAILABLE = 0x800000, + REO_GETMETAFILE = 0x400000; + +enum { + RECO_PASTE = 0, + RECO_DROP, + RECO_COPY, + RECO_CUT, + RECO_DRAG // = 4 +} + +extern (C) extern const GUID + IID_IRichEditOle, + IID_IRichEditOleCallback; + +struct REOBJECT { + DWORD cbStruct = REOBJECT.sizeof; + LONG cp; + CLSID clsid; + LPOLEOBJECT poleobj; + LPSTORAGE pstg; + LPOLECLIENTSITE polesite; + SIZEL sizel; + DWORD dvaspect; + DWORD dwFlags; + DWORD dwUser; +} + +interface IRichEditOle : public IUnknown { + HRESULT GetClientSite(LPOLECLIENTSITE*); + LONG GetObjectCount(); + LONG GetLinkCount(); + HRESULT GetObject(LONG, REOBJECT*, DWORD); + HRESULT InsertObject(REOBJECT*); + HRESULT ConvertObject(LONG, REFCLSID, LPCSTR); + HRESULT ActivateAs(REFCLSID, REFCLSID); + HRESULT SetHostNames(LPCSTR, LPCSTR); + HRESULT SetLinkAvailable(LONG, BOOL); + HRESULT SetDvaspect(LONG, DWORD); + HRESULT HandsOffStorage(LONG); + HRESULT SaveCompleted(LONG, LPSTORAGE); + HRESULT InPlaceDeactivate(); + HRESULT ContextSensitiveHelp(BOOL); + HRESULT GetClipboardData(CHARRANGE*, DWORD, LPDATAOBJECT*); + HRESULT ImportDataObject(LPDATAOBJECT, CLIPFORMAT, HGLOBAL); +}; +alias IRichEditOle* LPRICHEDITOLE; + +interface IRichEditOleCallback : public IUnknown { + HRESULT GetNewStorage(LPSTORAGE*); + HRESULT GetInPlaceContext(LPOLEINPLACEFRAME*, LPOLEINPLACEUIWINDOW*, LPOLEINPLACEFRAMEINFO); + HRESULT ShowContainerUI(BOOL); + HRESULT QueryInsertObject(LPCLSID, LPSTORAGE, LONG); + HRESULT DeleteObject(LPOLEOBJECT); + HRESULT QueryAcceptData(LPDATAOBJECT, CLIPFORMAT*, DWORD, BOOL, HGLOBAL); + HRESULT ContextSensitiveHelp(BOOL); + HRESULT GetClipboardData(CHARRANGE*, DWORD, LPDATAOBJECT*); + HRESULT GetDragDropEffect(BOOL, DWORD, PDWORD); + HRESULT GetContextMenu(WORD, LPOLEOBJECT, CHARRANGE*, HMENU*); +}; +alias IRichEditOleCallback* LPRICHEDITOLECALLBACK; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/rpc.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/rpc.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,31 @@ +/***********************************************************************\ +* rpc.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.rpc; + +/* Moved to rpcdecp (duplicate definition). + typedef void *I_RPC_HANDLE; + alias long RPC_STATUS; + // Moved to rpcdce: + RpcImpersonateClient + RpcRevertToSelf +*/ + +public import win32.unknwn; +public import win32.rpcdce; // also pulls in rpcdcep +public import win32.rpcnsi; +public import win32.rpcnterr; +public import win32.winerror; + +alias MIDL_user_allocate midl_user_allocate; +alias MIDL_user_free midl_user_free; + +extern (Windows) { + int I_RpcMapWin32Status(RPC_STATUS); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/rpcdce.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/rpcdce.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,449 @@ +/***********************************************************************\ +* rpcdce.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.rpcdce; +pragma(lib, "Rpcrt4.lib"); + +// TODO: I think MinGW got this wrong. RPC_UNICODE_SUPPORTED should be +// replaced aliases for version(Unicode) + +public import win32.rpcdcep; +private import win32.basetyps, win32.w32api, win32.windef; + +// FIXME: clean up Windows version support + +alias UUID uuid_t; +alias UUID_VECTOR uuid_vector_t; +alias void RPC_MGR_EPV; + +// for RpcMgmtSetComTimeout() +enum : uint { + RPC_C_BINDING_MIN_TIMEOUT = 0, + RPC_C_BINDING_DEFAULT_TIMEOUT = 5, + RPC_C_BINDING_MAX_TIMEOUT = 9, + RPC_C_BINDING_INFINITE_TIMEOUT = 10 +} + +const RPC_C_CANCEL_INFINITE_TIMEOUT= -1; +const RPC_C_LISTEN_MAX_CALLS_DEFAULT=1234; +const RPC_C_PROTSEQ_MAX_REQS_DEFAULT=10; +const RPC_C_BIND_TO_ALL_NICS=1; +const RPC_C_USE_INTERNET_PORT=1; +const RPC_C_USE_INTRANET_PORT=2; + +// for RPC_STATS_VECTOR, used by RpcMgmyInqStats +enum : uint { + RPC_C_STATS_CALLS_IN = 0, + RPC_C_STATS_CALLS_OUT, + RPC_C_STATS_PKTS_IN, + RPC_C_STATS_PKTS_OUT +} + +const RPC_IF_AUTOLISTEN=0x0001; +const RPC_IF_OLE=2; +const RPC_C_MGMT_INQ_IF_IDS=0; +const RPC_C_MGMT_INQ_PRINC_NAME=1; +const RPC_C_MGMT_INQ_STATS=2; +const RPC_C_MGMT_IS_SERVER_LISTEN=3; +const RPC_C_MGMT_STOP_SERVER_LISTEN=4; + +// Inquiry Type for RpcMgmtEpEltInqBegin() +enum : uint { + RPC_C_EP_ALL_ELTS = 0, + RPC_C_EP_MATCH_BY_IF, + RPC_C_EP_MATCH_BY_OBJ, + RPC_C_EP_MATCH_BY_BOTH +} + +// for RpcMgmtEpEltInqNext() +enum : uint { + RPC_C_VERS_ALL = 1, + RPC_C_VERS_COMPATIBLE, + RPC_C_VERS_EXACT, + RPC_C_VERS_MAJOR_ONLY, + RPC_C_VERS_UPTO +} + +const DCE_C_ERROR_STRING_LEN=256; +const RPC_C_PARM_MAX_PACKET_LENGTH=1; +const RPC_C_PARM_BUFFER_LENGTH=2; +const RPC_C_AUTHN_LEVEL_DEFAULT=0; +const RPC_C_AUTHN_LEVEL_NONE=1; +const RPC_C_AUTHN_LEVEL_CONNECT=2; +const RPC_C_AUTHN_LEVEL_CALL=3; +const RPC_C_AUTHN_LEVEL_PKT=4; +const RPC_C_AUTHN_LEVEL_PKT_INTEGRITY=5; +const RPC_C_AUTHN_LEVEL_PKT_PRIVACY=6; +const RPC_C_IMP_LEVEL_ANONYMOUS=1; +const RPC_C_IMP_LEVEL_IDENTIFY=2; +const RPC_C_IMP_LEVEL_IMPERSONATE=3; +const RPC_C_IMP_LEVEL_DELEGATE=4; +const RPC_C_QOS_IDENTITY_STATIC=0; +const RPC_C_QOS_IDENTITY_DYNAMIC=1; +const RPC_C_QOS_CAPABILITIES_DEFAULT=0; +const RPC_C_QOS_CAPABILITIES_MUTUAL_AUTH=1; + +// These enums were buggy in MinGW ! +const RPC_C_PROTECT_LEVEL_DEFAULT = RPC_C_AUTHN_LEVEL_DEFAULT; +const RPC_C_PROTECT_LEVEL_NONE = RPC_C_AUTHN_LEVEL_NONE; +const RPC_C_PROTECT_LEVEL_CONNECT = RPC_C_AUTHN_LEVEL_CONNECT; +const RPC_C_PROTECT_LEVEL_CALL = RPC_C_AUTHN_LEVEL_CALL; +const RPC_C_PROTECT_LEVEL_PKT = RPC_C_AUTHN_LEVEL_PKT; +const RPC_C_PROTECT_LEVEL_PKT_INTEGRITY = RPC_C_AUTHN_LEVEL_PKT_INTEGRITY; +const RPC_C_PROTECT_LEVEL_PKT_PRIVACY = RPC_C_AUTHN_LEVEL_PKT_PRIVACY; + +const RPC_C_AUTHN_NONE=0; +const RPC_C_AUTHN_DCE_PRIVATE=1; +const RPC_C_AUTHN_DCE_PUBLIC=2; +const RPC_C_AUTHN_DEC_PUBLIC=4; +const RPC_C_AUTHN_WINNT=10; +const RPC_C_AUTHN_DEFAULT=0xFFFFFFFF; +//const RPC_C_SECURITY_QOS_VERSION=L; // FIXME(MinGW): This is nonsense! +const SEC_WINNT_AUTH_IDENTITY_ANSI=0x1; +const SEC_WINNT_AUTH_IDENTITY_UNICODE=0x2; +const RPC_C_AUTHZ_NONE=0; +const RPC_C_AUTHZ_NAME=1; +const RPC_C_AUTHZ_DCE=2; +const RPC_C_AUTHZ_DEFAULT=0xFFFFFFFF; + +alias I_RPC_HANDLE RPC_BINDING_HANDLE; +alias RPC_BINDING_HANDLE handle_t; + +struct RPC_BINDING_VECTOR { + uint Count; + RPC_BINDING_HANDLE BindingH[1]; +} + +alias RPC_BINDING_HANDLE rpc_binding_handle_t; +alias RPC_BINDING_VECTOR rpc_binding_vector_t; + + +struct UUID_VECTOR { + uint Count; + UUID* Uuid[1]; +} + +alias void* RPC_IF_HANDLE; + +struct RPC_IF_ID { + UUID Uuid; + ushort VersMajor; + ushort VersMinor; +} + +struct RPC_POLICY { + uint Length; + uint EndpointFlags; + uint NICFlags; +} +alias RPC_POLICY* PRPC_POLICY; + +extern (Windows) { + alias void function(UUID*, UUID*, RPC_STATUS*) RPC_OBJECT_INQ_FN; + alias RPC_STATUS function(RPC_IF_HANDLE, void*) RPC_IF_CALLBACK_FN; +} + +struct RPC_STATS_VECTOR { + uint Count; + uint[1] Stats; +} + +struct RPC_IF_ID_VECTOR { + uint Count; + RPC_IF_ID*[1] IfId; +} +alias HANDLE RPC_AUTH_IDENTITY_HANDLE, RPC_AUTHZ_HANDLE; + +struct RPC_SECURITY_QOS { + uint Version; + uint Capabilities; + uint IdentityTracking; + uint ImpersonationType; +} +alias RPC_SECURITY_QOS* PRPC_SECURITY_QOS; + +struct SEC_WINNT_AUTH_IDENTITY_W { + ushort* User; + uint UserLength; + ushort* Domain; + uint DomainLength; + ushort* Password; + uint PasswordLength; + uint Flags; +} +alias SEC_WINNT_AUTH_IDENTITY_W* PSEC_WINNT_AUTH_IDENTITY_W; + +struct SEC_WINNT_AUTH_IDENTITY_A { + ubyte* User; + uint UserLength; + ubyte* Domain; + uint DomainLength; + ubyte* Password; + uint PasswordLength; + uint Flags; +} +alias SEC_WINNT_AUTH_IDENTITY_A* PSEC_WINNT_AUTH_IDENTITY_A; + +struct RPC_CLIENT_INFORMATION1 { + ubyte* UserName; + ubyte* ComputerName; + ushort Privilege; + uint AuthFlags; +} +alias RPC_CLIENT_INFORMATION1* PRPC_CLIENT_INFORMATION1; +alias I_RPC_HANDLE* RPC_EP_INQ_HANDLE; +extern (Windows) { + alias int function(RPC_BINDING_HANDLE, uint, RPC_STATUS*) RPC_MGMT_AUTHORIZATION_FN; +} + +static if(_WIN32_WINNT_ONLY) { + + struct RPC_PROTSEQ_VECTORA { + uint Count; + ubyte*[1] Protseq; + } + + struct RPC_PROTSEQ_VECTORW { + uint Count; + ushort*[1] Protseq; + } + + extern (Windows) { + RPC_STATUS RpcBindingFromStringBindingA(char*, RPC_BINDING_HANDLE*); + RPC_STATUS RpcBindingFromStringBindingW(wchar*, RPC_BINDING_HANDLE*); + RPC_STATUS RpcBindingToStringBindingA(RPC_BINDING_HANDLE, char**); + RPC_STATUS RpcBindingToStringBindingW(RPC_BINDING_HANDLE, wchar**); + RPC_STATUS RpcStringBindingComposeA(char*, char*, char*, char*, char*, char**); + RPC_STATUS RpcStringBindingComposeW(wchar*, wchar*, wchar*, wchar*, wchar*, wchar**); + RPC_STATUS RpcStringBindingParseA(char*, char**, char**, char**, char**, char**); + RPC_STATUS RpcStringBindingParseW(wchar*, wchar**, wchar**, wchar**, wchar**, wchar**); + RPC_STATUS RpcStringFreeA(char**); + RPC_STATUS RpcStringFreeW(wchar**); + RPC_STATUS RpcNetworkIsProtseqValidA(char*); + RPC_STATUS RpcNetworkIsProtseqValidW(wchar*); + RPC_STATUS RpcNetworkInqProtseqsA(RPC_PROTSEQ_VECTORA**); + RPC_STATUS RpcNetworkInqProtseqsW(RPC_PROTSEQ_VECTORW**); + RPC_STATUS RpcProtseqVectorFreeA(RPC_PROTSEQ_VECTORA**); + RPC_STATUS RpcProtseqVectorFreeW(RPC_PROTSEQ_VECTORW**); + RPC_STATUS RpcServerUseProtseqA(char*, uint, void*); + RPC_STATUS RpcServerUseProtseqW(wchar*, uint, void*); + RPC_STATUS RpcServerUseProtseqExA(char*, uint MaxCalls, void*, PRPC_POLICY); + RPC_STATUS RpcServerUseProtseqExW(wchar*, uint, void*, PRPC_POLICY); + RPC_STATUS RpcServerUseProtseqEpA(char*, uint, char*, void*); + RPC_STATUS RpcServerUseProtseqEpExA(char*, uint, char*, void*, PRPC_POLICY); + RPC_STATUS RpcServerUseProtseqEpW(wchar*, uint, wchar*, void*); + RPC_STATUS RpcServerUseProtseqEpExW(wchar*, uint, wchar*, void*, PRPC_POLICY); + RPC_STATUS RpcServerUseProtseqIfA(char*, uint, RPC_IF_HANDLE, void*); + RPC_STATUS RpcServerUseProtseqIfExA(char*, uint, RPC_IF_HANDLE, void*, PRPC_POLICY); + RPC_STATUS RpcServerUseProtseqIfW(wchar*, uint, RPC_IF_HANDLE, void*); + RPC_STATUS RpcServerUseProtseqIfExW(wchar*, uint, RPC_IF_HANDLE, void*, PRPC_POLICY); + RPC_STATUS RpcMgmtInqServerPrincNameA(RPC_BINDING_HANDLE, uint, char**); + RPC_STATUS RpcMgmtInqServerPrincNameW(RPC_BINDING_HANDLE, uint, wchar**); + RPC_STATUS RpcServerInqDefaultPrincNameA(uint, char**); + RPC_STATUS RpcServerInqDefaultPrincNameW(uint, wchar**); + RPC_STATUS RpcNsBindingInqEntryNameA(RPC_BINDING_HANDLE, uint, char**); + RPC_STATUS RpcNsBindingInqEntryNameW(RPC_BINDING_HANDLE, uint, wchar**); + RPC_STATUS RpcBindingInqAuthClientA(RPC_BINDING_HANDLE, RPC_AUTHZ_HANDLE*, char**, uint*, uint*, uint*); + RPC_STATUS RpcBindingInqAuthClientW(RPC_BINDING_HANDLE, RPC_AUTHZ_HANDLE*, wchar**, uint*, uint*, uint*); + RPC_STATUS RpcBindingInqAuthInfoA(RPC_BINDING_HANDLE, char**, uint*, uint*, RPC_AUTH_IDENTITY_HANDLE*, uint*); + RPC_STATUS RpcBindingInqAuthInfoW(RPC_BINDING_HANDLE, wchar**, uint*, uint*, RPC_AUTH_IDENTITY_HANDLE*, uint*); + RPC_STATUS RpcBindingSetAuthInfoA(RPC_BINDING_HANDLE, char*, uint, uint, RPC_AUTH_IDENTITY_HANDLE, uint); + RPC_STATUS RpcBindingSetAuthInfoExA(RPC_BINDING_HANDLE, char*, uint, uint, RPC_AUTH_IDENTITY_HANDLE, uint, RPC_SECURITY_QOS*); + RPC_STATUS RpcBindingSetAuthInfoW(RPC_BINDING_HANDLE, wchar*, uint, uint, RPC_AUTH_IDENTITY_HANDLE, uint); + RPC_STATUS RpcBindingSetAuthInfoExW(RPC_BINDING_HANDLE, wchar*, uint, uint, RPC_AUTH_IDENTITY_HANDLE, uint, RPC_SECURITY_QOS*); + RPC_STATUS RpcBindingInqAuthInfoExA(RPC_BINDING_HANDLE, char**, uint*, uint*, RPC_AUTH_IDENTITY_HANDLE*, uint*, uint, RPC_SECURITY_QOS*); + RPC_STATUS RpcBindingInqAuthInfoExW(RPC_BINDING_HANDLE, wchar**, uint*, uint*, RPC_AUTH_IDENTITY_HANDLE*, uint*, uint, RPC_SECURITY_QOS*); + alias void function(void*, wchar*, uint, void**, RPC_STATUS*) RPC_AUTH_KEY_RETRIEVAL_FN; + RPC_STATUS RpcServerRegisterAuthInfoA(char*, uint, RPC_AUTH_KEY_RETRIEVAL_FN, void*); + RPC_STATUS RpcServerRegisterAuthInfoW(wchar*, uint, RPC_AUTH_KEY_RETRIEVAL_FN, void*); + RPC_STATUS UuidToStringA(UUID*, char**); + RPC_STATUS UuidFromStringA(char*, UUID*); + RPC_STATUS UuidToStringW(UUID*, wchar**); + RPC_STATUS UuidFromStringW(wchar*, UUID*); + RPC_STATUS RpcEpRegisterNoReplaceA(RPC_IF_HANDLE, RPC_BINDING_VECTOR*, UUID_VECTOR*, char*); + RPC_STATUS RpcEpRegisterNoReplaceW(RPC_IF_HANDLE, RPC_BINDING_VECTOR*, UUID_VECTOR*, wchar*); + RPC_STATUS RpcEpRegisterA(RPC_IF_HANDLE, RPC_BINDING_VECTOR*, UUID_VECTOR*, char*); + RPC_STATUS RpcEpRegisterW(RPC_IF_HANDLE, RPC_BINDING_VECTOR*, UUID_VECTOR*, wchar*); + RPC_STATUS DceErrorInqTextA(RPC_STATUS, char*); + RPC_STATUS DceErrorInqTextW(RPC_STATUS, wchar*); + RPC_STATUS RpcMgmtEpEltInqNextA(RPC_EP_INQ_HANDLE, RPC_IF_ID*, RPC_BINDING_HANDLE*, UUID*, char**); + RPC_STATUS RpcMgmtEpEltInqNextW(RPC_EP_INQ_HANDLE, RPC_IF_ID*, RPC_BINDING_HANDLE*, UUID*, wchar**); + + // MinGW erroneously had these in rpc.h + RPC_STATUS RpcImpersonateClient(RPC_BINDING_HANDLE); + RPC_STATUS RpcRevertToSelf(); + } + + version(Unicode) { + alias RPC_PROTSEQ_VECTORW RPC_PROTSEQ_VECTOR; + alias SEC_WINNT_AUTH_IDENTITY_W SEC_WINNT_AUTH_IDENTITY; + alias PSEC_WINNT_AUTH_IDENTITY_W PSEC_WINNT_AUTH_IDENTITY; + alias RpcMgmtEpEltInqNextW RpcMgmtEpEltInqNext; + alias RpcBindingFromStringBindingW RpcBindingFromStringBinding; + alias RpcBindingToStringBindingW RpcBindingToStringBinding; + alias RpcStringBindingComposeW RpcStringBindingCompose; + alias RpcStringBindingParseW RpcStringBindingParse; + alias RpcStringFreeW RpcStringFree; + alias RpcNetworkIsProtseqValidW RpcNetworkIsProtseqValid; + alias RpcNetworkInqProtseqsW RpcNetworkInqProtseqs; + alias RpcProtseqVectorFreeW RpcProtseqVectorFree; + alias RpcServerUseProtseqW RpcServerUseProtseq; + alias RpcServerUseProtseqExW RpcServerUseProtseqEx; + alias RpcServerUseProtseqEpW RpcServerUseProtseqEp; + alias RpcServerUseProtseqEpExW RpcServerUseProtseqEpEx; + alias RpcServerUseProtseqIfW RpcServerUseProtseqIf; + alias RpcServerUseProtseqIfExW RpcServerUseProtseqIfEx; + alias RpcMgmtInqServerPrincNameW RpcMgmtInqServerPrincName; + alias RpcServerInqDefaultPrincNameW RpcServerInqDefaultPrincName; + alias RpcNsBindingInqEntryNameW RpcNsBindingInqEntryName; + alias RpcBindingInqAuthClientW RpcBindingInqAuthClient; + alias RpcBindingInqAuthInfoW RpcBindingInqAuthInfo; + alias RpcBindingSetAuthInfoW RpcBindingSetAuthInfo; + alias RpcServerRegisterAuthInfoW RpcServerRegisterAuthInfo; + alias RpcBindingInqAuthInfoExW RpcBindingInqAuthInfoEx; + alias RpcBindingSetAuthInfoExW RpcBindingSetAuthInfoEx; + alias UuidFromStringW UuidFromString; + alias UuidToStringW UuidToString; + alias RpcEpRegisterNoReplaceW RpcEpRegisterNoReplace; + alias RpcEpRegisterW RpcEpRegister; + alias DceErrorInqTextW DceErrorInqText; + } else { // Ansi + alias RPC_PROTSEQ_VECTORA RPC_PROTSEQ_VECTOR; + alias SEC_WINNT_AUTH_IDENTITY_A SEC_WINNT_AUTH_IDENTITY; + alias PSEC_WINNT_AUTH_IDENTITY_A PSEC_WINNT_AUTH_IDENTITY; + alias RpcMgmtEpEltInqNextA RpcMgmtEpEltInqNext; + alias RpcBindingFromStringBindingA RpcBindingFromStringBinding; + alias RpcBindingToStringBindingA RpcBindingToStringBinding; + alias RpcStringBindingComposeA RpcStringBindingCompose; + alias RpcStringBindingParseA RpcStringBindingParse; + alias RpcStringFreeA RpcStringFree; + alias RpcNetworkIsProtseqValidA RpcNetworkIsProtseqValid; + alias RpcNetworkInqProtseqsA RpcNetworkInqProtseqs; + alias RpcProtseqVectorFreeA RpcProtseqVectorFree; + alias RpcServerUseProtseqA RpcServerUseProtseq; + alias RpcServerUseProtseqExA RpcServerUseProtseqEx; + alias RpcServerUseProtseqEpA RpcServerUseProtseqEp; + alias RpcServerUseProtseqEpExA RpcServerUseProtseqEpEx; + alias RpcServerUseProtseqIfA RpcServerUseProtseqIf; + alias RpcServerUseProtseqIfExA RpcServerUseProtseqIfEx; + alias RpcMgmtInqServerPrincNameA RpcMgmtInqServerPrincName; + alias RpcServerInqDefaultPrincNameA RpcServerInqDefaultPrincName; + alias RpcNsBindingInqEntryNameA RpcNsBindingInqEntryName; + alias RpcBindingInqAuthClientA RpcBindingInqAuthClient; + alias RpcBindingInqAuthInfoA RpcBindingInqAuthInfo; + alias RpcBindingSetAuthInfoA RpcBindingSetAuthInfo; + alias RpcServerRegisterAuthInfoA RpcServerRegisterAuthInfo; + alias RpcBindingInqAuthInfoExA RpcBindingInqAuthInfoEx; + alias RpcBindingSetAuthInfoExA RpcBindingSetAuthInfoEx; + alias UuidFromStringA UuidFromString; + alias UuidToStringA UuidToString; + alias RpcEpRegisterNoReplaceA RpcEpRegisterNoReplace; + alias RpcEpRegisterA RpcEpRegister; + alias DceErrorInqTextA DceErrorInqText; + } //#endif // UNICODE + +} else { // _WIN32_WINNT_ONLY + + struct RPC_PROTSEQ_VECTOR { + uint Count; + ubyte* Protseq[1]; + } + // versions without Unicode. + RPC_STATUS RpcBindingFromStringBinding(char*, RPC_BINDING_HANDLE*); + RPC_STATUS RpcBindingToStringBinding(RPC_BINDING_HANDLE, char**); + RPC_STATUS RpcStringBindingCompose(char*, char*, char*, char*, char*, char**); + RPC_STATUS RpcStringBindingParse(char*, char**, char**, char**, char**, char**); + RPC_STATUS RpcStringFree(char**); + RPC_STATUS RpcNetworkIsProtseqValid(char*); + RPC_STATUS RpcNetworkInqProtseqs(RPC_PROTSEQ_VECTOR**); + RPC_STATUS RpcServerInqBindings(RPC_BINDING_VECTOR**); + RPC_STATUS RpcServerUseProtseq(char*, uint, void*); + RPC_STATUS RpcServerUseProtseqEx(char*, uint, void*, PRPC_POLICY); + RPC_STATUS RpcServerUseProtseqEp(char*, uint, char*, void*); + RPC_STATUS RpcServerUseProtseqEpEx(char*, uint, char*, void*, PRPC_POLICY); + RPC_STATUS RpcServerUseProtseqIf(char*, uint, RPC_IF_HANDLE, void*); + RPC_STATUS RpcServerUseProtseqIfEx(char*, uint, RPC_IF_HANDLE, void*, PRPC_POLICY); + RPC_STATUS RpcMgmtInqServerPrincName(RPC_BINDING_HANDLE, uint, char**); + RPC_STATUS RpcServerInqDefaultPrincName(uint, char**); + RPC_STATUS RpcNsBindingInqEntryName(RPC_BINDING_HANDLE, uint, char**); + RPC_STATUS RpcBindingInqAuthClient(RPC_BINDING_HANDLE, RPC_AUTHZ_HANDLE*, char**, uint*, uint*, uint*); + RPC_STATUS RpcBindingInqAuthInfo(RPC_BINDING_HANDLE, char**, uint*, uint*, RPC_AUTH_IDENTITY_HANDLE*, uint*); + RPC_STATUS RpcBindingSetAuthInfo(RPC_BINDING_HANDLE, char*, uint, uint, RPC_AUTH_IDENTITY_HANDLE, uint); + alias void function(void*, char*, uint, void**, RPC_STATUS*) RPC_AUTH_KEY_RETRIEVAL_FN; + RPC_STATUS RpcServerRegisterAuthInfo(char*, uint, RPC_AUTH_KEY_RETRIEVAL_FN, void*); + RPC_STATUS UuidToString(UUID*, char**); + RPC_STATUS UuidFromString(char*, UUID*); + RPC_STATUS RpcEpRegisterNoReplace(RPC_IF_HANDLE, RPC_BINDING_VECTOR*, UUID_VECTOR*, char*); + RPC_STATUS RpcEpRegister(RPC_IF_HANDLE, RPC_BINDING_VECTOR*, UUID_VECTOR*, char*); + RPC_STATUS DceErrorInqText(RPC_STATUS, char*); + RPC_STATUS RpcMgmtEpEltInqNext(RPC_EP_INQ_HANDLE, RPC_IF_ID*, RPC_BINDING_HANDLE*, char**); +}// _WIN32_WINNT_ONLY + + +RPC_STATUS RpcBindingCopy(RPC_BINDING_HANDLE, RPC_BINDING_HANDLE*); +RPC_STATUS RpcBindingFree(RPC_BINDING_HANDLE*); +RPC_STATUS RpcBindingInqObject(RPC_BINDING_HANDLE, UUID*); +RPC_STATUS RpcBindingReset(RPC_BINDING_HANDLE); +RPC_STATUS RpcBindingSetObject(RPC_BINDING_HANDLE, UUID*); +RPC_STATUS RpcMgmtInqDefaultProtectLevel(uint, uint*); +RPC_STATUS RpcBindingVectorFree(RPC_BINDING_VECTOR**); +RPC_STATUS RpcIfInqId(RPC_IF_HANDLE, RPC_IF_ID*); +RPC_STATUS RpcMgmtInqComTimeout(RPC_BINDING_HANDLE, uint*); +RPC_STATUS RpcMgmtSetComTimeout(RPC_BINDING_HANDLE, uint); +RPC_STATUS RpcMgmtSetCancelTimeout(int Timeout); +RPC_STATUS RpcObjectInqType(UUID*, UUID*); +RPC_STATUS RpcObjectSetInqFn(RPC_OBJECT_INQ_FN*); +RPC_STATUS RpcObjectSetType(UUID*, UUID*); +RPC_STATUS RpcProtseqVectorFree(RPC_PROTSEQ_VECTOR**); +RPC_STATUS RpcServerInqIf(RPC_IF_HANDLE, UUID*, RPC_MGR_EPV**); +RPC_STATUS RpcServerListen(uint, uint, uint); +RPC_STATUS RpcServerRegisterIf(RPC_IF_HANDLE, UUID*, RPC_MGR_EPV*); +RPC_STATUS RpcServerRegisterIfEx(RPC_IF_HANDLE, UUID*, RPC_MGR_EPV*, uint, uint, RPC_IF_CALLBACK_FN*); +RPC_STATUS RpcServerRegisterIf2(RPC_IF_HANDLE, UUID*, RPC_MGR_EPV*, uint, uint, uint, RPC_IF_CALLBACK_FN*); +RPC_STATUS RpcServerUnregisterIf(RPC_IF_HANDLE, UUID*, uint); +RPC_STATUS RpcServerUseAllProtseqs(uint, void*); +RPC_STATUS RpcServerUseAllProtseqsEx(uint, void*, PRPC_POLICY); +RPC_STATUS RpcServerUseAllProtseqsIf(uint, RPC_IF_HANDLE, void*); +RPC_STATUS RpcServerUseAllProtseqsIfEx(uint, RPC_IF_HANDLE, void*, PRPC_POLICY); +RPC_STATUS RpcMgmtStatsVectorFree(RPC_STATS_VECTOR**); +RPC_STATUS RpcMgmtInqStats(RPC_BINDING_HANDLE, RPC_STATS_VECTOR**); +RPC_STATUS RpcMgmtIsServerListening(RPC_BINDING_HANDLE); +RPC_STATUS RpcMgmtStopServerListening(RPC_BINDING_HANDLE); +RPC_STATUS RpcMgmtWaitServerListen(); +RPC_STATUS RpcMgmtSetServerStackSize(uint); +void RpcSsDontSerializeContext(); +RPC_STATUS RpcMgmtEnableIdleCleanup(); +RPC_STATUS RpcMgmtInqIfIds(RPC_BINDING_HANDLE, RPC_IF_ID_VECTOR**); +RPC_STATUS RpcIfIdVectorFree(RPC_IF_ID_VECTOR**); +RPC_STATUS RpcEpResolveBinding(RPC_BINDING_HANDLE, RPC_IF_HANDLE); +RPC_STATUS RpcBindingServerFromClient(RPC_BINDING_HANDLE, RPC_BINDING_HANDLE*); + +// never returns +void RpcRaiseException(RPC_STATUS); +RPC_STATUS RpcTestCancel(); +RPC_STATUS RpcCancelThread(void*); +RPC_STATUS UuidCreate(UUID*); +int UuidCompare(UUID*, UUID*, RPC_STATUS*); +RPC_STATUS UuidCreateNil(UUID*); +int UuidEqual(UUID*, UUID*, RPC_STATUS*); +ushort UuidHash(UUID*, RPC_STATUS*); +int UuidIsNil(UUID*, RPC_STATUS*); +RPC_STATUS RpcEpUnregister(RPC_IF_HANDLE, RPC_BINDING_VECTOR*, UUID_VECTOR*); +RPC_STATUS RpcMgmtEpEltInqBegin(RPC_BINDING_HANDLE, uint, RPC_IF_ID*, uint, UUID*, RPC_EP_INQ_HANDLE*); +RPC_STATUS RpcMgmtEpEltInqDone(RPC_EP_INQ_HANDLE*); +RPC_STATUS RpcMgmtEpUnregister(RPC_BINDING_HANDLE, RPC_IF_ID*, RPC_BINDING_HANDLE, UUID*); +RPC_STATUS RpcMgmtSetAuthorizationFn(RPC_MGMT_AUTHORIZATION_FN); +RPC_STATUS RpcMgmtInqParameter(uint, uint*); +RPC_STATUS RpcMgmtSetParameter(uint, uint); +RPC_STATUS RpcMgmtBindingInqParameter(RPC_BINDING_HANDLE, uint, uint*); +RPC_STATUS RpcMgmtBindingSetParameter(RPC_BINDING_HANDLE, uint, uint); + +static if (_WIN32_WINNT >= 0x0500) { + RPC_STATUS UuidCreateSequential(UUID*); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/rpcdce2.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/rpcdce2.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,78 @@ +/***********************************************************************\ +* rpcdce2.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.rpcdce2; + +import win32.rpcdce; +private import win32.basetyps; + +// FIXME: deal with RPC_UNICODE_SUPPORTED +// FIXME: check types of constants + +enum { + RPC_C_EP_ALL_ELTS, + RPC_C_EP_MATCH_BY_IF, + RPC_C_EP_MATCH_BY_OBJ, + RPC_C_EP_MATCH_BY_BOTH +} + +enum { + RPC_C_VERS_ALL = 1, + RPC_C_VERS_COMPATIBLE, + RPC_C_VERS_EXACT, + RPC_C_VERS_MAJOR_ONLY, + RPC_C_VERS_UPTO +} + +const size_t DCE_C_ERROR_STRING_LEN = 256; + +enum { + RPC_C_MGMT_INQ_IF_IDS, + RPC_C_MGMT_INQ_PRINC_NAME, + RPC_C_MGMT_INQ_STATS, + RPC_C_MGMT_IS_SERVER_LISTEN, + RPC_C_MGMT_STOP_SERVER_LISTEN +} + +extern (Windows) { + int UuidCompare(UUID*, UUID*, RPC_STATUS*); + RPC_STATUS UuidCreateNil(UUID*); + int UuidEqual(UUID*, UUID*, RPC_STATUS*); + ushort UuidHash(UUID*, RPC_STATUS*); + int UuidIsNil(UUID*, RPC_STATUS*); + + RPC_STATUS RpcMgmtEpEltInqBegin(RPC_BINDING_HANDLE, uint, RPC_IF_ID*, + uint, UUID*, RPC_EP_INQ_HANDLE*); + RPC_STATUS RpcMgmtEpEltInqDone(RPC_EP_INQ_HANDLE*); + RPC_STATUS RpcMgmtEpUnregister(RPC_BINDING_HANDLE, RPC_IF_ID*, + RPC_BINDING_HANDLE, UUID*); + RPC_STATUS RpcMgmtSetAuthorizationFn(RPC_MGMT_AUTHORIZATION_FN); +} + + +//#ifdef RPC_UNICODE_SUPPORTED +RPC_STATUS DceErrorInqTextA(RPC_STATUS, char*); +RPC_STATUS DceErrorInqTextW(RPC_STATUS, wchar*); +RPC_STATUS RpcMgmtEpEltInqNextA(RPC_EP_INQ_HANDLE, RPC_IF_ID*, + RPC_BINDING_HANDLE*, UUID*, char**); +RPC_STATUS RpcMgmtEpEltInqNextW(RPC_EP_INQ_HANDLE, RPC_IF_ID*, + RPC_BINDING_HANDLE*, UUID*, wchar**); +version (Unicode) { + alias RpcMgmtEpEltInqNextW RpcMgmtEpEltInqNext; + alias DceErrorInqTextW DceErrorInqText; +} else { + alias RpcMgmtEpEltInqNextA RpcMgmtEpEltInqNext; + alias DceErrorInqTextA DceErrorInqText; +} +/+ +#else /* RPC_UNICODE_SUPPORTED */ + RPC_STATUS RPC_ENTRY DceErrorInqText(RPC_STATUS,unsigned char*); + RPC_STATUS RPC_ENTRY RpcMgmtEpEltInqNext(RPC_EP_INQ_HANDLE,RPC_IF_ID*,RPC_BINDING_HANDLE*,UUID*,unsigned char**); +#endif ++/ diff -r 586e4a649642 -r 4a9dcbd9e54f win32/rpcdcep.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/rpcdcep.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,158 @@ +/***********************************************************************\ +* rpcdcep.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.rpcdcep; + +private import win32.basetyps; +private import win32.w32api; +private import win32.windef; + +alias HANDLE I_RPC_HANDLE; +alias long RPC_STATUS; + +const RPC_NCA_FLAGS_DEFAULT=0; +const RPC_NCA_FLAGS_IDEMPOTENT=1; +const RPC_NCA_FLAGS_BROADCAST=2; +const RPC_NCA_FLAGS_MAYBE=4; +const RPCFLG_ASYNCHRONOUS=0x40000000; +const RPCFLG_INPUT_SYNCHRONOUS=0x20000000; +const RPC_FLAGS_VALID_BIT=0x8000; + +const TRANSPORT_TYPE_CN=1; +const TRANSPORT_TYPE_DG=2; +const TRANSPORT_TYPE_LPC=4; +const TRANSPORT_TYPE_WMSG=8; + +struct RPC_VERSION { + ushort MajorVersion; + ushort MinorVersion; +} +struct RPC_SYNTAX_IDENTIFIER { + GUID SyntaxGUID; + RPC_VERSION SyntaxVersion; +} +alias RPC_SYNTAX_IDENTIFIER* PRPC_SYNTAX_IDENTIFIER; + +struct RPC_MESSAGE { + HANDLE Handle; + uint DataRepresentation; + void* Buffer; + uint BufferLength; + uint ProcNum; + PRPC_SYNTAX_IDENTIFIER TransferSyntax; + void* RpcInterfaceInformation; + void* ReservedForRuntime; + void* ManagerEpv; + void* ImportContext; + uint RpcFlags; +} +alias RPC_MESSAGE* PRPC_MESSAGE; + +extern (Windows) { +alias void function (PRPC_MESSAGE Message) RPC_DISPATCH_FUNCTION; +} + +struct RPC_DISPATCH_TABLE { + uint DispatchTableCount; + RPC_DISPATCH_FUNCTION* DispatchTable; + int Reserved; +} +alias RPC_DISPATCH_TABLE* PRPC_DISPATCH_TABLE; + +struct RPC_PROTSEQ_ENDPOINT { + ubyte* RpcProtocolSequence; + ubyte* Endpoint; +} +alias RPC_PROTSEQ_ENDPOINT* PRPC_PROTSEQ_ENDPOINT; + +struct RPC_SERVER_INTERFACE { + uint Length; + RPC_SYNTAX_IDENTIFIER InterfaceId; + RPC_SYNTAX_IDENTIFIER TransferSyntax; + PRPC_DISPATCH_TABLE DispatchTable; + uint RpcProtseqEndpointCount; + PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint; + void* DefaultManagerEpv; + void* InterpreterInfo; +} +alias RPC_SERVER_INTERFACE* PRPC_SERVER_INTERFACE; + +struct RPC_CLIENT_INTERFACE { + uint Length; + RPC_SYNTAX_IDENTIFIER InterfaceId; + RPC_SYNTAX_IDENTIFIER TransferSyntax; + PRPC_DISPATCH_TABLE DispatchTable; + uint RpcProtseqEndpointCount; + PRPC_PROTSEQ_ENDPOINT RpcProtseqEndpoint; + uint Reserved; + void* InterpreterInfo; +} +alias RPC_CLIENT_INTERFACE* PRPC_CLIENT_INTERFACE; + +typedef void* I_RPC_MUTEX; + +struct RPC_TRANSFER_SYNTAX { + GUID Uuid; + ushort VersMajor; + ushort VersMinor; +} +alias RPC_STATUS function(void*, void*, void*) RPC_BLOCKING_FN; + +extern (Windows) { + alias void function(void*) PRPC_RUNDOWN; + + int I_RpcGetBuffer(RPC_MESSAGE*); + int I_RpcSendReceive(RPC_MESSAGE*); + int I_RpcSend(RPC_MESSAGE*); + int I_RpcFreeBuffer(RPC_MESSAGE*); + void I_RpcRequestMutex(I_RPC_MUTEX*); + void I_RpcClearMutex(I_RPC_MUTEX); + void I_RpcDeleteMutex(I_RPC_MUTEX); + void* I_RpcAllocate(uint); + void I_RpcFree(void*); + void I_RpcPauseExecution(uint); + int I_RpcMonitorAssociation(HANDLE, PRPC_RUNDOWN, void*); + int I_RpcStopMonitorAssociation(HANDLE); + HANDLE I_RpcGetCurrentCallHandle(); + int I_RpcGetAssociationContext(void**); + int I_RpcSetAssociationContext(void*); + + static if (_WIN32_WINNT_ONLY) { + int I_RpcNsBindingSetEntryName(HANDLE, uint, wchar*); + int I_RpcBindingInqDynamicEndpoint(HANDLE, wchar**); + } else { + int I_RpcNsBindingSetEntryName(HANDLE, uint, char*); + int I_RpcBindingInqDynamicEndpoint(HANDLE, char**); + } + + int I_RpcBindingInqTransportType(HANDLE, uint*); + int I_RpcIfInqTransferSyntaxes(HANDLE, RPC_TRANSFER_SYNTAX*, uint, + uint*); + int I_UuidCreate(GUID*); + int I_RpcBindingCopy(HANDLE, HANDLE*); + int I_RpcBindingIsClientLocal(HANDLE, uint*); + void I_RpcSsDontSerializeContext(); + int I_RpcServerRegisterForwardFunction(int function (GUID*, + RPC_VERSION*, GUID*, ubyte*, void**)); + int I_RpcConnectionInqSockBuffSize(uint*, uint*); + int I_RpcConnectionSetSockBuffSize(uint, uint); + int I_RpcBindingSetAsync(HANDLE, RPC_BLOCKING_FN); + int I_RpcAsyncSendReceive(RPC_MESSAGE*, void*); + int I_RpcGetThreadWindowHandle(void**); + int I_RpcServerThreadPauseListening(); + int I_RpcServerThreadContinueListening(); + int I_RpcServerUnregisterEndpointA(ubyte*, ubyte*); + int I_RpcServerUnregisterEndpointW(ushort*, ushort*); +} + +version(Unicode) { + alias I_RpcServerUnregisterEndpointW I_RpcServerUnregisterEndpoint; +} else { + alias I_RpcServerUnregisterEndpointA I_RpcServerUnregisterEndpoint; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/rpcndr.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/rpcndr.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,573 @@ +/***********************************************************************\ +* rpcndr.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.rpcndr; +pragma(lib, "rpcrt4.lib"); + +/* Translation notes: + RPC_CLIENT_ALLOC*, RPC_CLIENT_FREE* were replaced with PRPC_CLIENT_ALLOC, PRPC_CLIENT_FREE +*/ + +// TODO: Bitfields in MIDL_STUB_MESSAGE. +// Macros need to be converted. +const __RPCNDR_H_VERSION__= 450; + +import win32.rpcnsip; +private import win32.rpc, win32.rpcdce, win32.unknwn, win32.windef; +private import win32.objidl; // for IRpcChannelBuffer, IRpcStubBuffer +private import win32.basetyps; + +extern (Windows): + +const uint NDR_CHAR_REP_MASK = 0xF, + NDR_INT_REP_MASK = 0xF0, + NDR_FLOAT_REP_MASK = 0xFF00, + NDR_LITTLE_ENDIAN = 0x10, + NDR_BIG_ENDIAN = 0, + NDR_IEEE_FLOAT = 0, + NDR_VAX_FLOAT = 0x100, + NDR_ASCII_CHAR = 0, + NDR_EBCDIC_CHAR = 1, + NDR_LOCAL_DATA_REPRESENTATION = 0x10, + NDR_LOCAL_ENDIAN = NDR_LITTLE_ENDIAN; + +alias MIDL_user_allocate midl_user_allocate; +alias MIDL_user_free midl_user_free; + +alias long hyper; +alias ulong MIDL_uhyper; +alias char small; + +const cbNDRContext=20; +//MACRO #define NDRSContextValue(hContext) (&(hContext)->userContext) +//MACRO #define byte_from_ndr(source, target) { *(target) = *(*(char**)&(source)->Buffer)++; } + +//MACRO #define byte_array_from_ndr(Source, LowerIndex, UpperIndex, Target) { NDRcopy ((((char *)(Target))+(LowerIndex)), (Source)->Buffer, (unsigned int)((UpperIndex)-(LowerIndex))); *(unsigned long *)&(Source)->Buffer += ((UpperIndex)-(LowerIndex)); } + +//MACRO #define boolean_from_ndr(source, target) { *(target) = *(*(char**)&(source)->Buffer)++; } + +//MACRO #define boolean_array_from_ndr(Source, LowerIndex, UpperIndex, Target) { NDRcopy ((((char *)(Target))+(LowerIndex)), (Source)->Buffer, (unsigned int)((UpperIndex)-(LowerIndex))); *(unsigned long *)&(Source)->Buffer += ((UpperIndex)-(LowerIndex)); } + +//MACRO #define small_from_ndr(source, target) { *(target) = *(*(char**)&(source)->Buffer)++; } + +//MACRO #define small_from_ndr_temp(source, target, format) { *(target) = *(*(char**)(source))++; } + +//MACRO #define small_array_from_ndr(Source, LowerIndex, UpperIndex, Target) { NDRcopy ((((char *)(Target))+(LowerIndex)), (Source)->Buffer, (unsigned int)((UpperIndex)-(LowerIndex))); *(unsigned long *)&(Source)->Buffer += ((UpperIndex)-(LowerIndex)); } + +//MACRO #define MIDL_ascii_strlen(string) strlen(string) + +//MACRO #define MIDL_ascii_strcpy(target,source) strcpy(target,source) + +//MACRO #define MIDL_memset(s,c,n) memset(s,c,n) + +//MACRO #define _midl_ma1( p, cast ) *(*( cast **)&p)++ +//MACRO #define _midl_ma2( p, cast ) *(*( cast **)&p)++ +//MACRO #define _midl_ma4( p, cast ) *(*( cast **)&p)++ +//MACRO #define _midl_ma8( p, cast ) *(*( cast **)&p)++ +//MACRO #define _midl_unma1( p, cast ) *(( cast *)p)++ +//MACRO #define _midl_unma2( p, cast ) *(( cast *)p)++ +//MACRO #define _midl_unma3( p, cast ) *(( cast *)p)++ +//MACRO #define _midl_unma4( p, cast ) *(( cast *)p)++ +//MACRO #define _midl_fa2( p ) (p = (RPC_BUFPTR )((unsigned long)(p+1) & 0xfffffffe)) +//MACRO #define _midl_fa4( p ) (p = (RPC_BUFPTR )((unsigned long)(p+3) & 0xfffffffc)) +//MACRO #define _midl_fa8( p ) (p = (RPC_BUFPTR )((unsigned long)(p+7) & 0xfffffff8)) +//MACRO #define _midl_addp( p, n ) (p += n) +//MACRO #define _midl_marsh_lhs( p, cast ) *(*( cast **)&p)++ +//MACRO #define _midl_marsh_up( mp, p ) *(*(unsigned long **)&mp)++ = (unsigned long)p +//MACRO #define _midl_advmp( mp ) *(*(unsigned long **)&mp)++ +//MACRO #define _midl_unmarsh_up( p ) (*(*(unsigned long **)&p)++) + +//MACRO #define NdrMarshConfStringHdr( p, s, l ) (_midl_ma4( p, unsigned long) = s, _midl_ma4( p, unsigned long) = 0, _midl_ma4( p, unsigned long) = l) + +//MACRO #define NdrUnMarshConfStringHdr(p, s, l) ((s=_midl_unma4(p,unsigned long), (_midl_addp(p,4)), (l=_midl_unma4(p,unsigned long)) + +//MACRO #define NdrMarshCCtxtHdl(pc,p) (NDRCContextMarshall( (NDR_CCONTEXT)pc, p ),p+20) +//MACRO #define NdrUnMarshCCtxtHdl(pc,p,h,drep) (NDRCContextUnmarshall((NDR_CONTEXT)pc,h,p,drep), p+20) +//MACRO #define NdrUnMarshSCtxtHdl(pc, p,drep) (pc = NdrSContextUnMarshall(p,drep )) +//MACRO #define NdrMarshSCtxtHdl(pc,p,rd) (NdrSContextMarshall((NDR_SCONTEXT)pc,p, (NDR_RUNDOWN)rd) + +//MACRO #define NdrFieldOffset(s,f) (long)(& (((s *)0)->f)) +//MACRO #define NdrFieldPad(s,f,p,t) (NdrFieldOffset(s,f) - NdrFieldOffset(s,p) - sizeof(t)) +//MACRO #define NdrFcShort(s) (unsigned char)(s & 0xff), (unsigned char)(s >> 8) +//MACRO #define NdrFcLong(s) (unsigned char)(s & 0xff), (unsigned char)((s & 0x0000ff00) >> 8), (unsigned char)((s & 0x00ff0000) >> 16), (unsigned char)(s >> 24) + +alias void * NDR_CCONTEXT; +struct tagNDR_SCONTEXT { + void *pad[2]; + void *userContext; +} +alias tagNDR_SCONTEXT * NDR_SCONTEXT; + +struct SCONTEXT_QUEUE { + uint NumberOfObjects; + NDR_SCONTEXT *ArrayOfObjects; +} +alias SCONTEXT_QUEUE * PSCONTEXT_QUEUE; + +struct _MIDL_STUB_MESSAGE; +struct _MIDL_STUB_DESC; +struct _FULL_PTR_XLAT_TABLES; + +alias ubyte *RPC_BUFPTR; +alias uint RPC_LENGTH; + +alias ubyte *PFORMAT_STRING; + +struct ARRAY_INFO { + int Dimension; + uint *BufferConformanceMark; + uint *BufferVarianceMark; + uint *MaxCountArray; + uint *OffsetArray; + uint *ActualCountArray; +} +alias ARRAY_INFO * PARRAY_INFO; + +RPC_BINDING_HANDLE NDRCContextBinding(NDR_CCONTEXT); +void NDRCContextMarshall(NDR_CCONTEXT,void*); +void NDRCContextUnmarshall(NDR_CCONTEXT*,RPC_BINDING_HANDLE,void*,uint); +void NDRSContextMarshall(NDR_SCONTEXT,void*,NDR_RUNDOWN); +NDR_SCONTEXT NDRSContextUnmarshall(void*pBuff,uint); +void RpcSsDestroyClientContext(void**); +void NDRcopy(void*,void*,uint); +uint MIDL_wchar_strlen(wchar *); +void MIDL_wchar_strcpy(void*,wchar *); +void char_from_ndr(PRPC_MESSAGE,ubyte*); +void char_array_from_ndr(PRPC_MESSAGE,uint,uint,ubyte*); +void short_from_ndr(PRPC_MESSAGE,ushort*); +void short_array_from_ndr(PRPC_MESSAGE,uint,uint,ushort*); +void short_from_ndr_temp(ubyte**,ushort*,uint); +void int_from_ndr(PRPC_MESSAGE,uint*); +void int_array_from_ndr(PRPC_MESSAGE,uint,uint,uint*); +void int_from_ndr_temp(ubyte**,uint*,uint); +void enum_from_ndr(PRPC_MESSAGE,uint*); +void float_from_ndr(PRPC_MESSAGE,void*); +void float_array_from_ndr(PRPC_MESSAGE,uint,uint,void*); +void double_from_ndr(PRPC_MESSAGE,void*); +void double_array_from_ndr(PRPC_MESSAGE,uint,uint,void*); +void hyper_from_ndr(PRPC_MESSAGE,hyper*); +void hyper_array_from_ndr(PRPC_MESSAGE,uint,uint,hyper*); +void hyper_from_ndr_temp(ubyte**,hyper*,uint); +void data_from_ndr(PRPC_MESSAGE,void*,char*,ubyte); +void data_into_ndr(void*,PRPC_MESSAGE,char*,ubyte); +void tree_into_ndr(void*,PRPC_MESSAGE,char*,ubyte); +void data_size_ndr(void*,PRPC_MESSAGE,char*,ubyte); +void tree_size_ndr(void*,PRPC_MESSAGE,char*,ubyte); +void tree_peek_ndr(PRPC_MESSAGE,ubyte**,char*,ubyte); +void * midl_allocate(int); + +align(4): +struct MIDL_STUB_MESSAGE { + PRPC_MESSAGE RpcMsg; + ubyte *Buffer; + ubyte *BufferStart; + ubyte *BufferEnd; + ubyte *BufferMark; + uint BufferLength; + uint MemorySize; + ubyte *Memory; + int IsClient; + int ReuseBuffer; + ubyte *AllocAllNodesMemory; + ubyte *AllocAllNodesMemoryEnd; + int IgnoreEmbeddedPointers; + ubyte *PointerBufferMark; + ubyte fBufferValid; + ubyte Unused; + uint MaxCount; + uint Offset; + uint ActualCount; + void* function (uint) pfnAllocate; + void function (void*) pfnFree; + ubyte * StackTop; + ubyte * pPresentedType; + ubyte * pTransmitType; + handle_t SavedHandle; + _MIDL_STUB_DESC *StubDesc; + _FULL_PTR_XLAT_TABLES *FullPtrXlatTables; + uint FullPtrRefId; + int fCheckBounds; + // FIXME: + byte bit_fields_for_D; // FIXME: Bitfields +// int fInDontFree :1; +// int fDontCallFreeInst :1; +// int fInOnlyParam :1; +// int fHasReturn :1; + uint dwDestContext; + void* pvDestContext; + NDR_SCONTEXT * SavedContextHandles; + int ParamNumber; + IRpcChannelBuffer * pRpcChannelBuffer; + PARRAY_INFO pArrayInfo; + uint * SizePtrCountArray; + uint * SizePtrOffsetArray; + uint * SizePtrLengthArray; + void* pArgQueue; + uint dwStubPhase; + uint w2kReserved[5]; +} +alias MIDL_STUB_MESSAGE * PMIDL_STUB_MESSAGE; + +extern (Windows) { + alias void* function (void*) GENERIC_BINDING_ROUTINE; + alias void function (void*,ubyte*) GENERIC_UNBIND_ROUTINE; + alias uint function (uint *,uint,void *) USER_MARSHAL_SIZING_ROUTINE; + alias ubyte * function (uint *,ubyte *,void *) USER_MARSHAL_MARSHALLING_ROUTINE; + alias ubyte * function (uint *,ubyte *,void *) USER_MARSHAL_UNMARSHALLING_ROUTINE; + alias void function (uint *,void *) USER_MARSHAL_FREEING_ROUTINE; + alias void function () NDR_NOTIFY_ROUTINE; +} + +align: +struct GENERIC_BINDING_ROUTINE_PAIR { + GENERIC_BINDING_ROUTINE pfnBind; + GENERIC_UNBIND_ROUTINE pfnUnbind; +} +alias GENERIC_BINDING_ROUTINE_PAIR * PGENERIC_BINDING_ROUTINE_PAIR; + +struct GENERIC_BINDING_INFO { + void *pObj; + uint Size; + GENERIC_BINDING_ROUTINE pfnBind; + GENERIC_UNBIND_ROUTINE pfnUnbind; +} +alias GENERIC_BINDING_INFO * PGENERIC_BINDING_INFO; + + +struct XMIT_ROUTINE_QUINTUPLE { + XMIT_HELPER_ROUTINE pfnTranslateToXmit; + XMIT_HELPER_ROUTINE pfnTranslateFromXmit; + XMIT_HELPER_ROUTINE pfnFreeXmit; + XMIT_HELPER_ROUTINE pfnFreeInst; +} +alias XMIT_ROUTINE_QUINTUPLE * PXMIT_ROUTINE_QUINTUPLE; + +struct MALLOC_FREE_STRUCT { + void* function (uint) pfnAllocate; + void function (void*) pfnFree; +} + +struct COMM_FAULT_OFFSETS { + short CommOffset; + short FaultOffset; +} + +struct USER_MARSHAL_ROUTINE_QUADRUPLE { + USER_MARSHAL_SIZING_ROUTINE pfnBufferSize; + USER_MARSHAL_MARSHALLING_ROUTINE pfnMarshall; + USER_MARSHAL_UNMARSHALLING_ROUTINE pfnUnmarshall; + USER_MARSHAL_FREEING_ROUTINE pfnFree; +} + +enum IDL_CS_CONVERT { + IDL_CS_NO_CONVERT, + IDL_CS_IN_PLACE_CONVERT, + IDL_CS_NEW_BUFFER_CONVERT +} + +struct NDR_CS_SIZE_CONVERT_ROUTINES { + CS_TYPE_NET_SIZE_ROUTINE pfnNetSize; + CS_TYPE_TO_NETCS_ROUTINE pfnToNetCs; + CS_TYPE_LOCAL_SIZE_ROUTINE pfnLocalSize; + CS_TYPE_FROM_NETCS_ROUTINE pfnFromNetCs; +} + +struct NDR_CS_ROUTINES { + NDR_CS_SIZE_CONVERT_ROUTINES *pSizeConvertRoutines; + CS_TAG_GETTING_ROUTINE *pTagGettingRoutines; +} + +struct MIDL_STUB_DESC { + void* RpcInterfaceInformation; + void* function(uint) pfnAllocate; + void function (void*) pfnFree; + union _IMPLICIT_HANDLE_INFO { + handle_t *pAutoHandle; + handle_t *pPrimitiveHandle; + PGENERIC_BINDING_INFO pGenericBindingInfo; + } + _IMPLICIT_HANDLE_INFO IMPLICIT_HANDLE_INFO; + NDR_RUNDOWN *apfnNdrRundownRoutines; + GENERIC_BINDING_ROUTINE_PAIR *aGenericBindingRoutinePairs; + EXPR_EVAL *apfnExprEval; + XMIT_ROUTINE_QUINTUPLE *aXmitQuintuple; + ubyte *pFormatTypes; + int fCheckBounds; + uint Version; + MALLOC_FREE_STRUCT *pMallocFreeStruct; + int MIDLVersion; + COMM_FAULT_OFFSETS *CommFaultOffsets; + USER_MARSHAL_ROUTINE_QUADRUPLE *aUserMarshalQuadruple; + NDR_NOTIFY_ROUTINE *NotifyRoutineTable; + ULONG_PTR mFlags; + NDR_CS_ROUTINES *CsRoutineTables; + void *Reserved4; + ULONG_PTR Reserved5; +} +alias MIDL_STUB_DESC * PMIDL_STUB_DESC; + +alias void * PMIDL_XMIT_TYPE; + +struct MIDL_FORMAT_STRING { + short Pad; + ubyte Format[1]; +} + +struct MIDL_SERVER_INFO { + PMIDL_STUB_DESC pStubDesc; + SERVER_ROUTINE *DispatchTable; + PFORMAT_STRING ProcString; + ushort *FmtStringOffset; + STUB_THUNK *ThunkTable; +} +alias MIDL_SERVER_INFO * PMIDL_SERVER_INFO; + +struct MIDL_STUBLESS_PROXY_INFO { + PMIDL_STUB_DESC pStubDesc; + PFORMAT_STRING ProcFormatString; + ushort *FormatStringOffset; +} +alias MIDL_STUBLESS_PROXY_INFO *PMIDL_STUBLESS_PROXY_INFO; + +union CLIENT_CALL_RETURN { + void *Pointer; + int Simple; +} + +enum XLAT_SIDE { + XLAT_SERVER = 1, + XLAT_CLIENT +} +struct FULL_PTR_TO_REFID_ELEMENT { + FULL_PTR_TO_REFID_ELEMENT * Next; + void* Pointer; + uint RefId; + ubyte State; +} +alias FULL_PTR_TO_REFID_ELEMENT * PFULL_PTR_TO_REFID_ELEMENT; + +struct FULL_PTR_XLAT_TABLES { + struct RefIdToPointer { + void **XlatTable; + ubyte *StateTable; + uint NumberOfEntries; + } + struct PointerToRefId { + PFULL_PTR_TO_REFID_ELEMENT *XlatTable; + uint NumberOfBuckets; + uint HashMask; + } + uint NextRefId; + XLAT_SIDE XlatSide; +} +alias FULL_PTR_XLAT_TABLES * PFULL_PTR_XLAT_TABLES; + + +enum STUB_PHASE { + STUB_UNMARSHAL, + STUB_CALL_SERVER, + STUB_MARSHAL, + STUB_CALL_SERVER_NO_HRESULT +} + +enum PROXY_PHASE { + PROXY_CALCSIZE, + PROXY_GETBUFFER, + PROXY_MARSHAL, + PROXY_SENDRECEIVE, + PROXY_UNMARSHAL +} + +typedef void * RPC_SS_THREAD_HANDLE; + +extern (Windows) { +alias void function (void*) NDR_RUNDOWN; +alias void function (_MIDL_STUB_MESSAGE*) EXPR_EVAL; +alias void function(PMIDL_STUB_MESSAGE) XMIT_HELPER_ROUTINE; +alias void function (RPC_BINDING_HANDLE,uint,uint,IDL_CS_CONVERT*,uint*,error_status_t*) CS_TYPE_NET_SIZE_ROUTINE; +alias void function (RPC_BINDING_HANDLE,uint,uint,IDL_CS_CONVERT*,uint*,error_status_t*) CS_TYPE_LOCAL_SIZE_ROUTINE; +alias void function (RPC_BINDING_HANDLE,uint,void*,uint,byte*,uint*,error_status_t*) CS_TYPE_TO_NETCS_ROUTINE; +alias void function (RPC_BINDING_HANDLE,uint,byte*,uint,uint,void*,uint*,error_status_t*) CS_TYPE_FROM_NETCS_ROUTINE; +alias void function (RPC_BINDING_HANDLE,int,uint*,uint*,uint*,error_status_t*) CS_TAG_GETTING_ROUTINE; + +//alias void* RPC_CLIENT_ALLOC(uint); +//alias void RPC_CLIENT_FREE(void*); +alias void* function(uint) PRPC_CLIENT_ALLOC; +alias void function(void*) PRPC_CLIENT_FREE; + + alias void function (PMIDL_STUB_MESSAGE) STUB_THUNK; + alias int function() SERVER_ROUTINE; +} + +void NdrSimpleTypeMarshall(PMIDL_STUB_MESSAGE,ubyte*,ubyte); +ubyte * NdrPointerMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING pFormat); +ubyte * NdrSimpleStructMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrConformantStructMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrConformantVaryingStructMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrHardStructMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrComplexStructMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrFixedArrayMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrConformantArrayMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrConformantVaryingArrayMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrVaryingArrayMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrComplexArrayMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrNonConformantStringMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrConformantStringMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrEncapsulatedUnionMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrNonEncapsulatedUnionMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrByteCountPointerMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrXmitOrRepAsMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte * NdrInterfacePointerMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrClientContextMarshall(PMIDL_STUB_MESSAGE,NDR_CCONTEXT,int); +void NdrServerContextMarshall(PMIDL_STUB_MESSAGE,NDR_SCONTEXT,NDR_RUNDOWN); +void NdrSimpleTypeUnmarshall(PMIDL_STUB_MESSAGE,ubyte*,ubyte); +ubyte * NdrPointerUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrSimpleStructUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrConformantStructUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrConformantVaryingStructUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrHardStructUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrComplexStructUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrFixedArrayUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrConformantArrayUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrConformantVaryingArrayUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrVaryingArrayUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrComplexArrayUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrNonConformantStringUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrConformantStringUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrEncapsulatedUnionUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrNonEncapsulatedUnionUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrByteCountPointerUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrXmitOrRepAsUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +ubyte * NdrInterfacePointerUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +void NdrClientContextUnmarshall(PMIDL_STUB_MESSAGE,NDR_CCONTEXT*,RPC_BINDING_HANDLE); +NDR_SCONTEXT NdrServerContextUnmarshall(PMIDL_STUB_MESSAGE); +void NdrPointerBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrSimpleStructBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrConformantStructBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrConformantVaryingStructBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrHardStructBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrComplexStructBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrFixedArrayBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrConformantArrayBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrConformantVaryingArrayBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrVaryingArrayBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrComplexArrayBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrConformantStringBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrNonConformantStringBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrEncapsulatedUnionBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrNonEncapsulatedUnionBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrByteCountPointerBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrXmitOrRepAsBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrInterfacePointerBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrContextHandleSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +uint NdrPointerMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrSimpleStructMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrConformantStructMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrConformantVaryingStructMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrHardStructMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrComplexStructMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrFixedArrayMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrConformantArrayMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrConformantVaryingArrayMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrVaryingArrayMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrComplexArrayMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrConformantStringMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrNonConformantStringMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrEncapsulatedUnionMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrNonEncapsulatedUnionMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrXmitOrRepAsMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +uint NdrInterfacePointerMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +void NdrPointerFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrSimpleStructFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrConformantStructFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrConformantVaryingStructFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrHardStructFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrComplexStructFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrFixedArrayFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrConformantArrayFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrConformantVaryingArrayFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrVaryingArrayFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrComplexArrayFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrEncapsulatedUnionFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrNonEncapsulatedUnionFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrByteCountPointerFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrXmitOrRepAsFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrInterfacePointerFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +void NdrConvert(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +void NdrClientInitializeNew(PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,uint); +ubyte * NdrServerInitializeNew(PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC); +void NdrClientInitialize(PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,uint); +ubyte * NdrServerInitialize(PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC); +ubyte * NdrServerInitializeUnmarshall(PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,PRPC_MESSAGE); +void NdrServerInitializeMarshall(PRPC_MESSAGE,PMIDL_STUB_MESSAGE); +ubyte * NdrGetBuffer(PMIDL_STUB_MESSAGE,uint,RPC_BINDING_HANDLE); +ubyte * NdrNsGetBuffer(PMIDL_STUB_MESSAGE,uint,RPC_BINDING_HANDLE); +ubyte * NdrSendReceive(PMIDL_STUB_MESSAGE,ubyte*); +ubyte * NdrNsSendReceive(PMIDL_STUB_MESSAGE,ubyte*,RPC_BINDING_HANDLE*); +void NdrFreeBuffer(PMIDL_STUB_MESSAGE); + +CLIENT_CALL_RETURN NdrClientCall(PMIDL_STUB_DESC,PFORMAT_STRING,...); + +int NdrStubCall(IRpcStubBuffer*, IRpcChannelBuffer*,PRPC_MESSAGE,uint*); +void NdrServerCall(PRPC_MESSAGE); +int NdrServerUnmarshall(IRpcChannelBuffer*, PRPC_MESSAGE,PMIDL_STUB_MESSAGE,PMIDL_STUB_DESC,PFORMAT_STRING,void*); +void NdrServerMarshall(IRpcStubBuffer*, IRpcChannelBuffer*,PMIDL_STUB_MESSAGE,PFORMAT_STRING); +RPC_STATUS NdrMapCommAndFaultStatus(PMIDL_STUB_MESSAGE,uint*,uint*,RPC_STATUS); +int NdrSH_UPDecision(PMIDL_STUB_MESSAGE,ubyte**,RPC_BUFPTR); +int NdrSH_TLUPDecision(PMIDL_STUB_MESSAGE,ubyte**); +int NdrSH_TLUPDecisionBuffer(PMIDL_STUB_MESSAGE,ubyte**); +int NdrSH_IfAlloc(PMIDL_STUB_MESSAGE,ubyte**,uint); +int NdrSH_IfAllocRef(PMIDL_STUB_MESSAGE,ubyte**,uint); +int NdrSH_IfAllocSet(PMIDL_STUB_MESSAGE,ubyte**,uint); +RPC_BUFPTR NdrSH_IfCopy(PMIDL_STUB_MESSAGE,ubyte**,uint); +RPC_BUFPTR NdrSH_IfAllocCopy(PMIDL_STUB_MESSAGE,ubyte**,uint); +uint NdrSH_Copy(ubyte*,ubyte*,uint); +void NdrSH_IfFree(PMIDL_STUB_MESSAGE,ubyte*); +RPC_BUFPTR NdrSH_StringMarshall(PMIDL_STUB_MESSAGE,ubyte*,uint,int); +RPC_BUFPTR NdrSH_StringUnMarshall(PMIDL_STUB_MESSAGE,ubyte**,int); +void* RpcSsAllocate(uint); +void RpcSsDisableAllocate(); +void RpcSsEnableAllocate(); +void RpcSsFree(void*); +RPC_SS_THREAD_HANDLE RpcSsGetThreadHandle(); +void RpcSsSetClientAllocFree(PRPC_CLIENT_ALLOC,PRPC_CLIENT_FREE); +void RpcSsSetThreadHandle(RPC_SS_THREAD_HANDLE); +void RpcSsSwapClientAllocFree(PRPC_CLIENT_ALLOC,PRPC_CLIENT_FREE,PRPC_CLIENT_ALLOC*,PRPC_CLIENT_FREE*); +void* RpcSmAllocate(uint,RPC_STATUS*); +RPC_STATUS RpcSmClientFree(void*); +RPC_STATUS RpcSmDestroyClientContext(void**); +RPC_STATUS RpcSmDisableAllocate(); +RPC_STATUS RpcSmEnableAllocate(); +RPC_STATUS RpcSmFree(void*); +RPC_SS_THREAD_HANDLE RpcSmGetThreadHandle(RPC_STATUS*); +RPC_STATUS RpcSmSetClientAllocFree(PRPC_CLIENT_ALLOC,PRPC_CLIENT_FREE); +RPC_STATUS RpcSmSetThreadHandle(RPC_SS_THREAD_HANDLE); +RPC_STATUS RpcSmSwapClientAllocFree(PRPC_CLIENT_ALLOC,PRPC_CLIENT_FREE,PRPC_CLIENT_ALLOC*,PRPC_CLIENT_FREE*); +void NdrRpcSsEnableAllocate(PMIDL_STUB_MESSAGE); +void NdrRpcSsDisableAllocate(PMIDL_STUB_MESSAGE); +void NdrRpcSmSetClientToOsf(PMIDL_STUB_MESSAGE); +void* NdrRpcSmClientAllocate(uint); +void NdrRpcSmClientFree(void*); +void* NdrRpcSsDefaultAllocate(uint); +void NdrRpcSsDefaultFree(void*); +PFULL_PTR_XLAT_TABLES NdrFullPointerXlatInit(uint,XLAT_SIDE); +void NdrFullPointerXlatFree(PFULL_PTR_XLAT_TABLES); +int NdrFullPointerQueryPointer(PFULL_PTR_XLAT_TABLES,void*,ubyte,uint*); +int NdrFullPointerQueryRefId(PFULL_PTR_XLAT_TABLES,uint,ubyte,void**); +void NdrFullPointerInsertRefId(PFULL_PTR_XLAT_TABLES,uint,void*); +int NdrFullPointerFree(PFULL_PTR_XLAT_TABLES,void*); +void* NdrAllocate(PMIDL_STUB_MESSAGE,uint); +void NdrClearOutParameters(PMIDL_STUB_MESSAGE,PFORMAT_STRING,void*); +void* NdrOleAllocate(uint); +void NdrOleFree(void*); +ubyte* NdrUserMarshalMarshall(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +ubyte* NdrUserMarshalUnmarshall(PMIDL_STUB_MESSAGE,ubyte**,PFORMAT_STRING,ubyte); +void NdrUserMarshalBufferSize(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); +uint NdrUserMarshalMemorySize(PMIDL_STUB_MESSAGE,PFORMAT_STRING); +void NdrUserMarshalFree(PMIDL_STUB_MESSAGE,ubyte*,PFORMAT_STRING); diff -r 586e4a649642 -r 4a9dcbd9e54f win32/rpcnsi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/rpcnsi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,162 @@ +/***********************************************************************\ +* rpcnsi.d * +* * +* Windows API header module * +* RPC Name Service (RpcNs APIs) * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.rpcnsi; +pragma(lib, "rpcns4.lib"); + +private import win32.basetyps, win32.rpcdcep, win32.rpcnsi, win32.rpcdce, + win32.w32api; +private import win32.windef; // for HANDLE + +alias HANDLE RPC_NS_HANDLE; + +const RPC_C_NS_SYNTAX_DEFAULT=0; +const RPC_C_NS_SYNTAX_DCE=3; +const RPC_C_PROFILE_DEFAULT_ELT=0; +const RPC_C_PROFILE_ALL_ELT=1; +const RPC_C_PROFILE_MATCH_BY_IF=2; +const RPC_C_PROFILE_MATCH_BY_MBR=3; +const RPC_C_PROFILE_MATCH_BY_BOTH=4; +const RPC_C_NS_DEFAULT_EXP_AGE=-1; + +extern (Windows) { + RPC_STATUS RpcNsBindingExportA(uint, ubyte*, RPC_IF_HANDLE, + RPC_BINDING_VECTOR*, UUID_VECTOR*); + RPC_STATUS RpcNsBindingUnexportA(uint, ubyte*, RPC_IF_HANDLE, + UUID_VECTOR*); + RPC_STATUS RpcNsBindingLookupBeginA(uint, ubyte*, RPC_IF_HANDLE, UUID*, + uint, RPC_NS_HANDLE*); + RPC_STATUS RpcNsBindingLookupNext(RPC_NS_HANDLE, RPC_BINDING_VECTOR**); + RPC_STATUS RpcNsBindingLookupDone(RPC_NS_HANDLE*); + RPC_STATUS RpcNsGroupDeleteA(uint, ubyte*); + RPC_STATUS RpcNsGroupMbrAddA(uint, ubyte*, uint, ubyte*); + RPC_STATUS RpcNsGroupMbrRemoveA(uint, ubyte*, uint, ubyte*); + RPC_STATUS RpcNsGroupMbrInqBeginA(uint, ubyte*, uint, RPC_NS_HANDLE*); + RPC_STATUS RpcNsGroupMbrInqNextA(RPC_NS_HANDLE, ubyte**); + RPC_STATUS RpcNsGroupMbrInqDone(RPC_NS_HANDLE*); + RPC_STATUS RpcNsProfileDeleteA(uint, ubyte*); + RPC_STATUS RpcNsProfileEltAddA(uint, ubyte*, RPC_IF_ID*, uint, ubyte*, + uint, ubyte*); + RPC_STATUS RpcNsProfileEltRemoveA(uint, ubyte*, RPC_IF_ID*, uint, ubyte*); + RPC_STATUS RpcNsProfileEltInqBeginA(uint, ubyte*, uint, RPC_IF_ID*, uint, + uint, ubyte*, RPC_NS_HANDLE*); + RPC_STATUS RpcNsProfileEltInqNextA(RPC_NS_HANDLE, RPC_IF_ID*, ubyte**, + uint*, ubyte**); + RPC_STATUS RpcNsProfileEltInqDone(RPC_NS_HANDLE*); + RPC_STATUS RpcNsEntryObjectInqNext(in RPC_NS_HANDLE, out UUID*); + RPC_STATUS RpcNsEntryObjectInqDone(inout RPC_NS_HANDLE*); + RPC_STATUS RpcNsEntryExpandNameA(uint, ubyte*, ubyte**); + RPC_STATUS RpcNsMgmtBindingUnexportA(uint, ubyte*, RPC_IF_ID*, uint, + UUID_VECTOR*); + RPC_STATUS RpcNsMgmtEntryCreateA(uint, ubyte*); + RPC_STATUS RpcNsMgmtEntryDeleteA(uint, ubyte*); + RPC_STATUS RpcNsMgmtEntryInqIfIdsA(uint, ubyte*, RPC_IF_ID_VECTOR**); + RPC_STATUS RpcNsMgmtHandleSetExpAge(RPC_NS_HANDLE, uint); + RPC_STATUS RpcNsMgmtInqExpAge(uint*); + RPC_STATUS RpcNsMgmtSetExpAge(uint); + RPC_STATUS RpcNsBindingImportNext(RPC_NS_HANDLE, RPC_BINDING_HANDLE*); + RPC_STATUS RpcNsBindingImportDone(RPC_NS_HANDLE*); + RPC_STATUS RpcNsBindingSelect(RPC_BINDING_VECTOR*, RPC_BINDING_HANDLE*); +} + +// For the cases where Win95, 98, ME have no _W versions, and we must alias to +// _A even for version(Unicode). + +version (Unicode) { + static if (_WIN32_WINNT_ONLY) { + const bool _WIN32_USE_UNICODE = true; + } else { + const bool _WIN32_USE_UNICODE = false; + } +} else { + const bool _WIN32_USE_UNICODE = false; +} + +static if (!_WIN32_USE_UNICODE) { + RPC_STATUS RpcNsEntryObjectInqBeginA(uint, ubyte*, RPC_NS_HANDLE*); + RPC_STATUS RpcNsBindingImportBeginA(uint, ubyte*, RPC_IF_HANDLE, UUID*, + RPC_NS_HANDLE*); +} + +static if (_WIN32_WINNT_ONLY) { + RPC_STATUS RpcNsBindingExportW(uint, ushort*, RPC_IF_HANDLE, + RPC_BINDING_VECTOR*, UUID_VECTOR*); + RPC_STATUS RpcNsBindingUnexportW(uint, ushort*, RPC_IF_HANDLE, + UUID_VECTOR*); + RPC_STATUS RpcNsBindingLookupBeginW(uint, ushort*, RPC_IF_HANDLE, UUID*, + uint, RPC_NS_HANDLE*); + RPC_STATUS RpcNsGroupDeleteW(uint, ushort*); + RPC_STATUS RpcNsGroupMbrAddW(uint, ushort*, uint, ushort*); + RPC_STATUS RpcNsGroupMbrRemoveW(uint, ushort*, uint, ushort*); + RPC_STATUS RpcNsGroupMbrInqBeginW(uint, ushort*, uint, RPC_NS_HANDLE*); + RPC_STATUS RpcNsGroupMbrInqNextW(RPC_NS_HANDLE, ushort**); + RPC_STATUS RpcNsProfileDeleteW(uint, ushort*); + RPC_STATUS RpcNsProfileEltAddW(uint, ushort*, RPC_IF_ID*, uint, ushort*, + uint, ushort*); + RPC_STATUS RpcNsProfileEltRemoveW(uint, ushort*, RPC_IF_ID*, uint, + ushort*); + RPC_STATUS RpcNsProfileEltInqBeginW(uint, ushort*, uint, RPC_IF_ID*, + uint, uint, ushort*, RPC_NS_HANDLE*); + RPC_STATUS RpcNsProfileEltInqNextW(RPC_NS_HANDLE, RPC_IF_ID*, ushort**, + uint*, ushort**); + RPC_STATUS RpcNsEntryObjectInqBeginW(uint, ushort*, RPC_NS_HANDLE*); + RPC_STATUS RpcNsEntryExpandNameW(uint, ushort*, ushort**); + RPC_STATUS RpcNsMgmtBindingUnexportW(uint, ushort*, RPC_IF_ID*, uint, + UUID_VECTOR*); + RPC_STATUS RpcNsMgmtEntryCreateW(uint, ushort*); + RPC_STATUS RpcNsMgmtEntryDeleteW(uint, ushort*); + RPC_STATUS RpcNsMgmtEntryInqIfIdsW(uint, ushort , RPC_IF_ID_VECTOR**); + RPC_STATUS RpcNsBindingImportBeginW(uint, ushort*, RPC_IF_HANDLE, UUID*, + RPC_NS_HANDLE*); +} // _WIN32_WINNT_ONLY + +static if (_WIN32_USE_UNICODE) { + alias RpcNsBindingLookupBeginW RpcNsBindingLookupBegin; + alias RpcNsBindingImportBeginW RpcNsBindingImportBegin; + alias RpcNsBindingExportW RpcNsBindingExport; + alias RpcNsBindingUnexportW RpcNsBindingUnexport; + alias RpcNsGroupDeleteW RpcNsGroupDelete; + alias RpcNsGroupMbrAddW RpcNsGroupMbrAdd; + alias RpcNsGroupMbrRemoveW RpcNsGroupMbrRemove; + alias RpcNsGroupMbrInqBeginW RpcNsGroupMbrInqBegin; + alias RpcNsGroupMbrInqNextW RpcNsGroupMbrInqNext; + alias RpcNsEntryExpandNameW RpcNsEntryExpandName; + alias RpcNsEntryObjectInqBeginW RpcNsEntryObjectInqBegin; + alias RpcNsMgmtBindingUnexportW RpcNsMgmtBindingUnexport; + alias RpcNsMgmtEntryCreateW RpcNsMgmtEntryCreate; + alias RpcNsMgmtEntryDeleteW RpcNsMgmtEntryDelete; + alias RpcNsMgmtEntryInqIfIdsW RpcNsMgmtEntryInqIfIds; + alias RpcNsProfileDeleteW RpcNsProfileDelete; + alias RpcNsProfileEltAddW RpcNsProfileEltAdd; + alias RpcNsProfileEltRemoveW RpcNsProfileEltRemove; + alias RpcNsProfileEltInqBeginW RpcNsProfileEltInqBegin; + alias RpcNsProfileEltInqNextW RpcNsProfileEltInqNext; +} else { + alias RpcNsBindingLookupBeginA RpcNsBindingLookupBegin; + alias RpcNsBindingImportBeginA RpcNsBindingImportBegin; + alias RpcNsBindingExportA RpcNsBindingExport; + alias RpcNsBindingUnexportA RpcNsBindingUnexport; + alias RpcNsGroupDeleteA RpcNsGroupDelete; + alias RpcNsGroupMbrAddA RpcNsGroupMbrAdd; + alias RpcNsGroupMbrRemoveA RpcNsGroupMbrRemove; + alias RpcNsGroupMbrInqBeginA RpcNsGroupMbrInqBegin; + alias RpcNsGroupMbrInqNextA RpcNsGroupMbrInqNext; + alias RpcNsEntryExpandNameA RpcNsEntryExpandName; + alias RpcNsEntryObjectInqBeginA RpcNsEntryObjectInqBegin; + alias RpcNsMgmtBindingUnexportA RpcNsMgmtBindingUnexport; + alias RpcNsMgmtEntryCreateA RpcNsMgmtEntryCreate; + alias RpcNsMgmtEntryDeleteA RpcNsMgmtEntryDelete; + alias RpcNsMgmtEntryInqIfIdsA RpcNsMgmtEntryInqIfIds; + alias RpcNsProfileDeleteA RpcNsProfileDelete; + alias RpcNsProfileEltAddA RpcNsProfileEltAdd; + alias RpcNsProfileEltRemoveA RpcNsProfileEltRemove; + alias RpcNsProfileEltInqBeginA RpcNsProfileEltInqBegin; + alias RpcNsProfileEltInqNextA RpcNsProfileEltInqNext; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/rpcnsip.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/rpcnsip.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,29 @@ +/***********************************************************************\ +* rpcnsip.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.rpcnsip; + +private import win32.rpcdce, win32.rpcdcep, win32.rpcnsi; + +struct RPC_IMPORT_CONTEXT_P { + RPC_NS_HANDLE LookupContext; + RPC_BINDING_HANDLE ProposedHandle; + RPC_BINDING_VECTOR* Bindings; +} +alias RPC_IMPORT_CONTEXT_P* PRPC_IMPORT_CONTEXT_P; + +extern(Windows) { + RPC_STATUS I_RpcNsGetBuffer(PRPC_MESSAGE); + RPC_STATUS I_RpcNsSendReceive(PRPC_MESSAGE, RPC_BINDING_HANDLE*); + void I_RpcNsRaiseException(PRPC_MESSAGE, RPC_STATUS); + RPC_STATUS I_RpcReBindBuffer(PRPC_MESSAGE); + RPC_STATUS I_NsServerBindSearch(); + RPC_STATUS I_NsClientBindSearch(); + void I_NsClientBindDone(); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/rpcnterr.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/rpcnterr.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,31 @@ +/***********************************************************************\ +* rpcnterr.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.rpcnterr; + +import win32.winerror; + +enum : uint { + RPC_S_OK = ERROR_SUCCESS, + RPC_S_INVALID_ARG = ERROR_INVALID_PARAMETER, + RPC_S_OUT_OF_MEMORY = ERROR_OUTOFMEMORY, + RPC_S_OUT_OF_THREADS = ERROR_MAX_THRDS_REACHED, + RPC_S_INVALID_LEVEL = ERROR_INVALID_PARAMETER, + RPC_S_BUFFER_TOO_SMALL = ERROR_INSUFFICIENT_BUFFER, + RPC_S_INVALID_SECURITY_DESC = ERROR_INVALID_SECURITY_DESCR, + RPC_S_ACCESS_DENIED = ERROR_ACCESS_DENIED, + RPC_S_SERVER_OUT_OF_MEMORY = ERROR_NOT_ENOUGH_SERVER_MEMORY, + RPC_X_NO_MEMORY = RPC_S_OUT_OF_MEMORY, + RPC_X_INVALID_BOUND = RPC_S_INVALID_BOUND, + RPC_X_INVALID_TAG = RPC_S_INVALID_TAG, + RPC_X_ENUM_VALUE_TOO_LARGE = RPC_X_ENUM_VALUE_OUT_OF_RANGE, + RPC_X_SS_CONTEXT_MISMATCH = ERROR_INVALID_HANDLE, + RPC_X_INVALID_BUFFER = ERROR_INVALID_USER_BUFFER, + RPC_X_INVALID_PIPE_OPERATION = RPC_X_WRONG_PIPE_ORDER +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/schannel.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/schannel.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,106 @@ +/***********************************************************************\ +* schannel.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.schannel; + +import win32.wincrypt; +private import win32.windef; + +const DWORD SCHANNEL_CRED_VERSION = 4; +const SCHANNEL_SHUTDOWN = 1; +/* Comment from MinGW + ? Do these belong here or in wincrypt.h + */ +enum : DWORD { + AUTHTYPE_CLIENT = 1, + AUTHTYPE_SERVER = 2 +} + +const DWORD + SP_PROT_PCT1_SERVER = 0x01, + SP_PROT_PCT1_CLIENT = 0x02, + SP_PROT_SSL2_SERVER = 0x04, + SP_PROT_SSL2_CLIENT = 0x08, + SP_PROT_SSL3_SERVER = 0x10, + SP_PROT_SSL3_CLIENT = 0x20, + SP_PROT_TLS1_SERVER = 0x40, + SP_PROT_TLS1_CLIENT = 0x80, + SP_PROT_PCT1 = SP_PROT_PCT1_CLIENT | SP_PROT_PCT1_SERVER, + SP_PROT_TLS1 = SP_PROT_TLS1_CLIENT | SP_PROT_TLS1_SERVER, + SP_PROT_SSL2 = SP_PROT_SSL2_CLIENT | SP_PROT_SSL2_SERVER, + SP_PROT_SSL3 = SP_PROT_SSL3_CLIENT | SP_PROT_SSL3_SERVER; + +const DWORD + SCH_CRED_NO_SYSTEM_MAPPER = 0x0002, + SCH_CRED_NO_SERVERNAME_CHECK = 0x0004, + SCH_CRED_MANUAL_CRED_VALIDATION = 0x0008, + SCH_CRED_NO_DEFAULT_CREDS = 0x0010, + SCH_CRED_AUTO_CRED_VALIDATION = 0x0020, + SCH_CRED_USE_DEFAULT_CREDS = 0x0040, + SCH_CRED_REVOCATION_CHECK_END_CERT = 0x0100, + SCH_CRED_REVOCATION_CHECK_CHAIN = 0x0200, + SCH_CRED_REVOCATION_CHECK_CHAIN_EXCLUDE_ROOT = 0x0400, + SCH_CRED_IGNORE_NO_REVOCATION_CHECK = 0x0800, + SCH_CRED_IGNORE_REVOCATION_OFFLINE = 0x1000; + +// No definition - presumably an opaque structure +struct _HMAPPER; + +struct SCHANNEL_CRED { + DWORD dwVersion = SCHANNEL_CRED_VERSION; + DWORD cCreds; + PCCERT_CONTEXT* paCred; + HCERTSTORE hRootStore; + DWORD cMappers; + _HMAPPER** aphMappers; + DWORD cSupportedAlgs; + ALG_ID* palgSupportedAlgs; + DWORD grbitEnabledProtocols; + DWORD dwMinimumCypherStrength; + DWORD dwMaximumCypherStrength; + DWORD dwSessionLifespan; + DWORD dwFlags; + DWORD reserved; +} +alias SCHANNEL_CRED* PSCHANNEL_CRED; + +struct SecPkgCred_SupportedAlgs { + DWORD cSupportedAlgs; + ALG_ID* palgSupportedAlgs; +} +alias SecPkgCred_SupportedAlgs* PSecPkgCred_SupportedAlgs; + +struct SecPkgCred_CypherStrengths { + DWORD dwMinimumCypherStrength; + DWORD dwMaximumCypherStrength; +} +alias SecPkgCred_CypherStrengths* PSecPkgCred_CypherStrengths; + +struct SecPkgCred_SupportedProtocols { + DWORD grbitProtocol; +} +alias SecPkgCred_SupportedProtocols* PSecPkgCred_SupportedProtocols; + +struct SecPkgContext_IssuerListInfoEx { + PCERT_NAME_BLOB aIssuers; + DWORD cIssuers; +} +alias SecPkgContext_IssuerListInfoEx* PSecPkgContext_IssuerListInfoEx; + +struct SecPkgContext_ConnectionInfo { + DWORD dwProtocol; + ALG_ID aiCipher; + DWORD dwCipherStrength; + ALG_ID aiHash; + DWORD dwHashStrength; + ALG_ID aiExch; + DWORD dwExchStrength; +} +alias SecPkgContext_ConnectionInfo* PSecPkgContext_ConnectionInfo; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/secext.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/secext.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,52 @@ +/***********************************************************************\ +* secext.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +// Don't include this file directly, use win32.security instead. +module win32.secext; +pragma(lib, "secur32.lib"); + +private import win32.w32api, win32.windef; + +static assert (_WIN32_WINNT >= 0x0501, + "SecExt is only available on WindowsXP and later"); + +enum EXTENDED_NAME_FORMAT { + NameUnknown, + NameFullyQualifiedDN, + NameSamCompatible, + NameDisplay, // = 3 + NameUniqueId = 6, + NameCanonical, + NameUserPrincipal, + NameCanonicalEx, + NameServicePrincipal, // = 10 + NameDnsDomain = 12 +} +alias EXTENDED_NAME_FORMAT* PEXTENDED_NAME_FORMAT; + +extern (Windows) { + BOOLEAN GetComputerObjectNameA(EXTENDED_NAME_FORMAT, LPSTR, PULONG); + BOOLEAN GetComputerObjectNameW(EXTENDED_NAME_FORMAT, LPWSTR, PULONG); + BOOLEAN GetUserNameExA(EXTENDED_NAME_FORMAT, LPSTR, PULONG); + BOOLEAN GetUserNameExW(EXTENDED_NAME_FORMAT, LPWSTR, PULONG); + BOOLEAN TranslateNameA(LPCSTR, EXTENDED_NAME_FORMAT, + EXTENDED_NAME_FORMAT, LPSTR, PULONG); + BOOLEAN TranslateNameW(LPCWSTR, EXTENDED_NAME_FORMAT, + EXTENDED_NAME_FORMAT, LPWSTR, PULONG); +} + +version (Unicode) { + alias GetComputerObjectNameW GetComputerObjectName; + alias GetUserNameExW GetUserNameEx; + alias TranslateNameW TranslateName; +} else { + alias GetComputerObjectNameA GetComputerObjectName; + alias GetUserNameExA GetUserNameEx; + alias TranslateNameA TranslateName; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/servprov.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/servprov.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,16 @@ +/***********************************************************************\ +* servprov.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.servprov; + +private import win32.basetyps, win32.unknwn, win32.windef, win32.wtypes; + +interface IServiceProvider : public IUnknown { + HRESULT QueryService(REFGUID, REFIID, void**); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/setupapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/setupapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1979 @@ +/***********************************************************************\ +* setupapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Vladimir Vlasov * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.setupapi; +pragma(lib, "setupapi.lib"); + +private import win32.basetyps, win32.commctrl, win32.prsht, win32.w32api, + win32.winreg, win32.windef; +private import win32.winbase; // for SYSTEMTIME + +/*static if(_WIN32_WINNT < _WIN32_WINDOWS) { + const UINT _SETUPAPI_VER = _WIN32_WINNT; // SetupAPI version follows Windows NT version +} else static if(_WIN32_WINDOWS) { + static if(_WIN32_WINDOWS >= 0x0490) { + const UINT _SETUPAPI_VER = 0x0500; // WinME uses same version of SetupAPI as Win2k + } else static if(_WIN32_WINDOWS >= 0x0410) { + const UINT _SETUPAPI_VER = 0x0410; // Indicates version of SetupAPI shipped with Win98 + } else { + const UINT _SETUPAPI_VER = 0x0400; // Earliest SetupAPI version + } +} else { + const UINT _SETUPAPI_VER = 0x0501; +} + +version (WindowsNTonly) { + static if (_WIN32_WINNT >= 0x500) { + const UINT USE_SP_DRVINFO_DATA_V1 = 0; + } else { + const UINT USE_SP_DRVINFO_DATA_V1 = 1; + } +} else { + const UINT USE_SP_DRVINFO_DATA_V1 = 1; +}*/ +/+ +const UINT _SETUPAPI_VER = 0x0400; // Earliest SetupAPI version +const UINT USE_SP_DRVINFO_DATA_V1 = 1; ++/ +const UINT _SETUPAPI_VER = WINVER; +const bool USE_SP_DRVINFO_DATA_V1 = !_WIN32_WINNT_ONLY || _WIN32_WINNT < 0x500; + +enum : uint { + LINE_LEN = 256, + MAX_INF_STRING_LENGTH = 4096, + MAX_TITLE_LEN = 60, + MAX_INSTRUCTION_LEN = 256, + MAX_LABEL_LEN = 30, + MAX_SERVICE_NAME_LEN = 256, + MAX_SUBTITLE_LEN = 256, + SP_MAX_MACHINENAME_LENGTH = MAX_PATH + 3 +} + +enum : DWORD { + COPYFLG_WARN_IF_SKIP = 0x00000001, + COPYFLG_NOSKIP = 0x00000002, + COPYFLG_NOVERSIONCHECK = 0x00000004, + COPYFLG_FORCE_FILE_IN_USE = 0x00000008, + COPYFLG_NO_OVERWRITE = 0x00000010, + COPYFLG_NO_VERSION_DIALOG = 0x00000020, + COPYFLG_OVERWRITE_OLDER_ONLY = 0x00000040, + COPYFLG_REPLACEONLY = 0x00000400, + COPYFLG_NODECOMP = 0x00000800, + COPYFLG_REPLACE_BOOT_FILE = 0x00001000, + COPYFLG_NOPRUNE = 0x00002000 +} + +enum : DWORD { + DELFLG_IN_USE = 0x00000001, + DELFLG_IN_USE1 = 0x00010000 +} + +enum : DWORD { + DI_REMOVEDEVICE_GLOBAL = 0x00000001, + DI_REMOVEDEVICE_CONFIGSPECIFIC = 0x00000002, + DI_UNREMOVEDEVICE_CONFIGSPECIFIC = 0x00000002, + DI_SHOWOEM = 0x00000001, + DI_SHOWCOMPAT = 0x00000002, + DI_SHOWCLASS = 0x00000004, + DI_SHOWALL = 0x00000007, + DI_NOVCP = 0x00000008, + DI_DIDCOMPAT = 0x00000010, + DI_DIDCLASS = 0x00000020, + DI_AUTOASSIGNRES = 0x00000040, + DI_NEEDRESTART = 0x00000080, + DI_NEEDREBOOT = 0x00000100, + DI_NOBROWSE = 0x00000200, + DI_MULTMFGS = 0x00000400, + DI_DISABLED = 0x00000800, + DI_GENERALPAGE_ADDED = 0x00001000, + DI_RESOURCEPAGE_ADDED = 0x00002000, + DI_PROPERTIES_CHANGE = 0x00004000, + DI_INF_IS_SORTED = 0x00008000, + DI_ENUMSINGLEINF = 0x00010000, + DI_DONOTCALLCONFIGMG = 0x00020000, + DI_INSTALLDISABLED = 0x00040000, + DI_COMPAT_FROM_CLASS = 0x00080000, + DI_CLASSINSTALLPARAMS = 0x00100000, + DI_NODI_DEFAULTACTION = 0x00200000, + DI_QUIETINSTALL = 0x00800000, + DI_NOFILECOPY = 0x01000000, + DI_FORCECOPY = 0x02000000, + DI_DRIVERPAGE_ADDED = 0x04000000, + DI_USECI_SELECTSTRINGS = 0x08000000, + DI_OVERRIDE_INFFLAGS = 0x10000000, + DI_PROPS_NOCHANGEUSAGE = 0x20000000, + DI_NOSELECTICONS = 0x40000000, + DI_NOWRITE_IDS = 0x80000000, + DI_FLAGSEX_USEOLDINFSEARCH = 0x00000001, + DI_FLAGSEX_AUTOSELECTRANK0 = 0x00000002, + DI_FLAGSEX_CI_FAILED = 0x00000004, + DI_FLAGSEX_DIDINFOLIST = 0x00000010, + DI_FLAGSEX_DIDCOMPATINFO = 0x00000020, + DI_FLAGSEX_FILTERCLASSES = 0x00000040, + DI_FLAGSEX_SETFAILEDINSTALL = 0x00000080, + DI_FLAGSEX_DEVICECHANGE = 0x00000100, + DI_FLAGSEX_ALWAYSWRITEIDS = 0x00000200, + DI_FLAGSEX_PROPCHANGE_PENDING = 0x00000400, + DI_FLAGSEX_ALLOWEXCLUDEDDRVS = 0x00000800, + DI_FLAGSEX_NOUIONQUERYREMOVE = 0x00001000, + DI_FLAGSEX_USECLASSFORCOMPAT = 0x00002000, + DI_FLAGSEX_OLDINF_IN_CLASSLIST = 0x00004000, + DI_FLAGSEX_NO_DRVREG_MODIFY = 0x00008000, + DI_FLAGSEX_IN_SYSTEM_SETUP = 0x00010000, + DI_FLAGSEX_INET_DRIVER = 0x00020000, + DI_FLAGSEX_APPENDDRIVERLIST = 0x00040000, + DI_FLAGSEX_PREINSTALLBACKUP = 0x00080000, + DI_FLAGSEX_BACKUPONREPLACE = 0x00100000, + DI_FLAGSEX_DRIVERLIST_FROM_URL = 0x00200000, + DI_FLAGSEX_RESERVED1 = 0x00400000, + DI_FLAGSEX_EXCLUDE_OLD_INET_DRIVERS = 0x00800000, + DI_FLAGSEX_POWERPAGE_ADDED = 0x01000000 +} + +enum : DWORD { + DIBCI_NOINSTALLCLASS = 0x00000001, + DIBCI_NODISPLAYCLASS = 0x00000002 +} + +enum : DWORD { + DICD_GENERATE_ID = 0x00000001, + DICD_INHERIT_CLASSDRVS = 0x00000002 +} + +enum : DWORD { + DICS_ENABLE = 1, + DICS_DISABLE, + DICS_PROPCHANGE, + DICS_START, + DICS_STOP // = 5 +} + +enum : DWORD { + DICS_FLAG_GLOBAL = 1, + DICS_FLAG_CONFIGSPECIFIC = 2, + DICS_FLAG_CONFIGGENERAL = 4 +} + +alias UINT DI_FUNCTION; + +enum : DI_FUNCTION { + DIF_SELECTDEVICE = 1, + DIF_INSTALLDEVICE, + DIF_ASSIGNRESOURCES, + DIF_PROPERTIES, + DIF_REMOVE, + DIF_FIRSTTIMESETUP, + DIF_FOUNDDEVICE, + DIF_SELECTCLASSDRIVERS, + DIF_VALIDATECLASSDRIVERS, + DIF_INSTALLCLASSDRIVERS, + DIF_CALCDISKSPACE, + DIF_DESTROYPRIVATEDATA, + DIF_VALIDATEDRIVER, + DIF_MOVEDEVICE, + DIF_DETECT, + DIF_INSTALLWIZARD, + DIF_DESTROYWIZARDDATA, + DIF_PROPERTYCHANGE, + DIF_ENABLECLASS, + DIF_DETECTVERIFY, + DIF_INSTALLDEVICEFILES, + DIF_UNREMOVE, + DIF_SELECTBESTCOMPATDRV, + DIF_ALLOW_INSTALL, + DIF_REGISTERDEVICE, + DIF_NEWDEVICEWIZARD_PRESELECT, + DIF_NEWDEVICEWIZARD_SELECT, + DIF_NEWDEVICEWIZARD_PREANALYZE, + DIF_NEWDEVICEWIZARD_POSTANALYZE, + DIF_NEWDEVICEWIZARD_FINISHINSTALL, + DIF_UNUSED1, + DIF_INSTALLINTERFACES, + DIF_DETECTCANCEL, + DIF_REGISTER_COINSTALLERS, + DIF_ADDPROPERTYPAGE_ADVANCED, + DIF_ADDPROPERTYPAGE_BASIC, + DIF_RESERVED1, + DIF_TROUBLESHOOTER, + DIF_POWERMESSAGEWAKE // = 39 +} + +enum : DWORD { + DIGCF_DEFAULT = 0x00000001, + DIGCF_PRESENT = 0x00000002, + DIGCF_ALLCLASSES = 0x00000004, + DIGCF_PROFILE = 0x00000008, + DIGCF_DEVICEINTERFACE = 0x00000010 +} + +deprecated enum : DWORD { + DIGCF_INTERFACEDEVICE = DIGCF_DEVICEINTERFACE +} + +enum : DWORD { + DIGCDP_FLAG_BASIC = 0x00000001, + DIGCDP_FLAG_ADVANCED = 0x00000002 +} + +enum : DWORD { + DIOCR_INSTALLER = 0x00000001, + DIOCR_INTERFACE = 0x00000002 +} + +enum : DWORD { + DIODI_NO_ADD = 0x00000001 +} + +enum : DWORD { + DIOD_INHERIT_CLASSDRVS = 0x00000002, + DIOD_CANCEL_REMOVE = 0x00000004 +} + +enum : DWORD { + DIREG_DEV = 0x00000001, + DIREG_DRV = 0x00000002, + DIREG_BOTH = 0x00000004 +} + +enum : int { + DIRID_ABSOLUTE = -1, + DIRID_NULL = 0, + DIRID_SRCPATH = 1, + DIRID_WINDOWS = 10, + DIRID_SYSTEM = 11, + DIRID_DRIVERS = 12, + DIRID_IOSUBSYS = DIRID_DRIVERS, + DIRID_INF = 17, + DIRID_HELP = 18, + DIRID_FONTS = 20, + DIRID_VIEWERS = 21, + DIRID_COLOR = 23, + DIRID_APPS = 24, + DIRID_SHARED = 25, + DIRID_BOOT = 30, + DIRID_SYSTEM16 = 50, + DIRID_SPOOL = 51, + DIRID_SPOOLDRIVERS = 52, + DIRID_USERPROFILE = 53, + DIRID_LOADER = 54, + DIRID_PRINTPROCESSOR = 55, + DIRID_DEFAULT = DIRID_SYSTEM +} + +enum : int { + DIRID_COMMON_STARTMENU = 16406, + DIRID_COMMON_PROGRAMS = 16407, + DIRID_COMMON_STARTUP = 16408, + DIRID_COMMON_DESKTOPDIRECTORY = 16409, + DIRID_COMMON_FAVORITES = 16415, + DIRID_COMMON_APPDATA = 16419, + DIRID_PROGRAM_FILES = 16422, + DIRID_SYSTEM_X86 = 16425, + DIRID_PROGRAM_FILES_X86 = 16426, + DIRID_PROGRAM_FILES_COMMON = 16427, + DIRID_PROGRAM_FILES_COMMONX86 = 16428, + DIRID_COMMON_TEMPLATES = 16429, + DIRID_COMMON_DOCUMENTS = 16430, + DIRID_USER = 0x8000, + DIRID_ABSOLUTE_16BIT = 0xffff +} + +enum : DWORD { + DMI_MASK = 0x00000001, + DMI_BKCOLOR = 0x00000002, + DMI_USERECT = 0x00000004 +} + +enum : DWORD { + DNF_DUPDESC = 0x00000001, + DNF_OLDDRIVER = 0x00000002, + DNF_EXCLUDEFROMLIST = 0x00000004, + DNF_NODRIVER = 0x00000008, + DNF_LEGACYINF = 0x00000010, + DNF_CLASS_DRIVER = 0x00000020, + DNF_COMPATIBLE_DRIVER = 0x00000040, + DNF_INET_DRIVER = 0x00000080, + DNF_UNUSED1 = 0x00000100, + DNF_INDEXED_DRIVER = 0x00000200, + DNF_OLD_INET_DRIVER = 0x00000400, + DNF_BAD_DRIVER = 0x00000800, + DNF_DUPPROVIDER = 0x00001000 +} + +enum : UINT { + DPROMPT_SUCCESS, + DPROMPT_CANCEL, + DPROMPT_SKIPFILE, + DPROMPT_BUFFERTOOSMALL, + DPROMPT_OUTOFMEMORY // = 4 +} + +enum : DWORD { + DRIVER_HARDWAREID_RANK = 0x00000FFF, + DRIVER_COMPATID_RANK = 0x00003FFF, + DRIVER_UNTRUSTED_RANK = 0x00008000, + DRIVER_UNTRUSTED_HARDWAREID_RANK = 0x00008FFF, + DRIVER_UNTRUSTED_COMPATID_RANK = 0x0000BFFF, + DRIVER_W9X_SUSPECT_RANK = 0x0000C000, + DRIVER_W9X_SUSPECT_HARDWAREID_RANK = 0x0000CFFF, + DRIVER_W9X_SUSPECT_COMPATID_RANK = 0x0000FFFF +} + +enum : DWORD { + DYNAWIZ_FLAG_PAGESADDED = 0x00000001, + DYNAWIZ_FLAG_INSTALLDET_NEXT = 0x00000002, + DYNAWIZ_FLAG_INSTALLDET_PREV = 0x00000004, + DYNAWIZ_FLAG_ANALYZE_HANDLECONFLICT = 0x00000008 +} + +enum : WORD { + ENABLECLASS_QUERY, + ENABLECLASS_SUCCESS, + ENABLECLASS_FAILURE // = 2 +} + +enum : DWORD { + ERROR_EXPECTED_SECTION_NAME = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0, + ERROR_BAD_SECTION_NAME_LINE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 1, + ERROR_SECTION_NAME_TOO_LONG = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 2, + ERROR_GENERAL_SYNTAX = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 3, + ERROR_WRONG_INF_STYLE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x100, + ERROR_NOT_INSTALLED = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x1000, + ERROR_SECTION_NOT_FOUND = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x101, + ERROR_LINE_NOT_FOUND = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x102, + ERROR_NO_BACKUP = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x103, + ERROR_NO_ASSOCIATED_CLASS = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x200, + ERROR_CLASS_MISMATCH = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x201, + ERROR_DUPLICATE_FOUND = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x202, + ERROR_NO_DRIVER_SELECTED = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x203, + ERROR_KEY_DOES_NOT_EXIST = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x204, + ERROR_INVALID_DEVINST_NAME = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x205, + ERROR_INVALID_CLASS = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x206, + ERROR_DEVINST_ALREADY_EXISTS = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x207, + ERROR_DEVINFO_NOT_REGISTERED = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x208, + ERROR_INVALID_REG_PROPERTY = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x209, + ERROR_NO_INF = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20A, + ERROR_NO_SUCH_DEVINST = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20B, + ERROR_CANT_LOAD_CLASS_ICON = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20C, + ERROR_INVALID_CLASS_INSTALLER = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20D, + ERROR_DI_DO_DEFAULT = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20E, + ERROR_DI_NOFILECOPY = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x20F, + ERROR_INVALID_HWPROFILE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x210, + ERROR_NO_DEVICE_SELECTED = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x211, + ERROR_DEVINFO_LIST_LOCKED = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x212, + ERROR_DEVINFO_DATA_LOCKED = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x213, + ERROR_DI_BAD_PATH = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x214, + ERROR_NO_CLASSINSTALL_PARAMS = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x215, + ERROR_FILEQUEUE_LOCKED = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x216, + ERROR_BAD_SERVICE_INSTALLSECT = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x217, + ERROR_NO_CLASS_DRIVER_LIST = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x218, + ERROR_NO_ASSOCIATED_SERVICE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x219, + ERROR_NO_DEFAULT_DEVICE_INTERFACE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21A, + ERROR_DEVICE_INTERFACE_ACTIVE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21B, + ERROR_DEVICE_INTERFACE_REMOVED = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21C, + ERROR_BAD_INTERFACE_INSTALLSECT = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21D, + ERROR_NO_SUCH_INTERFACE_CLASS = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21E, + ERROR_INVALID_REFERENCE_STRING = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x21F, + ERROR_INVALID_MACHINENAME = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x220, + ERROR_REMOTE_COMM_FAILURE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x221, + ERROR_MACHINE_UNAVAILABLE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x222, + ERROR_NO_CONFIGMGR_SERVICES = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x223, + ERROR_INVALID_PROPPAGE_PROVIDER = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x224, + ERROR_NO_SUCH_DEVICE_INTERFACE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x225, + ERROR_DI_POSTPROCESSING_REQUIRED = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x226, + ERROR_INVALID_COINSTALLER = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x227, + ERROR_NO_COMPAT_DRIVERS = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x228, + ERROR_NO_DEVICE_ICON = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x229, + ERROR_INVALID_INF_LOGCONFIG = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22A, + ERROR_DI_DONT_INSTALL = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22B, + ERROR_INVALID_FILTER_DRIVER = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22C, + ERROR_NON_WINDOWS_NT_DRIVER = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22D, + ERROR_NON_WINDOWS_DRIVER = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22E, + ERROR_NO_CATALOG_FOR_OEM_INF = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x22F, + ERROR_DEVINSTALL_QUEUE_NONNATIVE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x230, + ERROR_NOT_DISABLEABLE = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x231, + ERROR_CANT_REMOVE_DEVINST = APPLICATION_ERROR_MASK | ERROR_SEVERITY_ERROR | 0x232 +} + +deprecated enum : DWORD { + ERROR_NO_DEFAULT_INTERFACE_DEVICE = ERROR_NO_DEFAULT_DEVICE_INTERFACE, + ERROR_INTERFACE_DEVICE_ACTIVE = ERROR_DEVICE_INTERFACE_ACTIVE, + ERROR_INTERFACE_DEVICE_REMOVED = ERROR_DEVICE_INTERFACE_REMOVED, + ERROR_NO_SUCH_INTERFACE_DEVICE = ERROR_NO_SUCH_DEVICE_INTERFACE, +} + +enum : UINT { + FILEOP_COPY, + FILEOP_RENAME, + FILEOP_DELETE, + FILEOP_BACKUP, + FILEOP_NEWPATH, // = 4 + FILEOP_ABORT = 0, + FILEOP_DOIT, + FILEOP_SKIP, // = 2 + FILEOP_RETRY = FILEOP_DOIT +} + +enum : UINT { + FILE_COMPRESSION_NONE, + FILE_COMPRESSION_WINLZA, + FILE_COMPRESSION_MSZIP, + FILE_COMPRESSION_NTCAB // = 3 +} + +enum : DWORD { + FLG_ADDREG_TYPE_SZ = 0x00000000, + FLG_ADDREG_BINVALUETYPE = 0x00000001, + FLG_ADDREG_NOCLOBBER = 0x00000002, + FLG_ADDREG_DELVAL = 0x00000004, + FLG_ADDREG_APPEND = 0x00000008, + FLG_ADDREG_KEYONLY = 0x00000010, + FLG_ADDREG_OVERWRITEONLY = 0x00000020, + FLG_ADDREG_TYPE_MULTI_SZ = 0x00010000, + FLG_ADDREG_TYPE_EXPAND_SZ = 0x00020000, + FLG_ADDREG_TYPE_BINARY = 0x00000000 | FLG_ADDREG_BINVALUETYPE, + FLG_ADDREG_TYPE_DWORD = 0x00010000 | FLG_ADDREG_BINVALUETYPE, + FLG_ADDREG_TYPE_NONE = 0x00020000 | FLG_ADDREG_BINVALUETYPE, + FLG_ADDREG_TYPE_MASK = 0xFFFF0000 | FLG_ADDREG_BINVALUETYPE +} + +static if(_SETUPAPI_VER >= 0x0501) { + enum : DWORD { + FLG_ADDREG_64BITKEY = 0x00001000, + FLG_ADDREG_KEYONLY_COMMON = 0x00002000, + FLG_ADDREG_32BITKEY = 0x00004000, + FLG_ADDREG_DELREG_BIT = 0x00008000 + } +} + +enum : DWORD { + FLG_DELREG_VALUE = 0x00000000 +} + +static if(_SETUPAPI_VER >= 0x0501) { + enum : DWORD { + FLG_DELREG_TYPE_MASK = FLG_ADDREG_TYPE_MASK, + FLG_DELREG_TYPE_SZ = FLG_ADDREG_TYPE_SZ, + FLG_DELREG_TYPE_MULTI_SZ = FLG_ADDREG_TYPE_MULTI_SZ, + FLG_DELREG_TYPE_EXPAND_SZ = FLG_ADDREG_TYPE_EXPAND_SZ, + FLG_DELREG_TYPE_BINARY = FLG_ADDREG_TYPE_BINARY, + FLG_DELREG_TYPE_DWORD = FLG_ADDREG_TYPE_DWORD, + FLG_DELREG_TYPE_NONE = FLG_ADDREG_TYPE_NONE, + FLG_DELREG_64BITKEY = FLG_ADDREG_64BITKEY, + FLG_DELREG_KEYONLY_COMMON = FLG_ADDREG_KEYONLY_COMMON, + FLG_DELREG_32BITKEY = FLG_ADDREG_32BITKEY, + FLG_DELREG_OPERATION_MASK = 0x000000FE, + FLG_DELREG_MULTI_SZ_DELSTRING = 0x00000002 | FLG_DELREG_TYPE_MULTI_SZ | FLG_ADDREG_DELREG_BIT + } +} + +enum : DWORD { + FLG_BITREG_CLEARBITS = 0x00000000, + FLG_BITREG_SETBITS = 0x00000001 +} + +static if(_SETUPAPI_VER >= 0x0501) { + enum : DWORD { + FLG_BITREG_64BITKEY = 0x00001000, + FLG_BITREG_32BITKEY = 0x00004000 + } +} + +enum : DWORD { + FLG_PROFITEM_CURRENTUSER = 0x00000001, + FLG_PROFITEM_DELETE = 0x00000002, + FLG_PROFITEM_GROUP = 0x00000004, + FLG_PROFITEM_CSIDL = 0x00000008 +} + +enum : DWORD { + FLG_REGSVR_DLLREGISTER = 0x00000001, + FLG_REGSVR_DLLINSTALL = 0x00000002 +} + +enum { + IDD_DYNAWIZ_FIRSTPAGE = 10000, + IDD_DYNAWIZ_SELECT_PREVPAGE, + IDD_DYNAWIZ_SELECT_NEXTPAGE, + IDD_DYNAWIZ_ANALYZE_PREVPAGE, + IDD_DYNAWIZ_ANALYZE_NEXTPAGE, // = 1004 + IDD_DYNAWIZ_INSTALLDETECTED_PREVPAGE = 10006, + IDD_DYNAWIZ_INSTALLDETECTED_NEXTPAGE, + IDD_DYNAWIZ_INSTALLDETECTED_NODEVS, + IDD_DYNAWIZ_SELECTDEV_PAGE, + IDD_DYNAWIZ_ANALYZEDEV_PAGE, + IDD_DYNAWIZ_INSTALLDETECTEDDEVS_PAGE, + IDD_DYNAWIZ_SELECTCLASS_PAGE, // = 10012 + MIN_IDD_DYNAWIZ_RESOURCE_ID = 10000, + MAX_IDD_DYNAWIZ_RESOURCE_ID = 11000 +} + +enum : DWORD { + IDF_NOBROWSE = 0x00000001, + IDF_NOSKIP = 0x00000002, + IDF_NODETAILS = 0x00000004, + IDF_NOCOMPRESSED = 0x00000008, + IDF_CHECKFIRST = 0x00000100, + IDF_NOBEEP = 0x00000200, + IDF_NOFOREGROUND = 0x00000400, + IDF_WARNIFSKIP = 0x00000800 +} + +static if(_SETUPAPI_VER >= 0x0501) { + enum : DWORD { + IDF_NOREMOVABLEMEDIAPROMPT = 0x00001000, + IDF_USEDISKNAMEASPROMPT = 0x00002000, + IDF_OEMDISK = 0x80000000 + } +} + +enum { + IDI_RESOURCEFIRST = 159, + IDI_RESOURCE = 159, + IDI_RESOURCELAST = 161, + IDI_RESOURCEOVERLAYFIRST = 161, + IDI_RESOURCEOVERLAYLAST = 161, + IDI_CONFLICT = 161, + IDI_PROBLEM_OVL = 500, + IDI_DISABLED_OVL = 501, + IDI_FORCED_OVL = 502, + IDI_CLASSICON_OVERLAYFIRST = 500, + IDI_CLASSICON_OVERLAYLAST = 502 +} + +enum : DWORD { + INF_STYLE_NONE = 0x00000000, + INF_STYLE_OLDNT = 0x00000001, + INF_STYLE_WIN4 = 0x00000002, + INF_STYLE_CACHE_ENABLE = 0x00000010, + INF_STYLE_CACHE_DISABLE = 0x00000020 +} + +enum : DWORD { + INFINFO_INF_SPEC_IS_HINF = 1, + INFINFO_INF_NAME_IS_ABSOLUTE, + INFINFO_DEFAULT_SEARCH, + INFINFO_REVERSE_DEFAULT_SEARCH, + INFINFO_INF_PATH_LIST_SEARCH // = 5 +} + +alias DWORD LogSeverity; +enum : LogSeverity { + LogSevInformation, + LogSevWarning, + LogSevError, + LogSevFatalError, + LogSevMaximum // = 4 +} + +const MAX_INSTALLWIZARD_DYNAPAGES = 20; + +enum : DWORD { + NDW_INSTALLFLAG_DIDFACTDEFS = 0x00000001, + NDW_INSTALLFLAG_HARDWAREALLREADYIN = 0x00000002, + NDW_INSTALLFLAG_NEEDSHUTDOWN = 0x00000200, + NDW_INSTALLFLAG_EXPRESSINTRO = 0x00000400, + NDW_INSTALLFLAG_SKIPISDEVINSTALLED = 0x00000800, + NDW_INSTALLFLAG_NODETECTEDDEVS = 0x00001000, + NDW_INSTALLFLAG_INSTALLSPECIFIC = 0x00002000, + NDW_INSTALLFLAG_SKIPCLASSLIST = 0x00004000, + NDW_INSTALLFLAG_CI_PICKED_OEM = 0x00008000, + NDW_INSTALLFLAG_PCMCIAMODE = 0x00010000, + NDW_INSTALLFLAG_PCMCIADEVICE = 0x00020000, + NDW_INSTALLFLAG_USERCANCEL = 0x00040000, + NDW_INSTALLFLAG_KNOWNCLASS = 0x00080000, + NDW_INSTALLFLAG_NEEDRESTART = 0x00000080, + NDW_INSTALLFLAG_NEEDREBOOT = 0x00000100 +} + +enum : DWORD { + SETDIRID_NOT_FULL_PATH = 0x00000001 +} + +enum : DWORD { + SP_COPY_DELETESOURCE = 0x0000001, + SP_COPY_REPLACEONLY = 0x0000002, + SP_COPY_NEWER = 0x0000004, + SP_COPY_NEWER_OR_SAME = 0x0000004, + SP_COPY_NOOVERWRITE = 0x0000008, + SP_COPY_NODECOMP = 0x0000010, + SP_COPY_LANGUAGEAWARE = 0x0000020, + SP_COPY_SOURCE_ABSOLUTE = 0x0000040, + SP_COPY_SOURCEPATH_ABSOLUTE = 0x0000080, + SP_COPY_IN_USE_NEEDS_REBOOT = 0x0000100, + SP_COPY_FORCE_IN_USE = 0x0000200, + SP_COPY_NOSKIP = 0x0000400, + SP_FLAG_CABINETCONTINUATION = 0x0000800, + SP_COPY_FORCE_NOOVERWRITE = 0x0001000, + SP_COPY_FORCE_NEWER = 0x0002000, + SP_COPY_WARNIFSKIP = 0x0004000, + SP_COPY_NOBROWSE = 0x0008000, + SP_COPY_NEWER_ONLY = 0x0010000, + SP_COPY_SOURCE_SIS_MASTER = 0x0020000, + SP_COPY_OEMINF_CATALOG_ONLY = 0x0040000, + SP_COPY_REPLACE_BOOT_FILE = 0x0080000, + SP_COPY_NOPRUNE = 0x0100000 +} + +static if(_SETUPAPI_VER >= 0x0501) { + enum : DWORD { + SP_COPY_OEM_F6_INF = 0x0200000 + } +} + +enum : DWORD { + SPCRP_SECURITY = 23, + SPCRP_SECURITY_SDS, + SPCRP_DEVTYPE, + SPCRP_EXCLUSIVE, + SPCRP_CHARACTERISTICS, + SPCRP_MAXIMUM_PROPERTY // = 28 +} + +enum : DWORD { + SPDIT_NODRIVER, + SPDIT_CLASSDRIVER, + SPDIT_COMPATDRIVER // = 2 +} + +enum : DWORD { + SPDRP_DEVICEDESC, + SPDRP_HARDWAREID, + SPDRP_COMPATIBLEIDS, + SPDRP_UNUSED0, + SPDRP_SERVICE, + SPDRP_UNUSED1, + SPDRP_UNUSED2, + SPDRP_CLASS, + SPDRP_CLASSGUID, + SPDRP_DRIVER, + SPDRP_CONFIGFLAGS, + SPDRP_MFG, + SPDRP_FRIENDLYNAME, + SPDRP_LOCATION_INFORMATION, + SPDRP_PHYSICAL_DEVICE_OBJECT_NAME, + SPDRP_CAPABILITIES, + SPDRP_UI_NUMBER, + SPDRP_UPPERFILTERS, + SPDRP_LOWERFILTERS, + SPDRP_BUSTYPEGUID, + SPDRP_LEGACYBUSTYPE, + SPDRP_BUSNUMBER, + SPDRP_ENUMERATOR_NAME, + SPDRP_SECURITY, + SPDRP_SECURITY_SDS, + SPDRP_DEVTYPE, + SPDRP_EXCLUSIVE, + SPDRP_CHARACTERISTICS, + SPDRP_ADDRESS, // = 28 + SPDRP_UI_NUMBER_DESC_FORMAT = 30, + SPDRP_MAXIMUM_PROPERTY = 31 +} + +enum : UINT { + SPDSL_IGNORE_DISK = 1, + SPDSL_DISALLOW_NEGATIVE_ADJUST +} + +enum : UINT { + SPFILENOTIFY_STARTQUEUE = 1, + SPFILENOTIFY_ENDQUEUE, + SPFILENOTIFY_STARTSUBQUEUE, + SPFILENOTIFY_ENDSUBQUEUE, + SPFILENOTIFY_STARTDELETE, + SPFILENOTIFY_ENDDELETE, + SPFILENOTIFY_DELETEERROR, + SPFILENOTIFY_STARTRENAME, + SPFILENOTIFY_ENDRENAME, + SPFILENOTIFY_RENAMEERROR, + SPFILENOTIFY_STARTCOPY, + SPFILENOTIFY_ENDCOPY, + SPFILENOTIFY_COPYERROR, + SPFILENOTIFY_NEEDMEDIA, + SPFILENOTIFY_QUEUESCAN, + SPFILENOTIFY_CABINETINFO, + SPFILENOTIFY_FILEINCABINET, + SPFILENOTIFY_NEEDNEWCABINET, + SPFILENOTIFY_FILEEXTRACTED, + SPFILENOTIFY_FILEOPDELAYED, + SPFILENOTIFY_STARTBACKUP, + SPFILENOTIFY_BACKUPERROR, + SPFILENOTIFY_ENDBACKUP, + SPFILENOTIFY_QUEUESCAN_EX, + SPFILENOTIFY_STARTREGISTRATION, // = 25 + SPFILENOTIFY_ENDREGISTRATION = 32, + SPFILENOTIFY_LANGMISMATCH = 0x00010000, + SPFILENOTIFY_TARGETEXISTS = 0x00020000, + SPFILENOTIFY_TARGETNEWER = 0x00040000 +} + +static if(_SETUPAPI_VER >= 0x0501) { + enum : UINT { + SPFILENOTIFY_QUEUESCAN_SIGNERINFO = 0x00000040 + } +} + +enum : DWORD { + SPFILELOG_SYSTEMLOG = 0x00000001, + SPFILELOG_OEMFILE = 0x00000001, + SPFILELOG_FORCENEW = 0x00000002, + SPFILELOG_QUERYONLY = 0x00000004 +} + +enum : INT { + SPFILEQ_FILE_IN_USE = 0x00000001, + SPFILEQ_REBOOT_RECOMMENDED = 0x00000002, + SPFILEQ_REBOOT_IN_PROGRESS = 0x00000004 +} + +enum : DWORD { + SPINT_ACTIVE = 0x00000001, + SPINT_DEFAULT = 0x00000002, + SPINT_REMOVED = 0x00000004 +} + +deprecated enum : DWORD { + SPID_ACTIVE = SPINT_ACTIVE, + SPID_DEFAULT = SPINT_DEFAULT, + SPID_REMOVED = SPINT_REMOVED +} + +enum : UINT { + SPINST_LOGCONFIG = 0x00000001, + SPINST_INIFILES = 0x00000002, + SPINST_REGISTRY = 0x00000004, + SPINST_INI2REG = 0x00000008, + SPINST_FILES = 0x00000010, + SPINST_BITREG = 0x00000020, + SPINST_REGSVR = 0x00000040, + SPINST_UNREGSVR = 0x00000080, + SPINST_PROFILEITEMS = 0x00000100, + SPINST_SINGLESECTION = 0x00010000, + SPINST_LOGCONFIG_IS_FORCED = 0x00020000, + SPINST_LOGCONFIGS_ARE_OVERRIDES = 0x00040000 +} + +static if(_SETUPAPI_VER >= 0x0501) { + enum : UINT { + SPINST_COPYINF = 0x00000200, + SPINST_ALL = 0x000003ff, + SPINST_REGISTERCALLBACKAWARE = 0x00080000 + } +} else { + enum : UINT { + SPINST_ALL = 0x000001ff + } +} + +enum : DWORD { + SPOST_NONE, + SPOST_PATH, + SPOST_URL, + SPOST_MAX // = 3 +} + +enum : DWORD { + SPPSR_SELECT_DEVICE_RESOURCES = 1, + SPPSR_ENUM_BASIC_DEVICE_PROPERTIES, + SPPSR_ENUM_ADV_DEVICE_PROPERTIES +} + +enum : DWORD { + SPQ_SCAN_FILE_PRESENCE = 0x00000001, + SPQ_SCAN_FILE_VALIDITY = 0x00000002, + SPQ_SCAN_USE_CALLBACK = 0x00000004, + SPQ_SCAN_USE_CALLBACKEX = 0x00000008, + SPQ_SCAN_INFORM_USER = 0x00000010, + SPQ_SCAN_PRUNE_COPY_QUEUE = 0x00000020 +} + +static if(_SETUPAPI_VER >= 0x0501) { + enum : DWORD { + SPQ_SCAN_USE_CALLBACK_SIGNERINFO = 0x00000040, + SPQ_SCAN_PRUNE_DELREN = 0x00000080 + } +} + +enum : UINT_PTR { + SPQ_DELAYED_COPY = 0x00000001 +} + +enum : DWORD { + SPRDI_FIND_DUPS = 0x00000001, +} + +enum : DWORD { + SPSVCINST_TAGTOFRONT = 0x00000001, + SPSVCINST_ASSOCSERVICE = 0x00000002, + SPSVCINST_DELETEEVENTLOGENTRY = 0x00000004, + SPSVCINST_NOCLOBBER_DISPLAYNAME = 0x00000008, + SPSVCINST_NOCLOBBER_STARTTYPE = 0x00000010, + SPSVCINST_NOCLOBBER_ERRORCONTROL = 0x00000020, + SPSVCINST_NOCLOBBER_LOADORDERGROUP = 0x00000040, + SPSVCINST_NOCLOBBER_DEPENDENCIES = 0x00000080, + SPSVCINST_NOCLOBBER_DESCRIPTION = 0x00000100, + SPSVCINST_STOPSERVICE = 0x00000200 +} + +static if(_SETUPAPI_VER >= 0x0501) { + enum : DWORD { + SPSVCINST_CLOBBER_SECURITY = 0x00000400 + } +} + +enum : DWORD { + SPWPT_SELECTDEVICE = 0x00000001 +} + +enum : DWORD { + SPWP_USE_DEVINFO_DATA = 0x00000001 +} + +enum : UINT { + SRCINFO_PATH = 1, + SRCINFO_TAGFILE, + SRCINFO_DESCRIPTION, + SRCINFO_FLAGS // = 4 +} + +enum : DWORD { + SRCLIST_TEMPORARY = 0x00000001, + SRCLIST_NOBROWSE = 0x00000002, + SRCLIST_SYSTEM = 0x00000010, + SRCLIST_USER = 0x00000020, + SRCLIST_SYSIFADMIN = 0x00000040, + SRCLIST_SUBDIRS = 0x00000100, + SRCLIST_APPEND = 0x00000200, + SRCLIST_NOSTRIPPLATFORM = 0x00000400 +} + +alias PVOID HINF; +alias PVOID HDSKSPC; +alias HANDLE HDEVINFO; +alias PVOID HSPFILEQ; +alias PVOID HSPFILELOG; + +enum SetupFileLogInfo { + SetupFileLogSourceFilename, + SetupFileLogChecksum, + SetupFileLogDiskTagfile, + SetupFileLogDiskDescription, + SetupFileLogOtherInfo, + SetupFileLogMax +} + +align(1): + +struct INFCONTEXT { + PVOID Inf; + PVOID CurrentInf; + UINT Section; + UINT Line; +} +alias INFCONTEXT* PINFCONTEXT; + +struct SP_INF_INFORMATION { + DWORD InfStyle; + DWORD InfCount; + BYTE _VersionData[1]; + BYTE* VersionData() { return _VersionData.ptr; } +} +alias SP_INF_INFORMATION* PSP_INF_INFORMATION; + +struct SP_ALTPLATFORM_INFO { + DWORD cbSize = SP_ALTPLATFORM_INFO.sizeof; + DWORD Platform; + DWORD MajorVersion; + DWORD MinorVersion; + WORD ProcessorArchitecture; + WORD Reserved; +} +alias SP_ALTPLATFORM_INFO* PSP_ALTPLATFORM_INFO; + +struct SP_ORIGINAL_FILE_INFO_A { + DWORD cbSize = SP_ORIGINAL_FILE_INFO_A.sizeof; + CHAR OriginalInfName[MAX_PATH]; + CHAR OriginalCatalogName[MAX_PATH]; +} +alias SP_ORIGINAL_FILE_INFO_A* PSP_ORIGINAL_FILE_INFO_A; + +struct SP_ORIGINAL_FILE_INFO_W { + DWORD cbSize = SP_ORIGINAL_FILE_INFO_W.sizeof; + WCHAR OriginalInfName[MAX_PATH]; + WCHAR OriginalCatalogName[MAX_PATH]; +} +alias SP_ORIGINAL_FILE_INFO_W* PSP_ORIGINAL_FILE_INFO_W; + +struct FILEPATHS_A { + PCSTR Target; + PCSTR Source; + UINT Win32Error; + DWORD Flags; +} +alias FILEPATHS_A* PFILEPATHS_A; + +struct FILEPATHS_W { + PCWSTR Target; + PCWSTR Source; + UINT Win32Error; + DWORD Flags; +} +alias FILEPATHS_W* PFILEPATHS_W; + +struct SOURCE_MEDIA_A { + PCSTR Reserved; + PCSTR Tagfile; + PCSTR Description; + PCSTR SourcePath; + PCSTR SourceFile; + DWORD Flags; +} +alias SOURCE_MEDIA_A* PSOURCE_MEDIA_A; + +struct SOURCE_MEDIA_W { + PCWSTR Reserved; + PCWSTR Tagfile; + PCWSTR Description; + PCWSTR SourcePath; + PCWSTR SourceFile; + DWORD Flags; +} +alias SOURCE_MEDIA_W* PSOURCE_MEDIA_W; + +struct CABINET_INFO_A { + PCSTR CabinetPath; + PCSTR CabinetFile; + PCSTR DiskName; + USHORT SetId; + USHORT CabinetNumber; +} +alias CABINET_INFO_A* PCABINET_INFO_A; + +struct CABINET_INFO_W { + PCWSTR CabinetPath; + PCWSTR CabinetFile; + PCWSTR DiskName; + USHORT SetId; + USHORT CabinetNumber; +} +alias CABINET_INFO_W* PCABINET_INFO_W; + +struct FILE_IN_CABINET_INFO_A { + PCSTR NameInCabinet; + DWORD FileSize; + DWORD Win32Error; + WORD DosDate; + WORD DosTime; + WORD DosAttribs; + CHAR FullTargetName[MAX_PATH]; +} +alias FILE_IN_CABINET_INFO_A* PFILE_IN_CABINET_INFO_A; + +struct FILE_IN_CABINET_INFO_W { + PCWSTR NameInCabinet; + DWORD FileSize; + DWORD Win32Error; + WORD DosDate; + WORD DosTime; + WORD DosAttribs; + WCHAR FullTargetName[MAX_PATH]; +} +alias FILE_IN_CABINET_INFO_W* PFILE_IN_CABINET_INFO_W; + +struct SP_FILE_COPY_PARAMS_A { + DWORD cbSize = SP_FILE_COPY_PARAMS_A.sizeof; + HSPFILEQ QueueHandle; + PCSTR SourceRootPath; + PCSTR SourcePath; + PCSTR SourceFilename; + PCSTR SourceDescription; + PCSTR SourceTagfile; + PCSTR TargetDirectory; + PCSTR TargetFilename; + DWORD CopyStyle; + HINF LayoutInf; + PCSTR SecurityDescriptor; +} +alias SP_FILE_COPY_PARAMS_A* PSP_FILE_COPY_PARAMS_A; + +struct SP_FILE_COPY_PARAMS_W { + DWORD cbSize = SP_FILE_COPY_PARAMS_W.sizeof; + HSPFILEQ QueueHandle; + PCWSTR SourceRootPath; + PCWSTR SourcePath; + PCWSTR SourceFilename; + PCWSTR SourceDescription; + PCWSTR SourceTagfile; + PCWSTR TargetDirectory; + PCWSTR TargetFilename; + DWORD CopyStyle; + HINF LayoutInf; + PCWSTR SecurityDescriptor; +} +alias SP_FILE_COPY_PARAMS_W* PSP_FILE_COPY_PARAMS_W; + +struct SP_DEVINFO_DATA { + DWORD cbSize = SP_DEVINFO_DATA.sizeof; + GUID ClassGuid; + DWORD DevInst; + ULONG_PTR Reserved; +} +alias SP_DEVINFO_DATA* PSP_DEVINFO_DATA; + +struct SP_DEVICE_INTERFACE_DATA { + DWORD cbSize = SP_DEVICE_INTERFACE_DATA.sizeof; + GUID InterfaceClassGuid; + DWORD Flags; + ULONG_PTR Reserved; +} +alias SP_DEVICE_INTERFACE_DATA* PSP_DEVICE_INTERFACE_DATA; +deprecated alias SP_DEVICE_INTERFACE_DATA SP_INTERFACE_DEVICE_DATA; +deprecated alias SP_DEVICE_INTERFACE_DATA* PSP_INTERFACE_DEVICE_DATA; + +struct SP_DEVICE_INTERFACE_DETAIL_DATA_A { + DWORD cbSize = SP_DEVICE_INTERFACE_DETAIL_DATA_A.sizeof; + CHAR _DevicePath[1]; + CHAR* DevicePath() { return _DevicePath.ptr; } +} +alias SP_DEVICE_INTERFACE_DETAIL_DATA_A* PSP_DEVICE_INTERFACE_DETAIL_DATA_A; + +struct SP_DEVICE_INTERFACE_DETAIL_DATA_W { + DWORD cbSize = SP_DEVICE_INTERFACE_DETAIL_DATA_W.sizeof; + WCHAR _DevicePath[1]; + WCHAR* DevicePath() { return _DevicePath.ptr; } +} +alias SP_DEVICE_INTERFACE_DETAIL_DATA_W* PSP_DEVICE_INTERFACE_DETAIL_DATA_W; + +deprecated alias SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA_A; +deprecated alias SP_DEVICE_INTERFACE_DETAIL_DATA_A* PSP_INTERFACE_DEVICE_DETAIL_DATA_A; +deprecated alias SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA_W; +deprecated alias SP_DEVICE_INTERFACE_DETAIL_DATA_W* PSP_INTERFACE_DEVICE_DETAIL_DATA_W; + +struct SP_DEVINFO_LIST_DETAIL_DATA_A { + DWORD cbSize = SP_DEVINFO_LIST_DETAIL_DATA_A.sizeof; + GUID ClassGuid; + HANDLE RemoteMachineHandle; + CHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH]; +} +alias SP_DEVINFO_LIST_DETAIL_DATA_A* PSP_DEVINFO_LIST_DETAIL_DATA_A; + +struct SP_DEVINFO_LIST_DETAIL_DATA_W { + DWORD cbSize = SP_DEVINFO_LIST_DETAIL_DATA_W.sizeof; + GUID ClassGuid; + HANDLE RemoteMachineHandle; + WCHAR RemoteMachineName[SP_MAX_MACHINENAME_LENGTH]; +} +alias SP_DEVINFO_LIST_DETAIL_DATA_W* PSP_DEVINFO_LIST_DETAIL_DATA_W; + +extern(Windows) alias UINT function(PVOID,UINT,UINT_PTR,UINT_PTR) PSP_FILE_CALLBACK_A; +extern(Windows) alias UINT function(PVOID,UINT,UINT_PTR,UINT_PTR) PSP_FILE_CALLBACK_W; + +struct SP_DEVINSTALL_PARAMS_A { + DWORD cbSize = SP_DEVINSTALL_PARAMS_A.sizeof; + DWORD Flags; + DWORD FlagsEx; + HWND hwndParent; + PSP_FILE_CALLBACK_A InstallMsgHandler; + PVOID InstallMsgHandlerContext; + HSPFILEQ FileQueue; + ULONG_PTR ClassInstallReserved; + DWORD Reserved; + CHAR DriverPath[MAX_PATH]; +} +alias SP_DEVINSTALL_PARAMS_A* PSP_DEVINSTALL_PARAMS_A; + +struct SP_DEVINSTALL_PARAMS_W { + DWORD cbSize = SP_DEVINSTALL_PARAMS_W.sizeof; + DWORD Flags; + DWORD FlagsEx; + HWND hwndParent; + PSP_FILE_CALLBACK_W InstallMsgHandler; + PVOID InstallMsgHandlerContext; + HSPFILEQ FileQueue; + ULONG_PTR ClassInstallReserved; + DWORD Reserved; + WCHAR DriverPath[MAX_PATH]; +} +alias SP_DEVINSTALL_PARAMS_W* PSP_DEVINSTALL_PARAMS_W; + +struct SP_CLASSINSTALL_HEADER { + DWORD cbSize = SP_CLASSINSTALL_HEADER.sizeof; + DI_FUNCTION InstallFunction; +} +alias SP_CLASSINSTALL_HEADER* PSP_CLASSINSTALL_HEADER; + +struct SP_ENABLECLASS_PARAMS { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + GUID ClassGuid; + DWORD EnableMessage; +} +alias SP_ENABLECLASS_PARAMS* PSP_ENABLECLASS_PARAMS; + +struct SP_MOVEDEV_PARAMS { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + SP_DEVINFO_DATA SourceDeviceInfoData; +} +alias SP_MOVEDEV_PARAMS* PSP_MOVEDEV_PARAMS; + +struct SP_PROPCHANGE_PARAMS { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + DWORD StateChange; + DWORD Scope; + DWORD HwProfile; +} +alias SP_PROPCHANGE_PARAMS* PSP_PROPCHANGE_PARAMS; + +struct SP_REMOVEDEVICE_PARAMS { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + DWORD Scope; + DWORD HwProfile; +} +alias SP_REMOVEDEVICE_PARAMS* PSP_REMOVEDEVICE_PARAMS; + +struct SP_UNREMOVEDEVICE_PARAMS { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + DWORD Scope; + DWORD HwProfile; +} +alias SP_UNREMOVEDEVICE_PARAMS* PSP_UNREMOVEDEVICE_PARAMS; + +struct SP_SELECTDEVICE_PARAMS_A { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + CHAR Title[MAX_TITLE_LEN]; + CHAR Instructions[MAX_INSTRUCTION_LEN]; + CHAR ListLabel[MAX_LABEL_LEN]; + CHAR SubTitle[MAX_SUBTITLE_LEN]; + BYTE Reserved[2]; +} +alias SP_SELECTDEVICE_PARAMS_A* PSP_SELECTDEVICE_PARAMS_A; + +struct SP_SELECTDEVICE_PARAMS_W { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + WCHAR Title[MAX_TITLE_LEN]; + WCHAR Instructions[MAX_INSTRUCTION_LEN]; + WCHAR ListLabel[MAX_LABEL_LEN]; + WCHAR SubTitle[MAX_SUBTITLE_LEN]; +} +alias SP_SELECTDEVICE_PARAMS_W* PSP_SELECTDEVICE_PARAMS_W; + +extern(Windows) alias BOOL function(PVOID,DWORD) PDETECT_PROGRESS_NOTIFY; + +struct SP_DETECTDEVICE_PARAMS { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + PDETECT_PROGRESS_NOTIFY DetectProgressNotify; + PVOID ProgressNotifyParam; +} +alias SP_DETECTDEVICE_PARAMS* PSP_DETECTDEVICE_PARAMS; + +struct SP_INSTALLWIZARD_DATA { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + DWORD Flags; + HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES]; + DWORD NumDynamicPages; + DWORD DynamicPageFlags; + DWORD PrivateFlags; + LPARAM PrivateData; + HWND hwndWizardDlg; +} +alias SP_INSTALLWIZARD_DATA* PSP_INSTALLWIZARD_DATA; + +struct SP_NEWDEVICEWIZARD_DATA { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + DWORD Flags; + HPROPSHEETPAGE DynamicPages[MAX_INSTALLWIZARD_DYNAPAGES]; + DWORD NumDynamicPages; + HWND hwndWizardDlg; +} +alias SP_NEWDEVICEWIZARD_DATA* PSP_NEWDEVICEWIZARD_DATA; +alias SP_NEWDEVICEWIZARD_DATA SP_ADDPROPERTYPAGE_DATA; +alias SP_NEWDEVICEWIZARD_DATA* PSP_ADDPROPERTYPAGE_DATA; + +struct SP_TROUBLESHOOTER_PARAMS_A { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + CHAR ChmFile[MAX_PATH]; + CHAR HtmlTroubleShooter[MAX_PATH]; +} +alias SP_TROUBLESHOOTER_PARAMS_A* PSP_TROUBLESHOOTER_PARAMS_A; + +struct SP_TROUBLESHOOTER_PARAMS_W { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + WCHAR ChmFile[MAX_PATH]; + WCHAR HtmlTroubleShooter[MAX_PATH]; +} +alias SP_TROUBLESHOOTER_PARAMS_W* PSP_TROUBLESHOOTER_PARAMS_W; + +struct SP_POWERMESSAGEWAKE_PARAMS_A { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + CHAR PowerMessageWake[LINE_LEN*2]; +} +alias SP_POWERMESSAGEWAKE_PARAMS_A* PSP_POWERMESSAGEWAKE_PARAMS_A; + +struct SP_POWERMESSAGEWAKE_PARAMS_W { + SP_CLASSINSTALL_HEADER ClassInstallHeader; + WCHAR PowerMessageWake[LINE_LEN*2]; +} +alias SP_POWERMESSAGEWAKE_PARAMS_W* PSP_POWERMESSAGEWAKE_PARAMS_W; + +struct SP_DRVINFO_DATA_V2_A { + DWORD cbSize = SP_DRVINFO_DATA_V2_A.sizeof; + DWORD DriverType; + ULONG_PTR Reserved; + CHAR Description[LINE_LEN]; + CHAR MfgName[LINE_LEN]; + CHAR ProviderName[LINE_LEN]; + FILETIME DriverDate; + DWORDLONG DriverVersion; +} +alias SP_DRVINFO_DATA_V2_A* PSP_DRVINFO_DATA_V2_A; + +struct SP_DRVINFO_DATA_V2_W { + DWORD cbSize = SP_DRVINFO_DATA_V2_A.sizeof; + DWORD DriverType; + ULONG_PTR Reserved; + WCHAR Description[LINE_LEN]; + WCHAR MfgName[LINE_LEN]; + WCHAR ProviderName[LINE_LEN]; + FILETIME DriverDate; + DWORDLONG DriverVersion; +} +alias SP_DRVINFO_DATA_V2_W* PSP_DRVINFO_DATA_V2_W; + +struct SP_DRVINFO_DATA_V1_A { + DWORD cbSize = SP_DRVINFO_DATA_V1_A.sizeof; + DWORD DriverType; + ULONG_PTR Reserved; + CHAR Description[LINE_LEN]; + CHAR MfgName[LINE_LEN]; + CHAR ProviderName[LINE_LEN]; +} +alias SP_DRVINFO_DATA_V1_A* PSP_DRVINFO_DATA_V1_A; + +struct SP_DRVINFO_DATA_V1_W { + DWORD cbSize = SP_DRVINFO_DATA_V1_W.sizeof; + DWORD DriverType; + ULONG_PTR Reserved; + WCHAR Description[LINE_LEN]; + WCHAR MfgName[LINE_LEN]; + WCHAR ProviderName[LINE_LEN]; +} +alias SP_DRVINFO_DATA_V1_W* PSP_DRVINFO_DATA_V1_W; + +version (Unicode) { + alias SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_V1; + alias SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_V2; +} else { + alias SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_V1; + alias SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_V2; +} +alias SP_DRVINFO_DATA_V1* PSP_DRVINFO_DATA_V1; +alias SP_DRVINFO_DATA_V2* PSP_DRVINFO_DATA_V2; + +static if(USE_SP_DRVINFO_DATA_V1) { + alias SP_DRVINFO_DATA_V1_A SP_DRVINFO_DATA_A; + alias SP_DRVINFO_DATA_V1_A* PSP_DRVINFO_DATA_A; + alias SP_DRVINFO_DATA_V1_W SP_DRVINFO_DATA_W; + alias SP_DRVINFO_DATA_V1_W* PSP_DRVINFO_DATA_W; + alias SP_DRVINFO_DATA_V1 SP_DRVINFO_DATA; + alias SP_DRVINFO_DATA_V1* PSP_DRVINFO_DATA; +} else { + alias SP_DRVINFO_DATA_V2_A SP_DRVINFO_DATA_A; + alias SP_DRVINFO_DATA_V2_A* PSP_DRVINFO_DATA_A; + alias SP_DRVINFO_DATA_V2_W SP_DRVINFO_DATA_W; + alias SP_DRVINFO_DATA_V2_W* PSP_DRVINFO_DATA_W; + alias SP_DRVINFO_DATA_V2 SP_DRVINFO_DATA; + alias SP_DRVINFO_DATA_V2* PSP_DRVINFO_DATA; +} + +extern(Windows) alias DWORD function(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINFO_DATA,PVOID) PSP_DETSIG_CMPPROC; + +struct SP_DRVINFO_DETAIL_DATA_A { + DWORD cbSize = SP_DRVINFO_DETAIL_DATA_A.sizeof; + FILETIME InfDate; + DWORD CompatIDsOffset; + DWORD CompatIDsLength; + ULONG_PTR Reserved; + CHAR SectionName[LINE_LEN]; + CHAR InfFileName[MAX_PATH]; + CHAR DrvDescription[LINE_LEN]; + CHAR _HardwareID[1]; + CHAR* HardwareID() { return _HardwareID.ptr; } +} +alias SP_DRVINFO_DETAIL_DATA_A* PSP_DRVINFO_DETAIL_DATA_A; + +struct SP_DRVINFO_DETAIL_DATA_W { + DWORD cbSize = SP_DRVINFO_DETAIL_DATA_W.sizeof; + FILETIME InfDate; + DWORD CompatIDsOffset; + DWORD CompatIDsLength; + ULONG_PTR Reserved; + WCHAR SectionName[LINE_LEN]; + WCHAR InfFileName[MAX_PATH]; + WCHAR DrvDescription[LINE_LEN]; + WCHAR _HardwareID[1]; + WCHAR* HardwareID() { return _HardwareID.ptr; } +} +alias SP_DRVINFO_DETAIL_DATA_W* PSP_DRVINFO_DETAIL_DATA_W; + +struct SP_DRVINSTALL_PARAMS { + DWORD cbSize = SP_DRVINSTALL_PARAMS.sizeof; + DWORD Rank; + DWORD Flags; + DWORD_PTR PrivateData; + DWORD Reserved; +} +alias SP_DRVINSTALL_PARAMS* PSP_DRVINSTALL_PARAMS; + +struct COINSTALLER_CONTEXT_DATA { + BOOL PostProcessing; + DWORD InstallResult; + PVOID PrivateData; +} +alias COINSTALLER_CONTEXT_DATA* PCOINSTALLER_CONTEXT_DATA; + +struct SP_CLASSIMAGELIST_DATA { + DWORD cbSize = SP_CLASSIMAGELIST_DATA.sizeof; + HIMAGELIST ImageList; + ULONG_PTR Reserved; +} +alias SP_CLASSIMAGELIST_DATA* PSP_CLASSIMAGELIST_DATA; + +struct SP_PROPSHEETPAGE_REQUEST { + DWORD cbSize = SP_PROPSHEETPAGE_REQUEST.sizeof; + DWORD PageRequested; + HDEVINFO DeviceInfoSet; + PSP_DEVINFO_DATA DeviceInfoData; +} +alias SP_PROPSHEETPAGE_REQUEST* PSP_PROPSHEETPAGE_REQUEST; + +struct SP_BACKUP_QUEUE_PARAMS_A { + DWORD cbSize = SP_BACKUP_QUEUE_PARAMS_A.sizeof; + CHAR FullInfPath[MAX_PATH]; + INT FilenameOffset; +} +alias SP_BACKUP_QUEUE_PARAMS_A* PSP_BACKUP_QUEUE_PARAMS_A; + +struct SP_BACKUP_QUEUE_PARAMS_W { + DWORD cbSize = SP_BACKUP_QUEUE_PARAMS_W.sizeof; + WCHAR FullInfPath[MAX_PATH]; + INT FilenameOffset; +} +alias SP_BACKUP_QUEUE_PARAMS_W* PSP_BACKUP_QUEUE_PARAMS_W; + +version (Unicode) { + alias SP_ORIGINAL_FILE_INFO_W SP_ORIGINAL_FILE_INFO; + alias SP_ORIGINAL_FILE_INFO_W* PSP_ORIGINAL_FILE_INFO; + alias FILEPATHS_W FILEPATHS; + alias FILEPATHS_W* PFILEPATHS; + alias SOURCE_MEDIA_W SOURCE_MEDIA; + alias SOURCE_MEDIA_W* PSOURCE_MEDIA; + alias CABINET_INFO_W CABINET_INFO; + alias CABINET_INFO_W* PCABINET_INFO; + alias FILE_IN_CABINET_INFO_W FILE_IN_CABINET_INFO; + alias FILE_IN_CABINET_INFO_W* PFILE_IN_CABINET_INFO; + alias SP_FILE_COPY_PARAMS_W SP_FILE_COPY_PARAMS; + alias SP_FILE_COPY_PARAMS_W* PSP_FILE_COPY_PARAMS; + alias SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_DEVICE_INTERFACE_DETAIL_DATA; + alias SP_DEVICE_INTERFACE_DETAIL_DATA_W* PSP_DEVICE_INTERFACE_DETAIL_DATA; + deprecated { + alias SP_DEVICE_INTERFACE_DETAIL_DATA_W SP_INTERFACE_DEVICE_DETAIL_DATA; + alias SP_DEVICE_INTERFACE_DETAIL_DATA_W* PSP_INTERFACE_DEVICE_DETAIL_DATA; + } + alias SP_DEVINFO_LIST_DETAIL_DATA_W SP_DEVINFO_LIST_DETAIL_DATA; + alias SP_DEVINFO_LIST_DETAIL_DATA_W *PSP_DEVINFO_LIST_DETAIL_DATA; + alias SP_DEVINSTALL_PARAMS_W SP_DEVINSTALL_PARAMS; + alias SP_DEVINSTALL_PARAMS_W* PSP_DEVINSTALL_PARAMS; + alias SP_SELECTDEVICE_PARAMS_W SP_SELECTDEVICE_PARAMS; + alias SP_SELECTDEVICE_PARAMS_W* PSP_SELECTDEVICE_PARAMS; + alias SP_TROUBLESHOOTER_PARAMS_W SP_TROUBLESHOOTER_PARAMS; + alias SP_TROUBLESHOOTER_PARAMS_W* PSP_TROUBLESHOOTER_PARAMS; + alias SP_POWERMESSAGEWAKE_PARAMS_W SP_POWERMESSAGEWAKE_PARAMS; + alias SP_POWERMESSAGEWAKE_PARAMS_W* PSP_POWERMESSAGEWAKE_PARAMS; + alias SP_DRVINFO_DETAIL_DATA_W SP_DRVINFO_DETAIL_DATA; + alias SP_DRVINFO_DETAIL_DATA_W* PSP_DRVINFO_DETAIL_DATA; + alias SP_BACKUP_QUEUE_PARAMS_W SP_BACKUP_QUEUE_PARAMS; + alias SP_BACKUP_QUEUE_PARAMS_W* PSP_BACKUP_QUEUE_PARAMS; +} else { + alias SP_ORIGINAL_FILE_INFO_A SP_ORIGINAL_FILE_INFO; + alias SP_ORIGINAL_FILE_INFO_A* PSP_ORIGINAL_FILE_INFO; + alias FILEPATHS_A FILEPATHS; + alias FILEPATHS_A* PFILEPATHS; + alias SOURCE_MEDIA_A SOURCE_MEDIA; + alias SOURCE_MEDIA_A* PSOURCE_MEDIA; + alias CABINET_INFO_A CABINET_INFO; + alias CABINET_INFO_A* PCABINET_INFO; + alias FILE_IN_CABINET_INFO_A FILE_IN_CABINET_INFO; + alias FILE_IN_CABINET_INFO_A* PFILE_IN_CABINET_INFO; + alias SP_FILE_COPY_PARAMS_A SP_FILE_COPY_PARAMS; + alias SP_FILE_COPY_PARAMS_A* PSP_FILE_COPY_PARAMS; + alias SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_DEVICE_INTERFACE_DETAIL_DATA; + alias SP_DEVICE_INTERFACE_DETAIL_DATA_A* PSP_DEVICE_INTERFACE_DETAIL_DATA; + deprecated { + alias SP_DEVICE_INTERFACE_DETAIL_DATA_A SP_INTERFACE_DEVICE_DETAIL_DATA; + alias SP_DEVICE_INTERFACE_DETAIL_DATA_A* PSP_INTERFACE_DEVICE_DETAIL_DATA; + } + alias SP_DEVINFO_LIST_DETAIL_DATA_A SP_DEVINFO_LIST_DETAIL_DATA; + alias SP_DEVINFO_LIST_DETAIL_DATA_A* PSP_DEVINFO_LIST_DETAIL_DATA; + alias SP_DEVINSTALL_PARAMS_A SP_DEVINSTALL_PARAMS; + alias SP_DEVINSTALL_PARAMS_A* PSP_DEVINSTALL_PARAMS; + alias SP_SELECTDEVICE_PARAMS_A SP_SELECTDEVICE_PARAMS; + alias SP_SELECTDEVICE_PARAMS_A* PSP_SELECTDEVICE_PARAMS; + alias SP_TROUBLESHOOTER_PARAMS_A SP_TROUBLESHOOTER_PARAMS; + alias SP_TROUBLESHOOTER_PARAMS_A* PSP_TROUBLESHOOTER_PARAMS; + alias SP_POWERMESSAGEWAKE_PARAMS_A SP_POWERMESSAGEWAKE_PARAMS; + alias SP_POWERMESSAGEWAKE_PARAMS_A* PSP_POWERMESSAGEWAKE_PARAMS; + alias SP_DRVINFO_DETAIL_DATA_A SP_DRVINFO_DETAIL_DATA; + alias SP_DRVINFO_DETAIL_DATA_A* PSP_DRVINFO_DETAIL_DATA; + alias SP_BACKUP_QUEUE_PARAMS_A SP_BACKUP_QUEUE_PARAMS; + alias SP_BACKUP_QUEUE_PARAMS_A* PSP_BACKUP_QUEUE_PARAMS; +} + +extern (Windows) { + BOOL SetupAddInstallSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,PVOID,UINT); + BOOL SetupAddInstallSectionToDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,PVOID,UINT); + BOOL SetupAddSectionToDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,UINT,PVOID,UINT); + BOOL SetupAddSectionToDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,UINT,PVOID,UINT); + BOOL SetupAddToDiskSpaceListA(HDSKSPC,PCSTR,LONGLONG,UINT,PVOID,UINT); + BOOL SetupAddToDiskSpaceListW(HDSKSPC,PCWSTR,LONGLONG,UINT,PVOID,UINT); + BOOL SetupAddToSourceListA(DWORD,PCSTR); + BOOL SetupAddToSourceListW(DWORD,PCWSTR); + BOOL SetupQuerySourceListA(DWORD,PCSTR**List,PUINT); + BOOL SetupQuerySourceListW(DWORD,PCWSTR**List,PUINT); + BOOL SetupFreeSourceListA(PCSTR**List,UINT); + BOOL SetupFreeSourceListW(PCWSTR**List,UINT); + BOOL SetupAdjustDiskSpaceListA(HDSKSPC,LPCSTR,LONGLONG,PVOID,UINT); + BOOL SetupAdjustDiskSpaceListW(HDSKSPC,LPCWSTR,LONGLONG,PVOID,UINT); + UINT SetupBackupErrorA(HWND,PCSTR,PCSTR,PCSTR,UINT,DWORD); + UINT SetupBackupErrorW(HWND,PCWSTR,PCWSTR,PCWSTR,UINT,DWORD); + BOOL SetupCancelTemporary(); + BOOL SetupCloseFileQueue(HSPFILEQ); + VOID SetupCloseInfFile(HINF); + VOID SetupCloseLog(); + BOOL SetupCommitFileQueueA(HWND,HSPFILEQ,PSP_FILE_CALLBACK_A,PVOID); + BOOL SetupCommitFileQueueW(HWND,HSPFILEQ,PSP_FILE_CALLBACK_W,PVOID); + UINT SetupCopyErrorA(HWND,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,UINT,DWORD,PSTR,DWORD,PDWORD); + UINT SetupCopyErrorW(HWND,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,UINT,DWORD,PWSTR,DWORD,PDWORD); + BOOL SetupCopyOEMInfA(PCSTR,PCSTR,DWORD,DWORD,PSTR,DWORD,PDWORD,PSTR*); + BOOL SetupCopyOEMInfW(PCWSTR,PCWSTR,DWORD,DWORD,PWSTR,DWORD,PDWORD,PWSTR*); + HDSKSPC SetupCreateDiskSpaceListA(PVOID,DWORD,UINT); + HDSKSPC SetupCreateDiskSpaceListW(PVOID,DWORD,UINT); + DWORD SetupDecompressOrCopyFileA(PCSTR,PCSTR,PUINT); + DWORD SetupDecompressOrCopyFileW(PCWSTR,PCWSTR,PUINT); + UINT SetupDefaultQueueCallbackA(PVOID,UINT,UINT_PTR,UINT_PTR); + UINT SetupDefaultQueueCallbackW(PVOID,UINT,UINT_PTR,UINT_PTR); + UINT SetupDeleteErrorA(HWND,PCSTR,PCSTR,UINT,DWORD); + UINT SetupDeleteErrorW(HWND,PCWSTR,PCWSTR,UINT,DWORD); + BOOL SetupDestroyDiskSpaceList(HDSKSPC); + BOOL SetupDiAskForOEMDisk(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiBuildClassInfoList(DWORD,LPGUID,DWORD,PDWORD); + BOOL SetupDiBuildClassInfoListExA(DWORD,LPGUID,DWORD,PDWORD,PCSTR,PVOID); + BOOL SetupDiBuildClassInfoListExW(DWORD,LPGUID,DWORD,PDWORD,PCWSTR,PVOID); + BOOL SetupDiBuildDriverInfoList(HDEVINFO,PSP_DEVINFO_DATA,DWORD); + BOOL SetupDiCallClassInstaller(DI_FUNCTION,HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiCancelDriverInfoSearch(HDEVINFO); + BOOL SetupDiChangeState(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiClassGuidsFromNameA(PCSTR,LPGUID,DWORD,PDWORD); + BOOL SetupDiClassGuidsFromNameW(PCWSTR,LPGUID,DWORD,PDWORD); + BOOL SetupDiClassGuidsFromNameExA(PCSTR,LPGUID,DWORD,PDWORD,PCSTR,PVOID); + BOOL SetupDiClassGuidsFromNameExW(PCWSTR,LPGUID,DWORD,PDWORD,PCWSTR,PVOID); + BOOL SetupDiClassNameFromGuidA(GUID*,PSTR,DWORD,PDWORD); + BOOL SetupDiClassNameFromGuidW(GUID*,PWSTR,DWORD,PDWORD); + BOOL SetupDiClassNameFromGuidExA(GUID*,PSTR,DWORD,PDWORD,PCSTR,PVOID); + BOOL SetupDiClassNameFromGuidExW(GUID*,PWSTR,DWORD,PDWORD,PCWSTR,PVOID); + BOOL SetupDiCreateDeviceInfoA(HDEVINFO,PCSTR,GUID*,PCSTR,HWND,DWORD,PSP_DEVINFO_DATA); + BOOL SetupDiCreateDeviceInfoW(HDEVINFO,PCWSTR,GUID*,PCWSTR,HWND,DWORD,PSP_DEVINFO_DATA); + HDEVINFO SetupDiCreateDeviceInfoList(GUID*,HWND); + HDEVINFO SetupDiCreateDeviceInfoListExA(GUID*,HWND,PCSTR,PVOID); + HDEVINFO SetupDiCreateDeviceInfoListExW(GUID*,HWND,PCWSTR,PVOID); + BOOL SetupDiCreateDeviceInterfaceA(HDEVINFO,PSP_DEVINFO_DATA,GUID*,PCSTR,DWORD,PSP_DEVICE_INTERFACE_DATA); + BOOL SetupDiCreateDeviceInterfaceW(HDEVINFO,PSP_DEVINFO_DATA,GUID*,PCWSTR,DWORD,PSP_DEVICE_INTERFACE_DATA); + HKEY SetupDiCreateDeviceInterfaceRegKeyA(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD,REGSAM,HINF,PCSTR); + HKEY SetupDiCreateDeviceInterfaceRegKeyW(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD,REGSAM,HINF,PCWSTR); + HKEY SetupDiCreateDevRegKeyA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD,HINF,PCSTR); + HKEY SetupDiCreateDevRegKeyW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD,HINF,PCWSTR); + BOOL SetupDiDeleteDeviceInfo(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiDeleteDeviceInterfaceData(HDEVINFO,PSP_DEVICE_INTERFACE_DATA); + BOOL SetupDiDeleteDeviceInterfaceRegKey(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD); + BOOL SetupDiDeleteDevRegKey(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD); + BOOL SetupDiDestroyClassImageList(PSP_CLASSIMAGELIST_DATA); + BOOL SetupDiDestroyDeviceInfoList(HDEVINFO); + BOOL SetupDiDestroyDriverInfoList(HDEVINFO,PSP_DEVINFO_DATA,DWORD); + INT SetupDiDrawMiniIcon(HDC,RECT,INT,DWORD); + BOOL SetupDiEnumDeviceInfo(HDEVINFO,DWORD,PSP_DEVINFO_DATA); + BOOL SetupDiEnumDeviceInterfaces(HDEVINFO,PSP_DEVINFO_DATA,GUID*,DWORD,PSP_DEVICE_INTERFACE_DATA); + BOOL SetupDiEnumDriverInfoA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,PSP_DRVINFO_DATA_A); + BOOL SetupDiEnumDriverInfoW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,PSP_DRVINFO_DATA_W); + BOOL SetupDiGetActualSectionToInstallA(HINF,PCSTR,PSTR,DWORD,PDWORD,PSTR*); + BOOL SetupDiGetActualSectionToInstallW(HINF,PCWSTR,PWSTR,DWORD,PDWORD,PWSTR*); + BOOL SetupDiGetClassBitmapIndex(GUID*,PINT); + BOOL SetupDiGetClassDescriptionA(GUID*,PSTR,DWORD,PDWORD); + BOOL SetupDiGetClassDescriptionW(GUID*,PWSTR,DWORD,PDWORD); + BOOL SetupDiGetClassDescriptionExA(GUID*,PSTR,DWORD,PDWORD,PCSTR,PVOID); + BOOL SetupDiGetClassDescriptionExW(GUID*,PWSTR,DWORD,PDWORD,PCWSTR,PVOID); + BOOL SetupDiGetClassDevPropertySheetsA(HDEVINFO,PSP_DEVINFO_DATA,LPPROPSHEETHEADERA,DWORD,PDWORD,DWORD); + BOOL SetupDiGetClassDevPropertySheetsW(HDEVINFO,PSP_DEVINFO_DATA,LPPROPSHEETHEADERW,DWORD,PDWORD,DWORD); + HDEVINFO SetupDiGetClassDevsA(GUID*,PCSTR,HWND,DWORD); + HDEVINFO SetupDiGetClassDevsW(GUID*,PCWSTR,HWND,DWORD); + HDEVINFO SetupDiGetClassDevsExA(GUID*,PCSTR,HWND,DWORD,HDEVINFO,PCSTR,PVOID); + HDEVINFO SetupDiGetClassDevsExW(GUID*,PCWSTR,HWND,DWORD,HDEVINFO,PCWSTR,PVOID); + BOOL SetupDiGetClassImageIndex(PSP_CLASSIMAGELIST_DATA,GUID*,PINT); + BOOL SetupDiGetClassImageList(PSP_CLASSIMAGELIST_DATA); + BOOL SetupDiGetClassImageListExA(PSP_CLASSIMAGELIST_DATA,PCSTR,PVOID); + BOOL SetupDiGetClassImageListExW(PSP_CLASSIMAGELIST_DATA,PCWSTR,PVOID); + BOOL SetupDiGetClassInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD,PDWORD); + BOOL SetupDiGetClassInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD,PDWORD); + BOOL SetupDiGetClassRegistryPropertyA(LPGUID,DWORD,PDWORD,PBYTE,DWORD,PDWORD,PCSTR,PVOID); + BOOL SetupDiGetClassRegistryPropertyW(LPGUID,DWORD,PDWORD,PBYTE,DWORD,PDWORD,PCWSTR,PVOID); + BOOL SetupDiGetDeviceInfoListClass(HDEVINFO,LPGUID); + BOOL SetupDiGetDeviceInfoListDetailA(HDEVINFO,PSP_DEVINFO_LIST_DETAIL_DATA_A); + BOOL SetupDiGetDeviceInfoListDetailW(HDEVINFO,PSP_DEVINFO_LIST_DETAIL_DATA_W); + BOOL SetupDiGetDeviceInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_A); + BOOL SetupDiGetDeviceInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_W); + BOOL SetupDiGetDeviceInstanceIdA(HDEVINFO,PSP_DEVINFO_DATA,PSTR,DWORD,PDWORD); + BOOL SetupDiGetDeviceInstanceIdW(HDEVINFO,PSP_DEVINFO_DATA,PWSTR,DWORD,PDWORD); + BOOL SetupDiGetDeviceInterfaceAlias(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,GUID*,PSP_DEVICE_INTERFACE_DATA); + BOOL SetupDiGetDeviceInterfaceDetailA(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,PSP_DEVICE_INTERFACE_DETAIL_DATA_A,DWORD,PDWORD,PSP_DEVINFO_DATA); + BOOL SetupDiGetDeviceInterfaceDetailW(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,PSP_DEVICE_INTERFACE_DETAIL_DATA_W,DWORD,PDWORD,PSP_DEVINFO_DATA); + BOOL SetupDiGetDeviceRegistryPropertyA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,PDWORD,PBYTE,DWORD,PDWORD); + BOOL SetupDiGetDeviceRegistryPropertyW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,PDWORD,PBYTE,DWORD,PDWORD); + BOOL SetupDiGetDriverInfoDetailA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A,PSP_DRVINFO_DETAIL_DATA_A,DWORD,PDWORD); + BOOL SetupDiGetDriverInfoDetailW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W,PSP_DRVINFO_DETAIL_DATA_W,DWORD,PDWORD); + BOOL SetupDiGetDriverInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A,PSP_DRVINSTALL_PARAMS); + BOOL SetupDiGetDriverInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W,PSP_DRVINSTALL_PARAMS); + BOOL SetupDiGetHwProfileFriendlyNameA(DWORD,PSTR,DWORD,PDWORD); + BOOL SetupDiGetHwProfileFriendlyNameExA(DWORD,PSTR,DWORD,PDWORD,PCSTR,PVOID); + BOOL SetupDiGetHwProfileFriendlyNameExW(DWORD,PWSTR,DWORD,PDWORD,PCWSTR,PVOID); + BOOL SetupDiGetHwProfileFriendlyNameW(DWORD,PWSTR,DWORD,PDWORD); + BOOL SetupDiGetHwProfileList(PDWORD,DWORD,PDWORD,PDWORD); + BOOL SetupDiGetHwProfileListExA(PDWORD,DWORD,PDWORD,PDWORD,PCSTR,PVOID); + BOOL SetupDiGetHwProfileListExW(PDWORD,DWORD,PDWORD,PDWORD,PCWSTR,PVOID); + BOOL SetupDiGetINFClassA(PCSTR,LPGUID,PSTR,DWORD,PDWORD); + BOOL SetupDiGetINFClassW(PCWSTR,LPGUID,PWSTR,DWORD,PDWORD); + BOOL SetupDiGetSelectedDevice(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiGetSelectedDriverA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A); + BOOL SetupDiGetSelectedDriverW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W); + HPROPSHEETPAGE SetupDiGetWizardage(HDEVINFO,PSP_DEVINFO_DATA,PSP_INSTALLWIZARD_DATA,DWORD,DWORD); + BOOL SetupDiInstallClassA(HWND,PCSTR,DWORD,HSPFILEQ); + BOOL SetupDiInstallClassW(HWND,PCWSTR,DWORD,HSPFILEQ); + BOOL SetupDiInstallClassExA(HWND,PCSTR,DWORD,HSPFILEQ,GUID*,PVOID,PVOID); + BOOL SetupDiInstallClassExW(HWND,PCWSTR,DWORD,HSPFILEQ,GUID*,PVOID,PVOID); + BOOL SetupDiInstallDevice(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiInstallDeviceInterfaces(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiInstallDriverFiles(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiLoadClassIcon(GUID*,HICON*,PINT); + BOOL SetupDiMoveDuplicateDevice(HDEVINFO,PSP_DEVINFO_DATA); + HKEY SetupDiOpenClassRegKey(GUID*,REGSAM); + HKEY SetupDiOpenClassRegKeyExA(GUID*,REGSAM,DWORD,PCSTR,PVOID); + HKEY SetupDiOpenClassRegKeyExW(GUID*,REGSAM,DWORD,PCWSTR,PVOID); + BOOL SetupDiOpenDeviceInfoA(HDEVINFO,PCSTR,HWND,DWORD,PSP_DEVINFO_DATA); + BOOL SetupDiOpenDeviceInfoW(HDEVINFO,PCWSTR,HWND,DWORD,PSP_DEVINFO_DATA); + BOOL SetupDiOpenDeviceInterfaceA(HDEVINFO,PCSTR,DWORD,PSP_DEVICE_INTERFACE_DATA); + BOOL SetupDiOpenDeviceInterfaceW(HDEVINFO,PCWSTR,DWORD,PSP_DEVICE_INTERFACE_DATA); + HKEY SetupDiOpenDeviceInterfaceRegKey(HDEVINFO,PSP_DEVICE_INTERFACE_DATA,DWORD,REGSAM); + HKEY SetupDiOpenDevRegKey(HDEVINFO,PSP_DEVINFO_DATA,DWORD,DWORD,DWORD,REGSAM); + BOOL SetupDiRegisterCoDeviceInstallers(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiRegisterDeviceInfo(HDEVINFO,PSP_DEVINFO_DATA,DWORD,PSP_DETSIG_CMPPROC,PVOID,PSP_DEVINFO_DATA); + BOOL SetupDiRemoveDevice(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiRemoveDeviceInterface(HDEVINFO,PSP_DEVICE_INTERFACE_DATA); + BOOL SetupDiSelectBestCompatDrv(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiSelectDevice(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiSelectOEMDrv(HWND,HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiSetClassInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD); + BOOL SetupDiSetClassInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_CLASSINSTALL_HEADER,DWORD); + BOOL SetupDiSetClassRegistryPropertyA(LPGUID,DWORD,BYTE*,DWORD,PCSTR,PVOID); + BOOL SetupDiSetClassRegistryPropertyW(LPGUID,DWORD,BYTE*,DWORD,PCWSTR,PVOID); + BOOL SetupDiSetDeviceInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_A); + BOOL SetupDiSetDeviceInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DEVINSTALL_PARAMS_W); + BOOL SetupDiSetDeviceRegistryPropertyA(HDEVINFO,PSP_DEVINFO_DATA,DWORD,BYTE*,DWORD); + BOOL SetupDiSetDeviceRegistryPropertyW(HDEVINFO,PSP_DEVINFO_DATA,DWORD,BYTE*,DWORD); + BOOL SetupDiSetDriverInstallParamsA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A,PSP_DRVINSTALL_PARAMS); + BOOL SetupDiSetDriverInstallParamsW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W,PSP_DRVINSTALL_PARAMS); + BOOL SetupDiSetSelectedDevice(HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupDiSetSelectedDriverA(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_A); + BOOL SetupDiSetSelectedDriverW(HDEVINFO,PSP_DEVINFO_DATA,PSP_DRVINFO_DATA_W); + BOOL SetupDiUnremoveDevice(HDEVINFO,PSP_DEVINFO_DATA); + HDSKSPC SetupDuplicateDiskSpaceListA(HDSKSPC,PVOID,DWORD,UINT); + HDSKSPC SetupDuplicateDiskSpaceListW(HDSKSPC,PVOID,DWORD,UINT); + BOOL SetupFindFirstLineA(HINF,PCSTR,PCSTR,PINFCONTEXT); + BOOL SetupFindFirstLineW(HINF,PCWSTR,PCWSTR,PINFCONTEXT); + BOOL SetupFindNextLine(PINFCONTEXT,PINFCONTEXT); + BOOL SetupFindNextMatchLineA(PINFCONTEXT,PCSTR,PINFCONTEXT); + BOOL SetupFindNextMatchLineW(PINFCONTEXT,PCWSTR,PINFCONTEXT); + BOOL SetupFreeA(PCSTR**,UINT); + BOOL SetupFreeW(PCWSTR**,UINT); + BOOL SetupGetBackupInformationA(HSPFILEQ,PSP_BACKUP_QUEUE_PARAMS_A); + BOOL SetupGetBackupInformationW(HSPFILEQ,PSP_BACKUP_QUEUE_PARAMS_W); + BOOL SetupGetBinaryField(PINFCONTEXT,DWORD,PBYTE,DWORD,LPDWORD); + DWORD SetupGetFieldCount(PINFCONTEXT); + DWORD SetupGetFileCompressionInfoA(PCSTR,PSTR*,PDWORD,PDWORD,PUINT); + DWORD SetupGetFileCompressionInfoW(PCWSTR,PWSTR*,PDWORD,PDWORD,PUINT); + BOOL SetupGetInfFileListA(PCSTR,DWORD,PSTR,DWORD,PDWORD); + BOOL SetupGetInfFileListW(PCWSTR,DWORD,PWSTR,DWORD,PDWORD); + BOOL SetupGetInfInformationA(LPCVOID,DWORD,PSP_INF_INFORMATION,DWORD,PDWORD); + BOOL SetupGetInfInformationW(LPCVOID,DWORD,PSP_INF_INFORMATION,DWORD,PDWORD); + BOOL SetupGetIntField(PINFCONTEXT,DWORD,PINT); + BOOL SetupGetLineByIndexA(HINF,PCSTR,DWORD,PINFCONTEXT); + BOOL SetupGetLineByIndexW(HINF,PCWSTR,DWORD,PINFCONTEXT); + LONG SetupGetLineCountA(HINF,PCSTR); + LONG SetupGetLineCountW(HINF,PCWSTR); + BOOL SetupGetLineTextA(PINFCONTEXT,HINF,PCSTR,PCSTR,PSTR,DWORD,PDWORD); + BOOL SetupGetLineTextW(PINFCONTEXT,HINF,PCWSTR,PCWSTR,PWSTR,DWORD,PDWORD); + BOOL SetupGetMultiSzFieldA(PINFCONTEXT,DWORD,PSTR,DWORD,LPDWORD); + BOOL SetupGetMultiSzFieldW(PINFCONTEXT,DWORD,PWSTR,DWORD,LPDWORD); + BOOL SetupGetSourceFileLocationA(HINF,PINFCONTEXT,PCSTR,PUINT,PSTR,DWORD,PDWORD); + BOOL SetupGetSourceFileLocationW(HINF,PINFCONTEXT,PCWSTR,PUINT,PWSTR,DWORD,PDWORD); + BOOL SetupGetSourceFileSizeA(HINF,PINFCONTEXT,PCSTR,PCSTR,PDWORD,UINT); + BOOL SetupGetSourceFileSizeW(HINF,PINFCONTEXT,PCWSTR,PCWSTR,PDWORD,UINT); + BOOL SetupGetSourceInfoA(HINF,UINT,UINT,PSTR,DWORD,PDWORD); + BOOL SetupGetSourceInfoW(HINF,UINT,UINT,PWSTR,DWORD,PDWORD); + BOOL SetupGetStringFieldA(PINFCONTEXT,DWORD,PSTR,DWORD,PDWORD); + BOOL SetupGetStringFieldW(PINFCONTEXT,DWORD,PWSTR,DWORD,PDWORD); + BOOL SetupGetTargetPathA(HINF,PINFCONTEXT,PCSTR,PSTR,DWORD,PDWORD); + BOOL SetupGetTargetPathW(HINF,PINFCONTEXT,PCWSTR,PWSTR,DWORD,PDWORD); + PVOID SetupInitDefaultQueueCallback(HWND); + PVOID SetupInitDefaultQueueCallbackEx(HWND,HWND,UINT,DWORD,PVOID); + HSPFILELOG SetupInitializeFileLogA(PCSTR,DWORD); + HSPFILELOG SetupInitializeFileLogW(PCWSTR,DWORD); + BOOL SetupInstallFileA(HINF,PINFCONTEXT,PCSTR,PCSTR,PCSTR,DWORD,PSP_FILE_CALLBACK_A,PVOID); + BOOL SetupInstallFileW(HINF,PINFCONTEXT,PCWSTR,PCWSTR,PCWSTR,DWORD,PSP_FILE_CALLBACK_W,PVOID); + BOOL SetupInstallFileExA(HINF,PINFCONTEXT,PCSTR,PCSTR,PCSTR,DWORD,PSP_FILE_CALLBACK_A,PVOID,PBOOL); + BOOL SetupInstallFileExW(HINF,PINFCONTEXT,PCWSTR,PCWSTR,PCWSTR,DWORD,PSP_FILE_CALLBACK_W,PVOID,PBOOL); + BOOL SetupInstallFilesFromInfSectionA(HINF,HINF,HSPFILEQ,PCSTR,PCSTR,UINT); + BOOL SetupInstallFilesFromInfSectionW(HINF,HINF,HSPFILEQ,PCWSTR,PCWSTR,UINT); + BOOL SetupInstallFromInfSectionA(HWND,HINF,PCSTR,UINT,HKEY,PCSTR,UINT,PSP_FILE_CALLBACK_A,PVOID,HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupInstallFromInfSectionW(HWND,HINF,PCWSTR,UINT,HKEY,PCWSTR,UINT,PSP_FILE_CALLBACK_W,PVOID,HDEVINFO,PSP_DEVINFO_DATA); + BOOL SetupInstallServicesFromInfSectionA(HINF,PCSTR,DWORD); + BOOL SetupInstallServicesFromInfSectionW(HINF,PCWSTR,DWORD); + BOOL SetupInstallServicesFromInfSectionExA(HINF,PCSTR,DWORD,HDEVINFO,PSP_DEVINFO_DATA,PVOID,PVOID); + BOOL SetupInstallServicesFromInfSectionExW(HINF,PCWSTR,DWORD,HDEVINFO,PSP_DEVINFO_DATA,PVOID,PVOID); + BOOL SetupIterateCabinetA(PCSTR,DWORD,PSP_FILE_CALLBACK_A,PVOID); + BOOL SetupIterateCabinetW(PCWSTR,DWORD,PSP_FILE_CALLBACK_W,PVOID); + BOOL SetupLogErrorA(LPCSTR,LogSeverity); + BOOL SetupLogErrorW(LPCWSTR,LogSeverity); + BOOL SetupLogFileA(HSPFILELOG,PCSTR,PCSTR,PCSTR,DWORD,PCSTR,PCSTR,PCSTR,DWORD); + BOOL SetupLogFileW(HSPFILELOG,PCWSTR,PCWSTR,PCWSTR,DWORD,PCWSTR,PCWSTR,PCWSTR,DWORD); + BOOL SetupOpenAppendInfFileA(PCSTR,HINF,PUINT); + BOOL SetupOpenAppendInfFileW(PCWSTR,HINF,PUINT); + HSPFILEQ SetupOpenFileQueue(); + HINF SetupOpenInfFileA(PCSTR,PCSTR,DWORD,PUINT); + HINF SetupOpenInfFileW(PCWSTR,PCWSTR,DWORD,PUINT); + BOOL SetupOpenLog(BOOL); + HINF SetupOpenMasterInf(); + UINT SetupPromptForDiskA(HWND,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD,PSTR,DWORD,PDWORD); + UINT SetupPromptForDiskW(HWND,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD,PWSTR,DWORD,PDWORD); + INT SetupPromptReboot(HSPFILEQ,HWND,BOOL); + BOOL SetupQueryA(DWORD,PCSTR**,PUINT); + BOOL SetupQueryW(DWORD,PCWSTR**,PUINT); + BOOL SetupQueryDrivesInDiskSpaceListA(HDSKSPC,PSTR,DWORD,PDWORD); + BOOL SetupQueryDrivesInDiskSpaceListW(HDSKSPC,PWSTR,DWORD,PDWORD); + BOOL SetupQueryFileLogA(HSPFILELOG,PCSTR,PCSTR,SetupFileLogInfo,PSTR,DWORD,PDWORD); + BOOL SetupQueryFileLogW(HSPFILELOG,PCWSTR,PCWSTR,SetupFileLogInfo,PWSTR,DWORD,PDWORD); + BOOL SetupQueryInfFileInformationA(PSP_INF_INFORMATION,UINT,PSTR,DWORD,PDWORD); + BOOL SetupQueryInfFileInformationW(PSP_INF_INFORMATION,UINT,PWSTR,DWORD,PDWORD); + BOOL SetupQueryInfOriginalFileInformationA(PSP_INF_INFORMATION,UINT,PSP_ALTPLATFORM_INFO,PSP_ORIGINAL_FILE_INFO_A); + BOOL SetupQueryInfOriginalFileInformationW(PSP_INF_INFORMATION,UINT,PSP_ALTPLATFORM_INFO,PSP_ORIGINAL_FILE_INFO_W); + BOOL SetupQueryInfVersionInformationA(PSP_INF_INFORMATION,UINT,PSTR,PSTR,DWORD,PDWORD); + BOOL SetupQueryInfVersionInformationW(PSP_INF_INFORMATION,UINT,PCWSTR,PWSTR,DWORD,PDWORD); + BOOL SetupQuerySpaceRequiredOnDriveA(HDSKSPC,PCSTR,LONGLONG*,PVOID,UINT); + BOOL SetupQuerySpaceRequiredOnDriveW(HDSKSPC,PCWSTR,LONGLONG*,PVOID,UINT); + BOOL SetupQueueCopyA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,PCSTR,DWORD); + BOOL SetupQueueCopyW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,PCWSTR,DWORD); + BOOL SetupQueueCopyIndirectA(PSP_FILE_COPY_PARAMS_A); + BOOL SetupQueueCopyIndirectW(PSP_FILE_COPY_PARAMS_W); + BOOL SetupQueueCopySectionA(HSPFILEQ,PCSTR,HINF,HINF,PCSTR,DWORD); + BOOL SetupQueueCopySectionW(HSPFILEQ,PCWSTR,HINF,HINF,PCWSTR,DWORD); + BOOL SetupQueueDefaultCopyA(HSPFILEQ,HINF,PCSTR,PCSTR,PCSTR,DWORD); + BOOL SetupQueueDefaultCopyW(HSPFILEQ,HINF,PCWSTR,PCWSTR,PCWSTR,DWORD); + BOOL SetupQueueDeleteA(HSPFILEQ,PCSTR,PCSTR); + BOOL SetupQueueDeleteW(HSPFILEQ,PCWSTR,PCWSTR); + BOOL SetupQueueDeleteSectionA(HSPFILEQ,HINF,HINF,PCSTR); + BOOL SetupQueueDeleteSectionW(HSPFILEQ,HINF,HINF,PCWSTR); + BOOL SetupQueueRenameA(HSPFILEQ,PCSTR,PCSTR,PCSTR,PCSTR); + BOOL SetupQueueRenameW(HSPFILEQ,PCWSTR,PCWSTR,PCWSTR,PCWSTR); + BOOL SetupQueueRenameSectionA(HSPFILEQ,HINF,HINF,PCSTR); + BOOL SetupQueueRenameSectionW(HSPFILEQ,HINF,HINF,PCWSTR); + BOOL SetupRemoveFileLogEntryA(HSPFILELOG,PCSTR,PCSTR); + BOOL SetupRemoveFileLogEntryW(HSPFILELOG,PCWSTR,PCWSTR); + BOOL SetupRemoveFromDiskSpaceListA(HDSKSPC,PCSTR,UINT,PVOID,UINT); + BOOL SetupRemoveFromDiskSpaceListW(HDSKSPC,PCWSTR,UINT,PVOID,UINT); + BOOL SetupRemoveFromSourceListA(DWORD,PCSTR); + BOOL SetupRemoveFromSourceListW(DWORD,PCWSTR); + BOOL SetupRemoveInstallSectionFromDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,PVOID,UINT); + BOOL SetupRemoveInstallSectionFromDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,PVOID,UINT); + BOOL SetupRemoveSectionFromDiskSpaceListA(HDSKSPC,HINF,HINF,PCSTR,UINT,PVOID,UINT); + BOOL SetupRemoveSectionFromDiskSpaceListW(HDSKSPC,HINF,HINF,PCWSTR,UINT,PVOID,UINT); + UINT SetupRenameErrorA(HWND,PCSTR,PCSTR,PCSTR,UINT,DWORD); + UINT SetupRenameErrorW(HWND,PCWSTR,PCWSTR,PCWSTR,UINT,DWORD); + BOOL SetupScanFileQueueA(HSPFILEQ,DWORD,HWND,PSP_FILE_CALLBACK_A,PVOID,PDWORD); + BOOL SetupScanFileQueueW(HSPFILEQ,DWORD,HWND,PSP_FILE_CALLBACK_W,PVOID,PDWORD); + BOOL SetupSetDirectoryIdA(HINF,DWORD,PCSTR); + BOOL SetupSetDirectoryIdW(HINF,DWORD,PCWSTR); + BOOL SetupSetDirectoryIdExA(HINF,DWORD,PCSTR,DWORD,DWORD,PVOID); + BOOL SetupSetDirectoryIdExW(HINF,DWORD,PCWSTR,DWORD,DWORD,PVOID); + BOOL SetupSetFileQueueAlternatePlatformA(HSPFILEQ,PSP_ALTPLATFORM_INFO,PCSTR); + BOOL SetupSetFileQueueAlternatePlatformW(HSPFILEQ,PSP_ALTPLATFORM_INFO,PCWSTR); + BOOL SetupSetPlatformPathOverrideA(PCSTR); + BOOL SetupSetPlatformPathOverrideW(PCWSTR); + BOOL SetupSetSourceListA(DWORD,PCSTR*,UINT); + BOOL SetupSetSourceListW(DWORD,PCWSTR*,UINT); + VOID SetupTermDefaultQueueCallback(PVOID); + BOOL SetupTerminateFileLog(HSPFILELOG); +} + +deprecated { + alias SetupDiCreateDeviceInterfaceW SetupDiCreateInterfaceDeviceW; + alias SetupDiCreateDeviceInterfaceRegKeyW SetupDiCreateInterfaceDeviceRegKeyW; + alias SetupDiOpenDeviceInterfaceW SetupDiOpenInterfaceDeviceW; + alias SetupDiGetDeviceInterfaceDetailW SetupDiGetInterfaceDeviceDetailW; + alias SetupDiCreateDeviceInterfaceA SetupDiCreateInterfaceDeviceA; + alias SetupDiCreateDeviceInterfaceRegKeyA SetupDiCreateInterfaceDeviceRegKeyA; + alias SetupDiOpenDeviceInterfaceA SetupDiOpenInterfaceDeviceA; + alias SetupDiGetDeviceInterfaceDetailA SetupDiGetInterfaceDeviceDetailA; +} + +version (Unicode) { + alias PSP_FILE_CALLBACK_W PSP_FILE_CALLBACK; + alias SetupAddInstallSectionToDiskSpaceListW SetupAddInstallSectionToDiskSpaceList; + alias SetupAddSectionToDiskSpaceListW SetupAddSectionToDiskSpaceList; + alias SetupAddToDiskSpaceListW SetupAddToDiskSpaceList; + alias SetupAddToSourceListW SetupAddToSourceList; + alias SetupAdjustDiskSpaceListW SetupAdjustDiskSpaceList; + alias SetupBackupErrorW SetupBackupError; + alias SetupCommitFileQueueW SetupCommitFileQueue; + alias SetupCopyErrorW SetupCopyError; + alias SetupCopyOEMInfW SetupCopyOEMInf; + alias SetupCreateDiskSpaceListW SetupCreateDiskSpaceList; + alias SetupDecompressOrCopyFileW SetupDecompressOrCopyFile; + alias SetupDefaultQueueCallbackW SetupDefaultQueueCallback; + alias SetupDeleteErrorW SetupDeleteError; + alias SetupDiBuildClassInfoListExW SetupDiBuildClassInfoListEx; + alias SetupDiClassGuidsFromNameExW SetupDiClassGuidsFromNameEx; + alias SetupDiClassGuidsFromNameW SetupDiClassGuidsFromName; + alias SetupDiClassNameFromGuidExW SetupDiClassNameFromGuidEx; + alias SetupDiClassNameFromGuidW SetupDiClassNameFromGuid; + alias SetupDiCreateDeviceInfoListExW SetupDiCreateDeviceInfoListEx; + alias SetupDiCreateDeviceInfoW SetupDiCreateDeviceInfo; + alias SetupDiCreateDeviceInterfaceRegKeyW SetupDiCreateDeviceInterfaceRegKey; + deprecated alias SetupDiCreateDeviceInterfaceRegKeyW SetupDiCreateInterfaceDeviceRegKey; + alias SetupDiCreateDeviceInterfaceW SetupDiCreateDeviceInterface; + deprecated alias SetupDiCreateDeviceInterfaceW SetupDiCreateInterfaceDevice; + alias SetupDiCreateDevRegKeyW SetupDiCreateDevRegKey; + alias SetupDiEnumDriverInfoW SetupDiEnumDriverInfo; + alias SetupDiGetActualSectionToInstallW SetupDiGetActualSectionToInstall; + alias SetupDiGetClassDescriptionExW SetupDiGetClassDescriptionEx; + alias SetupDiGetClassDescriptionW SetupDiGetClassDescription; + alias SetupDiGetClassDevPropertySheetsW SetupDiGetClassDevPropertySheets; + alias SetupDiGetClassDevsExW SetupDiGetClassDevsEx; + alias SetupDiGetClassDevsW SetupDiGetClassDevs; + alias SetupDiGetClassImageListExW SetupDiGetClassImageListEx; + alias SetupDiGetClassInstallParamsW SetupDiGetClassInstallParams; + alias SetupDiGetClassRegistryPropertyW SetupDiGetClassRegistryProperty; + alias SetupDiGetDeviceInfoListDetailW SetupDiGetDeviceInfoListDetail; + alias SetupDiGetDeviceInstallParamsW SetupDiGetDeviceInstallParams; + alias SetupDiGetDeviceInstanceIdW SetupDiGetDeviceInstanceId; + alias SetupDiGetDeviceInterfaceDetailW SetupDiGetDeviceInterfaceDetail; + deprecated alias SetupDiGetDeviceInterfaceDetailW SetupDiGetInterfaceDeviceDetail; + alias SetupDiGetDeviceRegistryPropertyW SetupDiGetDeviceRegistryProperty; + alias SetupDiGetDriverInfoDetailW SetupDiGetDriverInfoDetail; + alias SetupDiGetDriverInstallParamsW SetupDiGetDriverInstallParams; + alias SetupDiGetHwProfileFriendlyNameExW SetupDiGetHwProfileFriendlyNameEx; + alias SetupDiGetHwProfileFriendlyNameW SetupDiGetHwProfileFriendlyName; + alias SetupDiGetHwProfileListExW SetupDiGetHwProfileListEx; + alias SetupDiGetINFClassW SetupDiGetINFClass; + alias SetupDiGetSelectedDriverW SetupDiGetSelectedDriver; + alias SetupDiInstallClassExW SetupDiInstallClassEx; + alias SetupDiInstallClassW SetupDiInstallClass; + alias SetupDiOpenClassRegKeyExW SetupDiOpenClassRegKeyEx; + alias SetupDiOpenDeviceInfoW SetupDiOpenDeviceInfo; + alias SetupDiOpenDeviceInterfaceW SetupDiOpenDeviceInterface; + deprecated alias SetupDiOpenDeviceInterfaceW SetupDiOpenInterfaceDevice; + alias SetupDiSetClassInstallParamsW SetupDiSetClassInstallParams; + alias SetupDiSetClassRegistryPropertyW SetupDiSetClassRegistryProperty; + alias SetupDiSetDeviceInstallParamsW SetupDiSetDeviceInstallParams; + alias SetupDiSetDeviceRegistryPropertyW SetupDiSetDeviceRegistryProperty; + alias SetupDiSetDriverInstallParamsW SetupDiSetDriverInstallParams; + alias SetupDiSetSelectedDriverW SetupDiSetSelectedDriver; + alias SetupDuplicateDiskSpaceListW SetupDuplicateDiskSpaceList; + alias SetupFindFirstLineW SetupFindFirstLine; + alias SetupFindNextMatchLineW SetupFindNextMatchLine; + alias SetupFreeSourceListW SetupFreeSourceList; + alias SetupGetBackupInformationW SetupGetBackupInformation; + alias SetupGetFileCompressionInfoW SetupGetFileCompressionInfo; + alias SetupGetInfFileListW SetupGetInfFileList; + alias SetupGetInfInformationW SetupGetInfInformation; + alias SetupGetLineByIndexW SetupGetLineByIndex; + alias SetupGetLineCountW SetupGetLineCount; + alias SetupGetLineTextW SetupGetLineText; + alias SetupGetMultiSzFieldW SetupGetMultiSzField; + alias SetupGetSourceFileLocationW SetupGetSourceFileLocation; + alias SetupGetSourceFileSizeW SetupGetSourceFileSize; + alias SetupGetSourceInfoW SetupGetSourceInfo; + alias SetupGetStringFieldW SetupGetStringField; + alias SetupGetTargetPathW SetupGetTargetPath; + alias SetupInitializeFileLogW SetupInitializeFileLog; + alias SetupInstallFileExW SetupInstallFileEx; + alias SetupInstallFilesFromInfSectionW SetupInstallFilesFromInfSection; + alias SetupInstallFileW SetupInstallFile; + alias SetupInstallFromInfSectionW SetupInstallFromInfSection; + alias SetupInstallServicesFromInfSectionExW SetupInstallServicesFromInfSectionEx; + alias SetupInstallServicesFromInfSectionW SetupInstallServicesFromInfSection; + alias SetupIterateCabinetW SetupIterateCabinet; + alias SetupLogErrorW SetupLogError; + alias SetupLogFileW SetupLogFile; + alias SetupOpenAppendInfFileW SetupOpenAppendInfFile; + alias SetupOpenInfFileW SetupOpenInfFile; + alias SetupPromptForDiskW SetupPromptForDisk; + alias SetupQueryDrivesInDiskSpaceListW SetupQueryDrivesInDiskSpaceList; + alias SetupQueryFileLogW SetupQueryFileLog; + alias SetupQueryInfFileInformationW SetupQueryInfFileInformation; + alias SetupQueryInfOriginalFileInformationW SetupQueryInfOriginalFileInformation; + alias SetupQueryInfVersionInformationW SetupQueryInfVersionInformation; + alias SetupQuerySourceListW SetupQuerySourceList; + alias SetupQuerySpaceRequiredOnDriveW SetupQuerySpaceRequiredOnDrive; + alias SetupQueueCopyIndirectW SetupQueueCopyIndirect; + alias SetupQueueCopySectionW SetupQueueCopySection; + alias SetupQueueCopyW SetupQueueCopy; + alias SetupQueueDefaultCopyW SetupQueueDefaultCopy; + alias SetupQueueDeleteSectionW SetupQueueDeleteSection; + alias SetupQueueDeleteW SetupQueueDelete; + alias SetupQueueRenameSectionW SetupQueueRenameSection; + alias SetupQueueRenameW SetupQueueRename; + alias SetupRemoveFileLogEntryW SetupRemoveFileLogEntry; + alias SetupRemoveFromDiskSpaceListW SetupRemoveFromDiskSpaceList; + alias SetupRemoveFromSourceListW SetupRemoveFromSourceList; + alias SetupRemoveInstallSectionFromDiskSpaceListW SetupRemoveInstallSectionFromDiskSpaceList; + alias SetupRemoveSectionFromDiskSpaceListW SetupRemoveSectionFromDiskSpaceList; + alias SetupRenameErrorW SetupRenameError; + alias SetupScanFileQueueW SetupScanFileQueue; + alias SetupSetDirectoryIdExW SetupSetDirectoryIdEx; + alias SetupSetDirectoryIdW SetupSetDirectoryId; + alias SetupSetFileQueueAlternatePlatformW SetupSetFileQueueAlternatePlatform; + alias SetupSetPlatformPathOverrideW SetupSetPlatformPathOverride; + alias SetupSetSourceListW SetupSetSourceList; +} else { + alias PSP_FILE_CALLBACK_A PSP_FILE_CALLBACK; + alias SetupAddInstallSectionToDiskSpaceListA SetupAddInstallSectionToDiskSpaceList; + alias SetupAddSectionToDiskSpaceListA SetupAddSectionToDiskSpaceList; + alias SetupAddToDiskSpaceListA SetupAddToDiskSpaceList; + alias SetupAddToSourceListA SetupAddToSourceList; + alias SetupAdjustDiskSpaceListA SetupAdjustDiskSpaceList; + alias SetupBackupErrorA SetupBackupError; + alias SetupCommitFileQueueA SetupCommitFileQueue; + alias SetupCopyErrorA SetupCopyError; + alias SetupCopyOEMInfA SetupCopyOEMInf; + alias SetupCreateDiskSpaceListA SetupCreateDiskSpaceList; + alias SetupDecompressOrCopyFileA SetupDecompressOrCopyFile; + alias SetupDefaultQueueCallbackA SetupDefaultQueueCallback; + alias SetupDeleteErrorA SetupDeleteError; + alias SetupDiBuildClassInfoListExA SetupDiBuildClassInfoListEx; + alias SetupDiClassGuidsFromNameA SetupDiClassGuidsFromName; + alias SetupDiClassGuidsFromNameExA SetupDiClassGuidsFromNameEx; + alias SetupDiClassNameFromGuidA SetupDiClassNameFromGuid; + alias SetupDiClassNameFromGuidExA SetupDiClassNameFromGuidEx; + alias SetupDiCreateDeviceInfoA SetupDiCreateDeviceInfo; + alias SetupDiCreateDeviceInfoListExA SetupDiCreateDeviceInfoListEx; + alias SetupDiCreateDeviceInterfaceA SetupDiCreateDeviceInterface; + deprecated alias SetupDiCreateDeviceInterfaceA SetupDiCreateInterfaceDevice; + alias SetupDiCreateDeviceInterfaceRegKeyA SetupDiCreateDeviceInterfaceRegKey; + deprecated alias SetupDiCreateDeviceInterfaceRegKeyA SetupDiCreateInterfaceDeviceRegKey; + alias SetupDiCreateDevRegKeyA SetupDiCreateDevRegKey; + alias SetupDiDeleteDeviceInterfaceData SetupDiDeleteInterfaceDeviceData; + alias SetupDiEnumDriverInfoA SetupDiEnumDriverInfo; + alias SetupDiGetActualSectionToInstallA SetupDiGetActualSectionToInstall; + alias SetupDiGetClassDescriptionA SetupDiGetClassDescription; + alias SetupDiGetClassDescriptionExA SetupDiGetClassDescriptionEx; + alias SetupDiGetClassDevPropertySheetsA SetupDiGetClassDevPropertySheets; + alias SetupDiGetClassDevsA SetupDiGetClassDevs; + alias SetupDiGetClassDevsExA SetupDiGetClassDevsEx; + alias SetupDiGetClassImageListExA SetupDiGetClassImageListEx; + alias SetupDiGetClassInstallParamsA SetupDiGetClassInstallParams; + alias SetupDiGetClassRegistryPropertyA SetupDiGetClassRegistryProperty; + alias SetupDiGetDeviceInfoListDetailA SetupDiGetDeviceInfoListDetail; + alias SetupDiGetDeviceInstallParamsA SetupDiGetDeviceInstallParams; + alias SetupDiGetDeviceInstanceIdA SetupDiGetDeviceInstanceId; + alias SetupDiGetDeviceInterfaceDetailA SetupDiGetDeviceInterfaceDetail; + deprecated alias SetupDiGetDeviceInterfaceDetailA SetupDiGetInterfaceDeviceDetail; + alias SetupDiGetDeviceRegistryPropertyA SetupDiGetDeviceRegistryProperty; + alias SetupDiGetDriverInfoDetailA SetupDiGetDriverInfoDetail; + alias SetupDiGetDriverInstallParamsA SetupDiGetDriverInstallParams; + alias SetupDiGetHwProfileFriendlyNameA SetupDiGetHwProfileFriendlyName; + alias SetupDiGetHwProfileFriendlyNameExA SetupDiGetHwProfileFriendlyNameEx; + alias SetupDiGetHwProfileListExA SetupDiGetHwProfileListEx; + alias SetupDiGetINFClassA SetupDiGetINFClass; + alias SetupDiGetSelectedDriverA SetupDiGetSelectedDriver; + alias SetupDiInstallClassA SetupDiInstallClass; + alias SetupDiInstallClassExA SetupDiInstallClassEx; + alias SetupDiOpenClassRegKeyExA SetupDiOpenClassRegKeyEx; + alias SetupDiOpenDeviceInfoA SetupDiOpenDeviceInfo; + alias SetupDiOpenDeviceInterfaceA SetupDiOpenDeviceInterface; + deprecated alias SetupDiOpenDeviceInterfaceA SetupDiOpenInterfaceDevice; + alias SetupDiSetClassInstallParamsA SetupDiSetClassInstallParams; + alias SetupDiSetClassRegistryPropertyA SetupDiSetClassRegistryProperty; + alias SetupDiSetDeviceInstallParamsA SetupDiSetDeviceInstallParams; + alias SetupDiSetDeviceRegistryPropertyA SetupDiSetDeviceRegistryProperty; + alias SetupDiSetDriverInstallParamsA SetupDiSetDriverInstallParams; + alias SetupDiSetSelectedDriverA SetupDiSetSelectedDriver; + alias SetupDuplicateDiskSpaceListA SetupDuplicateDiskSpaceList; + alias SetupFindFirstLineA SetupFindFirstLine; + alias SetupFindNextMatchLineA SetupFindNextMatchLine; + alias SetupFreeSourceListA SetupFreeSourceList; + alias SetupGetBackupInformationA SetupGetBackupInformation; + alias SetupGetFileCompressionInfoA SetupGetFileCompressionInfo; + alias SetupGetInfFileListA SetupGetInfFileList; + alias SetupGetInfInformationA SetupGetInfInformation; + alias SetupGetLineByIndexA SetupGetLineByIndex; + alias SetupGetLineCountA SetupGetLineCount; + alias SetupGetLineTextA SetupGetLineText; + alias SetupGetMultiSzFieldA SetupGetMultiSzField; + alias SetupGetSourceFileLocationA SetupGetSourceFileLocation; + alias SetupGetSourceFileSizeA SetupGetSourceFileSize; + alias SetupGetSourceInfoA SetupGetSourceInfo; + alias SetupGetStringFieldA SetupGetStringField; + alias SetupGetTargetPathA SetupGetTargetPath; + alias SetupInitializeFileLogA SetupInitializeFileLog; + alias SetupInstallFileA SetupInstallFile; + alias SetupInstallFileExA SetupInstallFileEx; + alias SetupInstallFilesFromInfSectionA SetupInstallFilesFromInfSection; + alias SetupInstallFromInfSectionA SetupInstallFromInfSection; + alias SetupInstallServicesFromInfSectionA SetupInstallServicesFromInfSection; + alias SetupInstallServicesFromInfSectionExA SetupInstallServicesFromInfSectionEx; + alias SetupIterateCabinetA SetupIterateCabinet; + alias SetupLogErrorA SetupLogError; + alias SetupLogFileA SetupLogFile; + alias SetupOpenAppendInfFileA SetupOpenAppendInfFile; + alias SetupOpenInfFileA SetupOpenInfFile; + alias SetupPromptForDiskA SetupPromptForDisk; + alias SetupQueryDrivesInDiskSpaceListA SetupQueryDrivesInDiskSpaceList; + alias SetupQueryFileLogA SetupQueryFileLog; + alias SetupQueryInfFileInformationA SetupQueryInfFileInformation; + alias SetupQueryInfOriginalFileInformationA SetupQueryInfOriginalFileInformation; + alias SetupQueryInfVersionInformationA SetupQueryInfVersionInformation; + alias SetupQuerySourceListA SetupQuerySourceList; + alias SetupQuerySpaceRequiredOnDriveA SetupQuerySpaceRequiredOnDrive; + alias SetupQueueCopyA SetupQueueCopy; + alias SetupQueueCopyIndirectA SetupQueueCopyIndirect; + alias SetupQueueCopySectionA SetupQueueCopySection; + alias SetupQueueDefaultCopyA SetupQueueDefaultCopy; + alias SetupQueueDeleteA SetupQueueDelete; + alias SetupQueueDeleteSectionA SetupQueueDeleteSection; + alias SetupQueueRenameA SetupQueueRename; + alias SetupQueueRenameSectionA SetupQueueRenameSection; + alias SetupRemoveFileLogEntryA SetupRemoveFileLogEntry; + alias SetupRemoveFromDiskSpaceListA SetupRemoveFromDiskSpaceList; + alias SetupRemoveFromSourceListA SetupRemoveFromSourceList; + alias SetupRemoveInstallSectionFromDiskSpaceListA SetupRemoveInstallSectionFromDiskSpaceList; + alias SetupRemoveSectionFromDiskSpaceListA SetupRemoveSectionFromDiskSpaceList; + alias SetupRenameErrorA SetupRenameError; + alias SetupScanFileQueueA SetupScanFileQueue; + alias SetupSetDirectoryIdA SetupSetDirectoryId; + alias SetupSetDirectoryIdExA SetupSetDirectoryIdEx; + alias SetupSetFileQueueAlternatePlatformA SetupSetFileQueueAlternatePlatform; + alias SetupSetPlatformPathOverrideA SetupSetPlatformPathOverride; + alias SetupSetSourceListA SetupSetSourceList; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/shellapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/shellapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,412 @@ +/***********************************************************************\ +* shellapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.shellapi; +pragma(lib, "shell32.lib"); + +private import win32.w32api, win32.windef, win32.basetyps; + +enum : UINT { + ABE_LEFT, + ABE_TOP, + ABE_RIGHT, + ABE_BOTTOM // = 3 +} + +enum : UINT { + ABS_AUTOHIDE = 1, + ABS_ALWAYSONTOP +} + +const ULONG + SEE_MASK_CLASSNAME = 1, + SEE_MASK_CLASSKEY = 3, + SEE_MASK_IDLIST = 4, + SEE_MASK_INVOKEIDLIST = 12, + SEE_MASK_ICON = 0x000010, + SEE_MASK_HOTKEY = 0x000020, + SEE_MASK_NOCLOSEPROCESS = 0x000040, + SEE_MASK_CONNECTNETDRV = 0x000080, + SEE_MASK_FLAG_DDEWAIT = 0x000100, + SEE_MASK_DOENVSUBST = 0x000200, + SEE_MASK_FLAG_NO_UI = 0x000400, + SEE_MASK_NO_CONSOLE = 0x008000, + SEE_MASK_UNICODE = 0x010000, + SEE_MASK_ASYNCOK = 0x100000, + SEE_MASK_HMONITOR = 0x200000; + +enum : DWORD { + ABM_NEW, + ABM_REMOVE, + ABM_QUERYPOS, + ABM_SETPOS, + ABM_GETSTATE, + ABM_GETTASKBARPOS, + ABM_ACTIVATE, + ABM_GETAUTOHIDEBAR, + ABM_SETAUTOHIDEBAR, + ABM_WINDOWPOSCHANGED // = 9 +} + +static if (WINVER >= 0x501) { + const DWORD ABM_SETSTATE = 10; +} + +enum : UINT { + ABN_STATECHANGE, + ABN_POSCHANGED, + ABN_FULLSCREENAPP, + ABN_WINDOWARRANGE +} + +enum : DWORD { + NIM_ADD, + NIM_MODIFY, + NIM_DELETE +} + +static if (_WIN32_IE >= 0x500) { + const NOTIFYICON_VERSION = 3; + + enum : DWORD { + NIM_SETFOCUS = 3, + NIM_SETVERSION + } +} + +const UINT + NIF_MESSAGE = 1, + NIF_ICON = 2, + NIF_TIP = 4, + NIF_STATE = 8; + +static if (_WIN32_IE >= 0x500) { + const UINT NIF_INFO = 0x00000010; +} + +static if (_WIN32_IE >= 0x600) { + const UINT NIF_GUID = 0x00000020; +} + +static if (_WIN32_IE >= 0x500) { + enum : DWORD { + NIIF_NONE, + NIIF_INFO, + NIIF_WARNING, + NIIF_ERROR + } +} + +static if (_WIN32_IE >= 0x600) { + enum : DWORD { + NIIF_ICON_MASK = 15, + NIIF_NOSOUND + } +} + +const DWORD + NIS_HIDDEN = 1, + NIS_SHAREDICON = 2; + +const HINSTANCE + SE_ERR_FNF = cast(HANDLE) 2, + SE_ERR_PNF = cast(HANDLE) 3, + SE_ERR_ACCESSDENIED = cast(HANDLE) 5, + SE_ERR_OOM = cast(HANDLE) 8, + SE_ERR_DLLNOTFOUND = cast(HANDLE) 32, + SE_ERR_SHARE = cast(HANDLE) 26, + SE_ERR_ASSOCINCOMPLETE = cast(HANDLE) 27, + SE_ERR_DDETIMEOUT = cast(HANDLE) 28, + SE_ERR_DDEFAIL = cast(HANDLE) 29, + SE_ERR_DDEBUSY = cast(HANDLE) 30, + SE_ERR_NOASSOC = cast(HANDLE) 31; + +enum : UINT { + FO_MOVE = 1, + FO_COPY, + FO_DELETE, + FO_RENAME +} + +const FILEOP_FLAGS + FOF_MULTIDESTFILES = 0x0001, + FOF_CONFIRMMOUSE = 0x0002, + FOF_SILENT = 0x0004, + FOF_RENAMEONCOLLISION = 0x0008, + FOF_NOCONFIRMATION = 0x0010, + FOF_WANTMAPPINGHANDLE = 0x0020, + FOF_ALLOWUNDO = 0x0040, + FOF_FILESONLY = 0x0080, + FOF_SIMPLEPROGRESS = 0x0100, + FOF_NOCONFIRMMKDIR = 0x0200, + FOF_NOERRORUI = 0x0400, + FOF_NOCOPYSECURITYATTRIBS = 0x0800; + +// these are not documented on the MSDN site +enum { + PO_DELETE = 19, + PO_RENAME = 20, + PO_PORTCHANGE = 32, + PO_REN_PORT = 52 +} + +const UINT + SHGFI_LARGEICON = 0x000000, + SHGFI_SMALLICON = 0x000001, + SHGFI_OPENICON = 0x000002, + SHGFI_SHELLICONSIZE = 0x000004, + SHGFI_PIDL = 0x000008, + SHGFI_USEFILEATTRIBUTES = 0x000010, + SHGFI_ICON = 0x000100, + SHGFI_DISPLAYNAME = 0x000200, + SHGFI_TYPENAME = 0x000400, + SHGFI_ATTRIBUTES = 0x000800, + SHGFI_ICONLOCATION = 0x001000, + SHGFI_EXETYPE = 0x002000, + SHGFI_SYSICONINDEX = 0x004000, + SHGFI_LINKOVERLAY = 0x008000, + SHGFI_SELECTED = 0x010000, + SHGFI_ATTR_SPECIFIED = 0x020000; + +const SHERB_NOCONFIRMATION = 1; +const SHERB_NOPROGRESSUI = 2; +const SHERB_NOSOUND = 4; + +alias WORD FILEOP_FLAGS, PRINTEROP_FLAGS; +alias HANDLE HDROP; + +align(2): + +struct APPBARDATA { + DWORD cbSize = APPBARDATA.sizeof; + HWND hWnd; + UINT uCallbackMessage; + UINT uEdge; + RECT rc; + LPARAM lParam; +} +alias APPBARDATA* PAPPBARDATA; + +struct NOTIFYICONDATAA { + DWORD cbSize = NOTIFYICONDATAA.sizeof; + HWND hWnd; + UINT uID; + UINT uFlags; + UINT uCallbackMessage; + HICON hIcon; + static if (_WIN32_IE >= 0x500) { + CHAR[128] szTip; + DWORD dwState; + DWORD dwStateMask; + CHAR[256] szInfo; + union { + UINT uTimeout; + UINT uVersion; + } + CHAR[64] szInfoTitle; + DWORD dwInfoFlags; + } else { + CHAR[64] szTip; + } + static if (_WIN32_IE >= 0x600) { + GUID guidItem; + } +} +alias NOTIFYICONDATAA* PNOTIFYICONDATAA; + +struct NOTIFYICONDATAW { + DWORD cbSize = NOTIFYICONDATAW.sizeof; + HWND hWnd; + UINT uID; + UINT uFlags; + UINT uCallbackMessage; + HICON hIcon; + static if (_WIN32_IE >= 0x500) { + WCHAR[128] szTip; + DWORD dwState; + DWORD dwStateMask; + WCHAR[256] szInfo; + union { + UINT uTimeout; + UINT uVersion; + } + WCHAR[64] szInfoTitle; + DWORD dwInfoFlags; + } else { + WCHAR[64] szTip; + } + static if (_WIN32_IE >= 0x600) { + GUID guidItem; + } +} +alias NOTIFYICONDATAW* PNOTIFYICONDATAW; + +struct SHELLEXECUTEINFOA { + DWORD cbSize = SHELLEXECUTEINFOA.sizeof; + ULONG fMask; + HWND hwnd; + LPCSTR lpVerb; + LPCSTR lpFile; + LPCSTR lpParameters; + LPCSTR lpDirectory; + int nShow; + HINSTANCE hInstApp; + PVOID lpIDList; + LPCSTR lpClass; + HKEY hkeyClass; + DWORD dwHotKey; + HANDLE hIcon; + HANDLE hProcess; +} +alias SHELLEXECUTEINFOA* LPSHELLEXECUTEINFOA; + +struct SHELLEXECUTEINFOW { + DWORD cbSize = SHELLEXECUTEINFOW.sizeof; + ULONG fMask; + HWND hwnd; + LPCWSTR lpVerb; + LPCWSTR lpFile; + LPCWSTR lpParameters; + LPCWSTR lpDirectory; + int nShow; + HINSTANCE hInstApp; + PVOID lpIDList; + LPCWSTR lpClass; + HKEY hkeyClass; + DWORD dwHotKey; + HANDLE hIcon; + HANDLE hProcess; +} +alias SHELLEXECUTEINFOW* LPSHELLEXECUTEINFOW; + +struct SHFILEOPSTRUCTA { + HWND hwnd; + UINT wFunc; + LPCSTR pFrom; + LPCSTR pTo; + FILEOP_FLAGS fFlags; + BOOL fAnyOperationsAborted; + PVOID hNameMappings; + LPCSTR lpszProgressTitle; +} +alias SHFILEOPSTRUCTA* LPSHFILEOPSTRUCTA; + +struct SHFILEOPSTRUCTW { + HWND hwnd; + UINT wFunc; + LPCWSTR pFrom; + LPCWSTR pTo; + FILEOP_FLAGS fFlags; + BOOL fAnyOperationsAborted; + PVOID hNameMappings; + LPCWSTR lpszProgressTitle; +} +alias SHFILEOPSTRUCTW* LPSHFILEOPSTRUCTW; + +struct SHFILEINFOA { + HICON hIcon; + int iIcon; + DWORD dwAttributes; + CHAR[MAX_PATH] szDisplayName; + CHAR[80] szTypeName; +} + +struct SHFILEINFOW { + HICON hIcon; + int iIcon; + DWORD dwAttributes; + WCHAR[MAX_PATH] szDisplayName; + WCHAR[80] szTypeName; +} + +struct SHQUERYRBINFO { + DWORD cbSize = SHQUERYRBINFO.sizeof; + long i64Size; + long i64NumItems; +} +alias SHQUERYRBINFO* LPSHQUERYRBINFO; + +extern (Windows) { + LPWSTR* CommandLineToArgvW(LPCWSTR, int*); + void DragAcceptFiles(HWND, BOOL); + void DragFinish(HDROP); + UINT DragQueryFileA(HDROP, UINT, LPSTR, UINT); + UINT DragQueryFileW(HDROP, UINT, LPWSTR, UINT); + BOOL DragQueryPoint(HDROP, LPPOINT); + HICON DuplicateIcon(HINSTANCE, HICON); + HICON ExtractAssociatedIconA(HINSTANCE, LPCSTR, PWORD); + HICON ExtractAssociatedIconW(HINSTANCE, LPCWSTR, PWORD); + HICON ExtractIconA(HINSTANCE, LPCSTR, UINT); + HICON ExtractIconW(HINSTANCE, LPCWSTR, UINT); + UINT ExtractIconExA(LPCSTR, int, HICON*, HICON*, UINT); + UINT ExtractIconExW(LPCWSTR, int, HICON*, HICON*, UINT); + HINSTANCE FindExecutableA(LPCSTR, LPCSTR, LPSTR); + HINSTANCE FindExecutableW(LPCWSTR, LPCWSTR, LPWSTR); + UINT SHAppBarMessage(DWORD, PAPPBARDATA); + BOOL Shell_NotifyIconA(DWORD, PNOTIFYICONDATAA); + BOOL Shell_NotifyIconW(DWORD, PNOTIFYICONDATAW); + int ShellAboutA(HWND, LPCSTR, LPCSTR, HICON); + int ShellAboutW(HWND, LPCWSTR, LPCWSTR, HICON); + HINSTANCE ShellExecuteA(HWND, LPCSTR, LPCSTR, LPCSTR, LPCSTR, INT); + HINSTANCE ShellExecuteW(HWND, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR, INT); + BOOL ShellExecuteExA(LPSHELLEXECUTEINFOA); + BOOL ShellExecuteExW(LPSHELLEXECUTEINFOW); + int SHFileOperationA(LPSHFILEOPSTRUCTA); + int SHFileOperationW(LPSHFILEOPSTRUCTW); + void SHFreeNameMappings(HANDLE); + DWORD SHGetFileInfoA(LPCSTR, DWORD, SHFILEINFOA*, UINT, UINT); + DWORD SHGetFileInfoW(LPCWSTR, DWORD, SHFILEINFOW*, UINT, UINT); + HRESULT SHQueryRecycleBinA(LPCSTR, LPSHQUERYRBINFO); + HRESULT SHQueryRecycleBinW(LPCWSTR, LPSHQUERYRBINFO); + HRESULT SHEmptyRecycleBinA(HWND, LPCSTR, DWORD); + HRESULT SHEmptyRecycleBinW(HWND, LPCWSTR, DWORD); +} + +version (Unicode) { + alias NOTIFYICONDATAW NOTIFYICONDATA; + alias SHELLEXECUTEINFOW SHELLEXECUTEINFO; + alias SHFILEOPSTRUCTW SHFILEOPSTRUCT; + alias SHFILEINFOW SHFILEINFO; + alias DragQueryFileW DragQueryFile; + alias ExtractAssociatedIconW ExtractAssociatedIcon; + alias ExtractIconW ExtractIcon; + alias ExtractIconExW ExtractIconEx; + alias FindExecutableW FindExecutable; + alias Shell_NotifyIconW Shell_NotifyIcon; + alias ShellAboutW ShellAbout; + alias ShellExecuteW ShellExecute; + alias ShellExecuteExW ShellExecuteEx; + alias SHFileOperationW SHFileOperation; + alias SHGetFileInfoW SHGetFileInfo; + alias SHQueryRecycleBinW SHQueryRecycleBin; + alias SHEmptyRecycleBinW SHEmptyRecycleBin; +} else { + alias NOTIFYICONDATAA NOTIFYICONDATA; + alias SHELLEXECUTEINFOA SHELLEXECUTEINFO; + alias SHFILEOPSTRUCTA SHFILEOPSTRUCT; + alias SHFILEINFOA SHFILEINFO; + alias DragQueryFileA DragQueryFile; + alias ExtractAssociatedIconA ExtractAssociatedIcon; + alias ExtractIconA ExtractIcon; + alias ExtractIconExA ExtractIconEx; + alias FindExecutableA FindExecutable; + alias Shell_NotifyIconA Shell_NotifyIcon; + alias ShellAboutA ShellAbout; + alias ShellExecuteA ShellExecute; + alias ShellExecuteExA ShellExecuteEx; + alias SHFileOperationA SHFileOperation; + alias SHGetFileInfoA SHGetFileInfo; + alias SHQueryRecycleBinA SHQueryRecycleBin; + alias SHEmptyRecycleBinA SHEmptyRecycleBin; +} + +alias NOTIFYICONDATA* PNOTIFYICONDATA; +alias SHELLEXECUTEINFO* LPSHELLEXECUTEINFO; +alias SHFILEOPSTRUCT* LPSHFILEOPSTRUCT; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/shldisp.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/shldisp.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,27 @@ +/***********************************************************************\ +* shldisp.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.shldisp; + +private import win32.unknwn, win32.windef, win32.wtypes; + +// options for IAutoComplete2 +const DWORD ACO_AUTOSUGGEST = 0x01; + +interface IAutoComplete : public IUnknown { + HRESULT Init(HWND, IUnknown*, LPCOLESTR, LPCOLESTR); + HRESULT Enable(BOOL); +} +alias IAutoComplete* LPAUTOCOMPLETE; + +interface IAutoComplete2 : public IAutoComplete { + HRESULT SetOptions(DWORD); + HRESULT GetOptions(DWORD*); +} +alias IAutoComplete2* LPAUTOCOMPLETE2; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/shlguid.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/shlguid.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,18 @@ +/***********************************************************************\ +* shlguid.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.shlguid; + +private import win32.basetyps, win32.w32api; + +// FIXME: clean up Windows version support + +// I think this is just a helper macro for other win32 headers? +//MACRO #define DEFINE_SHLGUID(n,l,w1,w2) DEFINE_GUID(n,l,w1,w2,0xC0,0,0,0,0,0,0,0x46) + diff -r 586e4a649642 -r 4a9dcbd9e54f win32/shlobj.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/shlobj.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1351 @@ +/***********************************************************************\ +* shlobj.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.shlobj; +pragma(lib, "shell32.lib"); + +// TODO: fix bitfields +// TODO: CMIC_VALID_SEE_FLAGS +// SHGetFolderPath in shfolder.dll on W9x, NT4, also in shell32.dll on W2K + +import win32.commctrl, win32.ole2, win32.shlguid, win32.shellapi; +private import win32.prsht, win32.unknwn, win32.w32api, win32.winbase, + win32.winnt, win32.winuser, win32.wtypes, win32.objfwd, win32.objidl; +private import win32.winnetwk; // for NETRESOURCE + + +// FIXME: clean up Windows version support + +align(1): + +const BIF_RETURNONLYFSDIRS = 1; +const BIF_DONTGOBELOWDOMAIN = 2; +const BIF_STATUSTEXT = 4; +const BIF_RETURNFSANCESTORS = 8; +const BIF_EDITBOX = 16; +const BIF_VALIDATE = 32; +const BIF_NEWDIALOGSTYLE = 64; +const BIF_BROWSEINCLUDEURLS = 128; +const BIF_USENEWUI = BIF_EDITBOX | BIF_NEWDIALOGSTYLE; +const BIF_BROWSEFORCOMPUTER = 0x1000; +const BIF_BROWSEFORPRINTER = 0x2000; +const BIF_BROWSEINCLUDEFILES = 0x4000; +const BIF_SHAREABLE = 0x8000; +const BFFM_INITIALIZED = 1; +const BFFM_SELCHANGED = 2; +const BFFM_VALIDATEFAILEDA = 3; +const BFFM_VALIDATEFAILEDW = 4; +const BFFM_SETSTATUSTEXTA = WM_USER + 100; +const BFFM_ENABLEOK = WM_USER + 101; +const BFFM_SETSELECTIONA = WM_USER + 102; +const BFFM_SETSELECTIONW = WM_USER + 103; +const BFFM_SETSTATUSTEXTW = WM_USER + 104; +const BFFM_SETOKTEXT = WM_USER + 105; +const BFFM_SETEXPANDED = WM_USER + 106; + +version(Unicode) { + alias BFFM_SETSTATUSTEXTW BFFM_SETSTATUSTEXT; + alias BFFM_SETSELECTIONW BFFM_SETSELECTION; + alias BFFM_VALIDATEFAILEDW BFFM_VALIDATEFAILED; +} else { + alias BFFM_SETSTATUSTEXTA BFFM_SETSTATUSTEXT; + alias BFFM_SETSELECTIONA BFFM_SETSELECTION; + alias BFFM_VALIDATEFAILEDA BFFM_VALIDATEFAILED; +} + +const DVASPECT_SHORTNAME = 2; + +const SHARD_PIDL = 1; +const SHARD_PATH = 2; + +const SHCNE_RENAMEITEM = 1; +const SHCNE_CREATE = 2; +const SHCNE_DELETE = 4; +const SHCNE_MKDIR = 8; +const SHCNE_RMDIR = 16; +const SHCNE_MEDIAINSERTED = 32; +const SHCNE_MEDIAREMOVED = 64; +const SHCNE_DRIVEREMOVED = 128; +const SHCNE_DRIVEADD = 256; +const SHCNE_NETSHARE = 512; +const SHCNE_NETUNSHARE = 1024; +const SHCNE_ATTRIBUTES = 2048; +const SHCNE_UPDATEDIR = 4096; +const SHCNE_UPDATEITEM = 8192; +const SHCNE_SERVERDISCONNECT = 16384; +const SHCNE_UPDATEIMAGE = 32768; +const SHCNE_DRIVEADDGUI = 65536; +const SHCNE_RENAMEFOLDER = 0x20000; +const SHCNE_FREESPACE = 0x40000; +const SHCNE_ASSOCCHANGED = 0x8000000; +const SHCNE_DISKEVENTS = 0x2381F; +const SHCNE_GLOBALEVENTS = 0xC0581E0; +const SHCNE_ALLEVENTS = 0x7FFFFFFF; +const SHCNE_INTERRUPT = 0x80000000; + +const SHCNF_IDLIST = 0; +const SHCNF_PATHA = 1; +const SHCNF_PRINTERA = 2; +const SHCNF_DWORD = 3; +const SHCNF_PATHW = 5; +const SHCNF_PRINTERW = 6; +const SHCNF_TYPE = 0xFF; +const SHCNF_FLUSH = 0x1000; +const SHCNF_FLUSHNOWAIT = 0x2000; + +version(Unicode) { + alias SHCNF_PATHW SHCNF_PATH; + alias SHCNF_PRINTERW SHCNF_PRINTER; +} else { + alias SHCNF_PATHA SHCNF_PATH; + alias SHCNF_PRINTERA SHCNF_PRINTER; +} + +const SFGAO_CANCOPY = DROPEFFECT.DROPEFFECT_COPY; +const SFGAO_CANMOVE = DROPEFFECT.DROPEFFECT_MOVE; +const SFGAO_CANLINK = DROPEFFECT.DROPEFFECT_LINK; +const SFGAO_CANRENAME = 0x00000010L; +const SFGAO_CANDELETE = 0x00000020L; +const SFGAO_HASPROPSHEET = 0x00000040L; +const SFGAO_DROPTARGET = 0x00000100L; +const SFGAO_CAPABILITYMASK = 0x00000177L; +const SFGAO_GHOSTED = 0x00008000L; +const SFGAO_LINK = 0x00010000L; +const SFGAO_SHARE = 0x00020000L; +const SFGAO_READONLY = 0x00040000L; +const SFGAO_HIDDEN = 0x00080000L; +const SFGAO_DISPLAYATTRMASK = 0x000F0000L; +const SFGAO_FILESYSANCESTOR = 0x10000000L; +const SFGAO_FOLDER = 0x20000000L; +const SFGAO_FILESYSTEM = 0x40000000L; +const SFGAO_HASSUBFOLDER = 0x80000000L; +const SFGAO_CONTENTSMASK = 0x80000000L; +const SFGAO_VALIDATE = 0x01000000L; +const SFGAO_REMOVABLE = 0x02000000L; +const SFGAO_COMPRESSED = 0x04000000L; +const STRRET_WSTR = 0; +const STRRET_OFFSET = 1; +const STRRET_CSTR = 2; + +enum { + SHGDFIL_FINDDATA = 1, + SHGDFIL_NETRESOURCE, + SHGDFIL_DESCRIPTIONID +} + +enum { + SHDID_ROOT_REGITEM = 1, + SHDID_FS_FILE, + SHDID_FS_DIRECTORY, + SHDID_FS_OTHER, + SHDID_COMPUTER_DRIVE35, + SHDID_COMPUTER_DRIVE525, + SHDID_COMPUTER_REMOVABLE, + SHDID_COMPUTER_FIXED, + SHDID_COMPUTER_NETDRIVE, + SHDID_COMPUTER_CDROM, + SHDID_COMPUTER_RAMDISK, + SHDID_COMPUTER_OTHER, + SHDID_NET_DOMAIN, + SHDID_NET_SERVER, + SHDID_NET_SHARE, + SHDID_NET_RESTOFNET, + SHDID_NET_OTHER +} + +const TCHAR[] REGSTR_PATH_EXPLORER = "Software\\Microsoft\\Windows\\CurrentVersion\\Explorer"; +const TCHAR[] REGSTR_PATH_SPECIAL_FOLDERS=REGSTR_PATH_EXPLORER ~ "\\Shell Folders"; + +enum { + CSIDL_DESKTOP = 0, + CSIDL_INTERNET, + CSIDL_PROGRAMS, + CSIDL_CONTROLS, + CSIDL_PRINTERS, + CSIDL_PERSONAL, + CSIDL_FAVORITES, + CSIDL_STARTUP, + CSIDL_RECENT, + CSIDL_SENDTO, + CSIDL_BITBUCKET, + CSIDL_STARTMENU, // = 11 + CSIDL_DESKTOPDIRECTORY = 16, + CSIDL_DRIVES, + CSIDL_NETWORK, + CSIDL_NETHOOD, + CSIDL_FONTS, + CSIDL_TEMPLATES, + CSIDL_COMMON_STARTMENU, + CSIDL_COMMON_PROGRAMS, + CSIDL_COMMON_STARTUP, + CSIDL_COMMON_DESKTOPDIRECTORY, + CSIDL_APPDATA, + CSIDL_PRINTHOOD, + CSIDL_LOCAL_APPDATA, + CSIDL_ALTSTARTUP, + CSIDL_COMMON_ALTSTARTUP, + CSIDL_COMMON_FAVORITES, + CSIDL_INTERNET_CACHE, + CSIDL_COOKIES, + CSIDL_HISTORY, + CSIDL_COMMON_APPDATA, + CSIDL_WINDOWS, + CSIDL_SYSTEM, + CSIDL_PROGRAM_FILES, + CSIDL_MYPICTURES, + CSIDL_PROFILE, + CSIDL_SYSTEMX86, + CSIDL_PROGRAM_FILESX86, + CSIDL_PROGRAM_FILES_COMMON, + CSIDL_PROGRAM_FILES_COMMONX86, + CSIDL_COMMON_TEMPLATES, + CSIDL_COMMON_DOCUMENTS, + CSIDL_COMMON_ADMINTOOLS, + CSIDL_ADMINTOOLS, + CSIDL_CONNECTIONS, // =49 + CSIDL_COMMON_MUSIC = 53, + CSIDL_COMMON_PICTURES, + CSIDL_COMMON_VIDEO, + CSIDL_RESOURCES, + CSIDL_RESOURCES_LOCALIZED, + CSIDL_COMMON_OEM_LINKS, + CSIDL_CDBURN_AREA, // = 59 + CSIDL_COMPUTERSNEARME = 61, + CSIDL_FLAG_DONT_VERIFY = 0x4000, + CSIDL_FLAG_CREATE = 0x8000, + CSIDL_FLAG_MASK = 0xFF00 +} + +const TCHAR[] + CFSTR_SHELLIDLIST = "Shell IDList Array", + CFSTR_SHELLIDLISTOFFSET = "Shell Object Offsets", + CFSTR_NETRESOURCES = "Net Resource", + CFSTR_FILECONTENTS = "FileContents", + CFSTR_FILENAMEA = "FileName", + CFSTR_FILENAMEMAPA = "FileNameMap", + CFSTR_FILEDESCRIPTORA = "FileGroupDescriptor", + CFSTR_INETURLA = "UniformResourceLocator", + CFSTR_SHELLURL = CFSTR_INETURLA, + CFSTR_FILENAMEW = "FileNameW", + CFSTR_FILENAMEMAPW = "FileNameMapW", + CFSTR_FILEDESCRIPTORW = "FileGroupDescriptorW", + CFSTR_INETURLW = "UniformResourceLocatorW"; + +version(Unicode) { + alias CFSTR_FILENAMEW CFSTR_FILENAME; + alias CFSTR_FILENAMEMAPW CFSTR_FILENAMEMAP; + alias CFSTR_FILEDESCRIPTORW CFSTR_FILEDESCRIPTOR; + alias CFSTR_INETURLW CFSTR_INETURL; +} else { + alias CFSTR_FILENAMEA CFSTR_FILENAME; + alias CFSTR_FILENAMEMAPA CFSTR_FILENAMEMAP; + alias CFSTR_FILEDESCRIPTORA CFSTR_FILEDESCRIPTOR; + alias CFSTR_INETURLA CFSTR_INETURL; +} +const TCHAR[] + CFSTR_PRINTERGROUP = "PrinterFriendlyName", + CFSTR_INDRAGLOOP = "InShellDragLoop", + CFSTR_PASTESUCCEEDED = "Paste Succeeded", + CFSTR_PERFORMEDDROPEFFECT = "Performed DropEffect", + CFSTR_PREFERREDDROPEFFECT = "Preferred DropEffect"; + +const CMF_NORMAL=0; +const CMF_DEFAULTONLY=1; +const CMF_VERBSONLY=2; +const CMF_EXPLORE=4; +const CMF_NOVERBS=8; +const CMF_CANRENAME=16; +const CMF_NODEFAULT=32; +const CMF_INCLUDESTATIC=64; +const CMF_RESERVED=0xffff0000; +const GCS_VERBA=0; +const GCS_HELPTEXTA=1; +const GCS_VALIDATEA=2; +const GCS_VERBW=4; +const GCS_HELPTEXTW=5; +const GCS_VALIDATEW=6; +const GCS_UNICODE=4; + +version(Unicode) { + alias GCS_VERBW GCS_VERB; + alias GCS_HELPTEXTW GCS_HELPTEXT; + alias GCS_VALIDATEW GCS_VALIDATE; +} else { + alias GCS_VERBA GCS_VERB; + alias GCS_HELPTEXTA GCS_HELPTEXT; + alias GCS_VALIDATEA GCS_VALIDATE; +} + +const TCHAR[] + CMDSTR_NEWFOLDER = "NewFolder", + CMDSTR_VIEWLIST = "ViewList", + CMDSTR_VIEWDETAILS = "ViewDetails"; + +const CMIC_MASK_HOTKEY = SEE_MASK_HOTKEY; +const CMIC_MASK_ICON = SEE_MASK_ICON; +const CMIC_MASK_FLAG_NO_UI = SEE_MASK_FLAG_NO_UI; +const CMIC_MASK_MODAL = 0x80000000; +// TODO: This isn't defined anywhere in MinGW. +//const CMIC_VALID_SEE_FLAGS=SEE_VALID_CMIC_FLAGS; + +const GIL_OPENICON = 1; +const GIL_FORSHELL = 2; +const GIL_SIMULATEDOC = 1; +const GIL_PERINSTANCE = 2; +const GIL_PERCLASS = 4; +const GIL_NOTFILENAME = 8; +const GIL_DONTCACHE = 16; + +const FVSIF_RECT = 1; +const FVSIF_PINNED = 2; +const FVSIF_NEWFAILED = 0x8000000; +const FVSIF_NEWFILE = 0x80000000; +const FVSIF_CANVIEWIT = 0x40000000; + +const CDBOSC_SETFOCUS = 0; +const CDBOSC_KILLFOCUS = 1; +const CDBOSC_SELCHANGE = 2; +const CDBOSC_RENAME = 3; + +const FCIDM_SHVIEWFIRST = 0; +const FCIDM_SHVIEWLAST = 0x7fff; +const FCIDM_BROWSERFIRST = 0xa000; +const FCIDM_BROWSERLAST = 0xbf00; +const FCIDM_GLOBALFIRST = 0x8000; +const FCIDM_GLOBALLAST = 0x9fff; +const FCIDM_MENU_FILE = FCIDM_GLOBALFIRST; +const FCIDM_MENU_EDIT = FCIDM_GLOBALFIRST+0x0040; +const FCIDM_MENU_VIEW = FCIDM_GLOBALFIRST+0x0080; +const FCIDM_MENU_VIEW_SEP_OPTIONS = FCIDM_GLOBALFIRST+0x0081; +const FCIDM_MENU_TOOLS = FCIDM_GLOBALFIRST+0x00c0; +const FCIDM_MENU_TOOLS_SEP_GOTO = FCIDM_GLOBALFIRST+0x00c1; +const FCIDM_MENU_HELP = FCIDM_GLOBALFIRST+0x0100; +const FCIDM_MENU_FIND = FCIDM_GLOBALFIRST+0x0140; +const FCIDM_MENU_EXPLORE = FCIDM_GLOBALFIRST+0x0150; +const FCIDM_MENU_FAVORITES = FCIDM_GLOBALFIRST+0x0170; +const FCIDM_TOOLBAR = FCIDM_BROWSERFIRST; +const FCIDM_STATUS = FCIDM_BROWSERFIRST+1; + +const SBSP_DEFBROWSER = 0; +const SBSP_SAMEBROWSER = 1; +const SBSP_NEWBROWSER = 2; +const SBSP_DEFMODE = 0; +const SBSP_OPENMODE = 16; +const SBSP_EXPLOREMODE = 32; +const SBSP_ABSOLUTE = 0; +const SBSP_RELATIVE = 0x1000; +const SBSP_PARENT = 0x2000; +const SBSP_INITIATEDBYHLINKFRAME = 0x80000000; +const SBSP_REDIRECT = 0x40000000; + +enum { + FCW_STATUS=1, + FCW_TOOLBAR, + FCW_TREE +} + +const FCT_MERGE=1; +const FCT_CONFIGABLE=2; +const FCT_ADDTOEND=4; + +const SVSI_DESELECT=0; +const SVSI_SELECT=1; +const SVSI_EDIT=3; +const SVSI_DESELECTOTHERS=4; +const SVSI_ENSUREVISIBLE=8; +const SVSI_FOCUSED=16; + +const SVGIO_BACKGROUND=0; +const SVGIO_SELECTION=1; +const SVGIO_ALLVIEW=2; + +const UINT SV2GV_CURRENTVIEW=-1; +const UINT SV2GV_DEFAULTVIEW=-2; + +alias ULONG SFGAOF; +alias DWORD SHGDNF; + +struct CIDA { + UINT cidl; + UINT[1] aoffset; +} +alias CIDA* LPIDA; + +struct SHITEMID { + USHORT cb; + BYTE[1] abID; +} +alias SHITEMID* LPSHITEMID, LPCSHITEMID; + +struct ITEMIDLIST { + SHITEMID mkid; +} +alias ITEMIDLIST* LPITEMIDLIST, LPCITEMIDLIST; + +alias int function(HWND,UINT,LPARAM,LPARAM) BFFCALLBACK; + +struct BROWSEINFOA { + HWND hwndOwner; + LPCITEMIDLIST pidlRoot; + LPSTR pszDisplayName; + LPCSTR lpszTitle; + UINT ulFlags; + BFFCALLBACK lpfn; + LPARAM lParam; + int iImage; +} +alias BROWSEINFOA* PBROWSEINFOA, LPBROWSEINFOA; + +struct BROWSEINFOW { + HWND hwndOwner; + LPCITEMIDLIST pidlRoot; + LPWSTR pszDisplayName; + LPCWSTR lpszTitle; + UINT ulFlags; + BFFCALLBACK lpfn; + LPARAM lParam; + int iImage; +} +alias BROWSEINFOW* PBROWSEINFOW, LPBROWSEINFOW; + +struct CMINVOKECOMMANDINFO { + DWORD cbSize = this.sizeof; + DWORD fMask; + HWND hwnd; + LPCSTR lpVerb; + LPCSTR lpParameters; + LPCSTR lpDirectory; + int nShow; + DWORD dwHotKey; + HANDLE hIcon; +} +alias CMINVOKECOMMANDINFO* LPCMINVOKECOMMANDINFO; + +struct DROPFILES { + DWORD pFiles; + POINT pt; + BOOL fNC; + BOOL fWide; +} +alias DROPFILES* LPDROPFILES; + +enum SHGNO { + SHGDN_NORMAL = 0, + SHGDN_INFOLDER, + SHGDN_FOREDITING = 0x1000, + SHGDN_INCLUDE_NONFILESYS = 0x2000, + SHGDN_FORADDRESSBAR = 0x4000, + SHGDN_FORPARSING = 0x8000 +} + +enum SHCONTF { + SHCONTF_FOLDERS = 32, + SHCONTF_NONFOLDERS = 64, + SHCONTF_INCLUDEHIDDEN = 128, + SHCONTF_INIT_ON_FIRST_NEXT = 256, + SHCONTF_NETPRINTERSRCH = 512, + SHCONTF_SHAREABLE = 1024, + SHCONTF_STORAGE = 2048 +} + +struct STRRET { + UINT uType; + union { + LPWSTR pOleStr; + UINT uOffset; + char cStr[MAX_PATH]; + } +} +alias STRRET* LPSTRRET; + +enum FD_FLAGS { + FD_CLSID = 1, + FD_SIZEPOINT = 2, + FD_ATTRIBUTES = 4, + FD_CREATETIME = 8, + FD_ACCESSTIME = 16, + FD_WRITESTIME = 32, + FD_FILESIZE = 64, + FD_LINKUI = 0x8000 +} + +struct FILEDESCRIPTORA { + DWORD dwFlags; + CLSID clsid; + SIZEL sizel; + POINTL pointl; + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + CHAR cFileName[MAX_PATH]; +} +alias FILEDESCRIPTORA* LPFILEDESCRIPTORA; + +struct FILEDESCRIPTORW { + DWORD dwFlags; + CLSID clsid; + SIZEL sizel; + POINTL pointl; + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + WCHAR cFileName[MAX_PATH]; +} +alias FILEDESCRIPTORW* LPFILEDESCRIPTORW; + +struct FILEGROUPDESCRIPTORA { + UINT cItems; + FILEDESCRIPTORA fgd[1]; +} +alias FILEGROUPDESCRIPTORA* LPFILEGROUPDESCRIPTORA; + +struct FILEGROUPDESCRIPTORW { + UINT cItems; + FILEDESCRIPTORW fgd[1]; +} +alias FILEGROUPDESCRIPTORW* LPFILEGROUPDESCRIPTORW; + +enum SLR_FLAGS { + SLR_NO_UI = 1, + SLR_ANY_MATCH = 2, + SLR_UPDATE = 4, + SLR_NOUPDATE = 8, + SLR_NOSEARCH = 16, + SLR_NOTRACK = 32, + SLR_NOLINKINFO = 64, + SLR_INVOKE_MSI = 128 +} + +enum SLGP_FLAGS { + SLGP_SHORTPATH=1, + SLGP_UNCPRIORITY=2, + SLGP_RAWPATH=4 +} + +alias PBYTE LPVIEWSETTINGS; + +enum FOLDERFLAGS { + FWF_AUTOARRANGE = 1, + FWF_ABBREVIATEDNAMES = 2, + FWF_SNAPTOGRID = 4, + FWF_OWNERDATA = 8, + FWF_BESTFITWINDOW = 16, + FWF_DESKTOP = 32, + FWF_SINGLESEL = 64, + FWF_NOSUBFOLDERS = 128, + FWF_TRANSPARENT = 256, + FWF_NOCLIENTEDGE = 512, + FWF_NOSCROLL = 0x400, + FWF_ALIGNLEFT = 0x800, + FWF_SINGLECLICKACTIVATE = 0x8000 +} + +enum FOLDERVIEWMODE { + FVM_ICON = 1, + FVM_SMALLICON, + FVM_LIST, + FVM_DETAILS +} + +struct FOLDERSETTINGS { + UINT ViewMode; + UINT fFlags; +} +alias FOLDERSETTINGS* LPFOLDERSETTINGS, LPCFOLDERSETTINGS; + +struct FVSHOWINFO { + DWORD cbSize = this.sizeof; + HWND hwndOwner; + int iShow; + DWORD dwFlags; + RECT rect; + LPUNKNOWN punkRel; + OLECHAR strNewFile[MAX_PATH]; +} +alias FVSHOWINFO* LPFVSHOWINFO; + +struct NRESARRAY { + UINT cItems; + NETRESOURCE nr[1]; +} +alias NRESARRAY* LPNRESARRAY; + +enum { + SBSC_HIDE, + SBSC_SHOW, + SBSC_TOGGLE, + SBSC_QUERY +} + +enum { + SBCMDID_ENABLESHOWTREE, + SBCMDID_SHOWCONTROL, + SBCMDID_CANCELNAVIGATION, + SBCMDID_MAYSAVECHANGES, + SBCMDID_SETHLINKFRAME, + SBCMDID_ENABLESTOP, + SBCMDID_OPTIONS +} +enum SVUIA_STATUS { + SVUIA_DEACTIVATE, + SVUIA_ACTIVATE_NOFOCUS, + SVUIA_ACTIVATE_FOCUS, + SVUIA_INPLACEACTIVATE +} + +static if (_WIN32_IE >= 0x0500) { + + struct EXTRASEARCH + { + GUID guidSearch; + WCHAR wszFriendlyName[80]; + WCHAR wszUrl[2084]; + } + alias EXTRASEARCH* LPEXTRASEARCH; + + alias DWORD SHCOLSTATEF; + + struct SHCOLUMNID { + GUID fmtid; + DWORD pid; + } + alias SHCOLUMNID* LPSHCOLUMNID, LPCSHCOLUMNID; + + struct SHELLDETAILS { + int fmt; + int cxChar; + STRRET str; + } + alias SHELLDETAILS* LPSHELLDETAILS; + + struct PERSIST_FOLDER_TARGET_INFO + { + LPITEMIDLIST pidlTargetFolder; + WCHAR szTargetParsingName[MAX_PATH]; + WCHAR szNetworkProvider[MAX_PATH]; + DWORD dwAttributes; + int csidl; + } + + enum SHGFP_TYPE { + SHGFP_TYPE_CURRENT = 0, + SHGFP_TYPE_DEFAULT = 1, + } + +} + +interface IEnumIDList: public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT Next(ULONG,LPITEMIDLIST*,ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumIDList**); +} +alias IEnumIDList *LPENUMIDLIST; + +interface IObjMgr : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT Append(IUnknown*); + HRESULT Remove(IUnknown*); +} + +interface IContextMenu : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT QueryContextMenu(HMENU,UINT,UINT,UINT,UINT); + HRESULT InvokeCommand(LPCMINVOKECOMMANDINFO); + HRESULT GetCommandString(UINT,UINT,PUINT,LPSTR,UINT); +} +alias IContextMenu* LPCONTEXTMENU; + +interface IContextMenu2 : public IContextMenu +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT QueryContextMenu(HMENU,UINT,UINT,UINT,UINT); + HRESULT InvokeCommand(LPCMINVOKECOMMANDINFO); + HRESULT GetCommandString(UINT,UINT,PUINT,LPSTR,UINT); + HRESULT HandleMenuMsg(UINT,WPARAM,LPARAM); +}; +alias IContextMenu2* LPCONTEXTMENU2; + +static if (_WIN32_IE >= 0x0500) { + + align(8): + struct SHCOLUMNINIT { + ULONG dwFlags; + ULONG dwReserved; + WCHAR wszFolder[MAX_PATH]; + } + alias SHCOLUMNINIT* LPSHCOLUMNINIT, LPCSHCOLUMNINIT; + + struct SHCOLUMNDATA { + ULONG dwFlags; + DWORD dwFileAttributes; + ULONG dwReserved; + WCHAR *pwszExt; + WCHAR wszFile[MAX_PATH]; + } + alias SHCOLUMNDATA* LPSHCOLUMNDATA, LPCSHCOLUMNDATA; + align: + + const MAX_COLUMN_NAME_LEN = 80; + const MAX_COLUMN_DESC_LEN = 128; + + align(1): + struct SHCOLUMNINFO { + SHCOLUMNID scid; + VARTYPE vt; + DWORD fmt; + UINT cChars; + DWORD csFlags; + WCHAR wszTitle[MAX_COLUMN_NAME_LEN]; + WCHAR wszDescription[MAX_COLUMN_DESC_LEN]; + } + alias SHCOLUMNINFO* LPSHCOLUMNINFO, LPCSHCOLUMNINFO; + align: + + enum SHCOLSTATE { + SHCOLSTATE_TYPE_STR = 0x00000001, + SHCOLSTATE_TYPE_INT = 0x00000002, + SHCOLSTATE_TYPE_DATE = 0x00000003, + SHCOLSTATE_TYPEMASK = 0x0000000f, + SHCOLSTATE_ONBYDEFAULT = 0x00000010, + SHCOLSTATE_SLOW = 0x00000020, + SHCOLSTATE_EXTENDED = 0x00000040, + SHCOLSTATE_SECONDARYUI = 0x00000080, + SHCOLSTATE_HIDDEN = 0x00000100, + SHCOLSTATE_PREFER_VARCMP = 0x00000200 + } + + interface IColumnProvider : public IUnknown + { + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT Initialize(LPCSHCOLUMNINIT); + HRESULT GetColumnInfo(DWORD,SHCOLUMNINFO*); + HRESULT GetItemData(LPCSHCOLUMNID,LPCSHCOLUMNDATA,VARIANT*); + } +}/* _WIN32_IE >= 0x0500 */ + +interface IQueryInfo : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetInfoTip(DWORD,WCHAR**); + HRESULT GetInfoFlags(DWORD*); +} + +interface IShellExtInit : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT Initialize(LPCITEMIDLIST,LPDATAOBJECT,HKEY); +} +alias IShellExtInit *LPSHELLEXTINIT; + +interface IShellPropSheetExt : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT AddPages(LPFNADDPROPSHEETPAGE,LPARAM); + HRESULT ReplacePage(UINT,LPFNADDPROPSHEETPAGE,LPARAM); +} +alias IShellPropSheetExt *LPSHELLPROPSHEETEXT; + +interface IExtractIconA : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetIconLocation(UINT,LPSTR,UINT,int*,PUINT); + HRESULT Extract(LPCSTR,UINT,HICON*,HICON*,UINT); +}; +alias IExtractIconA *LPEXTRACTICONA; + +interface IExtractIconW : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetIconLocation(UINT,LPWSTR,UINT,int*,PUINT); + HRESULT Extract(LPCWSTR,UINT,HICON*,HICON*,UINT); +} +alias IExtractIconW *LPEXTRACTICONW; + +version(Unicode) { + alias IExtractIconW IExtractIcon; + alias LPEXTRACTICONW LPEXTRACTICON; +} else { + alias IExtractIconA IExtractIcon; + alias LPEXTRACTICONA LPEXTRACTICON; +} + +interface IShellLinkA : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetPath(LPSTR,int,WIN32_FIND_DATAA*,DWORD); + HRESULT GetIDList(LPITEMIDLIST*); + HRESULT SetIDList(LPCITEMIDLIST); + HRESULT GetDescription(LPSTR,int); + HRESULT SetDescription(LPCSTR); + HRESULT GetWorkingDirectory(LPSTR,int); + HRESULT SetWorkingDirectory(LPCSTR); + HRESULT GetArguments(LPSTR,int); + HRESULT SetArguments(LPCSTR); + HRESULT GetHotkey(PWORD); + HRESULT SetHotkey(WORD); + HRESULT GetShowCmd(int*); + HRESULT SetShowCmd(int); + HRESULT GetIconLocation(LPSTR,int,int*); + HRESULT SetIconLocation(LPCSTR,int); + HRESULT SetRelativePath(LPCSTR ,DWORD); + HRESULT Resolve(HWND,DWORD); + HRESULT SetPath(LPCSTR); +} + +interface IShellLinkW : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetPath(LPWSTR,int,WIN32_FIND_DATAW*,DWORD); + HRESULT GetIDList(LPITEMIDLIST*); + HRESULT SetIDList(LPCITEMIDLIST); + HRESULT GetDescription(LPWSTR,int); + HRESULT SetDescription(LPCWSTR); + HRESULT GetWorkingDirectory(LPWSTR,int); + HRESULT SetWorkingDirectory(LPCWSTR); + HRESULT GetArguments(LPWSTR,int); + HRESULT SetArguments(LPCWSTR); + HRESULT GetHotkey(PWORD); + HRESULT SetHotkey(WORD); + HRESULT GetShowCmd(int*); + HRESULT SetShowCmd(int); + HRESULT GetIconLocation(LPWSTR,int,int*); + HRESULT SetIconLocation(LPCWSTR,int); + HRESULT SetRelativePath(LPCWSTR ,DWORD); + HRESULT Resolve(HWND,DWORD); + HRESULT SetPath(LPCWSTR); +} + + +interface IShellFolder : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT ParseDisplayName(HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG); + HRESULT EnumObjects(HWND,DWORD,LPENUMIDLIST*); + HRESULT BindToObject(LPCITEMIDLIST,LPBC,REFIID,PVOID*); + HRESULT BindToStorage(LPCITEMIDLIST,LPBC,REFIID,PVOID*); + HRESULT CompareIDs(LPARAM,LPCITEMIDLIST,LPCITEMIDLIST); + HRESULT CreateViewObject(HWND,REFIID,PVOID*); + HRESULT GetAttributesOf(UINT,LPCITEMIDLIST*,PULONG); + HRESULT GetUIObjectOf(HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*); + HRESULT GetDisplayNameOf(LPCITEMIDLIST,DWORD,LPSTRRET); + HRESULT SetNameOf(HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*); +} +alias IShellFolder *LPSHELLFOLDER; + +static if (_WIN32_IE >= 0x0500) { + +interface IEnumExtraSearch: public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT Next(ULONG,LPEXTRASEARCH*,ULONG*); + HRESULT Skip(ULONG); + HRESULT Reset(); + HRESULT Clone(IEnumExtraSearch**); +} +alias IEnumExtraSearch *LPENUMEXTRASEARCH; + +interface IShellFolder2 : public IShellFolder +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT ParseDisplayName(HWND,LPBC,LPOLESTR,PULONG,LPITEMIDLIST*,PULONG); + HRESULT EnumObjects(HWND,DWORD,LPENUMIDLIST*); + HRESULT BindToObject(LPCITEMIDLIST,LPBC,REFIID,PVOID*); + HRESULT BindToStorage(LPCITEMIDLIST,LPBC,REFIID,PVOID*); + HRESULT CompareIDs(LPARAM,LPCITEMIDLIST,LPCITEMIDLIST); + HRESULT CreateViewObject(HWND,REFIID,PVOID*); + HRESULT GetAttributesOf(UINT,LPCITEMIDLIST*,PULONG); + HRESULT GetUIObjectOf(HWND,UINT,LPCITEMIDLIST*,REFIID,PUINT,PVOID*); + HRESULT GetDisplayNameOf(LPCITEMIDLIST,DWORD,LPSTRRET); + HRESULT SetNameOf(HWND,LPCITEMIDLIST,LPCOLESTR,DWORD,LPITEMIDLIST*); + HRESULT GetDefaultSearchGUID(GUID*); + HRESULT EnumSearches(IEnumExtraSearch**); + HRESULT GetDefaultColumn(DWORD,ULONG*,ULONG*); + HRESULT GetDefaultColumnState(UINT,SHCOLSTATEF*); + HRESULT GetDetailsEx(LPCITEMIDLIST, SHCOLUMNID*,VARIANT*); + HRESULT GetDetailsOf(LPCITEMIDLIST,UINT,SHELLDETAILS*); + HRESULT MapColumnToSCID(UINT,SHCOLUMNID*); +} +alias IShellFolder2 *LPSHELLFOLDER2; + +} /* _WIN32_IE >= 0x0500 */ + +interface ICopyHook : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + UINT CopyCallback(HWND,UINT,UINT,LPCSTR,DWORD,LPCSTR,DWORD); +} +alias ICopyHook *LPCOPYHOOK; + +interface IFileViewerSite : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT SetPinnedWindow(HWND); + HRESULT GetPinnedWindow(HWND*); +} +alias IFileViewerSite *LPFILEVIEWERSITE; + +interface IFileViewer : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT ShowInitialize(LPFILEVIEWERSITE); + HRESULT Show(LPFVSHOWINFO); + HRESULT PrintTo(LPSTR,BOOL); +} +alias IFileViewer *LPFILEVIEWER; + +interface IFileSystemBindData : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT SetFindData( WIN32_FIND_DATAW*); + HRESULT GetFindData(WIN32_FIND_DATAW*); +} + +interface IPersistFolder : public IPersist +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetClassID(CLSID*); + HRESULT Initialize(LPCITEMIDLIST); +} +alias IPersistFolder *LPPERSISTFOLDER; + +static if (_WIN32_IE >= 0x0400 || _WIN32_WINNT >= 0x0500) { + +interface IPersistFolder2 : public IPersistFolder +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetClassID(CLSID*); + HRESULT Initialize(LPCITEMIDLIST); + HRESULT GetCurFolder(LPITEMIDLIST*); +} +alias IPersistFolder2 *LPPERSISTFOLDER2; + +}/* _WIN32_IE >= 0x0400 || _WIN32_WINNT >= 0x0500 */ + +static if (_WIN32_IE >= 0x0500) { + +interface IPersistFolder3 : public IPersistFolder2 +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetClassID(CLSID*); + HRESULT Initialize(LPCITEMIDLIST); + HRESULT GetCurFolder(LPITEMIDLIST*); + HRESULT InitializeEx(IBindCtx*,LPCITEMIDLIST, PERSIST_FOLDER_TARGET_INFO*); + HRESULT GetFolderTargetInfo(PERSIST_FOLDER_TARGET_INFO*); +} +alias IPersistFolder3 *LPPERSISTFOLDER3; + +} /* _WIN32_IE >= 0x0500 */ + +alias IShellBrowser* LPSHELLBROWSER; +alias IShellView* LPSHELLVIEW; + +interface IShellBrowser : public IOleWindow +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetWindow(HWND*); + HRESULT ContextSensitiveHelp(BOOL); + HRESULT InsertMenusSB(HMENU,LPOLEMENUGROUPWIDTHS); + HRESULT SetMenuSB(HMENU,HOLEMENU,HWND); + HRESULT RemoveMenusSB(HMENU); + HRESULT SetStatusTextSB(LPCOLESTR); + HRESULT EnableModelessSB(BOOL); + HRESULT TranslateAcceleratorSB(LPMSG,WORD); + HRESULT BrowseObject(LPCITEMIDLIST,UINT); + HRESULT GetViewStateStream(DWORD,LPSTREAM*); + HRESULT GetControlWindow(UINT,HWND*); + HRESULT SendControlMsg(UINT,UINT,WPARAM,LPARAM,LRESULT*); + HRESULT QueryActiveShellView(LPSHELLVIEW*); + HRESULT OnViewWindowActive(LPSHELLVIEW); + HRESULT SetToolbarItems(LPTBBUTTON,UINT,UINT); +} + +interface IShellView : public IOleWindow +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetWindow(HWND*); + HRESULT ContextSensitiveHelp(BOOL); + HRESULT TranslateAccelerator(LPMSG); +//[No] #ifdef _FIX_ENABLEMODELESS_CONFLICT +//[No] STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE; +//[Yes] #else + HRESULT EnableModeless(BOOL); +//[Yes] #endif + HRESULT UIActivate(UINT); + HRESULT Refresh(); + HRESULT CreateViewWindow(IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*); + HRESULT DestroyViewWindow(); + HRESULT GetCurrentInfo(LPFOLDERSETTINGS); + HRESULT AddPropertySheetPages(DWORD,LPFNADDPROPSHEETPAGE,LPARAM); + HRESULT SaveViewState(); + HRESULT SelectItem(LPCITEMIDLIST,UINT); + HRESULT GetItemObject(UINT,REFIID,PVOID*); +} + +interface ICommDlgBrowser : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT OnDefaultCommand(IShellView*); + HRESULT OnStateChange(IShellView*,ULONG); + HRESULT IncludeObject(IShellView*,LPCITEMIDLIST); +} +alias ICommDlgBrowser *LPCOMMDLGBROWSER; + +alias GUID SHELLVIEWID; + +struct SV2CVW2_PARAMS { + DWORD cbSize = this.sizeof; + IShellView *psvPrev; + FOLDERSETTINGS *pfs; + IShellBrowser *psbOwner; + RECT *prcView; + SHELLVIEWID *pvid; + HWND hwndView; +} +alias SV2CVW2_PARAMS* LPSV2CVW2_PARAMS; + +interface IShellView2 : public IShellView +{ + + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetWindow(HWND*); + HRESULT ContextSensitiveHelp(BOOL); + HRESULT TranslateAccelerator(LPMSG); +//[No] #ifdef _FIX_ENABLEMODELESS_CONFLICT +//[No] STDMETHOD(EnableModelessSV)(THIS_ BOOL) PURE; +//[Yes] #else + HRESULT EnableModeless(BOOL); +//[Yes] #endif + HRESULT UIActivate(UINT); + HRESULT Refresh(); + HRESULT CreateViewWindow(IShellView*,LPCFOLDERSETTINGS,LPSHELLBROWSER,RECT*,HWND*); + HRESULT DestroyViewWindow(); + HRESULT GetCurrentInfo(LPFOLDERSETTINGS); + HRESULT AddPropertySheetPages(DWORD,LPFNADDPROPSHEETPAGE,LPARAM); + HRESULT SaveViewState(); + HRESULT SelectItem(LPCITEMIDLIST,UINT); + HRESULT GetItemObject(UINT,REFIID,PVOID*); + HRESULT GetView(SHELLVIEWID*,ULONG); + HRESULT CreateViewWindow2(LPSV2CVW2_PARAMS); +} + +interface IShellExecuteHookA : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT Execute(LPSHELLEXECUTEINFOA); +} + +interface IShellExecuteHookW : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT Execute(LPSHELLEXECUTEINFOW); +} + +interface IShellIcon : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT GetIconOf(LPCITEMIDLIST,UINT,PINT); +} +alias IShellIcon* LPSHELLICON; + +struct SHELLFLAGSTATE { +// TODO + short bitflags_; // for D. + /* + BOOL fShowAllObjects : 1; + BOOL fShowExtensions : 1; + BOOL fNoConfirmRecycle : 1; + BOOL fShowSysFiles : 1; + BOOL fShowCompColor : 1; + BOOL fDoubleClickInWebView : 1; + BOOL fDesktopHTML : 1; + BOOL fWin95Classic : 1; + BOOL fDontPrettyPath : 1; + BOOL fShowAttribCol : 1; + BOOL fMapNetDrvBtn : 1; + BOOL fShowInfoTip : 1; + BOOL fHideIcons : 1; + UINT fRestFlags : 3; +*/ +} +alias SHELLFLAGSTATE* LPSHELLFLAGSTATE; + +const SSF_SHOWALLOBJECTS = 0x1; +const SSF_SHOWEXTENSIONS = 0x2; +const SSF_SHOWCOMPCOLOR = 0x8; +const SSF_SHOWSYSFILES = 0x20; +const SSF_DOUBLECLICKINWEBVIEW = 0x80; +const SSF_SHOWATTRIBCOL = 0x100; +const SSF_DESKTOPHTML = 0x200; +const SSF_WIN95CLASSIC = 0x400; +const SSF_DONTPRETTYPATH = 0x800; +const SSF_MAPNETDRVBUTTON = 0x1000; +const SSF_SHOWINFOTIP = 0x2000; +const SSF_HIDEICONS = 0x4000; +const SSF_NOCONFIRMRECYCLE = 0x8000; + +interface IShellIconOverlayIdentifier : public IUnknown +{ + HRESULT QueryInterface(REFIID,PVOID*); + ULONG AddRef(); + ULONG Release(); + HRESULT IsMemberOf(LPCWSTR,DWORD); + HRESULT GetOverlayInfo(LPWSTR,int,int*,DWORD*); + HRESULT GetPriority(int*); +} + +const ISIOI_ICONFILE = 0x00000001; +const ISIOI_ICONINDEX = 0x00000002; + +static if (_WIN32_WINNT >= 0x0500) {/* W2K */ + struct SHELLSTATE { + //TODO: + /* + BOOL fShowAllObjects : 1; + BOOL fShowExtensions : 1; + BOOL fNoConfirmRecycle : 1; + BOOL fShowSysFiles : 1; + BOOL fShowCompColor : 1; + BOOL fDoubleClickInWebView : 1; + BOOL fDesktopHTML : 1; + BOOL fWin95Classic : 1; + BOOL fDontPrettyPath : 1; + BOOL fShowAttribCol : 1; + BOOL fMapNetDrvBtn : 1; + BOOL fShowInfoTip : 1; + BOOL fHideIcons : 1; + BOOL fWebView : 1; + BOOL fFilter : 1; + BOOL fShowSuperHidden : 1; + BOOL fNoNetCrawling : 1; + DWORD dwWin95Unused; + UINT uWin95Unused; + LONG lParamSort; + int iSortDirection; + UINT version; + UINT uNotUsed; + BOOL fSepProcess : 1; + BOOL fStartPanelOn : 1; + BOOL fShowStartPage : 1; + UINT fSpareFlags : 13; +*/ + } + alias SHELLSTATE* LPSHELLSTATE; +} + +static if (_WIN32_IE >= 0x0500) { + align(8): + struct SHDRAGIMAGE { + SIZE sizeDragImage; + POINT ptOffset; + HBITMAP hbmpDragImage; + COLORREF crColorKey; + } + alias SHDRAGIMAGE* LPSHDRAGIMAGE; + align: + + interface IDragSourceHelper : public IUnknown + { + HRESULT QueryInterface(REFIID riid, void **ppv); + ULONG AddRef(); + ULONG Release(); + HRESULT InitializeFromBitmap(LPSHDRAGIMAGE pshdi, IDataObject* pDataObject); + HRESULT InitializeFromWindow(HWND hwnd, POINT* ppt, IDataObject* pDataObject); + } + + interface IDropTargetHelper : public IUnknown + { + HRESULT QueryInterface(REFIID riid, void** ppv); + ULONG AddRef(); + ULONG Release(); + HRESULT DragEnter(HWND hwndTarget, IDataObject* pDataObject, POINT* ppt, DWORD dwEffect); + HRESULT DragLeave(); + HRESULT DragOver(POINT* ppt, DWORD dwEffect); + HRESULT Drop(IDataObject* pDataObject, POINT* ppt, DWORD dwEffect); + HRESULT Show(BOOL fShow); + } +} + +extern (Windows): +void SHAddToRecentDocs(UINT,PCVOID); +LPITEMIDLIST SHBrowseForFolderA(PBROWSEINFOA); +LPITEMIDLIST SHBrowseForFolderW(PBROWSEINFOW); +void SHChangeNotify(LONG,UINT,PCVOID,PCVOID); +HRESULT SHGetDataFromIDListA(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int); +HRESULT SHGetDataFromIDListW(LPSHELLFOLDER,LPCITEMIDLIST,int,PVOID,int); +HRESULT SHGetDesktopFolder(LPSHELLFOLDER*); +HRESULT SHGetInstanceExplorer(IUnknown **); +HRESULT SHGetMalloc(LPMALLOC*); +BOOL SHGetPathFromIDListA(LPCITEMIDLIST,LPSTR); +BOOL SHGetPathFromIDListW(LPCITEMIDLIST,LPWSTR); +HRESULT SHGetSpecialFolderLocation(HWND,int,LPITEMIDLIST*); +HRESULT SHLoadInProc(REFCLSID); + +static if (_WIN32_IE >= 0x0400) { + BOOL SHGetSpecialFolderPathA(HWND,LPSTR,int,BOOL); + BOOL SHGetSpecialFolderPathW(HWND,LPWSTR,int,BOOL); +} + +/* SHGetFolderPath in shfolder.dll on W9x, NT4, also in shell32.dll on W2K */ +HRESULT SHGetFolderPathA(HWND,int,HANDLE,DWORD,LPSTR); +HRESULT SHGetFolderPathW(HWND,int,HANDLE,DWORD,LPWSTR); + +static if ((_WIN32_WINDOWS >= 0x0490) || (_WIN32_WINNT >= 0x0500)) {/* ME or W2K */ + HRESULT SHGetFolderLocation(HWND,int,HANDLE,DWORD,LPITEMIDLIST*); +} + +static if (_WIN32_WINNT >= 0x0500) { + INT SHCreateDirectoryExA(HWND,LPCSTR,LPSECURITY_ATTRIBUTES); + INT SHCreateDirectoryExW(HWND,LPCWSTR,LPSECURITY_ATTRIBUTES); + HRESULT SHBindToParent(LPCITEMIDLIST,REFIID,VOID**,LPCITEMIDLIST*); +} + +static if (_WIN32_WINNT >= 0x0501) {/* XP */ + HRESULT SHGetFolderPathAndSubDirA(HWND,int,HANDLE,DWORD,LPCSTR,LPSTR); + HRESULT SHGetFolderPathAndSubDirW(HWND,int,HANDLE,DWORD,LPCWSTR,LPWSTR); +} + +void SHGetSettings(LPSHELLFLAGSTATE,DWORD); + +static if (_WIN32_WINNT >= 0x0500) {/* W2K */ + void SHGetSetSettings(LPSHELLSTATE,DWORD,BOOL); +} + +static if (_WIN32_WINNT >= 0x0500) {/* W2K */ + BOOL ILIsEqual(LPCITEMIDLIST, LPCITEMIDLIST); + BOOL ILIsParent(LPCITEMIDLIST, LPCITEMIDLIST, BOOL); + BOOL ILRemoveLastID(LPITEMIDLIST); + HRESULT ILLoadFromStream(IStream*, LPITEMIDLIST*); + HRESULT ILSaveToStream(IStream*, LPCITEMIDLIST); + LPITEMIDLIST ILAppendID(LPITEMIDLIST, LPCSHITEMID, BOOL); + LPITEMIDLIST ILClone(LPCITEMIDLIST); + LPITEMIDLIST ILCloneFirst(LPCITEMIDLIST); + LPITEMIDLIST ILCombine(LPCITEMIDLIST, LPCITEMIDLIST); + LPITEMIDLIST ILFindChild(LPCITEMIDLIST, LPCITEMIDLIST); + LPITEMIDLIST ILFindLastID(LPCITEMIDLIST); + LPITEMIDLIST ILGetNext(LPCITEMIDLIST); + UINT ILGetSize(LPCITEMIDLIST); + void ILFree(LPITEMIDLIST); + + HRESULT SHCoCreateInstance(LPCWSTR,REFCLSID,IUnknown*,REFIID,void**); +} + +version(Unicode) { + alias IShellExecuteHookW IShellExecuteHook; + alias IShellLinkW IShellLink; + alias BROWSEINFOW BROWSEINFO; + alias SHBrowseForFolderW SHBrowseForFolder; + alias SHGetDataFromIDListW SHGetDataFromIDList; + alias SHGetPathFromIDListW SHGetPathFromIDList; + static if (_WIN32_IE >= 0x0400) { + alias SHGetSpecialFolderPathW SHGetSpecialFolderPath; + } + alias SHGetFolderPathW SHGetFolderPath; + static if (_WIN32_WINNT >= 0x0500) { + alias SHCreateDirectoryExW SHCreateDirectoryEx; + } + static if (_WIN32_WINNT >= 0x0501) { + alias SHGetFolderPathAndSubDirW SHGetFolderPathAndSubDir; + } + alias FILEDESCRIPTORW FILEDESCRIPTOR; + alias LPFILEDESCRIPTORW LPFILEDESCRIPTOR; + alias FILEGROUPDESCRIPTORW FILEGROUPDESCRIPTOR; + alias LPFILEGROUPDESCRIPTORW LPFILEGROUPDESCRIPTOR; + +} else { + alias IShellExecuteHookA IShellExecuteHook; + alias IShellLinkA IShellLink; + alias BROWSEINFOA BROWSEINFO; + alias SHBrowseForFolderA SHBrowseForFolder; + alias SHGetDataFromIDListA SHGetDataFromIDList; + alias SHGetPathFromIDListA SHGetPathFromIDList; + static if (_WIN32_IE >= 0x0400) { + alias SHGetSpecialFolderPathA SHGetSpecialFolderPath; + } + alias SHGetFolderPathA SHGetFolderPath; + static if (_WIN32_WINNT >= 0x0500) { + alias SHCreateDirectoryExA SHCreateDirectoryEx; + } + static if (_WIN32_WINNT >= 0x0501) { + alias SHGetFolderPathAndSubDirA SHGetFolderPathAndSubDir; + } + alias FILEDESCRIPTORA FILEDESCRIPTOR; + alias LPFILEDESCRIPTORA LPFILEDESCRIPTOR; + alias FILEGROUPDESCRIPTORA FILEGROUPDESCRIPTOR; + alias LPFILEGROUPDESCRIPTORA LPFILEGROUPDESCRIPTOR; +} +alias BROWSEINFO* PBROWSEINFO, LPBROWSEINFO; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/shlwapi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/shlwapi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,730 @@ +/***********************************************************************\ +* shlwapi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.shlwapi; +pragma(lib, "shlwapi.lib"); + +/* Changes compared to MinGW: +wnsprintf functions are not included. +// Macros unneeded for D +#define StrCmpIA lstrcmpiA; +#define StrCmpA lstrcmpA; +#define StrCpyA lstrcpyA; +#define StrCpyNA lstrcpynA; +#define MAKEDLLVERULL(major, minor, build, qfe) \ + (((ULONGLONG)(major) << 48) | \ + ((ULONGLONG)(minor) << 32) | \ + ((ULONGLONG)(build) << 16) | \ + ((ULONGLONG)( qfe) << 0)) +*/ + +import win32.objbase, win32.shlobj; +private import win32.basetyps, win32.objidl, win32.unknwn, win32.windef, + win32.winbase, win32.winreg; + +const DLLVER_PLATFORM_WINDOWS = 0x00000001; +const DLLVER_PLATFORM_NT = 0x00000002; + +const URL_DONT_ESCAPE_EXTRA_INFO = 0x02000000; +const URL_DONT_SIMPLIFY = 0x08000000; +const URL_ESCAPE_PERCENT = 0x00001000; +const URL_ESCAPE_SEGMENT_ONLY = 0x00002000; +const URL_ESCAPE_SPACES_ONLY = 0x04000000; +const URL_ESCAPE_UNSAFE = 0x20000000; +const URL_INTERNAL_PATH = 0x00800000; +const URL_PARTFLAG_KEEPSCHEME = 0x00000001; +const URL_PLUGGABLE_PROTOCOL = 0x40000000; +const URL_UNESCAPE = 0x10000000; +const URL_UNESCAPE_HIGH_ANSI_ONLY = 0x00400000; +const URL_UNESCAPE_INPLACE = 0x00100000; + +align(1): +struct DLLVERSIONINFO +{ + DWORD cbSize = this.sizeof; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformID; +} + +struct DLLVERSIONINFO2 +{ + DLLVERSIONINFO info1; + DWORD dwFlags; + ULONGLONG ullVersion; +} + +enum ASSOCSTR { + ASSOCSTR_COMMAND, + ASSOCSTR_EXECUTABLE, + ASSOCSTR_FRIENDLYDOCNAME, + ASSOCSTR_FRIENDLYAPPNAME, + ASSOCSTR_NOOPEN, + ASSOCSTR_SHELLNEWVALUE, + ASSOCSTR_DDECOMMAND, + ASSOCSTR_DDEIFEXEC, + ASSOCSTR_DDEAPPLICATION, + ASSOCSTR_DDETOPIC +} + +enum ASSOCKEY +{ + ASSOCKEY_SHELLEXECCLASS = 1, + ASSOCKEY_APP, + ASSOCKEY_CLASS, + ASSOCKEY_BASECLASS +} + +enum ASSOCDATA +{ + ASSOCDATA_MSIDESCRIPTOR = 1, + ASSOCDATA_NOACTIVATEHANDLER, + ASSOCDATA_QUERYCLASSSTORE +} + +alias DWORD ASSOCF; + +enum SHREGDEL_FLAGS +{ + SHREGDEL_DEFAULT = 0x00000000, + SHREGDEL_HKCU = 0x00000001, + SHREGDEL_HKLM = 0x00000010, + SHREGDEL_BOTH = 0x00000011 +} + +enum SHREGENUM_FLAGS +{ + SHREGENUM_DEFAULT = 0x00000000, + SHREGENUM_HKCU = 0x00000001, + SHREGENUM_HKLM = 0x00000010, + SHREGENUM_BOTH = 0x00000011 +} + +enum URLIS +{ + URLIS_URL, + URLIS_OPAQUE, + URLIS_NOHISTORY, + URLIS_FILEURL, + URLIS_APPLIABLE, + URLIS_DIRECTORY, + URLIS_HASQUERY +} + +alias HANDLE HUSKEY; +alias HUSKEY* PHUSKEY; + +extern (Windows) +{ + alias HRESULT function (DLLVERSIONINFO *) DLLGETVERSIONPROC; +} + + +BOOL IntlStrEqNA(LPCSTR pStr1, LPCSTR pStr2, int nChar) +{ + return IntlStrEqWorkerA(TRUE, pStr1, pStr2, nChar); +} + +BOOL IntlStrEqNW(LPCWSTR pStr1, LPCWSTR pStr2, int nChar) +{ + return IntlStrEqWorkerW(TRUE, pStr1, pStr2, nChar); +} + +BOOL IntlStrEqNIA(LPCSTR pStr1, LPCSTR pStr2, int nChar) +{ + return IntlStrEqWorkerA(FALSE, pStr1, pStr2, nChar); +} + +BOOL IntlStrEqNIW(LPCWSTR pStr1, LPCWSTR pStr2, int nChar) +{ + return IntlStrEqWorkerW(FALSE, pStr1, pStr2, nChar); +} + +BOOL UrlIsFileUrlA(LPCSTR pszURL) +{ + return UrlIsA(pszURL, URLIS.URLIS_FILEURL); +} + +BOOL UrlIsFileUrlW(LPCWSTR pszURL) +{ + return UrlIsW(pszURL, URLIS.URLIS_FILEURL); +} + +HRESULT UrlUnescapeInPlaceA(LPSTR pszUrl,DWORD dwFlags) +{ + return UrlUnescapeA(pszUrl, null, null, dwFlags | URL_UNESCAPE_INPLACE); +} +HRESULT UrlUnescapeInPlaceW(LPWSTR pszUrl,DWORD dwFlags) +{ + return UrlUnescapeW(pszUrl, null, null, dwFlags | URL_UNESCAPE_INPLACE); +} + +extern (Windows): +BOOL ChrCmpIA(WORD,WORD); +BOOL ChrCmpIW(WCHAR,WCHAR); +BOOL IntlStrEqWorkerA(BOOL,LPCSTR,LPCSTR,int); +BOOL IntlStrEqWorkerW(BOOL,LPCWSTR,LPCWSTR,int); +HRESULT SHStrDupA(LPCSTR,LPWSTR*); +HRESULT SHStrDupW(LPCWSTR,LPWSTR*); +LPSTR StrCatA(LPSTR,LPCSTR); +LPWSTR StrCatW(LPWSTR,LPCWSTR); +LPSTR StrCatBuffA(LPSTR,LPCSTR,int); +LPWSTR StrCatBuffW(LPWSTR,LPCWSTR,int); +DWORD StrCatChainW(LPWSTR,DWORD,DWORD,LPCWSTR); +LPSTR StrChrA(LPCSTR,WORD); +LPWSTR StrChrW(LPCWSTR,WCHAR); +LPSTR StrChrIA(LPCSTR,WORD); +LPWSTR StrChrIW(LPCWSTR,WCHAR); +int StrCmpIW(LPCWSTR,LPCWSTR); +int StrCmpW(LPCWSTR,LPCWSTR); +LPWSTR StrCpyW(LPWSTR,LPCWSTR); +LPWSTR StrCpyNW(LPWSTR,LPCWSTR,int); +int StrCmpNA(LPCSTR,LPCSTR,int); +int StrCmpNW(LPCWSTR,LPCWSTR,int); +int StrCmpNIA(LPCSTR,LPCSTR,int); +int StrCmpNIW(LPCWSTR,LPCWSTR,int); +int StrCSpnA(LPCSTR,LPCSTR); +int StrCSpnW(LPCWSTR,LPCWSTR); +int StrCSpnIA(LPCSTR,LPCSTR); +int StrCSpnIW(LPCWSTR,LPCWSTR); +LPSTR StrDupA(LPCSTR); +LPWSTR StrDupW(LPCWSTR); +LPSTR StrFormatByteSize64A(LONGLONG,LPSTR,UINT); +LPSTR StrFormatByteSizeA(DWORD,LPSTR,UINT); +LPWSTR StrFormatByteSizeW(LONGLONG,LPWSTR,UINT); +LPSTR StrFormatKBSizeA(LONGLONG,LPSTR,UINT); +LPWSTR StrFormatKBSizeW(LONGLONG,LPWSTR,UINT); +int StrFromTimeIntervalA(LPSTR,UINT,DWORD,int); +int StrFromTimeIntervalW(LPWSTR,UINT,DWORD,int); +BOOL StrIsIntlEqualA(BOOL,LPCSTR,LPCSTR,int); +BOOL StrIsIntlEqualW(BOOL,LPCWSTR,LPCWSTR,int); +LPSTR StrNCatA(LPSTR,LPCSTR,int); +LPWSTR StrNCatW(LPWSTR,LPCWSTR,int); +LPSTR StrPBrkA(LPCSTR,LPCSTR); +LPWSTR StrPBrkW(LPCWSTR,LPCWSTR); +LPSTR StrRChrA(LPCSTR,LPCSTR,WORD); +LPWSTR StrRChrW(LPCWSTR,LPCWSTR,WCHAR); +LPSTR StrRChrIA(LPCSTR,LPCSTR,WORD); +LPWSTR StrRChrIW(LPCWSTR,LPCWSTR,WCHAR); +LPSTR StrRStrIA(LPCSTR,LPCSTR,LPCSTR); +LPWSTR StrRStrIW(LPCWSTR,LPCWSTR,LPCWSTR); +int StrSpnA(LPCSTR,LPCSTR); +int StrSpnW(LPCWSTR,LPCWSTR); +LPSTR StrStrA(LPCSTR, LPCSTR); +LPSTR StrStrIA(LPCSTR,LPCSTR); +LPWSTR StrStrIW(LPCWSTR,LPCWSTR); +LPWSTR StrStrW(LPCWSTR,LPCWSTR); +int StrToIntA(LPCSTR); +int StrToIntW(LPCWSTR); +BOOL StrToIntExA(LPCSTR,DWORD,int*); +BOOL StrToIntExW(LPCWSTR,DWORD,int*); +BOOL StrTrimA(LPSTR,LPCSTR); +BOOL StrTrimW(LPWSTR,LPCWSTR); +LPSTR PathAddBackslashA(LPSTR); +LPWSTR PathAddBackslashW(LPWSTR); +BOOL PathAddExtensionA(LPSTR,LPCSTR); +BOOL PathAddExtensionW(LPWSTR,LPCWSTR); +BOOL PathAppendA(LPSTR,LPCSTR); +BOOL PathAppendW(LPWSTR,LPCWSTR); +LPSTR PathBuildRootA(LPSTR,int); +LPWSTR PathBuildRootW(LPWSTR,int); +BOOL PathCanonicalizeA(LPSTR,LPCSTR); +BOOL PathCanonicalizeW(LPWSTR,LPCWSTR); +LPSTR PathCombineA(LPSTR,LPCSTR,LPCSTR); +LPWSTR PathCombineW(LPWSTR,LPCWSTR,LPCWSTR); +int PathCommonPrefixA(LPCSTR,LPCSTR,LPSTR); +int PathCommonPrefixW(LPCWSTR,LPCWSTR,LPWSTR); +BOOL PathCompactPathA(HDC,LPSTR,UINT); +BOOL PathCompactPathW(HDC,LPWSTR,UINT); +BOOL PathCompactPathExA(LPSTR,LPCSTR,UINT,DWORD); +BOOL PathCompactPathExW(LPWSTR,LPCWSTR,UINT,DWORD); +HRESULT PathCreateFromUrlA(LPCSTR,LPSTR,LPDWORD,DWORD); +HRESULT PathCreateFromUrlW(LPCWSTR,LPWSTR,LPDWORD,DWORD); +BOOL PathFileExistsA(LPCSTR); +BOOL PathFileExistsW(LPCWSTR); +LPSTR PathFindExtensionA(LPCSTR); +LPWSTR PathFindExtensionW(LPCWSTR); +LPSTR PathFindFileNameA(LPCSTR); +LPWSTR PathFindFileNameW(LPCWSTR); +LPSTR PathFindNextComponentA(LPCSTR); +LPWSTR PathFindNextComponentW(LPCWSTR); +BOOL PathFindOnPathA(LPSTR,LPCSTR*); +BOOL PathFindOnPathW(LPWSTR,LPCWSTR*); +LPCSTR PathFindSuffixArrayA(LPCSTR,LPCSTR*,int); +LPCWSTR PathFindSuffixArrayW(LPCWSTR,LPCWSTR*,int); +LPSTR PathGetArgsA(LPCSTR); +LPWSTR PathGetArgsW(LPCWSTR); +UINT PathGetCharTypeA(UCHAR); +UINT PathGetCharTypeW(WCHAR); +int PathGetDriveNumberA(LPCSTR); +int PathGetDriveNumberW(LPCWSTR); +BOOL PathIsContentTypeA(LPCSTR,LPCSTR); +BOOL PathIsContentTypeW(LPCWSTR,LPCWSTR); +BOOL PathIsDirectoryA(LPCSTR); +BOOL PathIsDirectoryEmptyA(LPCSTR); +BOOL PathIsDirectoryEmptyW(LPCWSTR); +BOOL PathIsDirectoryW(LPCWSTR); +BOOL PathIsFileSpecA(LPCSTR); +BOOL PathIsFileSpecW(LPCWSTR); +BOOL PathIsLFNFileSpecA(LPCSTR); +BOOL PathIsLFNFileSpecW(LPCWSTR); +BOOL PathIsNetworkPathA(LPCSTR); +BOOL PathIsNetworkPathW(LPCWSTR); +BOOL PathIsPrefixA(LPCSTR,LPCSTR); +BOOL PathIsPrefixW(LPCWSTR,LPCWSTR); +BOOL PathIsRelativeA(LPCSTR); +BOOL PathIsRelativeW(LPCWSTR); +BOOL PathIsRootA(LPCSTR); +BOOL PathIsRootW(LPCWSTR); +BOOL PathIsSameRootA(LPCSTR,LPCSTR); +BOOL PathIsSameRootW(LPCWSTR,LPCWSTR); +BOOL PathIsSystemFolderA(LPCSTR,DWORD); +BOOL PathIsSystemFolderW(LPCWSTR,DWORD); +BOOL PathIsUNCA(LPCSTR); +BOOL PathIsUNCServerA(LPCSTR); +BOOL PathIsUNCServerShareA(LPCSTR); +BOOL PathIsUNCServerShareW(LPCWSTR); +BOOL PathIsUNCServerW(LPCWSTR); +BOOL PathIsUNCW(LPCWSTR); +BOOL PathIsURLA(LPCSTR); +BOOL PathIsURLW(LPCWSTR); +BOOL PathMakePrettyA(LPSTR); +BOOL PathMakePrettyW(LPWSTR); +BOOL PathMakeSystemFolderA(LPSTR); +BOOL PathMakeSystemFolderW(LPWSTR); +BOOL PathMatchSpecA(LPCSTR,LPCSTR); +BOOL PathMatchSpecW(LPCWSTR,LPCWSTR); +int PathParseIconLocationA(LPSTR); +int PathParseIconLocationW(LPWSTR); +void PathQuoteSpacesA(LPSTR); +void PathQuoteSpacesW(LPWSTR); +BOOL PathRelativePathToA(LPSTR,LPCSTR,DWORD,LPCSTR,DWORD); +BOOL PathRelativePathToW(LPWSTR,LPCWSTR,DWORD,LPCWSTR,DWORD); +void PathRemoveArgsA(LPSTR); +void PathRemoveArgsW(LPWSTR); +LPSTR PathRemoveBackslashA(LPSTR); +LPWSTR PathRemoveBackslashW(LPWSTR); +void PathRemoveBlanksA(LPSTR); +void PathRemoveBlanksW(LPWSTR); +void PathRemoveExtensionA(LPSTR); +void PathRemoveExtensionW(LPWSTR); +BOOL PathRemoveFileSpecA(LPSTR); +BOOL PathRemoveFileSpecW(LPWSTR); +BOOL PathRenameExtensionA(LPSTR,LPCSTR); +BOOL PathRenameExtensionW(LPWSTR,LPCWSTR); +BOOL PathSearchAndQualifyA(LPCSTR,LPSTR,UINT); +BOOL PathSearchAndQualifyW(LPCWSTR,LPWSTR,UINT); +void PathSetDlgItemPathA(HWND,int,LPCSTR); +void PathSetDlgItemPathW(HWND,int,LPCWSTR); +LPSTR PathSkipRootA(LPCSTR); +LPWSTR PathSkipRootW(LPCWSTR); +void PathStripPathA(LPSTR); +void PathStripPathW(LPWSTR); +BOOL PathStripToRootA(LPSTR); +BOOL PathStripToRootW(LPWSTR); +void PathUndecorateA(LPSTR); +void PathUndecorateW(LPWSTR); +BOOL PathUnExpandEnvStringsA(LPCSTR,LPSTR,UINT); +BOOL PathUnExpandEnvStringsW(LPCWSTR,LPWSTR,UINT); +BOOL PathUnmakeSystemFolderA(LPSTR); +BOOL PathUnmakeSystemFolderW(LPWSTR); +void PathUnquoteSpacesA(LPSTR); +void PathUnquoteSpacesW(LPWSTR); +HRESULT SHAutoComplete(HWND,DWORD); +BOOL SHCreateThread(LPTHREAD_START_ROUTINE,void*,DWORD,LPTHREAD_START_ROUTINE); +DWORD SHCopyKeyA(HKEY,LPCSTR,HKEY,DWORD); +DWORD SHCopyKeyW(HKEY,LPCWSTR,HKEY,DWORD); +DWORD SHDeleteEmptyKeyA(HKEY,LPCSTR); +DWORD SHDeleteEmptyKeyW(HKEY,LPCWSTR); +DWORD SHDeleteKeyA(HKEY,LPCSTR); +DWORD SHDeleteKeyW(HKEY,LPCWSTR); +DWORD SHEnumKeyExA(HKEY,DWORD,LPSTR,LPDWORD); +DWORD SHEnumKeyExW(HKEY,DWORD,LPWSTR,LPDWORD); +DWORD SHQueryInfoKeyA(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD); +DWORD SHQueryInfoKeyW(HKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD); +DWORD SHQueryValueExA(HKEY,LPCSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); +DWORD SHQueryValueExW(HKEY,LPCWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); +HRESULT SHGetThreadRef(IUnknown**); +HRESULT SHSetThreadRef(IUnknown*); +BOOL SHSkipJunction(IBindCtx*, CLSID*); +DWORD SHEnumValueA(HKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); +DWORD SHEnumValueW(HKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD); +DWORD SHGetValueA(HKEY,LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD); +DWORD SHGetValueW(HKEY,LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD); +DWORD SHSetValueA(HKEY,LPCSTR,LPCSTR,DWORD,LPCVOID,DWORD); +DWORD SHSetValueW(HKEY,LPCWSTR,LPCWSTR,DWORD,LPCVOID,DWORD); +DWORD SHDeleteValueA(HKEY,LPCSTR,LPCSTR); +DWORD SHDeleteValueW(HKEY,LPCWSTR,LPCWSTR); +HRESULT AssocCreate(CLSID, IID* ,LPVOID*); +HRESULT AssocQueryKeyA(ASSOCF,ASSOCKEY,LPCSTR,LPCSTR,HKEY*); +HRESULT AssocQueryKeyW(ASSOCF,ASSOCKEY,LPCWSTR,LPCWSTR,HKEY*); +HRESULT AssocQueryStringA(ASSOCF,ASSOCSTR,LPCSTR,LPCSTR,LPSTR,DWORD*); +HRESULT AssocQueryStringByKeyA(ASSOCF,ASSOCSTR,HKEY,LPCSTR,LPSTR,DWORD*); +HRESULT AssocQueryStringByKeyW(ASSOCF,ASSOCSTR,HKEY,LPCWSTR,LPWSTR,DWORD*); +HRESULT AssocQueryStringW(ASSOCF,ASSOCSTR,LPCWSTR,LPCWSTR,LPWSTR,DWORD*); +HRESULT UrlApplySchemeA(LPCSTR,LPSTR,LPDWORD,DWORD); +HRESULT UrlApplySchemeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); +HRESULT UrlCanonicalizeA(LPCSTR,LPSTR,LPDWORD,DWORD); +HRESULT UrlCanonicalizeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); +HRESULT UrlCombineA(LPCSTR,LPCSTR,LPSTR,LPDWORD,DWORD); +HRESULT UrlCombineW(LPCWSTR,LPCWSTR,LPWSTR,LPDWORD,DWORD); +int UrlCompareA(LPCSTR,LPCSTR,BOOL); +int UrlCompareW(LPCWSTR,LPCWSTR,BOOL); +HRESULT UrlCreateFromPathA(LPCSTR,LPSTR,LPDWORD,DWORD); +HRESULT UrlCreateFromPathW(LPCWSTR,LPWSTR,LPDWORD,DWORD); +HRESULT UrlEscapeA(LPCSTR,LPSTR,LPDWORD,DWORD); +HRESULT UrlEscapeW(LPCWSTR,LPWSTR,LPDWORD,DWORD); +LPCSTR UrlGetLocationA(LPCSTR); +LPCWSTR UrlGetLocationW(LPCWSTR); +HRESULT UrlGetPartA(LPCSTR,LPSTR,LPDWORD,DWORD,DWORD); +HRESULT UrlGetPartW(LPCWSTR,LPWSTR,LPDWORD,DWORD,DWORD); +HRESULT UrlHashA(LPCSTR,LPBYTE,DWORD); +HRESULT UrlHashW(LPCWSTR,LPBYTE,DWORD); +BOOL UrlIsA(LPCSTR,URLIS); +BOOL UrlIsW(LPCWSTR,URLIS); +BOOL UrlIsNoHistoryA(LPCSTR); +BOOL UrlIsNoHistoryW(LPCWSTR); +BOOL UrlIsOpaqueA(LPCSTR); +BOOL UrlIsOpaqueW(LPCWSTR); +HRESULT UrlUnescapeA(LPSTR,LPSTR,LPDWORD,DWORD); +HRESULT UrlUnescapeW(LPWSTR,LPWSTR,LPDWORD,DWORD); +DWORD SHRegCloseUSKey(HUSKEY); +LONG SHRegCreateUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,DWORD); +LONG SHRegCreateUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,DWORD); +LONG SHRegDeleteEmptyUSKeyA(HUSKEY,LPCSTR,SHREGDEL_FLAGS); +LONG SHRegDeleteEmptyUSKeyW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS); +LONG SHRegDeleteUSValueA(HUSKEY,LPCSTR,SHREGDEL_FLAGS); +LONG SHRegDeleteUSValueW(HUSKEY,LPCWSTR,SHREGDEL_FLAGS); +HKEY SHRegDuplicateHKey(HKEY); +DWORD SHRegEnumUSKeyA(HUSKEY,DWORD,LPSTR,LPDWORD,SHREGENUM_FLAGS); +DWORD SHRegEnumUSKeyW(HUSKEY,DWORD,LPWSTR,LPDWORD,SHREGENUM_FLAGS); +DWORD SHRegEnumUSValueA(HUSKEY,DWORD,LPSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD,SHREGENUM_FLAGS); +DWORD SHRegEnumUSValueW(HUSKEY,DWORD,LPWSTR,LPDWORD,LPDWORD,LPVOID,LPDWORD,SHREGENUM_FLAGS); +BOOL SHRegGetBoolUSValueA(LPCSTR,LPCSTR,BOOL,BOOL); +BOOL SHRegGetBoolUSValueW(LPCWSTR,LPCWSTR,BOOL,BOOL); +DWORD SHRegGetPathA(HKEY,LPCSTR,LPCSTR,LPSTR,DWORD); +DWORD SHRegGetPathW(HKEY,LPCWSTR,LPCWSTR,LPWSTR,DWORD); +LONG SHRegGetUSValueA(LPCSTR,LPCSTR,LPDWORD,LPVOID,LPDWORD,BOOL,LPVOID,DWORD); +LONG SHRegGetUSValueW(LPCWSTR,LPCWSTR,LPDWORD,LPVOID,LPDWORD,BOOL,LPVOID,DWORD); +LONG SHRegOpenUSKeyA(LPCSTR,REGSAM,HUSKEY,PHUSKEY,BOOL); +LONG SHRegOpenUSKeyW(LPCWSTR,REGSAM,HUSKEY,PHUSKEY,BOOL); +DWORD SHRegQueryInfoUSKeyA(HUSKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD,SHREGENUM_FLAGS); +DWORD SHRegQueryInfoUSKeyW(HUSKEY,LPDWORD,LPDWORD,LPDWORD,LPDWORD,SHREGENUM_FLAGS); +LONG SHRegQueryUSValueA(HUSKEY,LPCSTR,LPDWORD,LPVOID,LPDWORD,BOOL,LPVOID,DWORD); +LONG SHRegQueryUSValueW(HUSKEY,LPCWSTR,LPDWORD,LPVOID,LPDWORD,BOOL,LPVOID,DWORD); +DWORD SHRegSetPathA(HKEY,LPCSTR,LPCSTR,LPCSTR,DWORD); +DWORD SHRegSetPathW(HKEY,LPCWSTR,LPCWSTR,LPCWSTR,DWORD); +LONG SHRegSetUSValueA(LPCSTR,LPCSTR,DWORD,LPVOID,DWORD,DWORD); +LONG SHRegSetUSValueW(LPCWSTR,LPCWSTR,DWORD,LPVOID,DWORD,DWORD); +LONG SHRegWriteUSValueA(HUSKEY,LPCSTR,DWORD,LPVOID,DWORD,DWORD); +LONG SHRegWriteUSValueW(HUSKEY,LPCWSTR,DWORD,LPVOID,DWORD,DWORD); +HRESULT HashData(LPBYTE,DWORD,LPBYTE,DWORD); +HPALETTE SHCreateShellPalette(HDC); +COLORREF ColorHLSToRGB(WORD,WORD,WORD); +COLORREF ColorAdjustLuma(COLORREF,int,BOOL); +void ColorRGBToHLS(COLORREF,WORD*,WORD*,WORD*); +/** Should not be necessary for D? +extern (C): +int wnsprintfA(LPSTR,int,LPCSTR,...); +int wnsprintfW(LPWSTR,int,LPCWSTR,...); +extern (Windows): +int wvnsprintfA(LPSTR,int,LPCSTR,va_list); +int wvnsprintfW(LPWSTR,int,LPCWSTR,va_list); +*/ + +HINSTANCE MLLoadLibraryA(LPCSTR,HANDLE,DWORD,LPCSTR,BOOL); +HINSTANCE MLLoadLibraryW(LPCWSTR,HANDLE,DWORD,LPCWSTR,BOOL); + +HRESULT DllInstall(BOOL,LPCWSTR); + +HRESULT StrRetToBufA(LPSTRRET,LPCITEMIDLIST,LPSTR,UINT); +HRESULT StrRetToBufW(LPSTRRET,LPCITEMIDLIST,LPWSTR,UINT); +HRESULT StrRetToStrA(LPSTRRET,LPCITEMIDLIST,LPSTR*); +HRESULT StrRetToStrW(LPSTRRET,LPCITEMIDLIST,LPWSTR*); +HRESULT SHCreateStreamOnFileA(LPCSTR,DWORD,IStream**); +HRESULT SHCreateStreamOnFileW(LPCWSTR,DWORD,IStream**); +IStream* SHOpenRegStream2A(HKEY,LPCSTR,LPCSTR,DWORD); +IStream* SHOpenRegStream2W(HKEY,LPCWSTR,LPCWSTR,DWORD); +IStream* SHOpenRegStreamA(HKEY,LPCSTR,LPCSTR,DWORD); +IStream* SHOpenRegStreamW(HKEY,LPCWSTR,LPCWSTR,DWORD); + +version(Unicode) { +alias ChrCmpIW ChrCmpI; +alias IntlStrEqNW IntlStrEqN; +alias IntlStrEqNIW IntlStrEqNI; +alias IntlStrEqWorkerW IntlStrEqWorker; +alias SHStrDupW SHStrDup; +alias StrCatW StrCat; +alias StrCatBuffW StrCatBuff; +alias StrChrW StrChr; +alias StrChrIW StrChrI; +alias StrCmpW StrCmp; +alias StrCmpIW StrCmpI; +alias StrCmpNIW StrCmpNI; +alias StrCmpNW StrCmpN; +alias StrCpyNW StrCpyN; +alias StrCpyW StrCpy; +alias StrCSpnIW StrCSpnI; +alias StrCSpnW StrCSpn; +alias StrDupW StrDup; +alias StrFormatByteSizeW StrFormatByteSize; +alias StrFormatKBSizeW StrFormatKBSize; +alias StrFromTimeIntervalW StrFromTimeInterval; +alias StrIsIntlEqualW StrIsIntlEqual; +alias StrNCatW StrNCat; +alias StrPBrkW StrPBrk; +alias StrRChrW StrRChr; +alias StrRChrIW StrRChrI; +alias StrRetToBufW StrRetToBuf; +alias StrRetToStrW StrRetToStr; +alias StrRStrIW StrRStrI; +alias StrSpnW StrSpn; +alias StrStrIW StrStrI; +alias StrStrW StrStr; +alias StrToIntW StrToInt; +alias StrToIntExW StrToIntEx; +alias StrTrimW StrTrim; +alias PathAddBackslashW PathAddBackslash; +alias PathAddExtensionW PathAddExtension; +alias PathAppendW PathAppend; +alias PathBuildRootW PathBuildRoot; +alias PathCanonicalizeW PathCanonicalize; +alias PathCombineW PathCombine; +alias PathCommonPrefixW PathCommonPrefix; +alias PathCompactPathW PathCompactPath; +alias PathCompactPathExW PathCompactPathEx; +alias PathCreateFromUrlW PathCreateFromUrl; +alias PathFileExistsW PathFileExists; +alias PathFindExtensionW PathFindExtension; +alias PathFindFileNameW PathFindFileName; +alias PathFindNextComponentW PathFindNextComponent; +alias PathFindOnPathW PathFindOnPath; +alias PathFindSuffixArrayW PathFindSuffixArray; +alias PathGetArgsW PathGetArgs; +alias PathGetCharTypeW PathGetCharType; +alias PathGetDriveNumberW PathGetDriveNumber; +alias PathIsContentTypeW PathIsContentType; +alias PathIsDirectoryEmptyW PathIsDirectoryEmpty; +alias PathIsDirectoryW PathIsDirectory; +alias PathIsFileSpecW PathIsFileSpec; +alias PathIsLFNFileSpecW PathIsLFNFileSpec; +alias PathIsNetworkPathW PathIsNetworkPath; +alias PathIsPrefixW PathIsPrefix; +alias PathIsRelativeW PathIsRelative; +alias PathIsRootW PathIsRoot; +alias PathIsSameRootW PathIsSameRoot; +alias PathIsSystemFolderW PathIsSystemFolder; +alias PathIsUNCServerShareW PathIsUNCServerShare; +alias PathIsUNCServerW PathIsUNCServer; +alias PathIsUNCW PathIsUNC; +alias PathIsURLW PathIsURL; +alias PathMakePrettyW PathMakePretty; +alias PathMakeSystemFolderW PathMakeSystemFolder; +alias PathMatchSpecW PathMatchSpec; +alias PathParseIconLocationW PathParseIconLocation; +alias PathQuoteSpacesW PathQuoteSpaces; +alias PathRelativePathToW PathRelativePathTo; +alias PathRemoveArgsW PathRemoveArgs; +alias PathRemoveBackslashW PathRemoveBackslash; +alias PathRemoveBlanksW PathRemoveBlanks; +alias PathRemoveExtensionW PathRemoveExtension; +alias PathRemoveFileSpecW PathRemoveFileSpec; +alias PathRenameExtensionW PathRenameExtension; +alias PathSearchAndQualifyW PathSearchAndQualify; +alias PathSetDlgItemPathW PathSetDlgItemPath; +alias PathSkipRootW PathSkipRoot; +alias PathStripPathW PathStripPath; +alias PathStripToRootW PathStripToRoot; +alias PathUndecorateW PathUndecorate; +alias PathUnExpandEnvStringsW PathUnExpandEnvStrings; +alias PathUnmakeSystemFolderW PathUnmakeSystemFolder; +alias PathUnquoteSpacesW PathUnquoteSpaces; +alias SHCreateStreamOnFileW SHCreateStreamOnFile; +alias SHOpenRegStreamW SHOpenRegStream; +alias SHOpenRegStream2W SHOpenRegStream2; +alias SHCopyKeyW SHCopyKey; +alias SHDeleteEmptyKeyW SHDeleteEmptyKey; +alias SHDeleteKeyW SHDeleteKey; +alias SHEnumKeyExW SHEnumKeyEx; +alias SHQueryInfoKeyW SHQueryInfoKey; +alias SHQueryValueExW SHQueryValueEx; +alias SHEnumValueW SHEnumValue; +alias SHGetValueW SHGetValue; +alias SHSetValueW SHSetValue; +alias SHDeleteValueW SHDeleteValue; +alias AssocQueryKeyW AssocQueryKey; +alias AssocQueryStringByKeyW AssocQueryStringByKey; +alias AssocQueryStringW AssocQueryString; +alias UrlApplySchemeW UrlApplyScheme; +alias UrlCanonicalizeW UrlCanonicalize; +alias UrlCombineW UrlCombine; +alias UrlCompareW UrlCompare; +alias UrlCreateFromPathW UrlCreateFromPath; +alias UrlEscapeW UrlEscape; +alias UrlGetLocationW UrlGetLocation; +alias UrlGetPartW UrlGetPart; +alias UrlHashW UrlHash; +alias UrlIsW UrlIs; +alias UrlIsFileUrlW UrlIsFileUrl; +alias UrlIsNoHistoryW UrlIsNoHistory; +alias UrlIsOpaqueW UrlIsOpaque; +alias UrlUnescapeW UrlUnescape; +alias UrlUnescapeInPlaceW UrlUnescapeInPlace; +alias SHRegCreateUSKeyW SHRegCreateUSKey; +alias SHRegDeleteEmptyUSKeyW SHRegDeleteEmptyUSKey; +alias SHRegDeleteUSValueW SHRegDeleteUSValue; +alias SHRegEnumUSKeyW SHRegEnumUSKey; +alias SHRegEnumUSValueW SHRegEnumUSValue; +alias SHRegGetBoolUSValueW SHRegGetBoolUSValue; +alias SHRegGetPathW SHRegGetPath; +alias SHRegGetUSValueW SHRegGetUSValue; +alias SHRegOpenUSKeyW SHRegOpenUSKey; +alias SHRegQueryInfoUSKeyW SHRegQueryInfoUSKey; +alias SHRegQueryUSValueW SHRegQueryUSValue; +alias SHRegSetPathW SHRegSetPath; +alias SHRegSetUSValueW SHRegSetUSValue; +alias SHRegWriteUSValueW SHRegWriteUSValue; +//alias wnsprintfW wnsprintf; +//alias wvnsprintfW wvnsprintf; +} else { +alias ChrCmpIA ChrCmpI; +alias IntlStrEqNA IntlStrEqN; +alias IntlStrEqNIA IntlStrEqNI; +alias IntlStrEqWorkerA IntlStrEqWorker; +alias SHStrDupA SHStrDup; +alias StrCatBuffA StrCatBuff; +alias StrChrA StrChr; +alias StrChrIA StrChrI; +alias StrCmpNIA StrCmpNI; +alias StrCmpNA StrCmpN; +alias StrCSpnIA StrCSpnI; +alias StrCSpnA StrCSpn; +alias StrDupA StrDup; +alias StrFormatByteSizeA StrFormatByteSize; +alias StrFormatKBSizeA StrFormatKBSize; +alias StrFromTimeIntervalA StrFromTimeInterval; +alias StrIsIntlEqualA StrIsIntlEqual; +alias StrNCatA StrNCat; +alias StrPBrkA StrPBrk; +alias StrRChrA StrRChr; +alias StrRChrIA StrRChrI; +alias StrRetToBufA StrRetToBuf; +alias StrRetToStrA StrRetToStr; +alias StrRStrIA StrRStrI; +alias StrSpnA StrSpn; +alias StrStrIA StrStrI; +alias StrStrA StrStr; +alias StrToIntA StrToInt; +alias StrToIntExA StrToIntEx; +alias StrTrimA StrTrim; +alias PathAddBackslashA PathAddBackslash; +alias PathAddExtensionA PathAddExtension; +alias PathAppendA PathAppend; +alias PathBuildRootA PathBuildRoot; +alias PathCanonicalizeA PathCanonicalize; +alias PathCombineA PathCombine; +alias PathCommonPrefixA PathCommonPrefix; +alias PathCompactPathA PathCompactPath; +alias PathCompactPathExA PathCompactPathEx; +alias PathCreateFromUrlA PathCreateFromUrl; +alias PathFileExistsA PathFileExists; +alias PathFindExtensionA PathFindExtension; +alias PathFindFileNameA PathFindFileName; +alias PathFindNextComponentA PathFindNextComponent; +alias PathFindOnPathA PathFindOnPath; +alias PathFindSuffixArrayA PathFindSuffixArray; +alias PathGetArgsA PathGetArgs; +alias PathGetCharTypeA PathGetCharType; +alias PathGetDriveNumberA PathGetDriveNumber; +alias PathIsContentTypeA PathIsContentType; +alias PathIsDirectoryEmptyA PathIsDirectoryEmpty; +alias PathIsDirectoryA PathIsDirectory; +alias PathIsFileSpecA PathIsFileSpec; +alias PathIsLFNFileSpecA PathIsLFNFileSpec; +alias PathIsNetworkPathA PathIsNetworkPath; +alias PathIsPrefixA PathIsPrefix; +alias PathIsRelativeA PathIsRelative; +alias PathIsRootA PathIsRoot; +alias PathIsSameRootA PathIsSameRoot; +alias PathIsSystemFolderA PathIsSystemFolder; +alias PathIsUNCServerShareA PathIsUNCServerShare; +alias PathIsUNCServerA PathIsUNCServer; +alias PathIsUNCA PathIsUNC; +alias PathIsURLA PathIsURL; +alias PathMakePrettyA PathMakePretty; +alias PathMakeSystemFolderA PathMakeSystemFolder; +alias PathMatchSpecA PathMatchSpec; +alias PathParseIconLocationA PathParseIconLocation; +alias PathQuoteSpacesA PathQuoteSpaces; +alias PathRelativePathToA PathRelativePathTo; +alias PathRemoveArgsA PathRemoveArgs; +alias PathRemoveBackslashA PathRemoveBackslash; +alias PathRemoveBlanksA PathRemoveBlanks; +alias PathRemoveExtensionA PathRemoveExtension; +alias PathRemoveFileSpecA PathRemoveFileSpec; +alias PathRenameExtensionA PathRenameExtension; +alias PathSearchAndQualifyA PathSearchAndQualify; +alias PathSetDlgItemPathA PathSetDlgItemPath; +alias PathSkipRootA PathSkipRoot; +alias PathStripPathA PathStripPath; +alias PathStripToRootA PathStripToRoot; +alias PathUndecorateA PathUndecorate; +alias PathUnExpandEnvStringsA PathUnExpandEnvStrings; +alias PathUnmakeSystemFolderA PathUnmakeSystemFolder; +alias PathUnquoteSpacesA PathUnquoteSpaces; +alias SHCreateStreamOnFileA SHCreateStreamOnFile; +alias SHOpenRegStreamA SHOpenRegStream; +alias SHOpenRegStream2A SHOpenRegStream2; +alias SHCopyKeyA SHCopyKey; +alias SHDeleteEmptyKeyA SHDeleteEmptyKey; +alias SHDeleteKeyA SHDeleteKey; +alias SHEnumKeyExA SHEnumKeyEx; +alias SHQueryInfoKeyA SHQueryInfoKey; +alias SHQueryValueExA SHQueryValueEx; +alias SHEnumValueA SHEnumValue; +alias SHGetValueA SHGetValue; +alias SHSetValueA SHSetValue; +alias SHDeleteValueA SHDeleteValue; +alias AssocQueryKeyA AssocQueryKey; +alias AssocQueryStringByKeyA AssocQueryStringByKey; +alias AssocQueryStringA AssocQueryString; +alias UrlApplySchemeA UrlApplyScheme; +alias UrlCanonicalizeA UrlCanonicalize; +alias UrlCombineA UrlCombine; +alias UrlCompareA UrlCompare; +alias UrlCreateFromPathA UrlCreateFromPath; +alias UrlEscapeA UrlEscape; +alias UrlGetLocationA UrlGetLocation; +alias UrlGetPartA UrlGetPart; +alias UrlHashA UrlHash; +alias UrlIsA UrlIs; +alias UrlIsNoHistoryA UrlIsNoHistory; +alias UrlIsOpaqueA UrlIsOpaque; +alias UrlUnescapeA UrlUnescape; +alias UrlUnescapeInPlaceA UrlUnescapeInPlace; +alias SHRegCreateUSKeyA SHRegCreateUSKey; +alias SHRegDeleteEmptyUSKeyA SHRegDeleteEmptyUSKey; +alias SHRegDeleteUSValueA SHRegDeleteUSValue; +alias SHRegEnumUSKeyA SHRegEnumUSKey; +alias SHRegEnumUSValueA SHRegEnumUSValue; +alias SHRegGetBoolUSValueA SHRegGetBoolUSValue; +alias SHRegGetPathA SHRegGetPath; +alias SHRegGetUSValueA SHRegGetUSValue; +alias SHRegOpenUSKeyA SHRegOpenUSKey; +alias SHRegQueryInfoUSKeyA SHRegQueryInfoUSKey; +alias SHRegQueryUSValueA SHRegQueryUSValue; +alias SHRegSetPathA SHRegSetPath; +alias SHRegSetUSValueA SHRegSetUSValue; +alias SHRegWriteUSValueA SHRegWriteUSValue; +//alias wnsprintfA wnsprintf; +//alias wvnsprintfA wvnsprintf; +} + +alias StrToInt StrToLong; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/snmp.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/snmp.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,269 @@ +/***********************************************************************\ +* snmp.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.snmp; + +private import win32.windows; + +// These are not documented on MSDN +enum { + DEFAULT_SNMP_PORT_UDP = 161, + DEFAULT_SNMP_PORT_IPX = 36879, + DEFAULT_SNMPTRAP_PORT_UDP = 162, + DEFAULT_SNMPTRAP_PORT_IPX = 36880 +} + +enum : BYTE { + ASN_UNIVERSAL = 0x00, + ASN_PRIMITIVE = 0x00, + ASN_CONSTRUCTOR = 0x20, + ASN_APPLICATION = 0x40, + ASN_CONTEXT = 0x80, + ASN_PRIVATE = 0xC0, + + SNMP_PDU_GET = ASN_CONTEXT | ASN_CONSTRUCTOR, + SNMP_PDU_GETNEXT, + SNMP_PDU_RESPONSE, + SNMP_PDU_SET, + SNMP_PDU_GETBULK, // = ASN_CONTEXT | ASN_CONSTRUCTOR | 4 + SNMP_PDU_V1TRAP = ASN_CONTEXT | ASN_CONSTRUCTOR | 4, + SNMP_PDU_INFORM = ASN_CONTEXT | ASN_CONSTRUCTOR | 6, + SNMP_PDU_TRAP, + SNMP_PDU_REPORT, + ASN_INTEGER = ASN_UNIVERSAL | ASN_PRIMITIVE | 2, + ASN_BITS, + ASN_OCTETSTRING, + ASN_NULL, + ASN_OBJECTIDENTIFIER, // = ASN_UNIVERSAL | ASN_PRIMITIVE | 6 + ASN_INTEGER32 = ASN_INTEGER, + ASN_SEQUENCE = ASN_UNIVERSAL | ASN_CONSTRUCTOR | 0x10, + ASN_SEQUENCEOF = ASN_SEQUENCE, + ASN_IPADDRESS = ASN_APPLICATION | ASN_PRIMITIVE, + ASN_COUNTER32, + ASN_GAUGE32, + ASN_TIMETICKS, + ASN_OPAQUE, // = ASN_APPLICATION | ASN_PRIMITIVE | 4 + ASN_COUNTER64 = ASN_APPLICATION | ASN_PRIMITIVE | 6, + ASN_UNSIGNED32, // = ASN_APPLICATION | ASN_PRIMITIVE | 7 + SNMP_EXCEPTION_NOSUCHOBJECT = ASN_CONTEXT | ASN_PRIMITIVE, + SNMP_EXCEPTION_NOSUCHINSTANCE, + SNMP_EXCEPTION_ENDOFMIBVIEW, + SNMP_EXTENSION_GET = SNMP_PDU_GET, + SNMP_EXTENSION_GET_NEXT = SNMP_PDU_GETNEXT, + SNMP_EXTENSION_GET_BULK = SNMP_PDU_GETBULK, + SNMP_EXTENSION_SET_TEST = ASN_PRIVATE | ASN_CONSTRUCTOR, + SNMP_EXTENSION_SET_COMMIT = SNMP_PDU_SET, + SNMP_EXTENSION_SET_UNDO = ASN_PRIVATE | ASN_CONSTRUCTOR | 1, + SNMP_EXTENSION_SET_CLEANUP +} + + +enum : AsnInteger { + SNMP_ERRORSTATUS_NOERROR, + SNMP_ERRORSTATUS_TOOBIG, + SNMP_ERRORSTATUS_NOSUCHNAME, + SNMP_ERRORSTATUS_BADVALUE, + SNMP_ERRORSTATUS_READONLY, + SNMP_ERRORSTATUS_GENERR, + SNMP_ERRORSTATUS_NOACCESS, + SNMP_ERRORSTATUS_WRONGTYPE, + SNMP_ERRORSTATUS_WRONGLENGTH, + SNMP_ERRORSTATUS_WRONGENCODING, + SNMP_ERRORSTATUS_WRONGVALUE, + SNMP_ERRORSTATUS_NOCREATION, + SNMP_ERRORSTATUS_INCONSISTENTVALUE, + SNMP_ERRORSTATUS_RESOURCEUNAVAILABLE, + SNMP_ERRORSTATUS_COMMITFAILED, + SNMP_ERRORSTATUS_UNDOFAILED, + SNMP_ERRORSTATUS_AUTHORIZATIONERROR, + SNMP_ERRORSTATUS_NOTWRITABLE, + SNMP_ERRORSTATUS_INCONSISTENTNAME +} + +enum : AsnInteger { + SNMP_GENERICTRAP_COLDSTART, + SNMP_GENERICTRAP_WARMSTART, + SNMP_GENERICTRAP_LINKDOWN, + SNMP_GENERICTRAP_LINKUP, + SNMP_GENERICTRAP_AUTHFAILURE, + SNMP_GENERICTRAP_EGPNEIGHLOSS, + SNMP_GENERICTRAP_ENTERSPECIFIC +} + +// These are not documented on MSDN +enum { + SNMP_ACCESS_NONE, + SNMP_ACCESS_NOTIFY, + SNMP_ACCESS_READ_ONLY, + SNMP_ACCESS_READ_WRITE, + SNMP_ACCESS_READ_CREATE +} + +enum : BOOL { + SNMPAPI_ERROR = false, + SNMPAPI_NOERROR = true +} + +enum : INT { + SNMP_LOG_SILENT, + SNMP_LOG_FATAL, + SNMP_LOG_ERROR, + SNMP_LOG_WARNING, + SNMP_LOG_TRACE, + SNMP_LOG_VERBOSE +} + +const INT + SNMP_OUTPUT_TO_CONSOLE = 1, + SNMP_OUTPUT_TO_LOGFILE = 2, + SNMP_OUTPUT_TO_EVENTLOG = 4, + SNMP_OUTPUT_TO_DEBUGGER = 8; + +const size_t SNMP_MAX_OID_LEN = 128; + +enum : DWORD { + SNMP_MEM_ALLOC_ERROR = 1, + SNMP_BERAPI_INVALID_LENGTH = 10, + SNMP_BERAPI_INVALID_TAG, + SNMP_BERAPI_OVERFLOW, + SNMP_BERAPI_SHORT_BUFFER, + SNMP_BERAPI_INVALID_OBJELEM, + SNMP_PDUAPI_UNRECOGNIZED_PDU = 20, + SNMP_PDUAPI_INVALID_ES, + SNMP_PDUAPI_INVALID_GT, + SNMP_AUTHAPI_INVALID_VERSION = 30, + SNMP_AUTHAPI_INVALID_MSG_TYPE, + SNMP_AUTHAPI_TRIV_AUTH_FAILED, +} + +alias INT SNMPAPI; +alias LONG AsnInteger32; +alias ULONG AsnUnsigned32, AsnCounter32, AsnGauge32, AsnTimeticks; +alias ULARGE_INTEGER AsnCounter64; + +align (4): + +struct AsnOctetString { + BYTE* stream; + UINT length; + BOOL dynamic; +} +alias AsnOctetString AsnBits, AsnSequence, AsnImplicitSequence, + AsnIPAddress, AsnNetworkAddress, AsnDisplayString, AsnOpaque; + +struct AsnObjectIdentifier { + UINT idLength; + UINT* ids; +} +alias AsnObjectIdentifier AsnObjectName; + +struct AsnAny { + BYTE asnType; + union _asnValue { + AsnInteger32 number; + AsnUnsigned32 unsigned32; + AsnCounter64 counter64; + AsnOctetString string; + AsnBits bits; + AsnObjectIdentifier object; + AsnSequence sequence; + AsnIPAddress address; + AsnCounter32 counter; + AsnGauge32 gauge; + AsnTimeticks ticks; + AsnOpaque arbitrary; + } + _asnValue asnValue; +} +alias AsnAny AsnObjectSyntax; + +struct SnmpVarBind { + AsnObjectName name; + AsnObjectSyntax value; +} + +struct SnmpVarBindList { + SnmpVarBind* list; + UINT len; +} + +extern (Windows) { + VOID SnmpExtensionClose(); + BOOL SnmpExtensionInit(DWORD, HANDLE*, AsnObjectIdentifier*); + BOOL SnmpExtensionInitEx(AsnObjectIdentifier*); + BOOL SnmpExtensionMonitor(LPVOID); + BOOL SnmpExtensionQuery(BYTE, SnmpVarBindList*, AsnInteger32*, + AsnInteger32*); + BOOL SnmpExtensionQueryEx(DWORD, DWORD, SnmpVarBindList*, AsnOctetString*, + AsnInteger32*, AsnInteger32*); + BOOL SnmpExtensionTrap(AsnObjectIdentifier*, AsnInteger32*, AsnInteger32*, + AsnTimeticks*, SnmpVarBindList*); + DWORD SnmpSvcGetUptime(); + VOID SnmpSvcSetLogLevel(INT); + VOID SnmpSvcSetLogType(INT); + SNMPAPI SnmpUtilAsnAnyCpy(AsnAny*, AsnAny*); + VOID SnmpUtilAsnAnyFree(AsnAny*); + VOID SnmpUtilDbgPrint(INT, LPSTR, ...); + LPSTR SnmpUtilIdsToA(UINT*, UINT); + LPVOID SnmpUtilMemAlloc(UINT); + VOID SnmpUtilMemFree(LPVOID); + LPVOID SnmpUtilMemReAlloc(LPVOID, UINT); + SNMPAPI SnmpUtilOctetsCmp(AsnOctetString*, AsnOctetString*); + SNMPAPI SnmpUtilOctetsCpy(AsnOctetString*, AsnOctetString*); + VOID SnmpUtilOctetsFree(AsnOctetString*); + SNMPAPI SnmpUtilOctetsNCmp(AsnOctetString*, AsnOctetString*, UINT); + SNMPAPI SnmpUtilOidAppend(AsnObjectIdentifier*, AsnObjectIdentifier*); + SNMPAPI SnmpUtilOidCmp(AsnObjectIdentifier*, AsnObjectIdentifier*); + SNMPAPI SnmpUtilOidCpy(AsnObjectIdentifier*, AsnObjectIdentifier*); + VOID SnmpUtilOidFree(AsnObjectIdentifier*); + SNMPAPI SnmpUtilOidNCmp(AsnObjectIdentifier*, AsnObjectIdentifier*, UINT); + LPSTR SnmpUtilOidToA(AsnObjectIdentifier*); + VOID SnmpUtilPrintAsnAny(AsnAny*); + VOID SnmpUtilPrintOid(AsnObjectIdentifier*); + SNMPAPI SnmpUtilVarBindCpy(SnmpVarBind*, SnmpVarBind*); + SNMPAPI SnmpUtilVarBindListCpy(SnmpVarBindList*, SnmpVarBindList*); + VOID SnmpUtilVarBindFree(SnmpVarBind*); + VOID SnmpUtilVarBindListFree(SnmpVarBindList*); +} + +alias SnmpUtilMemAlloc SNMP_malloc; +alias SnmpUtilMemFree SNMP_free; +alias SnmpUtilMemReAlloc SNMP_realloc; +alias SnmpUtilMemAlloc SNMP_DBG_malloc; +alias SnmpUtilMemFree SNMP_DBG_free; +alias SnmpUtilMemReAlloc SNMP_DBG_realloc; +alias SnmpUtilOidAppend SNMP_oidappend; +alias SnmpUtilOidCmp SNMP_oidcmp; +alias SnmpUtilOidCpy SNMP_oidcpy; +alias SnmpUtilOidFree SNMP_oidfree; +alias SnmpUtilOidNCmp SNMP_oidncmp; +alias SnmpUtilPrintAsnAny SNMP_printany; +alias SnmpUtilVarBindCpy SNMP_CopyVarBind; +alias SnmpUtilVarBindListCpy SNMP_CopyVarBindList; +alias SnmpUtilVarBindFree SNMP_FreeVarBind; +alias SnmpUtilVarBindListFree SNMP_FreeVarBindList; +alias ASN_IPADDRESS ASN_RFC1155_IPADDRESS; +alias ASN_COUNTER32 ASN_RFC1155_COUNTER; +alias ASN_GAUGE32 ASN_RFC1155_GAUGE; +alias ASN_TIMETICKS ASN_RFC1155_TIMETICKS; +alias ASN_OPAQUE ASN_RFC1155_OPAQUE; +alias ASN_OCTETSTRING ASN_RFC1213_DISPSTRING; +alias SNMP_PDU_GET ASN_RFC1157_GETREQUEST; +alias SNMP_PDU_GETNEXT ASN_RFC1157_GETNEXTREQUEST; +alias SNMP_PDU_RESPONSE ASN_RFC1157_GETRESPONSE; +alias SNMP_PDU_SET ASN_RFC1157_SETREQUEST; +alias SNMP_PDU_V1TRAP ASN_RFC1157_TRAP; +alias ASN_CONTEXT ASN_CONTEXTSPECIFIC; +alias ASN_PRIMITIVE ASN_PRIMATIVE; +alias SnmpVarBindList RFC1157VarBindList; +alias SnmpVarBind RFC1157VarBind; +alias AsnInteger32 AsnInteger; +alias AsnCounter32 AsnCounter; +alias AsnGauge32 AsnGauge; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/sql.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/sql.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,434 @@ +/***********************************************************************\ +* sql.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.sql; + +public import win32.sqltypes; +private import win32.windef; + +const ODBCVER = 0x0351; + +const SQL_ACCESSIBLE_PROCEDURES=20; +const SQL_ACCESSIBLE_TABLES=19; +const SQL_ALL_TYPES=0; +const SQL_ALTER_TABLE=86; +const SQL_API_SQLALLOCCONNECT=1; +const SQL_API_SQLALLOCENV=2; +const SQL_API_SQLALLOCSTMT=3; +const SQL_API_SQLBINDCOL=4; +const SQL_API_SQLCANCEL=5; +const SQL_API_SQLCOLUMNS=40; +const SQL_API_SQLCONNECT=7; +const SQL_API_SQLDATASOURCES=57; +const SQL_API_SQLDESCRIBECOL=8; +const SQL_API_SQLDISCONNECT=9; +const SQL_API_SQLERROR=10; +const SQL_API_SQLEXECDIRECT=11; +const SQL_API_SQLEXECUTE=12; +const SQL_API_SQLFETCH=13; +const SQL_API_SQLFREECONNECT=14; +const SQL_API_SQLFREEENV=15; +const SQL_API_SQLFREESTMT=16; +const SQL_API_SQLGETCONNECTOPTION=42; +const SQL_API_SQLGETCURSORNAME=17; +const SQL_API_SQLGETDATA=43; +const SQL_API_SQLGETFUNCTIONS=44; +const SQL_API_SQLGETINFO=45; +const SQL_API_SQLGETSTMTOPTION=46; +const SQL_API_SQLGETTYPEINFO=47; +const SQL_API_SQLNUMRESULTCOLS=18; +const SQL_API_SQLPARAMDATA=48; +const SQL_API_SQLPREPARE=19; +const SQL_API_SQLPUTDATA=49; +const SQL_API_SQLROWCOUNT=20; +const SQL_API_SQLSETCONNECTOPTION=50; +const SQL_API_SQLSETCURSORNAME=21; +const SQL_API_SQLSETPARAM=22; +const SQL_API_SQLSETSTMTOPTION=51; +const SQL_API_SQLSPECIALCOLUMNS=52; +const SQL_API_SQLSTATISTICS=53; +const SQL_API_SQLTABLES=54; +const SQL_API_SQLTRANSACT=23; + +const SQL_CB_DELETE=0; +const SQL_CB_CLOSE=1; +const SQL_CB_PRESERVE=2; + +const SQL_CHAR=1; +const SQL_CLOSE=0; +const SQL_COMMIT=0; +const SQL_CURSOR_COMMIT_BEHAVIOR=23; +const SQL_DATA_AT_EXEC=-2; +const SQL_DATA_SOURCE_NAME=2; +const SQL_DATA_SOURCE_READ_ONLY=25; +const SQL_DBMS_NAME=17; +const SQL_DBMS_VER=18; +const SQL_DECIMAL=3; +const SQL_DEFAULT_TXN_ISOLATION=26; +const SQL_DOUBLE=8; +const SQL_DROP=1; +const SQL_ERROR=-1; + +const SQL_FD_FETCH_NEXT=1; +const SQL_FD_FETCH_FIRST=2; +const SQL_FD_FETCH_LAST=4; +const SQL_FD_FETCH_PRIOR=8; +const SQL_FD_FETCH_ABSOLUTE=16; +const SQL_FD_FETCH_RELATIVE=32; + +const SQL_FETCH_ABSOLUTE=5; +const SQL_FETCH_DIRECTION=8; +const SQL_FETCH_FIRST=2; +const SQL_FETCH_LAST=3; +const SQL_FETCH_NEXT=1; +const SQL_FETCH_PRIOR=4; +const SQL_FETCH_RELATIVE=6; +const SQL_FLOAT=6; +const SQL_GD_ANY_COLUMN=1; +const SQL_GD_ANY_ORDER=2; +const SQL_GETDATA_EXTENSIONS=81; +const SQL_IC_LOWER=2; +const SQL_IC_MIXED=4; +const SQL_IC_SENSITIVE=3; +const SQL_IC_UPPER=1; +const SQL_IDENTIFIER_CASE=28; +const SQL_IDENTIFIER_QUOTE_CHAR=29; + +const SQL_INDEX_ALL=1; +const SQL_INDEX_CLUSTERED=1; +const SQL_INDEX_HASHED=2; +const SQL_INDEX_OTHER=3; +const SQL_INDEX_UNIQUE=0; + +const SQL_INTEGER=4; +const SQL_INTEGRITY=73; +const SQL_INVALID_HANDLE=-2; + +const SQL_MAX_CATALOG_NAME_LEN=34; +const SQL_MAX_COLUMN_NAME_LEN=30; +const SQL_MAX_COLUMNS_IN_GROUP_BY=97; +const SQL_MAX_COLUMNS_IN_INDEX=98; +const SQL_MAX_COLUMNS_IN_ORDER_BY=99; +const SQL_MAX_COLUMNS_IN_SELECT=100; +const SQL_MAX_COLUMNS_IN_TABLE=101; +const SQL_MAX_CURSOR_NAME_LEN=31; +const SQL_MAX_INDEX_SIZE=102; +const SQL_MAX_MESSAGE_LENGTH=512; +const SQL_MAX_ROW_SIZE=104; +const SQL_MAX_SCHEMA_NAME_LEN=32; +const SQL_MAX_STATEMENT_LEN=105; +const SQL_MAX_TABLE_NAME_LEN=35; +const SQL_MAX_TABLES_IN_SELECT=106; +const SQL_MAX_USER_NAME_LEN=107; + +const SQL_MAXIMUM_CATALOG_NAME_LENGTH=SQL_MAX_CATALOG_NAME_LEN; +const SQL_MAXIMUM_COLUMN_NAME_LENGTH=SQL_MAX_COLUMN_NAME_LEN; +const SQL_MAXIMUM_COLUMNS_IN_GROUP_BY=SQL_MAX_COLUMNS_IN_GROUP_BY; +const SQL_MAXIMUM_COLUMNS_IN_INDEX=SQL_MAX_COLUMNS_IN_INDEX; +const SQL_MAXIMUM_COLUMNS_IN_ORDER_BY=SQL_MAX_COLUMNS_IN_ORDER_BY; +const SQL_MAXIMUM_COLUMNS_IN_SELECT=SQL_MAX_COLUMNS_IN_SELECT; +const SQL_MAXIMUM_CURSOR_NAME_LENGTH=SQL_MAX_CURSOR_NAME_LEN; +const SQL_MAXIMUM_INDEX_SIZE=SQL_MAX_INDEX_SIZE; +const SQL_MAXIMUM_ROW_SIZE=SQL_MAX_ROW_SIZE; +const SQL_MAXIMUM_SCHEMA_NAME_LENGTH=SQL_MAX_SCHEMA_NAME_LEN; +const SQL_MAXIMUM_STATEMENT_LENGTH=SQL_MAX_STATEMENT_LEN; +const SQL_MAXIMUM_TABLES_IN_SELECT=SQL_MAX_TABLES_IN_SELECT; +const SQL_MAXIMUM_USER_NAME_LENGTH=SQL_MAX_USER_NAME_LEN; + +const SQL_NC_HIGH=0; +const SQL_NC_LOW=1; +const SQL_NEED_DATA=99; +const SQL_NO_NULLS=0; +const SQL_NTS=-3; +const LONG SQL_NTSL=-3; +const SQL_NULL_COLLATION=85; +const SQL_NULL_DATA=-1; +const SQL_NULL_HDBC=0; +const SQL_NULL_HENV=0; +const SQL_NULL_HSTMT=0; +const SQL_NULLABLE=1; +const SQL_NULLABLE_UNKNOWN=2; +const SQL_NUMERIC=2; +const SQL_ORDER_BY_COLUMNS_IN_SELECT=90; +const SQL_PC_PSEUDO=2; +const SQL_PC_UNKNOWN=0; +const SQL_REAL=7; +const SQL_RESET_PARAMS=3; +const SQL_ROLLBACK=1; +const SQL_SCCO_LOCK=2; +const SQL_SCCO_OPT_ROWVER=4; +const SQL_SCCO_OPT_VALUES=8; +const SQL_SCCO_READ_ONLY=1; +const SQL_SCOPE_CURROW=0; +const SQL_SCOPE_SESSION=2; +const SQL_SCOPE_TRANSACTION=1; +const SQL_SCROLL_CONCURRENCY=43; +const SQL_SEARCH_PATTERN_ESCAPE=14; +const SQL_SERVER_NAME=13; +const SQL_SMALLINT=5; +const SQL_SPECIAL_CHARACTERS=94; +const SQL_STILL_EXECUTING=2; +//MACRO #define SQL_SUCCEEDED(rc) (((rc)&(~1))==0) + +const SQL_SUCCESS=0; +const SQL_SUCCESS_WITH_INFO=1; + +const SQL_TC_ALL=2; +const SQL_TC_DDL_COMMIT=3; +const SQL_TC_DDL_IGNORE=4; +const SQL_TC_DML=1; +const SQL_TC_NONE=0; + + +const SQL_TXN_CAPABLE=46; +const SQL_TXN_ISOLATION_OPTION=72; +const SQL_TXN_READ_COMMITTED=2; +const SQL_TXN_READ_UNCOMMITTED=1; +const SQL_TXN_REPEATABLE_READ=4; +const SQL_TXN_SERIALIZABLE=8; + +const SQL_TRANSACTION_CAPABLE=SQL_TXN_CAPABLE; +const SQL_TRANSACTION_ISOLATION_OPTION=SQL_TXN_ISOLATION_OPTION; +const SQL_TRANSACTION_READ_COMMITTED=SQL_TXN_READ_COMMITTED; +const SQL_TRANSACTION_READ_UNCOMMITTED=SQL_TXN_READ_UNCOMMITTED; +const SQL_TRANSACTION_REPEATABLE_READ=SQL_TXN_REPEATABLE_READ; +const SQL_TRANSACTION_SERIALIZABLE=SQL_TXN_SERIALIZABLE; + +const SQL_UNBIND=2; +const SQL_UNKNOWN_TYPE=0; +const SQL_USER_NAME=47; +const SQL_VARCHAR=12; + +static if (ODBCVER >= 0x0200) { + const SQL_AT_ADD_COLUMN = 1; + const SQL_AT_DROP_COLUMN = 2; +} + +static if (ODBCVER >= 0x0201) { + const SQL_OJ_LEFT = 1; + const SQL_OJ_RIGHT = 2; + const SQL_OJ_FULL = 4; + const SQL_OJ_NESTED = 8; + const SQL_OJ_NOT_ORDERED = 16; + const SQL_OJ_INNER = 32; + const SQL_OJ_ALL_COMPARISON_OPS = 64; +} + +static if (ODBCVER >= 0x0300) { + const SQL_AM_CONNECTION=1; + const SQL_AM_NONE=0; + const SQL_AM_STATEMENT=2; + const SQL_API_SQLALLOCHANDLE=1001; + const SQL_API_SQLBINDPARAM=1002; + const SQL_API_SQLCLOSECURSOR=1003; + const SQL_API_SQLCOLATTRIBUTE=6; + const SQL_API_SQLCOPYDESC=1004; + const SQL_API_SQLENDTRAN=1005; + const SQL_API_SQLFETCHSCROLL=1021; + const SQL_API_SQLFREEHANDLE=1006; + const SQL_API_SQLGETCONNECTATTR=1007; + const SQL_API_SQLGETDESCFIELD=1008; + const SQL_API_SQLGETDESCREC=1009; + const SQL_API_SQLGETDIAGFIELD=1010; + const SQL_API_SQLGETDIAGREC=1011; + const SQL_API_SQLGETENVATTR=1012; + const SQL_API_SQLGETSTMTATTR=1014; + const SQL_API_SQLSETCONNECTATTR=1016; + const SQL_API_SQLSETDESCFIELD=1017; + const SQL_API_SQLSETDESCREC=1018; + const SQL_API_SQLSETENVATTR=1019; + const SQL_API_SQLSETSTMTATTR=1020; + const SQL_ARD_TYPE=-99; + const SQL_AT_ADD_CONSTRAINT=8; + const SQL_ATTR_APP_PARAM_DESC=10011; + const SQL_ATTR_APP_ROW_DESC=10010; + const SQL_ATTR_AUTO_IPD=10001; + const SQL_ATTR_CURSOR_SCROLLABLE=-1; + const SQL_ATTR_CURSOR_SENSITIVITY=-2; + const SQL_ATTR_IMP_PARAM_DESC=10013; + const SQL_ATTR_IMP_ROW_DESC=10012; + const SQL_ATTR_METADATA_ID=10014; + const SQL_ATTR_OUTPUT_NTS=10001; + const SQL_CATALOG_NAME=10003; + const SQL_CODE_DATE=1; + const SQL_CODE_TIME=2; + const SQL_CODE_TIMESTAMP=3; + const SQL_COLLATION_SEQ=10004; + const SQL_CURSOR_SENSITIVITY=10001; + const SQL_DATE_LEN=10; + const SQL_DATETIME=9; + const SQL_DEFAULT=99; + + const SQL_DESC_ALLOC_AUTO=1; + const SQL_DESC_ALLOC_USER=2; + const SQL_DESC_ALLOC_TYPE=1099; + const SQL_DESC_COUNT=1001; + const SQL_DESC_TYPE=1002; + const SQL_DESC_LENGTH=1003; + const SQL_DESC_OCTET_LENGTH_PTR=1004; + const SQL_DESC_PRECISION=1005; + const SQL_DESC_SCALE=1006; + const SQL_DESC_DATETIME_INTERVAL_CODE=1007; + const SQL_DESC_NULLABLE=1008; + const SQL_DESC_INDICATOR_PTR=1009; + const SQL_DESC_DATA_PTR=1010; + const SQL_DESC_NAME=1011; + const SQL_DESC_UNNAMED=1012; + const SQL_DESC_OCTET_LENGTH=1013; + + const SQL_DESCRIBE_PARAMETER=10002; + + const SQL_DIAG_ALTER_DOMAIN=3; + const SQL_DIAG_ALTER_TABLE=4; + const SQL_DIAG_CALL=7; + const SQL_DIAG_CLASS_ORIGIN=8; + const SQL_DIAG_CONNECTION_NAME=10; + const SQL_DIAG_CREATE_ASSERTION=6; + const SQL_DIAG_CREATE_CHARACTER_SET=8; + const SQL_DIAG_CREATE_COLLATION=10; + const SQL_DIAG_CREATE_DOMAIN=23; + const SQL_DIAG_CREATE_INDEX=-1; + const SQL_DIAG_CREATE_SCHEMA=64; + const SQL_DIAG_CREATE_TABLE=77; + const SQL_DIAG_CREATE_TRANSLATION=79; + const SQL_DIAG_CREATE_VIEW=84; + const SQL_DIAG_DELETE_WHERE=19; + const SQL_DIAG_DROP_ASSERTION=24; + const SQL_DIAG_DROP_CHARACTER_SET=25; + const SQL_DIAG_DROP_COLLATION=26; + const SQL_DIAG_DROP_DOMAIN=27; + const SQL_DIAG_DROP_INDEX=(-2); + const SQL_DIAG_DROP_SCHEMA=31; + const SQL_DIAG_DROP_TABLE=32; + const SQL_DIAG_DROP_TRANSLATION=33; + const SQL_DIAG_DROP_VIEW=36; + const SQL_DIAG_DYNAMIC_DELETE_CURSOR=38; + const SQL_DIAG_DYNAMIC_FUNCTION=7; + const SQL_DIAG_DYNAMIC_FUNCTION_CODE=12; + const SQL_DIAG_DYNAMIC_UPDATE_CURSOR=81; + const SQL_DIAG_GRANT=48; + const SQL_DIAG_INSERT=50; + const SQL_DIAG_MESSAGE_TEXT=6; + const SQL_DIAG_NATIVE=5; + const SQL_DIAG_NUMBER=2; + const SQL_DIAG_RETURNCODE=1; + const SQL_DIAG_REVOKE=59; + const SQL_DIAG_ROW_COUNT=3; + const SQL_DIAG_SELECT_CURSOR=85; + const SQL_DIAG_SERVER_NAME=11; + const SQL_DIAG_SQLSTATE=4; + const SQL_DIAG_SUBCLASS_ORIGIN=9; + const SQL_DIAG_UNKNOWN_STATEMENT=0; + const SQL_DIAG_UPDATE_WHERE=82; + + const SQL_FALSE=0; + const SQL_HANDLE_DBC=2; + const SQL_HANDLE_DESC=4; + const SQL_HANDLE_ENV=1; + const SQL_HANDLE_STMT=3; + const SQL_INSENSITIVE=1; + const SQL_MAX_CONCURRENT_ACTIVITIES=1; + const SQL_MAX_DRIVER_CONNECTIONS=0; + const SQL_MAX_IDENTIFIER_LEN=10005; + const SQL_MAXIMUM_CONCURRENT_ACTIVITIES=SQL_MAX_CONCURRENT_ACTIVITIES; + const SQL_MAXIMUM_DRIVER_CONNECTIONS=SQL_MAX_DRIVER_CONNECTIONS; + const SQL_MAXIMUM_IDENTIFIER_LENGTH=SQL_MAX_IDENTIFIER_LEN; + const SQL_NAMED=0; + const SQL_NO_DATA=100; + const SQL_NONSCROLLABLE=0; + const SQL_NULL_HANDLE=0L; + const SQL_NULL_HDESC=0; + const SQL_OJ_CAPABILITIES=115; + const SQL_OUTER_JOIN_CAPABILITIES=SQL_OJ_CAPABILITIES; + const SQL_PC_NON_PSEUDO=1; + + const SQL_PRED_NONE=0; + const SQL_PRED_CHAR=1; + const SQL_PRED_BASIC=2; + + const SQL_ROW_IDENTIFIER=1; + const SQL_SCROLLABLE=1; + const SQL_SENSITIVE=2; + const SQL_TIME_LEN=8; + const SQL_TIMESTAMP_LEN=19; + const SQL_TRUE=1; + const SQL_TYPE_DATE=91; + const SQL_TYPE_TIME=92; + const SQL_TYPE_TIMESTAMP=93; + const SQL_UNNAMED=1; + const SQL_UNSPECIFIED=0; + const SQL_XOPEN_CLI_YEAR=10000; +}//#endif /* ODBCVER >= 0x0300 */ + +extern (Windows) { + deprecated { + SQLRETURN SQLAllocConnect(SQLHENV, SQLHDBC*); + SQLRETURN SQLAllocEnv(SQLHENV*); + SQLRETURN SQLAllocStmt(SQLHDBC, SQLHSTMT*); + SQLRETURN SQLError(SQLHENV, SQLHDBC, SQLHSTMT, SQLCHAR*, SQLINTEGER*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLFreeConnect(SQLHDBC); + SQLRETURN SQLFreeEnv(SQLHENV); + SQLRETURN SQLSetParam(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT, SQLSMALLINT, SQLULEN, SQLSMALLINT, SQLPOINTER, SQLLEN*); + SQLRETURN SQLGetConnectOption(SQLHDBC, SQLUSMALLINT, SQLPOINTER); + SQLRETURN SQLGetStmtOption(SQLHSTMT, SQLUSMALLINT, SQLPOINTER); + SQLRETURN SQLSetConnectOption(SQLHDBC, SQLUSMALLINT, SQLULEN); + SQLRETURN SQLSetStmtOption(SQLHSTMT, SQLUSMALLINT, SQLROWCOUNT); + } + SQLRETURN SQLBindCol(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT, SQLPOINTER, SQLLEN, SQLLEN*); + SQLRETURN SQLCancel(SQLHSTMT); + SQLRETURN SQLConnect(SQLHDBC, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLDescribeCol(SQLHSTMT, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLULEN*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLDisconnect(SQLHDBC); + SQLRETURN SQLExecDirect(SQLHSTMT, SQLCHAR*, SQLINTEGER); + SQLRETURN SQLExecute(SQLHSTMT); + SQLRETURN SQLFetch(SQLHSTMT); + SQLRETURN SQLFreeStmt(SQLHSTMT, SQLUSMALLINT); + SQLRETURN SQLGetCursorName(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLNumResultCols(SQLHSTMT, SQLSMALLINT*); + SQLRETURN SQLPrepare(SQLHSTMT, SQLCHAR*, SQLINTEGER); + SQLRETURN SQLRowCount(SQLHSTMT, SQLLEN*); + SQLRETURN SQLSetCursorName(SQLHSTMT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLTransact(SQLHENV, SQLHDBC, SQLUSMALLINT); + SQLRETURN SQLColumns(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLGetData(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT, SQLPOINTER, SQLLEN, SQLLEN*); + SQLRETURN SQLGetFunctions(SQLHDBC, SQLUSMALLINT, SQLUSMALLINT*); + SQLRETURN SQLGetInfo(SQLHDBC, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetTypeInfo(SQLHSTMT, SQLSMALLINT); + SQLRETURN SQLParamData(SQLHSTMT, SQLPOINTER*); + SQLRETURN SQLPutData(SQLHSTMT, SQLPOINTER, SQLLEN); + SQLRETURN SQLSpecialColumns(SQLHSTMT, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLStatistics(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLTables(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLDataSources(SQLHENV, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + + static if (ODBCVER >= 0x0300) { + SQLRETURN SQLAllocHandle(SQLSMALLINT, SQLHANDLE, SQLHANDLE*); + SQLRETURN SQLBindParam(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT, SQLSMALLINT, SQLULEN, SQLSMALLINT, SQLPOINTER, SQLLEN*); + SQLRETURN SQLCloseCursor(SQLHSTMT); + SQLRETURN SQLColAttribute(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLPOINTER); + SQLRETURN SQLCopyDesc(SQLHDESC, SQLHDESC); + SQLRETURN SQLEndTran(SQLSMALLINT, SQLHANDLE, SQLSMALLINT); + SQLRETURN SQLFetchScroll(SQLHSTMT, SQLSMALLINT, SQLROWOFFSET); + SQLRETURN SQLFreeHandle(SQLSMALLINT, SQLHANDLE); + SQLRETURN SQLGetConnectAttr(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetDescField(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetDescRec(SQLHDESC, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, + SQLSMALLINT*, SQLSMALLINT*, SQLLEN*, SQLSMALLINT*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLGetDiagField(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetDiagRec(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLCHAR*, SQLINTEGER*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetEnvAttr(SQLHENV, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetStmtAttr(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLSetConnectAttr(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetDescField(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetDescRec(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLSMALLINT, SQLLEN, SQLSMALLINT, + SQLSMALLINT, SQLPOINTER, SQLLEN*, SQLLEN*); + SQLRETURN SQLSetEnvAttr(SQLHENV, SQLINTEGER, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetStmtAttr(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER); + }/* (ODBCVER >= 0x0300) */ +} \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/sqlext.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/sqlext.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1295 @@ +/***********************************************************************\ +* sqlext.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.sqlext; + +/* Conversion notes: + The MinGW file was a horrible mess. All of the #defines were sorted alphabetically, + which is crazy. This file needs a lot of work. + In MinGW, sqlext #includes sqlucode, but sqlucode #includes sqlext, + creating a circular dependency! +*/ + +public import win32.sql; +private import win32.windef; + +const SQL_SPEC_MAJOR = 3; +const SQL_SPEC_MINOR = 51; +const char[] SQL_SPEC_STRING = "03.51"; +const SQL_ACCESS_MODE = 101; +const SQL_ACTIVE_CONNECTIONS = 0; +const SQL_ACTIVE_STATEMENTS = 1; + +const SQL_DATE = 9; +const SQL_TIME = 10; +const SQL_SIGNED_OFFSET = -20; +const SQL_TINYINT = -6; +const SQL_TIMESTAMP = 11; +const SQL_UNSIGNED_OFFSET = -22; + +const SQL_ADD = 4; +const SQL_ALL_EXCEPT_LIKE = 2; + +const SQL_API_ALL_FUNCTIONS = 0; +const SQL_API_SQLCOLATTRIBUTES = 6; +const SQL_API_SQLDRIVERCONNECT = 41; +const SQL_API_SQLBROWSECONNECT = 55; +const SQL_API_SQLCOLUMNPRIVILEGES = 56; +const SQL_API_SQLDESCRIBEPARAM = 58; +const SQL_API_SQLEXTENDEDFETCH = 59; +const SQL_API_SQLFOREIGNKEYS = 60; +const SQL_API_SQLMORERESULTS = 61; +const SQL_API_SQLNATIVESQL = 62; +const SQL_API_SQLNUMPARAMS = 63; +const SQL_API_SQLPARAMOPTIONS = 64; +const SQL_API_SQLPRIMARYKEYS = 65; +const SQL_API_SQLPROCEDURECOLUMNS = 66; +const SQL_API_SQLPROCEDURES = 67; +const SQL_API_SQLSETPOS = 68; +const SQL_API_SQLSETSCROLLOPTIONS = 69; +const SQL_API_SQLTABLEPRIVILEGES = 70; +const SQL_API_SQLDRIVERS = 71; +const SQL_API_SQLBINDPARAMETER = 72; +const SQL_API_LOADBYORDINAL = 199; + +const SQL_ASYNC_ENABLE = 4; +const SQL_ASYNC_ENABLE_OFF = 0UL; +const SQL_ASYNC_ENABLE_ON = 1UL; +const SQL_ASYNC_ENABLE_DEFAULT = SQL_ASYNC_ENABLE_OFF; + +const SQL_ATTR_CONNECTION_DEAD = 1209; +const SQL_ATTR_READONLY = 0; +const SQL_ATTR_READWRITE_UNKNOWN = 2; +const SQL_ATTR_WRITE = 1; + +const SQL_AUTOCOMMIT = 102; +const SQL_AUTOCOMMIT_OFF = 0UL; +const SQL_AUTOCOMMIT_ON = 1UL; +const SQL_AUTOCOMMIT_DEFAULT = SQL_AUTOCOMMIT_ON; +const SQL_BEST_ROWID = 1; +const SQL_BIGINT = -5; +const SQL_BINARY = -2; +const SQL_BIND_BY_COLUMN = 0UL; +const SQL_BIND_TYPE = 5; +const SQL_BIND_TYPE_DEFAULT = SQL_BIND_BY_COLUMN; +const SQL_BIT = -7; + +const SQL_BOOKMARK_PERSISTENCE = 82; + +// for BOOKMARK_PERSISTENCE +const SQL_BP_CLOSE = 1; +const SQL_BP_DELETE = 2; +const SQL_BP_DROP = 4; +const SQL_BP_TRANSACTION = 8; +const SQL_BP_UPDATE = 16; +const SQL_BP_OTHER_HSTMT = 32; +const SQL_BP_SCROLL = 64; + +const SQL_C_BINARY = SQL_BINARY; +const SQL_C_BIT = SQL_BIT; +const SQL_C_CHAR = SQL_CHAR; +const SQL_C_DATE = SQL_DATE; +const SQL_C_DOUBLE = SQL_DOUBLE; +const SQL_C_FLOAT = SQL_REAL; +const SQL_C_LONG = SQL_INTEGER; +const SQL_C_SHORT = SQL_SMALLINT; +const SQL_C_SLONG = SQL_C_LONG+SQL_SIGNED_OFFSET; +const SQL_C_SSHORT = SQL_C_SHORT+SQL_SIGNED_OFFSET; +const SQL_C_STINYINT = SQL_TINYINT+SQL_SIGNED_OFFSET; +const SQL_C_TIME = SQL_TIME; +const SQL_C_TIMESTAMP = SQL_TIMESTAMP; +const SQL_C_TINYINT = SQL_TINYINT; +const SQL_C_ULONG = SQL_C_LONG+SQL_UNSIGNED_OFFSET; +const SQL_C_USHORT = SQL_C_SHORT+SQL_UNSIGNED_OFFSET; +const SQL_C_UTINYINT = SQL_TINYINT+SQL_UNSIGNED_OFFSET; +const SQL_C_BOOKMARK = SQL_C_ULONG; +const SQL_C_DEFAULT = 99; + +const SQL_CASCADE = 0; +const SQL_CB_NON_NULL = 1; +const SQL_CB_NULL = 0; +deprecated { +const SQL_CC_CLOSE = SQL_CB_CLOSE;/* deprecated */ +const SQL_CC_DELETE = SQL_CB_DELETE;/* deprecated */ +const SQL_CC_PRESERVE = SQL_CB_PRESERVE;/* deprecated */ +} +const SQL_CD_FALSE = 0L; +const SQL_CD_TRUE = 1L; + +const SQL_CN_ANY = 2; +const SQL_CN_DIFFERENT = 1; +const SQL_CN_NONE = 0; + +const SQL_COLUMN_ALIAS = 87; + +const SQL_COLUMN_COUNT = 0; +const SQL_COLUMN_NAME = 1; +const SQL_COLUMN_DISPLAY_SIZE = 6; +const SQL_COLUMN_LABEL = 18; +const SQL_COLUMN_LENGTH = 3; +const SQL_COLUMN_MONEY = 9; +const SQL_COLUMN_NULLABLE = 7; +const SQL_COLUMN_OWNER_NAME = 16; +const SQL_COLUMN_PRECISION = 4; +const SQL_COLUMN_QUALIFIER_NAME = 17; +const SQL_COLUMN_SCALE = 5; +const SQL_COLUMN_UNSIGNED = 8; +const SQL_COLUMN_UPDATABLE = 10; +const SQL_COLUMN_AUTO_INCREMENT = 11; +const SQL_COLUMN_CASE_SENSITIVE = 12; +const SQL_COLUMN_SEARCHABLE = 13; +const SQL_COLUMN_TYPE = 2; +const SQL_COLUMN_TYPE_NAME = 14; +const SQL_COLUMN_TABLE_NAME = 15; + +const SQL_CONCAT_NULL_BEHAVIOR = 22; + +const SQL_CONCUR_READ_ONLY = 1; +const SQL_CONCUR_DEFAULT = SQL_CONCUR_READ_ONLY; +const SQL_CONCUR_LOCK = 2; +const SQL_CONCUR_ROWVER = 3; +const SQL_CONCUR_TIMESTAMP = SQL_CONCUR_ROWVER;/* deprecated */ +const SQL_CONCUR_VALUES = 4; + +const SQL_CONCURRENCY = 7; +const SQL_CONVERT_BIGINT = 53; +const SQL_CONVERT_BINARY = 54; +const SQL_CONVERT_BIT = 55; +const SQL_CONVERT_CHAR = 56; +const SQL_CONVERT_DATE = 57; +const SQL_CONVERT_DECIMAL = 58; +const SQL_CONVERT_DOUBLE = 59; +const SQL_CONVERT_FLOAT = 60; +const SQL_CONVERT_FUNCTIONS = 48; +const SQL_CONVERT_INTEGER = 61; +const SQL_CONVERT_LONGVARBINARY = 71; +const SQL_CONVERT_LONGVARCHAR = 62; +const SQL_CONVERT_NUMERIC = 63; +const SQL_CONVERT_REAL = 64; +const SQL_CONVERT_SMALLINT = 65; +const SQL_CONVERT_TIME = 66; +const SQL_CONVERT_TIMESTAMP = 67; +const SQL_CONVERT_TINYINT = 68; +const SQL_CONVERT_VARBINARY = 69; +const SQL_CONVERT_VARCHAR = 70; +const SQL_CORRELATION_NAME = 74; +const SQL_CR_CLOSE = SQL_CB_CLOSE;/* deprecated */ +const SQL_CR_DELETE = SQL_CB_DELETE;/* deprecated */ +const SQL_CR_PRESERVE = SQL_CB_PRESERVE;/* deprecated */ + +enum : ULONG { + SQL_CUR_USE_IF_NEEDED = 0, + SQL_CUR_USE_ODBC, + SQL_CUR_USE_DRIVER, + SQL_CUR_DEFAULT = SQL_CUR_USE_DRIVER +} + +const SQL_CURRENT_QUALIFIER = 109; +const SQL_CURSOR_DYNAMIC = 2UL; +const SQL_CURSOR_FORWARD_ONLY = 0UL; +const SQL_CURSOR_KEYSET_DRIVEN = 1UL; +const SQL_CURSOR_ROLLBACK_BEHAVIOR = 24; +const SQL_CURSOR_STATIC = 3UL; +const SQL_CURSOR_TYPE = 6; +const SQL_CURSOR_TYPE_DEFAULT = SQL_CURSOR_FORWARD_ONLY; + +const SQL_CV_CASCADED = 0x00000004L; +const SQL_CV_CHECK_OPTION = 0x00000002L; +const SQL_CV_CREATE_VIEW = 0x00000001L; +const SQL_CV_LOCAL = 0x00000008L; +const SQL_CVT_BIGINT = 0x00004000L; +const SQL_CVT_BINARY = 0x00000400L; +const SQL_CVT_BIT = 0x00001000L; +const SQL_CVT_CHAR = 0x00000001L; +const SQL_CVT_DATE = 0x00008000L; +const SQL_CVT_DECIMAL = 0x00000004L; +const SQL_CVT_DOUBLE = 0x00000080L; +const SQL_CVT_FLOAT = 0x00000020L; +const SQL_CVT_INTEGER = 0x00000008L; +const SQL_CVT_LONGVARBINARY = 0x00040000L; +const SQL_CVT_LONGVARCHAR = 0x00000200L; +const SQL_CVT_NUMERIC = 0x00000002L; +const SQL_CVT_REAL = 0x00000040L; +const SQL_CVT_SMALLINT = 0x00000010L; +const SQL_CVT_TIME = 0x00010000L; +const SQL_CVT_TIMESTAMP = 0x00020000L; +const SQL_CVT_TINYINT = 0x00002000L; +const SQL_CVT_VARBINARY = 0x00000800L; +const SQL_CVT_VARCHAR = 0x00000100L; +const SQL_DATABASE_NAME = 16;/* deprecated */ + +const SQL_DEFAULT_PARAM = -5; +const SQL_DELETE = 3; + +const SQL_DRIVER_COMPLETE = 1; +const SQL_DRIVER_COMPLETE_REQUIRED = 3; +const SQL_DRIVER_HDBC = 3; +const SQL_DRIVER_HENV = 4; +const SQL_DRIVER_HLIB = 76; +const SQL_DRIVER_HSTMT = 5; +const SQL_DRIVER_NAME = 6; +const SQL_DRIVER_NOPROMPT = 0; +const SQL_DRIVER_ODBC_VER = 77; +const SQL_DRIVER_PROMPT = 2; +const SQL_DRIVER_VER = 7; + +const SQL_DTC_ENLIST_EXPENSIVE = 1; +const SQL_DTC_UNENLIST_EXPENSIVE = 2; +const SQL_DTC_TRANSITION_COST = 1750; +const SQL_ENSURE = 1; +const SQL_ENTIRE_ROWSET = 0; +const SQL_EXPRESSIONS_IN_ORDERBY = 27; +const SQL_FD_FETCH_BOOKMARK = 128; +const SQL_FD_FETCH_PREV = SQL_FD_FETCH_PRIOR;/* deprecated */ +const SQL_FD_FETCH_RESUME = 64; +const SQL_FETCH_BOOKMARK = 8; +const SQL_FETCH_PREV = SQL_FETCH_PRIOR;/* deprecated */ +const SQL_FETCH_RESUME = 7;/* deprecated */ + +const SQL_FILE_NOT_SUPPORTED = 0x0000; +const SQL_FILE_TABLE = 0x0001; +const SQL_FILE_QUALIFIER = 0x0002; +const SQL_FILE_CATALOG = SQL_FILE_QUALIFIER; +const SQL_FILE_USAGE = 84; + +const SQL_FN_CVT_CONVERT = 0x00000001L; +const SQL_FN_NUM_ABS = 0x00000001L; +const SQL_FN_NUM_ACOS = 0x00000002L; +const SQL_FN_NUM_ASIN = 0x00000004L; +const SQL_FN_NUM_ATAN = 0x00000008L; +const SQL_FN_NUM_ATAN2 = 0x00000010L; +const SQL_FN_NUM_CEILING = 0x00000020L; +const SQL_FN_NUM_COS = 0x00000040L; +const SQL_FN_NUM_COT = 0x00000080L; +const SQL_FN_NUM_DEGREES = 0x00040000L; +const SQL_FN_NUM_EXP = 0x00000100L; +const SQL_FN_NUM_FLOOR = 0x00000200L; +const SQL_FN_NUM_LOG = 0x00000400L; +const SQL_FN_NUM_LOG10 = 0x00080000L; +const SQL_FN_NUM_MOD = 0x00000800L; +const SQL_FN_NUM_PI = 0x00010000L; +const SQL_FN_NUM_POWER = 0x00100000L; +const SQL_FN_NUM_RADIANS = 0x00200000L; +const SQL_FN_NUM_RAND = 0x00020000L; +const SQL_FN_NUM_ROUND = 0x00400000L; +const SQL_FN_NUM_SIGN = 0x00001000L; +const SQL_FN_NUM_SIN = 0x00002000L; +const SQL_FN_NUM_SQRT = 0x00004000L; +const SQL_FN_NUM_TAN = 0x00008000L; +const SQL_FN_NUM_TRUNCATE = 0x00800000L; +const SQL_FN_STR_ASCII = 0x00002000L; +const SQL_FN_STR_CHAR = 0x00004000L; +const SQL_FN_STR_CONCAT = 0x00000001L; +const SQL_FN_STR_DIFFERENCE = 0x00008000L; +const SQL_FN_STR_INSERT = 0x00000002L; +const SQL_FN_STR_LCASE = 0x00000040L; +const SQL_FN_STR_LEFT = 0x00000004L; +const SQL_FN_STR_LENGTH = 0x00000010L; +const SQL_FN_STR_LOCATE = 0x00000020L; +const SQL_FN_STR_LOCATE_2 = 0x00010000L; +const SQL_FN_STR_LTRIM = 0x00000008L; +const SQL_FN_STR_REPEAT = 0x00000080L; +const SQL_FN_STR_REPLACE = 0x00000100L; +const SQL_FN_STR_RIGHT = 0x00000200L; +const SQL_FN_STR_RTRIM = 0x00000400L; +const SQL_FN_STR_SOUNDEX = 0x00020000L; +const SQL_FN_STR_SPACE = 0x00040000L; +const SQL_FN_STR_SUBSTRING = 0x00000800L; +const SQL_FN_STR_UCASE = 0x00001000L; +const SQL_FN_SYS_DBNAME = 0x00000002L; +const SQL_FN_SYS_IFNULL = 0x00000004L; +const SQL_FN_SYS_USERNAME = 0x00000001L; +const SQL_FN_TD_CURDATE = 0x00000002L; +const SQL_FN_TD_CURTIME = 0x00000200L; +const SQL_FN_TD_DAYNAME = 0x00008000L; +const SQL_FN_TD_DAYOFMONTH = 0x00000004L; +const SQL_FN_TD_DAYOFWEEK = 0x00000008L; +const SQL_FN_TD_DAYOFYEAR = 0x00000010L; +const SQL_FN_TD_HOUR = 0x00000400L; +const SQL_FN_TD_MINUTE = 0x00000800L; +const SQL_FN_TD_MONTH = 0x00000020L; +const SQL_FN_TD_MONTHNAME = 0x00010000L; +const SQL_FN_TD_NOW = 0x00000001L; +const SQL_FN_TD_QUARTER = 0x00000040L; +const SQL_FN_TD_SECOND = 0x00001000L; +const SQL_FN_TD_TIMESTAMPADD = 0x00002000L; +const SQL_FN_TD_TIMESTAMPDIFF = 0x00004000L; +const SQL_FN_TD_WEEK = 0x00000080L; +const SQL_FN_TD_YEAR = 0x00000100L; +const SQL_FN_TSI_DAY = 0x00000010L; +const SQL_FN_TSI_FRAC_SECOND = 0x00000001L; +const SQL_FN_TSI_HOUR = 0x00000008L; +const SQL_FN_TSI_MINUTE = 0x00000004L; +const SQL_FN_TSI_MONTH = 0x00000040L; +const SQL_FN_TSI_QUARTER = 0x00000080L; +const SQL_FN_TSI_SECOND = 0x00000002L; +const SQL_FN_TSI_WEEK = 0x00000020L; +const SQL_FN_TSI_YEAR = 0x00000100L; +const SQL_GB_GROUP_BY_CONTAINS_SELECT = 2; +const SQL_GB_GROUP_BY_EQUALS_SELECT = 1; +const SQL_GB_NO_RELATION = 3; +const SQL_GB_NOT_SUPPORTED = 0; +const SQL_GD_BLOCK = 4; +const SQL_GD_BOUND = 8; +const SQL_GET_BOOKMARK = 13; +const SQL_GROUP_BY = 88; +const SQL_IGNORE = -6; +const SQL_INFO_FIRST = 0; +const SQL_KEYSET_SIZE = 8; +const SQL_KEYSET_SIZE_DEFAULT = 0UL; +const SQL_KEYWORDS = 89; +const SQL_LCK_EXCLUSIVE = 2; +const SQL_LCK_NO_CHANGE = 1; +const SQL_LCK_UNLOCK = 4; + +const SQL_LEN_BINARY_ATTR_OFFSET = -100; +const SQL_LEN_DATA_AT_EXEC_OFFSET = -100; +//MACRO #define SQL_LEN_BINARY_ATTR(length) (-(length)+SQL_LEN_BINARY_ATTR_OFFSET) +//MACRO #define SQL_LEN_DATA_AT_EXEC(length) (-(length)+SQL_LEN_DATA_AT_EXEC_OFFSET) + +const SQL_LIKE_ESCAPE_CLAUSE = 113; +const SQL_LIKE_ONLY = 1; +const SQL_LOCK_EXCLUSIVE = 1; +const SQL_LOCK_NO_CHANGE = 0; +const SQL_LOCK_TYPES = 78; +const SQL_LOCK_UNLOCK = 2; +const SQL_LOGIN_TIMEOUT = 103; +const SQL_LOGIN_TIMEOUT_DEFAULT = 15UL; +const SQL_LONGVARBINARY = -4; +const SQL_LONGVARCHAR = -1; +const SQL_MAX_BINARY_LITERAL_LEN = 112; +const SQL_MAX_CHAR_LITERAL_LEN = 108; +const SQL_MAX_DSN_LENGTH = 32; +const SQL_MAX_LENGTH = 3; +const SQL_MAX_LENGTH_DEFAULT = 0UL; +const SQL_MAX_OPTION_STRING_LENGTH = 256; +const SQL_MAX_OWNER_NAME_LEN = 32; +const SQL_MAX_PROCEDURE_NAME_LEN = 33; +const SQL_MAX_QUALIFIER_NAME_LEN = 34; +const SQL_MAX_ROW_SIZE_INCLUDES_LONG = 103; +const SQL_MAX_ROWS = 1; +const SQL_MAX_ROWS_DEFAULT = 0UL; + +const SQL_MODE_READ_WRITE = 0UL; +const SQL_MODE_READ_ONLY = 1UL; +const SQL_MODE_DEFAULT = SQL_MODE_READ_WRITE; + +const SQL_MULT_RESULT_SETS = 36; +const SQL_MULTIPLE_ACTIVE_TXN = 37; +const SQL_NC_END = 0x0004; +const SQL_NC_START = 0x0002; +const SQL_NEED_LONG_DATA_LEN = 111; +const SQL_NNC_NON_NULL = 0x0001; +const SQL_NNC_NULL = 0x0000; +const SQL_NO_TOTAL = -4; +const SQL_NON_NULLABLE_COLUMNS = 75; + +const SQL_NOSCAN_OFF = 0UL; +const SQL_NOSCAN_ON = 1UL; +const SQL_NOSCAN = 2; +const SQL_NOSCAN_DEFAULT = SQL_NOSCAN_OFF; + +const SQL_NUMERIC_FUNCTIONS = 49; +const SQL_OAC_LEVEL1 = 0x0001; +const SQL_OAC_LEVEL2 = 0x0002; +const SQL_OAC_NONE = 0x0000; +const SQL_ODBC_API_CONFORMANCE = 9; +const SQL_ODBC_CURSORS = 110; +const SQL_ODBC_SAG_CLI_CONFORMANCE = 12; +const SQL_ODBC_SQL_CONFORMANCE = 15; +const SQL_ODBC_SQL_OPT_IEF = 73; +const SQL_ODBC_VER = 10; +const SQL_OPT_TRACE = 104; + +const SQL_OPT_TRACE_FILE_DEFAULT = "\\SQL.LOG"; +const SQL_OPT_TRACE_OFF = 0UL; +const SQL_OPT_TRACE_DEFAULT = SQL_OPT_TRACE_OFF; +const SQL_OPT_TRACE_ON = 1UL; + +const SQL_OPT_TRACEFILE = 105; +const SQL_OSC_CORE = 1; +const SQL_OSC_EXTENDED = 2; +const SQL_OSC_MINIMUM = 0; +const SQL_OSCC_COMPLIANT = 1; +const SQL_OSCC_NOT_COMPLIANT = 0; +const SQL_OU_DML_STATEMENTS = 1; +const SQL_OU_INDEX_DEFINITION = 8; +const SQL_OU_PRIVILEGE_DEFINITION = 16; +const SQL_OU_PROCEDURE_INVOCATION = 2; +const SQL_OU_TABLE_DEFINITION = 4; +const SQL_OUTER_JOINS = 38; +const SQL_OWNER_TERM = 39; +const SQL_OWNER_USAGE = 91; +const SQL_PACKET_SIZE = 112; +const SQL_PARAM_INPUT = 1; +const SQL_PARAM_INPUT_OUTPUT = 2; +const SQL_PARAM_OUTPUT = 4; +const SQL_PARAM_TYPE_DEFAULT = SQL_PARAM_INPUT_OUTPUT; +const SQL_PARAM_TYPE_UNKNOWN = 0; +const SQL_PC_NOT_PSEUDO = 1; +const SQL_POS_ADD = 16; +const SQL_POS_DELETE = 8; +const SQL_POS_OPERATIONS = 79; +const SQL_POS_POSITION = 1; +const SQL_POS_REFRESH = 2; +const SQL_POS_UPDATE = 4; +const SQL_POSITION = 0; +const SQL_POSITIONED_STATEMENTS = 80; +const SQL_PROCEDURE_TERM = 40; +const SQL_PROCEDURES = 21; +const SQL_PS_POSITIONED_DELETE = 1; +const SQL_PS_POSITIONED_UPDATE = 2; +const SQL_PS_SELECT_FOR_UPDATE = 4; +const SQL_PT_FUNCTION = 2; +const SQL_PT_PROCEDURE = 1; +const SQL_PT_UNKNOWN = 0; +const SQL_QL_END = 0x0002; +const SQL_QL_START = 0x0001; +const SQL_QU_DML_STATEMENTS = 1; +const SQL_QU_INDEX_DEFINITION = 8; +const SQL_QU_PRIVILEGE_DEFINITION = 16; +const SQL_QU_PROCEDURE_INVOCATION = 2; +const SQL_QU_TABLE_DEFINITION = 4; +const SQL_QUALIFIER_LOCATION = 114; +const SQL_QUALIFIER_NAME_SEPARATOR = 41; +const SQL_QUALIFIER_TERM = 42; +const SQL_QUALIFIER_USAGE = 92; +const SQL_QUERY_TIMEOUT = 0; +const SQL_QUERY_TIMEOUT_DEFAULT = 0UL; +const SQL_QUICK = 0; +const SQL_QUIET_MODE = 111; +const SQL_QUOTED_IDENTIFIER_CASE = 93; + +const SQL_RD_OFF = 0UL; +const SQL_RD_ON = 1UL; +const SQL_RD_DEFAULT = SQL_RD_ON; + +const SQL_REFRESH = 1; +const SQL_RESTRICT = 1; +const SQL_RESULT_COL = 3; +const SQL_RETRIEVE_DATA = 11; +const SQL_RETURN_VALUE = 5; +const SQL_ROW_ADDED = 4; +const SQL_ROW_DELETED = 1; +const SQL_ROW_ERROR = 5; +const SQL_ROW_NOROW = 3; +const SQL_ROW_NUMBER = 14; +const SQL_ROW_SUCCESS = 0; +const SQL_ROW_UPDATED = 2; +const SQL_ROW_UPDATES = 11; +const SQL_ROWSET_SIZE = 9; +const SQL_ROWSET_SIZE_DEFAULT = 1UL; +const SQL_ROWVER = 2; +const SQL_SC_NON_UNIQUE = 0UL; +const SQL_SC_TRY_UNIQUE = 1UL; +const SQL_SC_UNIQUE = 2UL; +const SQL_SCCO_OPT_TIMESTAMP = SQL_SCCO_OPT_ROWVER;/* deprecated */ +const SQL_SCROLL_DYNAMIC = -2L;/* deprecated */ +const SQL_SCROLL_FORWARD_ONLY = 0L;/* deprecated */ +const SQL_SCROLL_KEYSET_DRIVEN = -1L;/* deprecated */ +const SQL_SCROLL_OPTIONS = 44; +const SQL_SCROLL_STATIC = -3L;/* deprecated */ +const SQL_SEARCHABLE = 3; +const SQL_SET_NULL = 2; +const SQL_SETPARAM_VALUE_MAX = -1L; +const SQL_SETPOS_MAX_LOCK_VALUE = SQL_LOCK_UNLOCK; +const SQL_SETPOS_MAX_OPTION_VALUE = SQL_ADD; +const SQL_SIMULATE_CURSOR = 10; +const SQL_SO_DYNAMIC = 4; +const SQL_SO_FORWARD_ONLY = 1; +const SQL_SO_KEYSET_DRIVEN = 2; +const SQL_SO_MIXED = 8; +const SQL_SO_STATIC = 16; +const SQL_SQ_COMPARISON = 1; +const SQL_SQ_CORRELATED_SUBQUERIES = 16; +const SQL_SQ_EXISTS = 2; +const SQL_SQ_IN = 4; +const SQL_SQ_QUANTIFIED = 8; +const SQL_SQLSTATE_SIZE = 5; +const SQL_SS_ADDITIONS = 1; +const SQL_SS_DELETIONS = 2; +const SQL_SS_UPDATES = 4; +const SQL_STATIC_SENSITIVITY = 83; +const SQL_STRING_FUNCTIONS = 50; +const SQL_SUBQUERIES = 95; +const SQL_SYSTEM_FUNCTIONS = 51; +const SQL_TABLE_STAT = 0; +const SQL_TABLE_TERM = 45; +const SQL_TIMEDATE_ADD_INTERVALS = 109; +const SQL_TIMEDATE_DIFF_INTERVALS = 110; +const SQL_TIMEDATE_FUNCTIONS = 52; +const SQL_TRANSLATE_DLL = 106; +const SQL_TRANSLATE_OPTION = 107; +const SQL_TXN_ISOLATION = 108; +const SQL_TXN_VERSIONING = 16; +const SQL_TYPE_NULL = 0; +const SQL_U_UNION = 1; +const SQL_U_UNION_ALL = 2; + +const SQL_UB_OFF = 0UL; +const SQL_UB_DEFAULT = SQL_UB_OFF; +const SQL_UB_ON = 01UL; + +const SQL_UNION = 96; +const SQL_UNSEARCHABLE = 0; +const SQL_UPDATE = 2; +const SQL_USE_BOOKMARKS = 12; +const SQL_VARBINARY = -3; + +const SQL_COLATT_OPT_MAX = SQL_COLUMN_LABEL; +const SQL_COLATT_OPT_MIN = SQL_COLUMN_COUNT; +const SQL_PRED_SEARCHABLE = SQL_SEARCHABLE; + +//MACRO #define SQL_POSITION_TO(s, r) SQLSetPos(s, r, SQL_POSITION, SQL_LOCK_NO_CHANGE) + +//MACRO #define SQL_LOCK_RECORD(s, r, l) SQLSetPos(s, r, SQL_POSITION, l) + +//MACRO #define SQL_REFRESH_RECORD(s, r, l) SQLSetPos(s, r, SQL_REFRESH, l) + +//MACRO #define SQL_UPDATE_RECORD(s, r) SQLSetPos(s, r, SQL_UPDATE, SQL_LOCK_NO_CHANGE) + +//MACRO #define SQL_DELETE_RECORD(s, r) SQLSetPos(s, r, SQL_DELETE, SQL_LOCK_NO_CHANGE) + +//MACRO #define SQL_ADD_RECORD(s, r) SQLSetPos(s, r, SQL_ADD, SQL_LOCK_NO_CHANGE) + + +static if (ODBCVER < 0x0300) { + const SQL_CONNECT_OPT_DRVR_START = 1000; + const SQL_CONN_OPT_MAX = SQL_PACKET_SIZE; + const SQL_CONN_OPT_MIN = SQL_ACCESS_MODE; + const SQL_STMT_OPT_MAX = SQL_ROW_NUMBER; + const SQL_STMT_OPT_MIN = SQL_QUERY_TIMEOUT; + const SQL_TYPE_DRIVER_START = SQL_INTERVAL_YEAR; + const SQL_TYPE_DRIVER_END = SQL_UNICODE_LONGVARCHAR; + const SQL_TYPE_MIN = SQL_BIT; + const SQL_TYPE_MAX = SQL_VARCHAR; +} + +static if (ODBCVER < 0x0300) { + const SQL_NO_DATA_FOUND = 100; + const SQL_INTERVAL_YEAR = -80; + const SQL_INTERVAL_MONTH = -81; + const SQL_INTERVAL_YEAR_TO_MONTH = -82; + const SQL_INTERVAL_DAY = -83; + const SQL_INTERVAL_HOUR = -84; + const SQL_INTERVAL_MINUTE = -85; + const SQL_INTERVAL_SECOND = -86; + const SQL_INTERVAL_DAY_TO_HOUR = -87; + const SQL_INTERVAL_DAY_TO_MINUTE = -88; + const SQL_INTERVAL_DAY_TO_SECOND = -89; + const SQL_INTERVAL_HOUR_TO_MINUTE = -90; + const SQL_INTERVAL_HOUR_TO_SECOND = -91; + const SQL_INTERVAL_MINUTE_TO_SECOND = -92; +} else { + const SQL_NO_DATA_FOUND = SQL_NO_DATA; + const SQL_CODE_YEAR = 1; + const SQL_CODE_MONTH = 2; + const SQL_CODE_DAY = 3; + const SQL_CODE_HOUR = 4; + const SQL_CODE_MINUTE = 5; + const SQL_CODE_SECOND = 6; + const SQL_CODE_YEAR_TO_MONTH = 7; + const SQL_CODE_DAY_TO_HOUR = 8; + const SQL_CODE_DAY_TO_MINUTE = 9; + const SQL_CODE_DAY_TO_SECOND = 10; + const SQL_CODE_HOUR_TO_MINUTE = 11; + const SQL_CODE_HOUR_TO_SECOND = 12; + const SQL_CODE_MINUTE_TO_SECOND = 13; + const SQL_INTERVAL_YEAR = 100 + SQL_CODE_YEAR; + const SQL_INTERVAL_MONTH = 100 + SQL_CODE_MONTH; + const SQL_INTERVAL_DAY = 100 + SQL_CODE_DAY; + const SQL_INTERVAL_HOUR = 100 + SQL_CODE_HOUR; + const SQL_INTERVAL_MINUTE = 100 + SQL_CODE_MINUTE; + const SQL_INTERVAL_SECOND = 100 + SQL_CODE_SECOND; + const SQL_INTERVAL_YEAR_TO_MONTH = 100 + SQL_CODE_YEAR_TO_MONTH; + const SQL_INTERVAL_DAY_TO_HOUR = 100 + SQL_CODE_DAY_TO_HOUR; + const SQL_INTERVAL_DAY_TO_MINUTE = 100 + SQL_CODE_DAY_TO_MINUTE; + const SQL_INTERVAL_DAY_TO_SECOND = 100 + SQL_CODE_DAY_TO_SECOND; + const SQL_INTERVAL_HOUR_TO_MINUTE = 100 + SQL_CODE_HOUR_TO_MINUTE; + const SQL_INTERVAL_HOUR_TO_SECOND = 100 + SQL_CODE_HOUR_TO_SECOND; + const SQL_INTERVAL_MINUTE_TO_SECOND = 100 + SQL_CODE_MINUTE_TO_SECOND; +}//[Yes] #endif + + +static if ((ODBCVER >= 0x0201) && (ODBCVER < 0x0300)) { + const SQL_OJ_CAPABILITIES = 65003; +} + +static if (ODBCVER >= 0x0250) { + const SQL_NO_ACTION = 3; + const SQL_SET_DEFAULT = 4; +} + +static if (ODBCVER >= 0x0300) { + const SQL_ACTIVE_ENVIRONMENTS = 116; + const SQL_AD_ADD_CONSTRAINT_DEFERRABLE = 0x00000080L; + const SQL_AD_ADD_CONSTRAINT_INITIALLY_DEFERRED = 0x00000020L; + const SQL_AD_ADD_CONSTRAINT_INITIALLY_IMMEDIATE = 0x00000040L; + const SQL_AD_ADD_CONSTRAINT_NON_DEFERRABLE = 0x00000100L; + const SQL_AD_ADD_DOMAIN_CONSTRAINT = 0x00000002L; + const SQL_AD_ADD_DOMAIN_DEFAULT = 0x00000008L; + const SQL_AD_CONSTRAINT_NAME_DEFINITION = 0x00000001L; + const SQL_AD_DROP_DOMAIN_CONSTRAINT = 0x00000004L; + const SQL_AD_DROP_DOMAIN_DEFAULT = 0x00000010L; + const SQL_AF_ALL = 0x00000040L; + const SQL_AF_AVG = 0x00000001L; + const SQL_AF_COUNT = 0x00000002L; + const SQL_AF_DISTINCT = 0x00000020L; + const SQL_AF_MAX = 0x00000004L; + const SQL_AF_MIN = 0x00000008L; + const SQL_AF_SUM = 0x00000010L; + const SQL_AGGREGATE_FUNCTIONS = 169; + const SQL_ALL_CATALOGS = "%"; + const SQL_ALL_SCHEMAS = "%"; + const SQL_ALL_TABLE_TYPES = "%"; + const SQL_ALTER_DOMAIN = 117; + const SQL_AM_CONNECTION = 1; + const SQL_AM_NONE = 0; + const SQL_AM_STATEMENT = 2; + const SQL_API_ODBC3_ALL_FUNCTIONS = 999; + const SQL_API_ODBC3_ALL_FUNCTIONS_SIZE = 250; + const SQL_API_SQLALLOCHANDLESTD = 73; + const SQL_API_SQLBULKOPERATIONS = 24; + const SQL_ASYNC_MODE = 10021; + const SQL_AT_ADD_COLUMN_COLLATION = 0x00000080L; + const SQL_AT_ADD_COLUMN_DEFAULT = 0x00000040L; + const SQL_AT_ADD_COLUMN_SINGLE = 0x00000020L; + const SQL_AT_ADD_TABLE_CONSTRAINT = 0x00001000L; + const SQL_AT_CONSTRAINT_DEFERRABLE = 0x00040000L; + const SQL_AT_CONSTRAINT_INITIALLY_DEFERRED = 0x00010000L; + const SQL_AT_CONSTRAINT_INITIALLY_IMMEDIATE = 0x00020000L; + const SQL_AT_CONSTRAINT_NAME_DEFINITION = 0x00008000L; + const SQL_AT_CONSTRAINT_NON_DEFERRABLE = 0x00080000L; + const SQL_AT_DROP_COLUMN_CASCADE = 0x00000400L; + const SQL_AT_DROP_COLUMN_DEFAULT = 0x00000200L; + const SQL_AT_DROP_COLUMN_RESTRICT = 0x00000800L; + const SQL_AT_DROP_TABLE_CONSTRAINT_CASCADE = 0x00002000L; + const SQL_AT_DROP_TABLE_CONSTRAINT_RESTRICT = 0x00004000L; + const SQL_AT_SET_COLUMN_DEFAULT = 0x00000100L; + const SQL_ATTR_ACCESS_MODE = SQL_ACCESS_MODE; + const SQL_ATTR_ASYNC_ENABLE = 4; + const SQL_ATTR_AUTOCOMMIT = SQL_AUTOCOMMIT; + const SQL_ATTR_CONCURRENCY = SQL_CONCURRENCY; + const SQL_ATTR_CONNECTION_POOLING = 201; + const SQL_ATTR_CONNECTION_TIMEOUT = 113; + const SQL_ATTR_CP_MATCH = 202; + const SQL_ATTR_CURRENT_CATALOG = SQL_CURRENT_QUALIFIER; + const SQL_ATTR_CURSOR_TYPE = SQL_CURSOR_TYPE; + const SQL_ATTR_DISCONNECT_BEHAVIOR = 114; + const SQL_ATTR_ENABLE_AUTO_IPD = 15; + const SQL_ATTR_ENLIST_IN_DTC = 1207; + const SQL_ATTR_ENLIST_IN_XA = 1208; + const SQL_ATTR_FETCH_BOOKMARK_PTR = 16; + const SQL_ATTR_KEYSET_SIZE = SQL_KEYSET_SIZE; + const SQL_ATTR_LOGIN_TIMEOUT = SQL_LOGIN_TIMEOUT; + const SQL_ATTR_MAX_LENGTH = SQL_MAX_LENGTH; + const SQL_ATTR_MAX_ROWS = SQL_MAX_ROWS; + const SQL_ATTR_NOSCAN = SQL_NOSCAN; + const SQL_ATTR_ODBC_CURSORS = SQL_ODBC_CURSORS; + const SQL_ATTR_ODBC_VERSION = 200; + const SQL_ATTR_PACKET_SIZE = SQL_PACKET_SIZE; + const SQL_ATTR_PARAM_BIND_OFFSET_PTR = 17; + const SQL_ATTR_PARAM_BIND_TYPE = 18; + const SQL_ATTR_PARAM_OPERATION_PTR = 19; + const SQL_ATTR_PARAM_STATUS_PTR = 20; + const SQL_ATTR_PARAMS_PROCESSED_PTR = 21; + const SQL_ATTR_PARAMSET_SIZE = 22; + const SQL_ATTR_QUERY_TIMEOUT = SQL_QUERY_TIMEOUT; + const SQL_ATTR_QUIET_MODE = SQL_QUIET_MODE; + const SQL_ATTR_RETRIEVE_DATA = SQL_RETRIEVE_DATA; + const SQL_ATTR_ROW_ARRAY_SIZE = 27; + const SQL_ATTR_ROW_BIND_OFFSET_PTR = 23; + const SQL_ATTR_ROW_BIND_TYPE = SQL_BIND_TYPE; + const SQL_ATTR_ROW_NUMBER = SQL_ROW_NUMBER; + const SQL_ATTR_ROW_OPERATION_PTR = 24; + const SQL_ATTR_ROW_STATUS_PTR = 25; + const SQL_ATTR_ROWS_FETCHED_PTR = 26; + const SQL_ATTR_SIMULATE_CURSOR = SQL_SIMULATE_CURSOR; + const SQL_ATTR_TRACE = SQL_OPT_TRACE; + const SQL_ATTR_TRACEFILE = SQL_OPT_TRACEFILE; + const SQL_ATTR_TRANSLATE_LIB = SQL_TRANSLATE_DLL; + const SQL_ATTR_TRANSLATE_OPTION = SQL_TRANSLATE_OPTION; + const SQL_ATTR_TXN_ISOLATION = SQL_TXN_ISOLATION; + const SQL_ATTR_USE_BOOKMARKS = SQL_USE_BOOKMARKS; + const SQL_BATCH_ROW_COUNT = 120; + const SQL_BATCH_SUPPORT = 121; + const SQL_BRC_EXPLICIT = 0x0000002; + const SQL_BRC_PROCEDURES = 0x0000001; + const SQL_BRC_ROLLED_UP = 0x0000004; + const SQL_BS_ROW_COUNT_EXPLICIT = 0x00000002L; + const SQL_BS_ROW_COUNT_PROC = 0x00000008L; + const SQL_BS_SELECT_EXPLICIT = 0x00000001L; + const SQL_BS_SELECT_PROC = 0x00000004L; + const SQL_C_INTERVAL_DAY = SQL_INTERVAL_DAY; + const SQL_C_INTERVAL_DAY_TO_HOUR = SQL_INTERVAL_DAY_TO_HOUR; + const SQL_C_INTERVAL_DAY_TO_MINUTE = SQL_INTERVAL_DAY_TO_MINUTE; + const SQL_C_INTERVAL_DAY_TO_SECOND = SQL_INTERVAL_DAY_TO_SECOND; + const SQL_C_INTERVAL_HOUR = SQL_INTERVAL_HOUR; + const SQL_C_INTERVAL_HOUR_TO_MINUTE = SQL_INTERVAL_HOUR_TO_MINUTE; + const SQL_C_INTERVAL_HOUR_TO_SECOND = SQL_INTERVAL_HOUR_TO_SECOND; + const SQL_C_INTERVAL_MINUTE = SQL_INTERVAL_MINUTE; + const SQL_C_INTERVAL_MINUTE_TO_SECOND = SQL_INTERVAL_MINUTE_TO_SECOND; + const SQL_C_INTERVAL_MONTH = SQL_INTERVAL_MONTH; + const SQL_C_INTERVAL_SECOND = SQL_INTERVAL_SECOND; + const SQL_C_INTERVAL_YEAR = SQL_INTERVAL_YEAR; + const SQL_C_INTERVAL_YEAR_TO_MONTH = SQL_INTERVAL_YEAR_TO_MONTH; + const SQL_C_NUMERIC = SQL_NUMERIC; + const SQL_C_SBIGINT = SQL_BIGINT+SQL_SIGNED_OFFSET; + const SQL_C_TYPE_DATE = SQL_TYPE_DATE; + const SQL_C_TYPE_TIME = SQL_TYPE_TIME; + const SQL_C_TYPE_TIMESTAMP = SQL_TYPE_TIMESTAMP; + const SQL_C_UBIGINT = SQL_BIGINT+SQL_UNSIGNED_OFFSET; + const SQL_C_VARBOOKMARK = SQL_C_BINARY; + const SQL_CA_CONSTRAINT_DEFERRABLE = 0x00000040L; + const SQL_CA_CONSTRAINT_INITIALLY_DEFERRED = 0x00000010L; + const SQL_CA_CONSTRAINT_INITIALLY_IMMEDIATE = 0x00000020L; + const SQL_CA_CONSTRAINT_NON_DEFERRABLE = 0x00000080L; + const SQL_CA_CREATE_ASSERTION = 0x00000001L; + const SQL_CA1_ABSOLUTE = 0x00000002L; + const SQL_CA1_BOOKMARK = 0x00000008L; + const SQL_CA1_BULK_ADD = 0x00010000L; + const SQL_CA1_BULK_DELETE_BY_BOOKMARK = 0x00040000L; + const SQL_CA1_BULK_FETCH_BY_BOOKMARK = 0x00080000L; + const SQL_CA1_BULK_UPDATE_BY_BOOKMARK = 0x00020000L; + const SQL_CA1_LOCK_EXCLUSIVE = 0x00000080L; + const SQL_CA1_LOCK_NO_CHANGE = 0x00000040L; + const SQL_CA1_LOCK_UNLOCK = 0x00000100L; + const SQL_CA1_NEXT = 0x00000001L; + const SQL_CA1_POS_DELETE = 0x00000800L; + const SQL_CA1_POS_POSITION = 0x00000200L; + const SQL_CA1_POS_REFRESH = 0x00001000L; + const SQL_CA1_POS_UPDATE = 0x00000400L; + const SQL_CA1_POSITIONED_DELETE = 0x00004000L; + const SQL_CA1_POSITIONED_UPDATE = 0x00002000L; + const SQL_CA1_RELATIVE = 0x00000004L; + const SQL_CA1_SELECT_FOR_UPDATE = 0x00008000L; + const SQL_CA2_CRC_APPROXIMATE = 0x00002000L; + const SQL_CA2_CRC_EXACT = 0x00001000L; + const SQL_CA2_LOCK_CONCURRENCY = 0x00000002L; + + const SQL_CA2_MAX_ROWS_CATALOG = 0x00000800L; + const SQL_CA2_MAX_ROWS_DELETE = 0x00000200L; + const SQL_CA2_MAX_ROWS_INSERT = 0x00000100L; + const SQL_CA2_MAX_ROWS_SELECT = 0x00000080L; + const SQL_CA2_MAX_ROWS_UPDATE = 0x00000400L; + const SQL_CA2_MAX_ROWS_AFFECTS_ALL = SQL_CA2_MAX_ROWS_SELECT | SQL_CA2_MAX_ROWS_INSERT | + SQL_CA2_MAX_ROWS_DELETE | SQL_CA2_MAX_ROWS_UPDATE | SQL_CA2_MAX_ROWS_CATALOG; + + const SQL_CA2_OPT_ROWVER_CONCURRENCY = 0x00000004L; + const SQL_CA2_OPT_VALUES_CONCURRENCY = 0x00000008L; + const SQL_CA2_READ_ONLY_CONCURRENCY = 0x00000001L; + const SQL_CA2_SENSITIVITY_ADDITIONS = 0x00000010L; + const SQL_CA2_SENSITIVITY_DELETIONS = 0x00000020L; + const SQL_CA2_SENSITIVITY_UPDATES = 0x00000040L; + const SQL_CA2_SIMULATE_NON_UNIQUE = 0x00004000L; + const SQL_CA2_SIMULATE_TRY_UNIQUE = 0x00008000L; + const SQL_CA2_SIMULATE_UNIQUE = 0x00010000L; + const SQL_CATALOG_LOCATION = SQL_QUALIFIER_LOCATION; + const SQL_CATALOG_NAME_SEPARATOR = SQL_QUALIFIER_NAME_SEPARATOR; + const SQL_CATALOG_TERM = SQL_QUALIFIER_TERM; + const SQL_CATALOG_USAGE = SQL_QUALIFIER_USAGE; + const SQL_CCOL_CREATE_COLLATION = 0x00000001L; + const SQL_CCS_COLLATE_CLAUSE = 0x00000002L; + const SQL_CCS_CREATE_CHARACTER_SET = 0x00000001L; + const SQL_CCS_LIMITED_COLLATION = 0x00000004L; + const SQL_CDO_COLLATION = 0x00000008L; + const SQL_CDO_CONSTRAINT = 0x00000004L; + const SQL_CDO_CONSTRAINT_DEFERRABLE = 0x00000080L; + const SQL_CDO_CONSTRAINT_INITIALLY_DEFERRED = 0x00000020L; + const SQL_CDO_CONSTRAINT_INITIALLY_IMMEDIATE = 0x00000040L; + const SQL_CDO_CONSTRAINT_NAME_DEFINITION = 0x00000010L; + const SQL_CDO_CONSTRAINT_NON_DEFERRABLE = 0x00000100L; + const SQL_CDO_CREATE_DOMAIN = 0x00000001L; + const SQL_CDO_DEFAULT = 0x00000002L; + const SQL_CL_END = SQL_QL_END; + const SQL_CL_START = SQL_QL_START; + const SQL_COL_PRED_BASIC = SQL_ALL_EXCEPT_LIKE; + const SQL_COL_PRED_CHAR = SQL_LIKE_ONLY; + const SQL_COLUMN_DRIVER_START = 1000; + const SQL_COLUMN_IGNORE = SQL_IGNORE; + const SQL_COLUMN_NUMBER_UNKNOWN = -2; + const SQL_CONVERT_GUID = 173; + + const SQL_CONVERT_WCHAR = 122; + const SQL_CONVERT_INTERVAL_DAY_TIME = 123; + const SQL_CONVERT_INTERVAL_YEAR_MONTH = 124; + const SQL_CONVERT_WLONGVARCHAR = 125; + const SQL_CONVERT_WVARCHAR = 126; + + const SQL_CREATE_ASSERTION = 127; + const SQL_CREATE_CHARACTER_SET = 128; + const SQL_CREATE_COLLATION = 129; + const SQL_CREATE_DOMAIN = 130; + const SQL_CREATE_SCHEMA = 131; + const SQL_CREATE_TABLE = 132; + const SQL_CREATE_TRANSLATION = 133; + const SQL_CREATE_VIEW = 134; + + + const SQL_CP_OFF = 0UL; + const SQL_CP_DEFAULT = SQL_CP_OFF; + const SQL_CP_ONE_PER_DRIVER = 1UL; + const SQL_CP_ONE_PER_HENV = 2UL; + + const SQL_CP_STRICT_MATCH = 0UL; + const SQL_CP_MATCH_DEFAULT = SQL_CP_STRICT_MATCH; + const SQL_CP_RELAXED_MATCH = 1UL; + + const SQL_CS_CREATE_SCHEMA = 0x00000001L; + const SQL_CS_AUTHORIZATION = 0x00000002L; + const SQL_CS_DEFAULT_CHARACTER_SET = 0x00000004L; + + const SQL_CT_COLUMN_COLLATION = 0x00000800L; + const SQL_CT_COLUMN_CONSTRAINT = 0x00000200L; + const SQL_CT_COLUMN_DEFAULT = 0x00000400L; + const SQL_CT_COMMIT_DELETE = 0x00000004L; + const SQL_CT_COMMIT_PRESERVE = 0x00000002L; + const SQL_CT_CONSTRAINT_DEFERRABLE = 0x00000080L; + const SQL_CT_CONSTRAINT_INITIALLY_DEFERRED = 0x00000020L; + const SQL_CT_CONSTRAINT_INITIALLY_IMMEDIATE = 0x00000040L; + const SQL_CT_CONSTRAINT_NAME_DEFINITION = 0x00002000L; + const SQL_CT_CONSTRAINT_NON_DEFERRABLE = 0x00000100L; + const SQL_CT_CREATE_TABLE = 0x00000001L; + const SQL_CT_GLOBAL_TEMPORARY = 0x00000008L; + const SQL_CT_LOCAL_TEMPORARY = 0x00000010L; + const SQL_CT_TABLE_CONSTRAINT = 0x00001000L; + + const SQL_CTR_CREATE_TRANSLATION = 0x00000001L; + + const SQL_CU_DML_STATEMENTS = SQL_QU_DML_STATEMENTS; + const SQL_CU_INDEX_DEFINITION = SQL_QU_INDEX_DEFINITION; + const SQL_CU_PRIVILEGE_DEFINITION = SQL_QU_PRIVILEGE_DEFINITION; + const SQL_CU_PROCEDURE_INVOCATION = SQL_QU_PROCEDURE_INVOCATION; + const SQL_CU_TABLE_DEFINITION = SQL_QU_TABLE_DEFINITION; + + const SQL_CVT_INTERVAL_YEAR_MONTH = 0x00080000L; + const SQL_CVT_INTERVAL_DAY_TIME = 0x00100000L; + const SQL_CVT_WCHAR = 0x00200000L; + const SQL_CVT_WLONGVARCHAR = 0x00400000L; + const SQL_CVT_WVARCHAR = 0x00800000L; + const SQL_CVT_GUID = 0x01000000L; + + const SQL_DA_DROP_ASSERTION = 0x00000001L; + const SQL_DATETIME_LITERALS = 119; + + const SQL_DB_DISCONNECT = 1UL; + const SQL_DB_RETURN_TO_POOL = 0UL; + const SQL_DB_DEFAULT = SQL_DB_RETURN_TO_POOL; + + const SQL_DC_DROP_COLLATION = 0x00000001L; + const SQL_DCS_DROP_CHARACTER_SET = 0x00000001L; + const SQL_DD_CASCADE = 0x00000004L; + const SQL_DD_DROP_DOMAIN = 0x00000001L; + const SQL_DD_RESTRICT = 0x00000002L; + const SQL_DDL_INDEX = 170; + const SQL_DELETE_BY_BOOKMARK = 6; + const SQL_DESC_ARRAY_SIZE = 20; + const SQL_DESC_ARRAY_STATUS_PTR = 21; + const SQL_DESC_AUTO_UNIQUE_VALUE = SQL_COLUMN_AUTO_INCREMENT; + const SQL_DESC_BASE_COLUMN_NAME = 22; + const SQL_DESC_BASE_TABLE_NAME = 23; + const SQL_DESC_BIND_OFFSET_PTR = 24; + const SQL_DESC_BIND_TYPE = 25; + const SQL_DESC_CASE_SENSITIVE = SQL_COLUMN_CASE_SENSITIVE; + const SQL_DESC_CATALOG_NAME = SQL_COLUMN_QUALIFIER_NAME; + const SQL_DESC_CONCISE_TYPE = SQL_COLUMN_TYPE; + const SQL_DESC_DATETIME_INTERVAL_PRECISION = 26; + const SQL_DESC_DISPLAY_SIZE = SQL_COLUMN_DISPLAY_SIZE; + const SQL_DESC_FIXED_PREC_SCALE = SQL_COLUMN_MONEY; + const SQL_DESC_LABEL = SQL_COLUMN_LABEL; + const SQL_DESC_LITERAL_PREFIX = 27; + const SQL_DESC_LITERAL_SUFFIX = 28; + const SQL_DESC_LOCAL_TYPE_NAME = 29; + const SQL_DESC_MAXIMUM_SCALE = 30; + const SQL_DESC_MINIMUM_SCALE = 31; + const SQL_DESC_NUM_PREC_RADIX = 32; + const SQL_DESC_PARAMETER_TYPE = 33; + const SQL_DESC_ROWS_PROCESSED_PTR = 34; + const SQL_DESC_SCHEMA_NAME = SQL_COLUMN_OWNER_NAME; + const SQL_DESC_SEARCHABLE = SQL_COLUMN_SEARCHABLE; + const SQL_DESC_TABLE_NAME = SQL_COLUMN_TABLE_NAME; + const SQL_DESC_TYPE_NAME = SQL_COLUMN_TYPE_NAME; + const SQL_DESC_UNSIGNED = SQL_COLUMN_UNSIGNED; + const SQL_DESC_UPDATABLE = SQL_COLUMN_UPDATABLE; + const SQL_DI_CREATE_INDEX = 0x00000001L; + const SQL_DI_DROP_INDEX = 0x00000002L; + + const SQL_DIAG_COLUMN_NUMBER = -1247; + const SQL_DIAG_ROW_NUMBER = -1248; + const SQL_DIAG_CURSOR_ROW_COUNT = -1249; + + const SQL_DL_SQL92_DATE = 0x00000001L; + const SQL_DL_SQL92_INTERVAL_DAY = 0x00000020L; + const SQL_DL_SQL92_INTERVAL_DAY_TO_HOUR = 0x00000400L; + const SQL_DL_SQL92_INTERVAL_DAY_TO_MINUTE = 0x00000800L; + const SQL_DL_SQL92_INTERVAL_DAY_TO_SECOND = 0x00001000L; + const SQL_DL_SQL92_INTERVAL_HOUR = 0x00000040L; + const SQL_DL_SQL92_INTERVAL_HOUR_TO_MINUTE = 0x00002000L; + const SQL_DL_SQL92_INTERVAL_HOUR_TO_SECOND = 0x00004000L; + const SQL_DL_SQL92_INTERVAL_MINUTE = 0x00000080L; + const SQL_DL_SQL92_INTERVAL_MINUTE_TO_SECOND = 0x00008000L; + const SQL_DL_SQL92_INTERVAL_MONTH = 0x00000010L; + const SQL_DL_SQL92_INTERVAL_SECOND = 0x00000100L; + const SQL_DL_SQL92_INTERVAL_YEAR = 0x00000008L; + const SQL_DL_SQL92_INTERVAL_YEAR_TO_MONTH = 0x00000200L; + const SQL_DL_SQL92_TIME = 0x00000002L; + const SQL_DL_SQL92_TIMESTAMP = 0x00000004L; + const SQL_DM_VER = 171; + const SQL_DRIVER_HDESC = 135; + const SQL_DROP_ASSERTION = 136; + const SQL_DROP_CHARACTER_SET = 137; + const SQL_DROP_COLLATION = 138; + const SQL_DROP_DOMAIN = 139; + const SQL_DROP_SCHEMA = 140; + const SQL_DROP_TABLE = 141; + const SQL_DROP_TRANSLATION = 142; + const SQL_DROP_VIEW = 143; + const SQL_DS_CASCADE = 0x00000004L; + const SQL_DS_DROP_SCHEMA = 0x00000001L; + const SQL_DS_RESTRICT = 0x00000002L; + const SQL_DT_CASCADE = 0x00000004L; + const SQL_DT_DROP_TABLE = 0x00000001L; + const SQL_DT_RESTRICT = 0x00000002L; + const SQL_DTC_DONE = 0L; + const SQL_DTR_DROP_TRANSLATION = 0x00000001L; + const SQL_DV_CASCADE = 0x00000004L; + const SQL_DV_DROP_VIEW = 0x00000001L; + const SQL_DV_RESTRICT = 0x00000002L; + const SQL_DYNAMIC_CURSOR_ATTRIBUTES1 = 144; + const SQL_DYNAMIC_CURSOR_ATTRIBUTES2 = 145; + const SQL_EXT_API_LAST = SQL_API_SQLBINDPARAMETER; + const SQL_EXT_API_START = 40; + const SQL_FETCH_BY_BOOKMARK = 7; + const SQL_FETCH_FIRST_SYSTEM = 32; + const SQL_FETCH_FIRST_USER = 31; + const SQL_FN_CVT_CAST = 0x00000002L; + const SQL_FN_STR_BIT_LENGTH = 0x00080000L; + const SQL_FN_STR_CHAR_LENGTH = 0x00100000L; + const SQL_FN_STR_CHARACTER_LENGTH = 0x00200000L; + const SQL_FN_STR_OCTET_LENGTH = 0x00400000L; + const SQL_FN_STR_POSITION = 0x00800000L; + const SQL_FN_TD_CURRENT_DATE = 0x00020000L; + const SQL_FN_TD_CURRENT_TIME = 0x00040000L; + const SQL_FN_TD_CURRENT_TIMESTAMP = 0x00080000L; + const SQL_FN_TD_EXTRACT = 0x00100000L; + const SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES1 = 146; + const SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2 = 147; + /* #define SQL_FUNC_EXISTS(exists, api) + ((*(((UWORD*) (exists)) + ((api) >> 4)) & (1 << ((api) & 15)) ) ? + SQL_TRUE : SQL_FALSE ) + */ + const SQL_GB_COLLATE = 0x0004; + const SQL_HANDLE_SENV = 5; + + const SQL_IK_NONE = 0; + const SQL_IK_ASC = 1; + const SQL_IK_DESC = 2; + const SQL_IK_ALL = SQL_IK_ASC | SQL_IK_DESC; + + const SQL_INDEX_KEYWORDS = 148; + const SQL_INFO_DRIVER_START = 1000; + const SQL_INFO_LAST = SQL_QUALIFIER_LOCATION; + const SQL_INFO_SCHEMA_VIEWS = 149; + const SQL_INITIALLY_DEFERRED = 5; + const SQL_INITIALLY_IMMEDIATE = 6; + const SQL_INSERT_STATEMENT = 172; + const SQL_INTERVAL = 10; + const SQL_IS_INSERT_LITERALS = 0x00000001L; + const SQL_IS_INSERT_SEARCHED = 0x00000002L; + const SQL_IS_INTEGER = -6; + const SQL_IS_POINTER = -4; + const SQL_IS_SELECT_INTO = 0x00000004L; + const SQL_IS_SMALLINT = -8; + const SQL_IS_UINTEGER = -5; + const SQL_IS_USMALLINT = -7; + const SQL_ISV_ASSERTIONS = 0x00000001L; + const SQL_ISV_CHARACTER_SETS = 0x00000002L; + const SQL_ISV_CHECK_CONSTRAINTS = 0x00000004L; + const SQL_ISV_COLLATIONS = 0x00000008L; + const SQL_ISV_COLUMN_DOMAIN_USAGE = 0x00000010L; + const SQL_ISV_COLUMN_PRIVILEGES = 0x00000020L; + const SQL_ISV_COLUMNS = 0x00000040L; + const SQL_ISV_CONSTRAINT_COLUMN_USAGE = 0x00000080L; + const SQL_ISV_CONSTRAINT_TABLE_USAGE = 0x00000100L; + const SQL_ISV_DOMAIN_CONSTRAINTS = 0x00000200L; + const SQL_ISV_DOMAINS = 0x00000400L; + const SQL_ISV_KEY_COLUMN_USAGE = 0x00000800L; + const SQL_ISV_REFERENTIAL_CONSTRAINTS = 0x00001000L; + const SQL_ISV_SCHEMATA = 0x00002000L; + const SQL_ISV_SQL_LANGUAGES = 0x00004000L; + const SQL_ISV_TABLE_CONSTRAINTS = 0x00008000L; + const SQL_ISV_TABLE_PRIVILEGES = 0x00010000L; + const SQL_ISV_TABLES = 0x00020000L; + const SQL_ISV_TRANSLATIONS = 0x00040000L; + const SQL_ISV_USAGE_PRIVILEGES = 0x00080000L; + const SQL_ISV_VIEW_COLUMN_USAGE = 0x00100000L; + const SQL_ISV_VIEW_TABLE_USAGE = 0x00200000L; + const SQL_ISV_VIEWS = 0x00400000L; + const SQL_KEYSET_CURSOR_ATTRIBUTES1 = 150; + const SQL_KEYSET_CURSOR_ATTRIBUTES2 = 151; + const SQL_MAX_ASYNC_CONCURRENT_STATEMENTS = 10022; + const SQL_NO_COLUMN_NUMBER = -1; + const SQL_NO_ROW_NUMBER = -1; + const SQL_NOT_DEFERRABLE = 7; + const SQL_NUM_EXTENSIONS = SQL_EXT_API_LAST-SQL_EXT_API_START+1; + const SQL_NUM_FUNCTIONS = 23; + const SQL_ODBC_INTERFACE_CONFORMANCE = 152; + + enum : ULONG { + SQL_OIC_CORE = 1, + SQL_OIC_LEVEL1, + SQL_OIC_LEVEL2 + } + enum : ULONG { + SQL_OV_ODBC2 = 2, + SQL_OV_ODBC3 = 3 + } + + const ULONG + SQL_PARAM_BIND_BY_COLUMN = 0, + SQL_PARAM_BIND_TYPE_DEFAULT = SQL_PARAM_BIND_BY_COLUMN; + + const SQL_PARAM_ARRAY_ROW_COUNTS = 153; + const SQL_PARAM_ARRAY_SELECTS = 154; + const SQL_PARAM_DIAG_UNAVAILABLE = 1; + const SQL_PARAM_ERROR = 5; + const SQL_PARAM_IGNORE = 1; + const SQL_PARAM_PROCEED = 0; + const SQL_PARAM_SUCCESS = 0; + const SQL_PARAM_SUCCESS_WITH_INFO = 6; + const SQL_PARAM_UNUSED = 7; + + const SQL_PARC_BATCH = 1; + const SQL_PARC_NO_BATCH = 2; + const SQL_PAS_BATCH = 1; + const SQL_PAS_NO_BATCH = 2; + const SQL_PAS_NO_SELECT = 3; + + const SQL_ROW_IGNORE = 1; + const SQL_ROW_NUMBER_UNKNOWN = -2; + const SQL_ROW_PROCEED = 0; + const SQL_ROW_SUCCESS_WITH_INFO = 6; + + const SQL_SC_FIPS127_2_TRANSITIONAL = 0x00000002L; + const SQL_SC_SQL92_ENTRY = 0x00000001L; + const SQL_SC_SQL92_FULL = 0x00000008L; + const SQL_SC_SQL92_INTERMEDIATE = 0x00000004L; + + const SQL_SCC_ISO92_CLI = 0x00000002L; + const SQL_SCC_XOPEN_CLI_VERSION1 = 0x00000001L; + + const SQL_SCHEMA_TERM = SQL_OWNER_TERM; + const SQL_SCHEMA_USAGE = SQL_OWNER_USAGE; + const SQL_SDF_CURRENT_DATE = 0x00000001L; + const SQL_SDF_CURRENT_TIME = 0x00000002L; + const SQL_SDF_CURRENT_TIMESTAMP = 0x00000004L; + const SQL_SFKD_CASCADE = 0x00000001L; + const SQL_SFKD_NO_ACTION = 0x00000002L; + const SQL_SFKD_SET_DEFAULT = 0x00000004L; + const SQL_SFKD_SET_NULL = 0x00000008L; + const SQL_SFKU_CASCADE = 0x00000001L; + const SQL_SFKU_NO_ACTION = 0x00000002L; + const SQL_SFKU_SET_DEFAULT = 0x00000004L; + const SQL_SFKU_SET_NULL = 0x00000008L; + const SQL_SG_DELETE_TABLE = 0x00000020L; + const SQL_SG_INSERT_COLUMN = 0x00000080L; + const SQL_SG_INSERT_TABLE = 0x00000040L; + const SQL_SG_REFERENCES_COLUMN = 0x00000200L; + const SQL_SG_REFERENCES_TABLE = 0x00000100L; + const SQL_SG_SELECT_TABLE = 0x00000400L; + const SQL_SG_UPDATE_COLUMN = 0x00001000L; + const SQL_SG_UPDATE_TABLE = 0x00000800L; + const SQL_SG_USAGE_ON_CHARACTER_SET = 0x00000002L; + const SQL_SG_USAGE_ON_COLLATION = 0x00000004L; + const SQL_SG_USAGE_ON_DOMAIN = 0x00000001L; + const SQL_SG_USAGE_ON_TRANSLATION = 0x00000008L; + const SQL_SG_WITH_GRANT_OPTION = 0x00000010L; + const SQL_SNVF_BIT_LENGTH = 0x00000001L; + const SQL_SNVF_CHAR_LENGTH = 0x00000002L; + const SQL_SNVF_CHARACTER_LENGTH = 0x00000004L; + const SQL_SNVF_EXTRACT = 0x00000008L; + const SQL_SNVF_OCTET_LENGTH = 0x00000010L; + const SQL_SNVF_POSITION = 0x00000020L; + const SQL_SP_BETWEEN = 0x00000800L; + const SQL_SP_COMPARISON = 0x00001000L; + const SQL_SP_EXISTS = 0x00000001L; + const SQL_SP_IN = 0x00000400L; + const SQL_SP_ISNOTNULL = 0x00000002L; + const SQL_SP_ISNULL = 0x00000004L; + const SQL_SP_LIKE = 0x00000200L; + const SQL_SP_MATCH_FULL = 0x00000008L; + const SQL_SP_MATCH_PARTIAL = 0x00000010L; + const SQL_SP_MATCH_UNIQUE_FULL = 0x00000020L; + const SQL_SP_MATCH_UNIQUE_PARTIAL = 0x00000040L; + const SQL_SP_OVERLAPS = 0x00000080L; + const SQL_SP_QUANTIFIED_COMPARISON = 0x00002000L; + const SQL_SP_UNIQUE = 0x00000100L; + const SQL_SQL_CONFORMANCE = 118; + const SQL_SQL92_DATETIME_FUNCTIONS = 155; + const SQL_SQL92_FOREIGN_KEY_DELETE_RULE = 156; + const SQL_SQL92_FOREIGN_KEY_UPDATE_RULE = 157; + const SQL_SQL92_GRANT = 158; + const SQL_SQL92_NUMERIC_VALUE_FUNCTIONS = 159; + const SQL_SQL92_PREDICATES = 160; + const SQL_SQL92_RELATIONAL_JOIN_OPERATORS = 161; + const SQL_SQL92_REVOKE = 162; + const SQL_SQL92_ROW_VALUE_CONSTRUCTOR = 163; + const SQL_SQL92_STRING_FUNCTIONS = 164; + const SQL_SQL92_VALUE_EXPRESSIONS = 165; + const SQL_SR_CASCADE = 0x00000020L; + const SQL_SR_DELETE_TABLE = 0x00000080L; + const SQL_SR_GRANT_OPTION_FOR = 0x00000010L; + const SQL_SR_INSERT_COLUMN = 0x00000200L; + const SQL_SR_INSERT_TABLE = 0x00000100L; + const SQL_SR_REFERENCES_COLUMN = 0x00000800L; + const SQL_SR_REFERENCES_TABLE = 0x00000400L; + const SQL_SR_RESTRICT = 0x00000040L; + const SQL_SR_SELECT_TABLE = 0x00001000L; + const SQL_SR_UPDATE_COLUMN = 0x00004000L; + const SQL_SR_UPDATE_TABLE = 0x00002000L; + const SQL_SR_USAGE_ON_CHARACTER_SET = 0x00000002L; + const SQL_SR_USAGE_ON_COLLATION = 0x00000004L; + const SQL_SR_USAGE_ON_DOMAIN = 0x00000001L; + const SQL_SR_USAGE_ON_TRANSLATION = 0x00000008L; + const SQL_SRJO_CORRESPONDING_CLAUSE = 0x00000001L; + const SQL_SRJO_CROSS_JOIN = 0x00000002L; + const SQL_SRJO_EXCEPT_JOIN = 0x00000004L; + const SQL_SRJO_FULL_OUTER_JOIN = 0x00000008L; + const SQL_SRJO_INNER_JOIN = 0x00000010L; + const SQL_SRJO_INTERSECT_JOIN = 0x00000020L; + const SQL_SRJO_LEFT_OUTER_JOIN = 0x00000040L; + const SQL_SRJO_NATURAL_JOIN = 0x00000080L; + const SQL_SRJO_RIGHT_OUTER_JOIN = 0x00000100L; + const SQL_SRJO_UNION_JOIN = 0x00000200L; + const SQL_SRVC_DEFAULT = 0x00000004L; + const SQL_SRVC_NULL = 0x00000002L; + const SQL_SRVC_ROW_SUBQUERY = 0x00000008L; + const SQL_SRVC_VALUE_EXPRESSION = 0x00000001L; + const SQL_SSF_CONVERT = 0x00000001L; + const SQL_SSF_LOWER = 0x00000002L; + const SQL_SSF_SUBSTRING = 0x00000008L; + const SQL_SSF_TRANSLATE = 0x00000010L; + const SQL_SSF_TRIM_BOTH = 0x00000020L; + const SQL_SSF_TRIM_LEADING = 0x00000040L; + const SQL_SSF_TRIM_TRAILING = 0x00000080L; + const SQL_SSF_UPPER = 0x00000004L; + const SQL_STANDARD_CLI_CONFORMANCE = 166; + const SQL_STATIC_CURSOR_ATTRIBUTES1 = 167; + const SQL_STATIC_CURSOR_ATTRIBUTES2 = 168; + const SQL_SU_DML_STATEMENTS = SQL_OU_DML_STATEMENTS; + const SQL_SU_INDEX_DEFINITION = SQL_OU_INDEX_DEFINITION; + const SQL_SU_PRIVILEGE_DEFINITION = SQL_OU_PRIVILEGE_DEFINITION; + const SQL_SU_PROCEDURE_INVOCATION = SQL_OU_PROCEDURE_INVOCATION; + const SQL_SU_TABLE_DEFINITION = SQL_OU_TABLE_DEFINITION; + const SQL_SVE_CASE = 0x00000001L; + const SQL_SVE_CAST = 0x00000002L; + const SQL_SVE_COALESCE = 0x00000004L; + const SQL_SVE_NULLIF = 0x00000008L; + const SQL_UB_FIXED = SQL_UB_ON; + const SQL_UB_VARIABLE = 2UL; + const SQL_UNION_STATEMENT = SQL_UNION; + const SQL_UPDATE_BY_BOOKMARK = 5; + const SQL_US_UNION = SQL_U_UNION; + const SQL_US_UNION_ALL = SQL_U_UNION_ALL; +}//[Yes] #endif /* ODBCVER >= 0x300 */ +static if (ODBCVER >= 0x0350) { + const SQL_DESC_ROWVER = 35; + const SQL_GUID = -11; + const SQL_C_GUID = SQL_GUID; + //#ifdef ODBC_STD + //#define SQLAllocHandle SQLAllocHandleStd + //#define SQLAllocEnv(p) SQLAllocHandleStd(SQL_HANDLE_ENV, SQL_NULL_HANDLE, p) + //#define SQL_YEAR SQL_CODE_YEAR + //#define SQL_MONTH SQL_CODE_MONTH + //#define SQL_DAY SQL_CODE_DAY + //#define SQL_HOUR SQL_CODE_HOUR + //#define SQL_MINUTE SQL_CODE_MINUTE + //#define SQL_SECOND SQL_CODE_SECOND + //#define SQL_YEAR_TO_MONTH SQL_CODE_YEAR_TO_MONTH + //#define SQL_DAY_TO_HOUR SQL_CODE_DAY_TO_HOUR + //#define SQL_DAY_TO_MINUTE SQL_CODE_DAY_TO_MINUTE + //#define SQL_DAY_TO_SECOND SQL_CODE_DAY_TO_SECOND + //#define SQL_HOUR_TO_MINUTE SQL_CODE_HOUR_TO_MINUTE + //#define SQL_HOUR_TO_SECOND SQL_CODE_HOUR_TO_SECOND + //#define SQL_MINUTE_TO_SECOND SQL_CODE_MINUTE_TO_SECOND + //#endif /* ODBC_STD */ +}//#endif /* ODBCVER >= 0x0350 */ + +//static if (ODBCVER >= 0x0351) { +const SQL_ATTR_ANSI_APP=115; +const SQL_AA_TRUE=1L; +const SQL_AA_FALSE=0L; +//}//[Yes] #endif + +const TRACE_VERSION=1000; +const TRACE_ON=1; + +const char [] SQL_ODBC_KEYWORDS = + "ABSOLUTE, ACTION, ADA, ADD, ALL, ALLOCATE, ALTER, AND, ANY, ARE, AS, " + ~ "ASC, ASSERTION, AT, AUTHORIZATION, AVG, " + ~ "BEGIN, BETWEEN, BIT, BIT_LENGTH, BOTH, BY, CASCADE, CASCADED, CASE, CAST, CATALOG, " + ~ "CHAR, CHAR_LENGTH, CHARACTER, CHARACTER_LENGTH, CHECK, CLOSE, COALESCE, " + ~ "COLLATE, COLLATION, COLUMN, COMMIT, CONNECT, CONNECTION, CONSTRAINT, " + ~ "CONSTRAINTS, CONTINUE, CONVERT, CORRESPONDING, COUNT, CREATE, CROSS, CURRENT, " + ~ "CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, CURRENT_USER, CURSOR, " + ~ "DATE, DAY, DEALLOCATE, DEC, DECIMAL, DECLARE, DEFAULT, DEFERRABLE, " + ~ "DEFERRED, DELETE, DESC, DESCRIBE, DESCRIPTOR, DIAGNOSTICS, DISCONNECT, " + ~ "DISTINCT, DOMAIN, DOUBLE, DROP, " + ~ "ELSE, END, END-EXEC, ESCAPE, EXCEPT, EXCEPTION, EXEC, EXECUTE, " + ~ "EXISTS, EXTERNAL, EXTRACT, " + ~ "FALSE, FETCH, FIRST, FLOAT, FOR, FOREIGN, FORTRAN, FOUND, FROM, FULL, " + ~ "GET, GLOBAL, GO, GOTO, GRANT, GROUP, HAVING, HOUR, " + ~ "IDENTITY, IMMEDIATE, IN, INCLUDE, INDEX, INDICATOR, INITIALLY, INNER, " + ~ "INPUT, INSENSITIVE, INSERT, INT, INTEGER, INTERSECT, INTERVAL, INTO, IS, ISOLATION, " + ~ "JOIN, KEY, LANGUAGE, LAST, LEADING, LEFT, LEVEL, LIKE, LOCAL, LOWER, " + ~ "MATCH, MAX, MIN, MINUTE, MODULE, MONTH, " + ~ "NAMES, NATIONAL, NATURAL, NCHAR, NEXT, NO, NONE, NOT, NULL, NULLIF, NUMERIC, " + ~ "OCTET_LENGTH, OF, ON, ONLY, OPEN, OPTION, OR, ORDER, OUTER, OUTPUT, OVERLAPS, " + ~ "PAD, PARTIAL, PASCAL, PLI, POSITION, PRECISION, PREPARE, PRESERVE, " + ~ "PRIMARY, PRIOR, PRIVILEGES, PROCEDURE, PUBLIC, " + ~ "READ, REAL, REFERENCES, RELATIVE, RESTRICT, REVOKE, RIGHT, ROLLBACK, ROWS" + ~ "SCHEMA, SCROLL, SECOND, SECTION, SELECT, SESSION, SESSION_USER, SET, SIZE, " + ~ "SMALLINT, SOME, SPACE, SQL, SQLCA, SQLCODE, SQLERROR, SQLSTATE, SQLWARNING, " + ~ "SUBSTRING, SUM, SYSTEM_USER, " + ~ "TABLE, TEMPORARY, THEN, TIME, TIMESTAMP, TIMEZONE_HOUR, TIMEZONE_MINUTE, " + ~ "TO, TRAILING, TRANSACTION, TRANSLATE, TRANSLATION, TRIM, TRUE, " + ~ "UNION, UNIQUE, UNKNOWN, UPDATE, UPPER, USAGE, USER, USING, " + ~ "VALUE, VALUES, VARCHAR, VARYING, VIEW, WHEN, WHENEVER, WHERE, WITH, WORK, WRITE, " + ~ "YEAR, ZONE"; +extern (Windows) { + SQLRETURN SQLDriverConnect(SQLHDBC, SQLHWND, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLUSMALLINT); + SQLRETURN SQLBrowseConnect(SQLHDBC, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLColumnPrivileges(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLColAttributes(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLLEN*); + SQLRETURN SQLDescribeParam(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT*, SQLULEN*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLExtendedFetch(SQLHSTMT, SQLUSMALLINT, SQLINTEGER, SQLUINTEGER*, SQLUSMALLINT*); + SQLRETURN SQLForeignKeys(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLMoreResults(SQLHSTMT); + SQLRETURN SQLNativeSql(SQLHDBC, SQLCHAR*, SQLINTEGER, SQLCHAR*, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLNumParams(SQLHSTMT, SQLSMALLINT*); + SQLRETURN SQLParamOptions(SQLHSTMT, SQLUINTEGER, SQLUINTEGER*); + SQLRETURN SQLPrimaryKeys(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLProcedureColumns(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLProcedures(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLSetPos(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLTablePrivileges(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLDrivers(SQLHENV, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLBindParameter(SQLHSTMT, SQLUSMALLINT, SQLSMALLINT, SQLSMALLINT, SQLSMALLINT, SQLULEN, SQLSMALLINT, SQLPOINTER, SQLLEN, SQLLEN*); + SQLRETURN SQLSetScrollOptions(SQLHSTMT, SQLUSMALLINT, SQLLEN, SQLUSMALLINT);/* deprecated */ + DWORD ODBCGetTryWaitValue(); + BOOL ODBCSetTryWaitValue(DWORD); + RETCODE TraceOpenLogFile(LPWSTR, LPWSTR, DWORD); + RETCODE TraceCloseLogFile(); + VOID TraceReturn(RETCODE, RETCODE); + DWORD TraceVersion(); + //static if (ODBCVER >= 0x0300) { + SQLRETURN SQLBulkOperations(SQLHSTMT, SQLSMALLINT); + SQLRETURN SQLAllocHandleStd( SQLSMALLINT, SQLHANDLE, SQLHANDLE*); + //} +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/sqltypes.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/sqltypes.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,142 @@ +/***********************************************************************\ +* sqltypes.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.sqltypes; + +/* Conversion notes: + It's assumed that ODBC >= 0x0300. +*/ + +private import win32.windef; +private import win32.basetyps; // for GUID + +alias byte SCHAR, SQLSCHAR; +alias int SDWORD, SLONG, SQLINTEGER; +alias short SWORD, SSHORT, RETCODE, SQLSMALLINT; +alias ULONG UDWORD; +alias USHORT UWORD, SQLUSMALLINT; +alias double SDOUBLE, LDOUBLE; +alias float SFLOAT; +alias PVOID PTR, HENV, HDBC, HSTMT, SQLPOINTER; +alias UCHAR SQLCHAR; +// #ifndef _WIN64 +alias UDWORD SQLUINTEGER; +// #endif + +//static if (ODBCVER >= 0x0300) { +typedef HANDLE SQLHANDLE; +alias SQLHANDLE SQLHENV, SQLHDBC, SQLHSTMT, SQLHDESC; +/* +} else { +alias void* SQLHENV; +alias void* SQLHDBC; +alias void* SQLHSTMT; +} +*/ +alias SQLSMALLINT SQLRETURN; +alias HWND SQLHWND; +alias ULONG BOOKMARK; + +alias SQLINTEGER SQLLEN, SQLROWOFFSET; +alias SQLUINTEGER SQLROWCOUNT, SQLULEN; +alias DWORD SQLTRANSID; +alias SQLUSMALLINT SQLSETPOSIROW; +alias wchar SQLWCHAR; + +version(Unicode) { + alias SQLWCHAR SQLTCHAR; +} else { + alias SQLCHAR SQLTCHAR; +} +//static if (ODBCVER >= 0x0300) { +alias ubyte SQLDATE, SQLDECIMAL; +alias double SQLDOUBLE, SQLFLOAT; +alias ubyte SQLNUMERIC; +alias float SQLREAL; +alias ubyte SQLTIME, SQLTIMESTAMP, SQLVARCHAR; +alias long ODBCINT64, SQLBIGINT; +alias ulong SQLUBIGINT; +//} + +struct DATE_STRUCT { + SQLSMALLINT year; + SQLUSMALLINT month; + SQLUSMALLINT day; +} + +struct TIME_STRUCT { + SQLUSMALLINT hour; + SQLUSMALLINT minute; + SQLUSMALLINT second; +} + +struct TIMESTAMP_STRUCT { + SQLSMALLINT year; + SQLUSMALLINT month; + SQLUSMALLINT day; + SQLUSMALLINT hour; + SQLUSMALLINT minute; + SQLUSMALLINT second; + SQLUINTEGER fraction; +} + +//static if (ODBCVER >= 0x0300) { +alias DATE_STRUCT SQL_DATE_STRUCT; +alias TIME_STRUCT SQL_TIME_STRUCT; +alias TIMESTAMP_STRUCT SQL_TIMESTAMP_STRUCT; + +enum SQLINTERVAL { + SQL_IS_YEAR = 1, + SQL_IS_MONTH, + SQL_IS_DAY, + SQL_IS_HOUR, + SQL_IS_MINUTE, + SQL_IS_SECOND, + SQL_IS_YEAR_TO_MONTH, + SQL_IS_DAY_TO_HOUR, + SQL_IS_DAY_TO_MINUTE, + SQL_IS_DAY_TO_SECOND, + SQL_IS_HOUR_TO_MINUTE, + SQL_IS_HOUR_TO_SECOND, + SQL_IS_MINUTE_TO_SECOND +} + +struct SQL_YEAR_MONTH_STRUCT { + SQLUINTEGER year; + SQLUINTEGER month; +} + +struct SQL_DAY_SECOND_STRUCT { + SQLUINTEGER day; + SQLUINTEGER hour; + SQLUINTEGER minute; + SQLUINTEGER second; + SQLUINTEGER fraction; +} + +struct SQL_INTERVAL_STRUCT { + SQLINTERVAL interval_type; + SQLSMALLINT interval_sign; + union _intval { + SQL_YEAR_MONTH_STRUCT year_month; + SQL_DAY_SECOND_STRUCT day_second; + } + _intval intval; +} + +const SQL_MAX_NUMERIC_LEN = 16; + +struct SQL_NUMERIC_STRUCT { + SQLCHAR precision; + SQLSCHAR scale; + SQLCHAR sign; + SQLCHAR val[SQL_MAX_NUMERIC_LEN]; +} +// } ODBCVER >= 0x0300 +alias GUID SQLGUID; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/sqlucode.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/sqlucode.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,156 @@ +/***********************************************************************\ +* sqlucode.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.sqlucode; + +private import win32.sqlext; + +const SQL_WCHAR = -8; +const SQL_WVARCHAR = -9; +const SQL_WLONGVARCHAR = -10; +const SQL_C_WCHAR = SQL_WCHAR; + +const SQL_SQLSTATE_SIZEW = 10; +version(Unicode) { + const SQL_C_TCHAR = SQL_C_WCHAR; +} else { + const SQL_C_TCHAR = SQL_C_CHAR; +} + +// Moved from sqlext +static if (ODBCVER <= 0x0300) { + const SQL_UNICODE = -95; + const SQL_UNICODE_VARCHAR = -96; + const SQL_UNICODE_LONGVARCHAR = -97; + const SQL_UNICODE_CHAR = SQL_UNICODE; +} else { + const SQL_UNICODE = SQL_WCHAR; + const SQL_UNICODE_VARCHAR = SQL_WVARCHAR; + const SQL_UNICODE_LONGVARCHAR = SQL_WLONGVARCHAR; + const SQL_UNICODE_CHAR = SQL_WCHAR; +} + +extern (Windows) { + SQLRETURN SQLBrowseConnectA(SQLHDBC, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLBrowseConnectW(SQLHDBC, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLColAttributeA(SQLHSTMT, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLPOINTER); + SQLRETURN SQLColAttributeW(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLPOINTER); + SQLRETURN SQLColAttributesA(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLLEN*); + SQLRETURN SQLColAttributesW(SQLHSTMT, SQLUSMALLINT, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*, SQLLEN*); + SQLRETURN SQLColumnPrivilegesA( SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT , SQLCHAR*, SQLSMALLINT ); + SQLRETURN SQLColumnPrivilegesW( SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT ); + SQLRETURN SQLColumnsA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT , SQLCHAR*, SQLSMALLINT ); + SQLRETURN SQLColumnsW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT , SQLWCHAR*, SQLSMALLINT ); + SQLRETURN SQLConnectA(SQLHDBC, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLConnectW(SQLHDBC, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLDataSourcesA(SQLHENV, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLDataSourcesW(SQLHENV, SQLUSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLDescribeColA(SQLHSTMT, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLULEN*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLDescribeColW(SQLHSTMT, SQLUSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLULEN*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLDriverConnectA(SQLHDBC, SQLHWND, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLUSMALLINT); + SQLRETURN SQLDriverConnectW(SQLHDBC, SQLHWND, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLUSMALLINT); + SQLRETURN SQLDriversA(SQLHENV, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLDriversW(SQLHENV, SQLUSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLErrorA(SQLHENV, SQLHDBC, SQLHSTMT, SQLCHAR*, SQLINTEGER*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLErrorW(SQLHENV, SQLHDBC, SQLHSTMT, SQLWCHAR*, SQLINTEGER*, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLExecDirectA(SQLHSTMT, SQLCHAR*, SQLINTEGER); + SQLRETURN SQLExecDirectW(SQLHSTMT, SQLWCHAR*, SQLINTEGER); + SQLRETURN SQLForeignKeysA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLForeignKeysW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLGetConnectAttrA(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetConnectAttrW(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetConnectOptionA(SQLHDBC, SQLUSMALLINT, SQLPOINTER); + SQLRETURN SQLGetConnectOptionW(SQLHDBC, SQLUSMALLINT, SQLPOINTER); + SQLRETURN SQLGetCursorNameA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetCursorNameW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetInfoA(SQLHDBC, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetInfoW(SQLHDBC, SQLUSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetTypeInfoA(SQLHSTMT, SQLSMALLINT); + SQLRETURN SQLGetTypeInfoW(SQLHSTMT, SQLSMALLINT); + SQLRETURN SQLNativeSqlA(SQLHDBC, SQLCHAR*, SQLINTEGER, SQLCHAR*, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLNativeSqlW(SQLHDBC, SQLWCHAR*, SQLINTEGER, SQLWCHAR*, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLPrepareA(SQLHSTMT, SQLCHAR*, SQLINTEGER); + SQLRETURN SQLPrepareW(SQLHSTMT, SQLWCHAR*, SQLINTEGER); + SQLRETURN SQLPrimaryKeysA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT ); + SQLRETURN SQLPrimaryKeysW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLProcedureColumnsA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLProcedureColumnsW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLProceduresA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLProceduresW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLSetConnectAttrA(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetConnectAttrW(SQLHDBC, SQLINTEGER, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetConnectOptionA(SQLHDBC, SQLUSMALLINT, SQLULEN); + SQLRETURN SQLSetConnectOptionW(SQLHDBC, SQLUSMALLINT, SQLULEN); + SQLRETURN SQLSetCursorNameA(SQLHSTMT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLSetCursorNameW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT); + SQLRETURN SQLSpecialColumnsA(SQLHSTMT, SQLUSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT , SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLSpecialColumnsW(SQLHSTMT, SQLUSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT , SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLStatisticsA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT , SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLStatisticsW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT , SQLUSMALLINT, SQLUSMALLINT); + SQLRETURN SQLTablePrivilegesA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLTablePrivilegesW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT ); + SQLRETURN SQLTablesA(SQLHSTMT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLCHAR*, SQLSMALLINT); + SQLRETURN SQLTablesW(SQLHSTMT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT); + static if (ODBCVER >= 0x0300) { + SQLRETURN SQLGetDescFieldA(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetDescFieldW(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLSetDescFieldA(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetDescFieldW(SQLHDESC, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLGetDescRecA(SQLHDESC, SQLSMALLINT, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLSMALLINT*, SQLLEN*, SQLSMALLINT*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLGetDescRecW(SQLHDESC, SQLSMALLINT, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*, SQLSMALLINT*, SQLSMALLINT*, SQLLEN*, SQLSMALLINT*, SQLSMALLINT*, SQLSMALLINT*); + SQLRETURN SQLGetDiagFieldA(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetDiagFieldW(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLSMALLINT, SQLPOINTER, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetDiagRecA(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLCHAR*, SQLINTEGER*, SQLCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetDiagRecW(SQLSMALLINT, SQLHANDLE, SQLSMALLINT, SQLWCHAR*, SQLINTEGER*, SQLWCHAR*, SQLSMALLINT, SQLSMALLINT*); + SQLRETURN SQLGetStmtAttrA(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLGetStmtAttrW(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER, SQLINTEGER*); + SQLRETURN SQLSetStmtAttrA(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER); + SQLRETURN SQLSetStmtAttrW(SQLHSTMT, SQLINTEGER, SQLPOINTER, SQLINTEGER); + } // #endif /* (ODBCVER >= 0x0300) */ +} + +version (Unicode) { + alias SQLBrowseConnectW SQLBrowseConnect; + alias SQLColAttributeW SQLColAttribute; + alias SQLColAttributesW SQLColAttributes; + alias SQLColumnPrivilegesW SQLColumnPrivileges; + alias SQLColumnsW SQLColumns; + alias SQLConnectW SQLConnect; + alias SQLDataSourcesW SQLDataSources; + alias SQLDescribeColW SQLDescribeCol; + alias SQLDriverConnectW SQLDriverConnect; + alias SQLDriversW SQLDrivers; + alias SQLErrorW SQLError; + alias SQLExecDirectW SQLExecDirect; + alias SQLForeignKeysW SQLForeignKeys; + alias SQLGetConnectAttrW SQLGetConnectAttr; + alias SQLGetConnectOptionW SQLGetConnectOption; + alias SQLGetCursorNameW SQLGetCursorName; + alias SQLGetDescFieldW SQLGetDescField; + alias SQLGetDescRecW SQLGetDescRec; + alias SQLGetDiagFieldW SQLGetDiagField; + alias SQLGetDiagRecW SQLGetDiagRec; + alias SQLGetInfoW SQLGetInfo; + alias SQLGetStmtAttrW SQLGetStmtAttr; + alias SQLGetTypeInfoW SQLGetTypeInfo; + alias SQLNativeSqlW SQLNativeSql; + alias SQLPrepareW SQLPrepare; + alias SQLPrimaryKeysW SQLPrimaryKeys; + alias SQLProcedureColumnsW SQLProcedureColumns; + alias SQLProceduresW SQLProcedures; + alias SQLSetConnectAttrW SQLSetConnectAttr; + alias SQLSetConnectOptionW SQLSetConnectOption; + alias SQLSetCursorNameW SQLSetCursorName; + alias SQLSetDescFieldW SQLSetDescField; + alias SQLSetStmtAttrW SQLSetStmtAttr; + alias SQLSpecialColumnsW SQLSpecialColumns; + alias SQLStatisticsW SQLStatistics; + alias SQLTablePrivilegesW SQLTablePrivileges; + alias SQLTablesW SQLTables; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/subauth.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/subauth.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,275 @@ +/***********************************************************************\ +* subauth.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.subauth; + +private import win32.ntdef, win32.windef; + +/+ +alias LONG NTSTATUS; +alias NTSTATUS* PNTSTATUS; ++/ + +enum : ULONG { + MSV1_0_PASSTHRU = 1, + MSV1_0_GUEST_LOGON = 2 +} + +// USER_ALL_INFORMATION.WhichFields (Undocumented) +const ULONG + MSV1_0_VALIDATION_LOGOFF_TIME = 1, + MSV1_0_VALIDATION_KICKOFF_TIME = 2, + MSV1_0_VALIDATION_LOGON_SERVER = 4, + MSV1_0_VALIDATION_LOGON_DOMAIN = 8, + MSV1_0_VALIDATION_SESSION_KEY = 16, + MSV1_0_VALIDATION_USER_FLAGS = 32, + MSV1_0_VALIDATION_USER_ID = 64; + +// ?ActionsPerformed? (Undocumented) +const MSV1_0_SUBAUTH_ACCOUNT_DISABLED = 1; +const MSV1_0_SUBAUTH_PASSWORD = 2; +const MSV1_0_SUBAUTH_WORKSTATIONS = 4; +const MSV1_0_SUBAUTH_LOGON_HOURS = 8; +const MSV1_0_SUBAUTH_ACCOUNT_EXPIRY = 16; +const MSV1_0_SUBAUTH_PASSWORD_EXPIRY = 32; +const MSV1_0_SUBAUTH_ACCOUNT_TYPE = 64; +const MSV1_0_SUBAUTH_LOCKOUT = 128; + +const NEXT_FREE_ACCOUNT_CONTROL_BIT = 131072; + +const SAM_DAYS_PER_WEEK = 7; +const SAM_HOURS_PER_WEEK = 168; +const SAM_MINUTES_PER_WEEK = 10080; + +enum : NTSTATUS { + STATUS_SUCCESS = 0, + STATUS_INVALID_INFO_CLASS = 0xC0000003, + STATUS_NO_SUCH_USER = 0xC0000064, + STATUS_WRONG_PASSWORD = 0xC000006A, + STATUS_PASSWORD_RESTRICTION = 0xC000006C, + STATUS_LOGON_FAILURE = 0xC000006D, + STATUS_ACCOUNT_RESTRICTION = 0xC000006E, + STATUS_INVALID_LOGON_HOURS = 0xC000006F, + STATUS_INVALID_WORKSTATION = 0xC0000070, + STATUS_PASSWORD_EXPIRED = 0xC0000071, + STATUS_ACCOUNT_DISABLED = 0xC0000072, + STATUS_INSUFFICIENT_RESOURCES = 0xC000009A, + STATUS_ACCOUNT_EXPIRED = 0xC0000193, + STATUS_PASSWORD_MUST_CHANGE = 0xC0000224, + STATUS_ACCOUNT_LOCKED_OUT = 0xC0000234 +} + +// Note: undocumented in MSDN +// USER_ALL_INFORMATION.UserAccountControl +const ULONG + USER_ACCOUNT_DISABLED = 1, + USER_HOME_DIRECTORY_REQUIRED = 2, + USER_PASSWORD_NOT_REQUIRED = 4, + USER_TEMP_DUPLICATE_ACCOUNT = 8, + USER_NORMAL_ACCOUNT = 16, + USER_MNS_LOGON_ACCOUNT = 32, + USER_INTERDOMAIN_TRUST_ACCOUNT = 64, + USER_WORKSTATION_TRUST_ACCOUNT = 128, + USER_SERVER_TRUST_ACCOUNT = 256, + USER_DONT_EXPIRE_PASSWORD = 512, + USER_ACCOUNT_AUTO_LOCKED = 1024, + USER_ENCRYPTED_TEXT_PASSWORD_ALLOWED = 2048, + USER_SMARTCARD_REQUIRED = 4096, + USER_TRUSTED_FOR_DELEGATION = 8192, + USER_NOT_DELEGATED = 16384, + USER_USE_DES_KEY_ONLY = 32768, + USER_DONT_REQUIRE_PREAUTH = 65536, + + USER_MACHINE_ACCOUNT_MASK = 448, + USER_ACCOUNT_TYPE_MASK = 472, + USER_ALL_PARAMETERS = 2097152; + +/+ +struct UNICODE_STRING { + USHORT Length; + USHORT MaximumLength; + PWSTR Buffer; +} +alias UNICODE_STRING* PUNICODE_STRING; + +struct STRING { + USHORT Length; + USHORT MaximumLength; + PCHAR Buffer; +} +alias STRING* PSTRING; ++/ + +alias HANDLE SAM_HANDLE; +alias HANDLE* PSAM_HANDLE; + +struct OLD_LARGE_INTEGER { + ULONG LowPart; + LONG HighPart; +} +alias OLD_LARGE_INTEGER* POLD_LARGE_INTEGER; + +enum NETLOGON_LOGON_INFO_CLASS { + NetlogonInteractiveInformation = 1, + NetlogonNetworkInformation, + NetlogonServiceInformation, + NetlogonGenericInformation, + NetlogonInteractiveTransitiveInformation, + NetlogonNetworkTransitiveInformation, + NetlogonServiceTransitiveInformation +} + + +const CYPHER_BLOCK_LENGTH = 8; +const USER_SESSION_KEY_LENGTH = CYPHER_BLOCK_LENGTH * 2; +const CLEAR_BLOCK_LENGTH = 8; + +struct CYPHER_BLOCK { + CHAR data[CYPHER_BLOCK_LENGTH]; +} +alias CYPHER_BLOCK* PCYPHER_BLOCK; + +struct CLEAR_BLOCK { + CHAR data[CLEAR_BLOCK_LENGTH]; +} +alias CLEAR_BLOCK* PCLEAR_BLOCK; + +struct LM_OWF_PASSWORD { + CYPHER_BLOCK data[2]; +} +alias LM_OWF_PASSWORD* PLM_OWF_PASSWORD; + +struct USER_SESSION_KEY { + CYPHER_BLOCK data[2]; +} +alias USER_SESSION_KEY* PUSER_SESSION_KEY; + +alias CLEAR_BLOCK LM_CHALLENGE; +alias LM_CHALLENGE* PLM_CHALLENGE; + +alias LM_OWF_PASSWORD NT_OWF_PASSWORD; +alias NT_OWF_PASSWORD* PNT_OWF_PASSWORD; +alias LM_CHALLENGE NT_CHALLENGE; +alias NT_CHALLENGE* PNT_CHALLENGE; + +struct LOGON_HOURS { + USHORT UnitsPerWeek; + PUCHAR LogonHours; +} +alias LOGON_HOURS* PLOGON_HOURS; + +struct SR_SECURITY_DESCRIPTOR { + ULONG Length; + PUCHAR SecurityDescriptor; +} +alias SR_SECURITY_DESCRIPTOR* PSR_SECURITY_DESCRIPTOR; + +align(4): +struct USER_ALL_INFORMATION { + LARGE_INTEGER LastLogon; + LARGE_INTEGER LastLogoff; + LARGE_INTEGER PasswordLastSet; + LARGE_INTEGER AccountExpires; + LARGE_INTEGER PasswordCanChange; + LARGE_INTEGER PasswordMustChange; + UNICODE_STRING UserName; + UNICODE_STRING FullName; + UNICODE_STRING HomeDirectory; + UNICODE_STRING HomeDirectoryDrive; + UNICODE_STRING ScriptPath; + UNICODE_STRING ProfilePath; + UNICODE_STRING AdminComment; + UNICODE_STRING WorkStations; + UNICODE_STRING UserComment; + UNICODE_STRING Parameters; + UNICODE_STRING LmPassword; + UNICODE_STRING NtPassword; + UNICODE_STRING PrivateData; + SR_SECURITY_DESCRIPTOR SecurityDescriptor; + ULONG UserId; + ULONG PrimaryGroupId; + ULONG UserAccountControl; + ULONG WhichFields; + LOGON_HOURS LogonHours; + USHORT BadPasswordCount; + USHORT LogonCount; + USHORT CountryCode; + USHORT CodePage; + BOOLEAN LmPasswordPresent; + BOOLEAN NtPasswordPresent; + BOOLEAN PasswordExpired; + BOOLEAN PrivateDataSensitive; +} +alias USER_ALL_INFORMATION* PUSER_ALL_INFORMATION; +align: + +struct MSV1_0_VALIDATION_INFO { + LARGE_INTEGER LogoffTime; + LARGE_INTEGER KickoffTime; + UNICODE_STRING LogonServer; + UNICODE_STRING LogonDomainName; + USER_SESSION_KEY SessionKey; + BOOLEAN Authoritative; + ULONG UserFlags; + ULONG WhichFields; + ULONG UserId; +} +alias MSV1_0_VALIDATION_INFO* PMSV1_0_VALIDATION_INFO; + +struct NETLOGON_LOGON_IDENTITY_INFO { + UNICODE_STRING LogonDomainName; + ULONG ParameterControl; + OLD_LARGE_INTEGER LogonId; + UNICODE_STRING UserName; + UNICODE_STRING Workstation; +} +alias NETLOGON_LOGON_IDENTITY_INFO* PNETLOGON_LOGON_IDENTITY_INFO; + +struct NETLOGON_INTERACTIVE_INFO { + NETLOGON_LOGON_IDENTITY_INFO Identity; + LM_OWF_PASSWORD LmOwfPassword; + NT_OWF_PASSWORD NtOwfPassword; +} +alias NETLOGON_INTERACTIVE_INFO* PNETLOGON_INTERACTIVE_INFO; + +struct NETLOGON_GENERIC_INFO { + NETLOGON_LOGON_IDENTITY_INFO Identity; + UNICODE_STRING PackageName; + ULONG DataLength; + PUCHAR LogonData; +} +alias NETLOGON_GENERIC_INFO* PNETLOGON_GENERIC_INFO; + +struct NETLOGON_NETWORK_INFO { + NETLOGON_LOGON_IDENTITY_INFO Identity; + LM_CHALLENGE LmChallenge; + STRING NtChallengeResponse; + STRING LmChallengeResponse; +} +alias NETLOGON_NETWORK_INFO* PNETLOGON_NETWORK_INFO; + +struct NETLOGON_SERVICE_INFO { + NETLOGON_LOGON_IDENTITY_INFO Identity; + LM_OWF_PASSWORD LmOwfPassword; + NT_OWF_PASSWORD NtOwfPassword; +} +alias NETLOGON_SERVICE_INFO* PNETLOGON_SERVICE_INFO; + +extern (Windows) { +NTSTATUS Msv1_0SubAuthenticationRoutine(NETLOGON_LOGON_INFO_CLASS,PVOID, + ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG, + PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER); +NTSTATUS Msv1_0SubAuthenticationFilter(NETLOGON_LOGON_INFO_CLASS,PVOID, + ULONG,PUSER_ALL_INFORMATION,PULONG,PULONG, + PBOOLEAN,PLARGE_INTEGER,PLARGE_INTEGER); +NTSTATUS Msv1_0SubAuthenticationRoutineGeneric(PVOID,ULONG,PULONG,PVOID*); +NTSTATUS Msv1_0SubAuthenticationRoutineEx(NETLOGON_LOGON_INFO_CLASS,PVOID, + ULONG,PUSER_ALL_INFORMATION,SAM_HANDLE, + PMSV1_0_VALIDATION_INFO,PULONG); +} \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/testall.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/testall.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,101 @@ +// Used only for testing -- imports all windows headers. +module win32.testall; + +import win32.core; +import win32.windows; +import win32.commctrl; +import win32.setupapi; + +import win32.directx.d3d9; +import win32.directx.dxerr8; +import win32.directx.dxerr9; +import win32.oleacc; +import win32.comcat; +import win32.cpl; +import win32.cplext; +import win32.custcntl; +import win32.oleacc; +import win32.ocidl; +import win32.olectl; +import win32.oledlg; +import win32.objsafe; +import win32.ole; + +import win32.shldisp; +import win32.shlobj; +import win32.shlwapi; +import win32.regstr; +import win32.richole; +import win32.tmschema; +import win32.servprov; +import win32.exdisp; +import win32.exdispid; +import win32.idispids; +import win32.mshtml; + +import win32.lm; +import win32.lmbrowsr; + +import win32.sql; +import win32.sqlext; +import win32.sqlucode; +import win32.odbcinst; + +import win32.imagehlp; +import win32.intshcut; +import win32.iphlpapi; +import win32.isguids; + +import win32.subauth; +import win32.rasdlg; +import win32.rassapi; + +import win32.mapi; +import win32.mciavi; +import win32.mcx; +import win32.mgmtapi; + +import win32.nddeapi; +import win32.msacm; +import win32.nspapi; + +import win32.ntdef; +import win32.ntldap; +import win32.ntsecapi; + +import win32.pbt; +import win32.powrprof; +import win32.rapi; + +import win32.wininet; +import win32.winioctl; +import win32.winldap; + +import win32.dbt; + +import win32.rpcdce2; + +import win32.tlhelp32; + + +version (WindowsVista) { + version = WINDOWS_XP_UP; +} else version (Windows2003) { + version = WINDOWS_XP_UP; +} else version (WindowsXP) { + version = WINDOWS_XP_UP; +} + +version (WINDOWS_XP_UP) { + import win32.dhcpcsdk; + import win32.errorrep; + import win32.reason; + import win32.secext; + import win32.ntdll; +} else version (WindowsNTonly) { + version (Windows2000) { + import win32.dhcpcsdk; + import win32.aclui; + } + import win32.ntdll; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/testcompile.bat --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/testcompile.bat Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,50 @@ +dmd -I.. -c testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Windows98 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=WindowsME testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=WindowsNTonly testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Windows2000 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Windows98 -version=Windows2000 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=WindowsME -version=Windows2000 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=WindowsNTonly -version=Windows2000 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=WindowsXP testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Windows2003 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=WindowsVista testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Win32_Winsock1 testall.d +@if errorlevel 1 goto abort +@rem Do we really need to test version=Unicode under all combinations? +dmd -I.. -c -version=Unicode testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Unicode -version=Windows98 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Unicode -version=WindowsME testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Unicode -version=WindowsNTonly testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Unicode -version=Windows2000 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Unicode -version=Windows98 -version=Windows2000 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Unicode -version=WindowsME -version=Windows2000 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Unicode -version=WindowsNTonly -version=Windows2000 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Unicode -version=WindowsXP testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Unicode -version=Windows2003 testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Unicode -version=WindowsVista testall.d +@if errorlevel 1 goto abort +dmd -I.. -c -version=Unicode -version=Win32_Winsock1 testall.d +del testall.obj +:abort diff -r 586e4a649642 -r 4a9dcbd9e54f win32/tlhelp32.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/tlhelp32.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,169 @@ +/***********************************************************************\ +* tlhelp32.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.tlhelp32; + +private import win32.windef; + +enum : uint { + HF32_DEFAULT = 1, + HF32_SHARED +} + +enum : uint { + LF32_FIXED = 0x1, + LF32_FREE = 0x2, + LF32_MOVEABLE = 0x4 +} + +const MAX_MODULE_NAME32 = 255; + +enum : uint { + TH32CS_SNAPHEAPLIST = 0x1, + TH32CS_SNAPPROCESS = 0x2, + TH32CS_SNAPTHREAD = 0x4, + TH32CS_SNAPMODULE = 0x8, + TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST|TH32CS_SNAPPROCESS|TH32CS_SNAPTHREAD|TH32CS_SNAPMODULE), + TH32CS_INHERIT = 0x80000000 +} + +struct HEAPLIST32 { + DWORD dwSize; + DWORD th32ProcessID; + DWORD th32HeapID; + DWORD dwFlags; +} +alias HEAPLIST32* PHEAPLIST32; +alias HEAPLIST32* LPHEAPLIST32; + +struct HEAPENTRY32 { + DWORD dwSize; + HANDLE hHandle; + DWORD dwAddress; + DWORD dwBlockSize; + DWORD dwFlags; + DWORD dwLockCount; + DWORD dwResvd; + DWORD th32ProcessID; + DWORD th32HeapID; +} +alias HEAPENTRY32* PHEAPENTRY32; +alias HEAPENTRY32* LPHEAPENTRY32; + +struct PROCESSENTRY32W { + DWORD dwSize; + DWORD cntUsage; + DWORD th32ProcessID; + DWORD th32DefaultHeapID; + DWORD th32ModuleID; + DWORD cntThreads; + DWORD th32ParentProcessID; + LONG pcPriClassBase; + DWORD dwFlags; + WCHAR szExeFile[MAX_PATH]; +} +alias PROCESSENTRY32W* PPROCESSENTRY32W; +alias PROCESSENTRY32W* LPPROCESSENTRY32W; + +struct THREADENTRY32 { + DWORD dwSize; + DWORD cntUsage; + DWORD th32ThreadID; + DWORD th32OwnerProcessID; + LONG tpBasePri; + LONG tpDeltaPri; + DWORD dwFlags; +} +alias THREADENTRY32* PTHREADENTRY32; +alias THREADENTRY32* LPTHREADENTRY32; + +struct MODULEENTRY32W { + DWORD dwSize; + DWORD th32ModuleID; + DWORD th32ProcessID; + DWORD GlblcntUsage; + DWORD ProccntUsage; + BYTE *modBaseAddr; + DWORD modBaseSize; + HMODULE hModule; + WCHAR szModule[MAX_MODULE_NAME32 + 1]; + WCHAR szExePath[MAX_PATH]; +} +alias MODULEENTRY32W* PMODULEENTRY32W; +alias MODULEENTRY32W* LPMODULEENTRY32W; + +version(Unicode) { + alias PROCESSENTRY32W PROCESSENTRY32; + alias PPROCESSENTRY32W PPROCESSENTRY32; + alias LPPROCESSENTRY32W LPPROCESSENTRY32; + + alias MODULEENTRY32W MODULEENTRY32; + alias PMODULEENTRY32W PMODULEENTRY32; + alias LPMODULEENTRY32W LPMODULEENTRY32; +} else { + struct PROCESSENTRY32 { + DWORD dwSize; + DWORD cntUsage; + DWORD th32ProcessID; + DWORD th32DefaultHeapID; + DWORD th32ModuleID; + DWORD cntThreads; + DWORD th32ParentProcessID; + LONG pcPriClassBase; + DWORD dwFlags; + CHAR szExeFile[MAX_PATH]; + } + alias PROCESSENTRY32* PPROCESSENTRY32; + alias PROCESSENTRY32* LPPROCESSENTRY32; + + struct MODULEENTRY32 { + DWORD dwSize; + DWORD th32ModuleID; + DWORD th32ProcessID; + DWORD GlblcntUsage; + DWORD ProccntUsage; + BYTE *modBaseAddr; + DWORD modBaseSize; + HMODULE hModule; + char szModule[MAX_MODULE_NAME32 + 1]; + char szExePath[MAX_PATH]; + } + alias MODULEENTRY32* PMODULEENTRY32; + alias MODULEENTRY32* LPMODULEENTRY32; +} + + +extern(Windows) { + BOOL Heap32First(LPHEAPENTRY32,DWORD,DWORD); + BOOL Heap32ListFirst(HANDLE,LPHEAPLIST32); + BOOL Heap32ListNext(HANDLE,LPHEAPLIST32); + BOOL Heap32Next(LPHEAPENTRY32); + BOOL Thread32First(HANDLE,LPTHREADENTRY32); + BOOL Thread32Next(HANDLE,LPTHREADENTRY32); + BOOL Toolhelp32ReadProcessMemory(DWORD,LPCVOID,LPVOID,DWORD,LPDWORD); + HANDLE CreateToolhelp32Snapshot(DWORD,DWORD); + BOOL Module32FirstW(HANDLE,LPMODULEENTRY32W); + BOOL Module32NextW(HANDLE,LPMODULEENTRY32W); + BOOL Process32FirstW(HANDLE,LPPROCESSENTRY32W); + BOOL Process32NextW(HANDLE,LPPROCESSENTRY32W); +} + +version(Unicode) { + alias Module32FirstW Module32First; + alias Module32NextW Module32Next; + alias Process32FirstW Process32First; + alias Process32NextW Process32Next; +} else { + extern(Windows) { + BOOL Module32First(HANDLE,LPMODULEENTRY32); + BOOL Module32Next(HANDLE,LPMODULEENTRY32); + BOOL Process32First(HANDLE,LPPROCESSENTRY32); + BOOL Process32Next(HANDLE,LPPROCESSENTRY32); + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/tmschema.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/tmschema.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,758 @@ +/***********************************************************************\ +* tmschema.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.tmschema; + +/* BUTTON parts */ +enum { + BP_PUSHBUTTON = 1, + BP_RADIOBUTTON = 2, + BP_CHECKBOX = 3, + BP_GROUPBOX = 4, + BP_USERBUTTON = 5 +} + +enum { + CBS_UNCHECKEDNORMAL = 1, + CBS_UNCHECKEDHOT = 2, + CBS_UNCHECKEDPRESSED = 3, + CBS_UNCHECKEDDISABLED = 4, + CBS_CHECKEDNORMAL = 5, + CBS_CHECKEDHOT = 6, + CBS_CHECKEDPRESSED = 7, + CBS_CHECKEDDISABLED = 8, + CBS_MIXEDNORMAL = 9, + CBS_MIXEDHOT = 10, + CBS_MIXEDPRESSED = 11, + CBS_MIXEDDISABLED = 12 +} + +enum { + GBS_NORMAL = 1, + GBS_DISABLED = 2 +} + +enum { + PBS_NORMAL = 1, + PBS_HOT = 2, + PBS_PRESSED = 3, + PBS_DISABLED = 4, + PBS_DEFAULTED = 5 +} + +enum { + RBS_UNCHECKEDNORMAL = 1, + RBS_UNCHECKEDHOT = 2, + RBS_UNCHECKEDPRESSED = 3, + RBS_UNCHECKEDDISABLED = 4, + RBS_CHECKEDNORMAL = 5, + RBS_CHECKEDHOT = 6, + RBS_CHECKEDPRESSED = 7, + RBS_CHECKEDDISABLED = 8 +} + +/* CLOCK parts */ +enum { + CLP_TIME = 1 +} + +enum { + CLS_NORMAL = 1 +} + +/* COMBOBOX parts */ +enum { + CP_DROPDOWNBUTTON = 1 +} + +enum { + CBXS_NORMAL = 1, + CBXS_HOT = 2, + CBXS_PRESSED = 3, + CBXS_DISABLED = 4 +} + +/* EDIT parts */ +enum { + EP_EDITTEXT = 1, + EP_CARET = 2 +} + +enum { + ETS_NORMAL = 1, + ETS_HOT = 2, + ETS_SELECTED = 3, + ETS_DISABLED = 4, + ETS_FOCUSED = 5, + ETS_READONLY = 6, + ETS_ASSIST = 7 +} +/* EXPLORERBAR parts */ +enum { + EBP_HEADERBACKGROUND = 1, + EBP_HEADERCLOSE = 2, + EBP_HEADERPIN = 3, + EBP_IEBARMENU = 4, + EBP_NORMALGROUPBACKGROUND = 5, + EBP_NORMALGROUPCOLLAPSE = 6, + EBP_NORMALGROUPEXPAND = 7, + EBP_NORMALGROUPHEAD = 8, + EBP_SPECIALGROUPBACKGROUND = 9, + EBP_SPECIALGROUPCOLLAPSE = 10, + EBP_SPECIALGROUPEXPAND = 11, + EBP_SPECIALGROUPHEAD = 12 +} + +enum { + EBHC_NORMAL = 1, + EBHC_HOT = 2, + EBHC_PRESSED = 3 +} + +enum { + EBHP_NORMAL = 1, + EBHP_HOT = 2, + EBHP_PRESSED = 3, + EBHP_SELECTEDNORMAL = 4, + EBHP_SELECTEDHOT = 5, + EBHP_SELECTEDPRESSED = 6 +} + +enum { + EBM_NORMAL = 1, + EBM_HOT = 2, + EBM_PRESSED = 3 +} + +enum { + EBNGC_NORMAL = 1, + EBNGC_HOT = 2, + EBNGC_PRESSED = 3 +} + +enum { + EBNGE_NORMAL = 1, + EBNGE_HOT = 2, + EBNGE_PRESSED = 3 +} + +enum { + EBSGC_NORMAL = 1, + EBSGC_HOT = 2, + EBSGC_PRESSED = 3 +} + +enum { + EBSGE_NORMAL = 1, + EBSGE_HOT = 2, + EBSGE_PRESSED = 3 +} + +/* HEADER parts */ +enum { + HP_HEADERITEM = 1, + HP_HEADERITEMLEFT = 2, + HP_HEADERITEMRIGHT = 3, + HP_HEADERSORTARROW = 4 +} + +enum { + HIS_NORMAL = 1, + HIS_HOT = 2, + HIS_PRESSED = 3 +} + +enum { + HILS_NORMAL = 1, + HILS_HOT = 2, + HILS_PRESSED = 3 +} + +enum { + HIRS_NORMAL = 1, + HIRS_HOT = 2, + HIRS_PRESSED = 3 +} + +enum { + HSAS_SORTEDUP = 1, + HSAS_SORTEDDOWN = 2 +} + +/* LISTVIEW parts */ +enum { + LVP_LISTITEM = 1, + LVP_LISTGROUP = 2, + LVP_LISTDETAIL = 3, + LVP_LISTSORTEDDETAIL = 4, + LVP_EMPTYTEXT = 5 +} + +enum { + LIS_NORMAL = 1, + LIS_HOT = 2, + LIS_SELECTED = 3, + LIS_DISABLED = 4, + LIS_SELECTEDNOTFOCUS = 5 +} + +/* MENU parts */ +enum { + MP_MENUITEM = 1, + MP_MENUDROPDOWN = 2, + MP_MENUBARITEM = 3, + MP_MENUBARDROPDOWN = 4, + MP_CHEVRON = 5, + MP_SEPARATOR = 6 +} + +enum { + MS_NORMAL = 1, + MS_SELECTED = 2, + MS_DEMOTED = 3 +} +/* MENUBAND parts */ +enum { + MDP_NEWAPPBUTTON = 1, + MDP_SEPERATOR = 2 +} + +enum { + MDS_NORMAL = 1, + MDS_HOT = 2, + MDS_PRESSED = 3, + MDS_DISABLED = 4, + MDS_CHECKED = 5, + MDS_HOTCHECKED = 6 +} + +/* PAGE parts */ +enum { + PGRP_UP = 1, + PGRP_DOWN = 2, + PGRP_UPHORZ = 3, + PGRP_DOWNHORZ = 4 +} + +enum { + DNS_NORMAL = 1, + DNS_HOT = 2, + DNS_PRESSED = 3, + DNS_DISABLED = 4 +} + +enum { + DNHZS_NORMAL = 1, + DNHZS_HOT = 2, + DNHZS_PRESSED = 3, + DNHZS_DISABLED = 4 +} + +enum { + UPS_NORMAL = 1, + UPS_HOT = 2, + UPS_PRESSED = 3, + UPS_DISABLED = 4 +} + +enum { + UPHZS_NORMAL = 1, + UPHZS_HOT = 2, + UPHZS_PRESSED = 3, + UPHZS_DISABLED = 4 +} + +/* PROGRESS parts */ +enum { + PP_BAR = 1, + PP_BARVERT = 2, + PP_CHUNK = 3, + PP_CHUNKVERT = 4 +} + +/* REBAR parts */ +enum { + RP_GRIPPER = 1, + RP_GRIPPERVERT = 2, + RP_BAND = 3, + RP_CHEVRON = 4, + RP_CHEVRONVERT = 5 +} + +enum { + CHEVS_NORMAL = 1, + CHEVS_HOT = 2, + CHEVS_PRESSED = 3 +} + +/* SCROLLBAR parts */ +enum { + SBP_ARROWBTN = 1, + SBP_THUMBBTNHORZ = 2, + SBP_THUMBBTNVERT = 3, + SBP_LOWERTRACKHORZ = 4, + SBP_UPPERTRACKHORZ = 5, + SBP_LOWERTRACKVERT = 6, + SBP_UPPERTRACKVERT = 7, + SBP_GRIPPERHORZ = 8, + SBP_GRIPPERVERT = 9, + SBP_SIZEBOX = 10 +} + +enum { + ABS_UPNORMAL = 1, + ABS_UPHOT = 2, + ABS_UPPRESSED = 3, + ABS_UPDISABLED = 4, + ABS_DOWNNORMAL = 5, + ABS_DOWNHOT = 6, + ABS_DOWNPRESSED = 7, + ABS_DOWNDISABLED = 8, + ABS_LEFTNORMAL = 9, + ABS_LEFTHOT = 10, + ABS_LEFTPRESSED = 11, + ABS_LEFTDISABLED = 12, + ABS_RIGHTNORMAL = 13, + ABS_RIGHTHOT = 14, + ABS_RIGHTPRESSED = 15, + ABS_RIGHTDISABLED = 16 +} + +enum { + SCRBS_NORMAL = 1, + SCRBS_HOT = 2, + SCRBS_PRESSED = 3, + SCRBS_DISABLED = 4 +} + +enum { + SZB_RIGHTALIGN = 1, + SZB_LEFTALIGN = 2 +} + +/* SPIN parts */ +enum { + SPNP_UP = 1, + SPNP_DOWN = 2, + SPNP_UPHORZ = 3, + SPNP_DOWNHORZ = 4 +} + +/* STARTPANEL parts */ +enum { + SPP_USERPANE = 1, + SPP_MOREPROGRAMS = 2, + SPP_MOREPROGRAMSARROW = 3, + SPP_PROGLIST = 4, + SPP_PROGLISTSEPARATOR = 5, + SPP_PLACESLIST = 6, + SPP_PLACESLISTSEPARATOR = 7, + SPP_LOGOFF = 8, + SPP_LOGOFFBUTTONS = 9, + SPP_USERPICTURE = 10, + SPP_PREVIEW = 11 +} + +enum { + SPLS_NORMAL = 1, + SPLS_HOT = 2, + SPLS_PRESSED = 3 +} + +enum { + SPS_NORMAL = 1, + SPS_HOT = 2, + SPS_PRESSED = 3 +} + +/* STATUS parts */ +enum { + SP_PANE = 1, + SP_GRIPPERPANE = 2, + SP_GRIPPER = 3 +} + +/* TAB parts */ +enum { + TABP_TABITEM = 1, + TABP_TABITEMLEFTEDGE = 2, + TABP_TABITEMRIGHTEDGE = 3, + TABP_TABITEMBOTHEDGE = 4, + TABP_TOPTABITEM = 5, + TABP_TOPTABITEMLEFTEDGE = 6, + TABP_TOPTABITEMRIGHTEDGE = 7, + TABP_TOPTABITEMBOTHEDGE = 8, + TABP_PANE = 9, + TABP_BODY = 10 +} + +enum { + TIS_NORMAL = 1, + TIS_HOT = 2, + TIS_SELECTED = 3, + TIS_DISABLED = 4, + TIS_FOCUSED = 5 +} + +enum { + TIBES_NORMAL = 1, + TIBES_HOT = 2, + TIBES_SELECTED = 3, + TIBES_DISABLED = 4, + TIBES_FOCUSED = 5 +} + +enum { + TILES_NORMAL = 1, + TILES_HOT = 2, + TILES_SELECTED = 3, + TILES_DISABLED = 4, + TILES_FOCUSED = 5 +} + +enum { + TIRES_NORMAL = 1, + TIRES_HOT = 2, + TIRES_SELECTED = 3, + TIRES_DISABLED = 4, + TIRES_FOCUSED = 5 +} + +enum { + TTIS_NORMAL = 1, + TTIS_HOT = 2, + TTIS_SELECTED = 3, + TTIS_DISABLED = 4, + TTIS_FOCUSED = 5 +} + +enum { + TTIBES_NORMAL = 1, + TTIBES_HOT = 2, + TTIBES_SELECTED = 3, + TTIBES_DISABLED = 4, + TTIBES_FOCUSED = 5 +} + +enum { + TTILES_NORMAL = 1, + TTILES_HOT = 2, + TTILES_SELECTED = 3, + TTILES_DISABLED = 4, + TTILES_FOCUSED = 5 +} + +enum { + TTIRES_NORMAL = 1, + TTIRES_HOT = 2, + TTIRES_SELECTED = 3, + TTIRES_DISABLED = 4, + TTIRES_FOCUSED = 5 +} + +/* TASKBAND parts */ +enum { + TDP_GROUPCOUNT = 1, + TDP_FLASHBUTTON = 2, + TDP_FLASHBUTTONGROUPMENU = 3 +} + +/* TASKBAR parts */ +enum { + TBP_BACKGROUNDBOTTOM = 1, + TBP_BACKGROUNDRIGHT = 2, + TBP_BACKGROUNDTOP = 3, + TBP_BACKGROUNDLEFT = 4, + TBP_SIZINGBARBOTTOM = 5, + TBP_SIZINGBARRIGHT = 6, + TBP_SIZINGBARTOP = 7, + TBP_SIZINGBARLEFT = 8 +} + +/* TOOLBAR parts */ +enum { + TP_BUTTON = 1, + TP_DROPDOWNBUTTON = 2, + TP_SPLITBUTTON = 3, + TP_SPLITBUTTONDROPDOWN = 4, + TP_SEPARATOR = 5, + TP_SEPARATORVERT = 6 +} + +enum { + TS_NORMAL = 1, + TS_HOT = 2, + TS_PRESSED = 3, + TS_DISABLED = 4, + TS_CHECKED = 5, + TS_HOTCHECKED = 6 +} + +/* TOOLTIP parts */ +enum { + TTP_STANDARD = 1, + TTP_STANDARDTITLE = 2, + TTP_BALLOON = 3, + TTP_BALLOONTITLE = 4, + TTP_CLOSE = 5 +} + +enum { + TTBS_NORMAL = 1, + TTBS_LINK = 2 +} + +enum { + TTCS_NORMAL = 1, + TTCS_HOT = 2, + TTCS_PRESSED = 3 +} + +enum { + TTSS_NORMAL = 1, + TTSS_LINK = 2 +} + +/* TRACKBAR parts */ +enum { + TKP_TRACK = 1, + TKP_TRACKVERT = 2, + TKP_THUMB = 3, + TKP_THUMBBOTTOM = 4, + TKP_THUMBTOP = 5, + TKP_THUMBVERT = 6, + TKP_THUMBLEFT = 7, + TKP_THUMBRIGHT = 8, + TKP_TICS = 9, + TKP_TICSVERT = 10 +} + +enum { + TUS_NORMAL = 1, + TUS_HOT = 2, + TUS_PRESSED = 3, + TUS_FOCUSED = 4, + TUS_DISABLED = 5 +} + +enum { + TUBS_NORMAL = 1, + TUBS_HOT = 2, + TUBS_PRESSED = 3, + TUBS_FOCUSED = 4, + TUBS_DISABLED = 5 +} + +enum { + TUVLS_NORMAL = 1, + TUVLS_HOT = 2, + TUVLS_PRESSED = 3, + TUVLS_FOCUSED = 4, + TUVLS_DISABLED = 5 +} + +enum { + TUVRS_NORMAL = 1, + TUVRS_HOT = 2, + TUVRS_PRESSED = 3, + TUVRS_FOCUSED = 4, + TUVRS_DISABLED = 5 +} + +enum { + TUTS_NORMAL = 1, + TUTS_HOT = 2, + TUTS_PRESSED = 3, + TUTS_FOCUSED = 4, + TUTS_DISABLED = 5 +} + +enum { + TUVS_NORMAL = 1, + TUVS_HOT = 2, + TUVS_PRESSED = 3, + TUVS_FOCUSED = 4, + TUVS_DISABLED = 5 +} + +enum { + TSS_NORMAL = 1 +} + +enum { + TSVS_NORMAL = 1 +} + +enum { + TRS_NORMAL = 1 +} + +enum { + TRVS_NORMAL = 1 +} + +/* TRAYNOTIFY parts */ +enum { + TNP_BACKGROUND = 1, + TNP_ANIMBACKGROUND = 2 +} + +/* TREEVIEW parts */ +enum { + TVP_TREEITEM = 1, + TVP_GLYPH = 2, + TVP_BRANCH = 3 +} + +enum { + GLPS_CLOSED = 1, + GLPS_OPENED = 2 +} + +enum { + TREIS_NORMAL = 1, + TREIS_HOT = 2, + TREIS_SELECTED = 3, + TREIS_DISABLED = 4, + TREIS_SELECTEDNOTFOCUS = 5 +} + +/* WINDOW parts */ +enum { + WP_CAPTION = 1, + WP_SMALLCAPTION = 2, + WP_MINCAPTION = 3, + WP_SMALLMINCAPTION = 4, + WP_MAXCAPTION = 5, + WP_SMALLMAXCAPTION = 6, + WP_FRAMELEFT = 7, + WP_FRAMERIGHT = 8, + WP_FRAMEBOTTOM = 9, + WP_SMALLFRAMELEFT = 10, + WP_SMALLFRAMERIGHT = 11, + WP_SMALLFRAMEBOTTOM = 12, + WP_SYSBUTTON = 13, + WP_MDISYSBUTTON = 14, + WP_MINBUTTON = 15, + WP_MDIMINBUTTON = 16, + WP_MAXBUTTON = 17, + WP_CLOSEBUTTON = 18, + WP_SMALLCLOSEBUTTON = 19, + WP_MDICLOSEBUTTON = 20, + WP_RESTOREBUTTON = 21, + WP_MDIRESTOREBUTTON = 22, + WP_HELPBUTTON = 23, + WP_MDIHELPBUTTON = 24, + WP_HORZSCROLL = 25, + WP_HORZTHUMB = 26, + WP_VERTSCROLL = 27, + WP_VERTTHUMB = 28, + WP_DIALOG = 29, + WP_CAPTIONSIZINGTEMPLATE = 30, + WP_SMALLCAPTIONSIZINGTEMPLATE = 31, + WP_FRAMELEFTSIZINGTEMPLATE = 32, + WP_SMALLFRAMELEFTSIZINGTEMPLATE = 33, + WP_FRAMERIGHTSIZINGTEMPLATE = 34, + WP_SMALLFRAMERIGHTSIZINGTEMPLATE = 35, + WP_FRAMEBOTTOMSIZINGTEMPLATE = 36, + WP_SMALLFRAMEBOTTOMSIZINGTEMPLATE = 37 +} + +enum { + CS_ACTIVE = 1, + CS_INACTIVE = 2, + CS_DISABLED = 3 +} + +enum { + CBS_NORMAL = 1, + CBS_HOT = 2, + CBS_PUSHED = 3, + CBS_DISABLED = 4 +} + +enum { + FS_ACTIVE = 1, + FS_INACTIVE = 2 +} + +enum { + HBS_NORMAL = 1, + HBS_HOT = 2, + HBS_PUSHED = 3, + HBS_DISABLED = 4 +} + +enum { + HSS_NORMAL = 1, + HSS_HOT = 2, + HSS_PUSHED = 3, + HSS_DISABLED = 4 +} + +enum { + HTS_NORMAL = 1, + HTS_HOT = 2, + HTS_PUSHED = 3, + HTS_DISABLED = 4 +} + +enum { + MAXBS_NORMAL = 1, + MAXBS_HOT = 2, + MAXBS_PUSHED = 3, + MAXBS_DISABLED = 4 +} + +enum { + MXCS_ACTIVE = 1, + MXCS_INACTIVE = 2, + MXCS_DISABLED = 3 +} + +enum { + MINBS_NORMAL = 1, + MINBS_HOT = 2, + MINBS_PUSHED = 3, + MINBS_DISABLED = 4 +} + +enum { + RBS_NORMAL = 1, + RBS_HOT = 2, + RBS_PUSHED = 3, + RBS_DISABLED = 4 +} + +enum { + SBS_NORMAL = 1, + SBS_HOT = 2, + SBS_PUSHED = 3, + SBS_DISABLED = 4 +} + +enum { + MNCS_ACTIVE = 1, + MNCS_INACTIVE = 2, + MNCS_DISABLED = 3 +} + +enum { + VSS_NORMAL = 1, + VSS_HOT = 2, + VSS_PUSHED = 3, + VSS_DISABLED = 4 +} + +enum { + VTS_NORMAL = 1, + VTS_HOT = 2, + VTS_PUSHED = 3, + VTS_DISABLED = 4 +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/unknwn.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/unknwn.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,55 @@ +/***********************************************************************\ +* unknwn.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.unknwn; + +import win32.objfwd, win32.windef, win32.wtypes; +private import win32.basetyps; + +extern (Windows) { + void* MIDL_user_allocate(size_t); + void MIDL_user_free(void*); +} + + +extern (Windows) { + + interface IUnknown { + HRESULT QueryInterface(IID* riid, void** pvObject); + ULONG AddRef(); + ULONG Release(); + } + + alias IUnknown LPUNKNOWN; + + interface IClassFactory : IUnknown { + HRESULT CreateInstance(IUnknown UnkOuter, IID* riid, void** pvObject); + HRESULT LockServer(BOOL fLock); + } + alias IClassFactory LPCLASSFACTORY; + + /+ + // These do not seem to be necessary (or desirable) for D. + HRESULT IUnknown_QueryInterface_Proxy(IUnknown*,REFIID,void**); + ULONG IUnknown_AddRef_Proxy(IUnknown*); + ULONG IUnknown_Release_Proxy(IUnknown*); + HRESULT IClassFactory_RemoteCreateInstance_Proxy(IClassFactory*,REFIID,IUnknown**); + HRESULT IClassFactory_RemoteLockServer_Proxy(IClassFactory*,BOOL); + HRESULT IClassFactory_CreateInstance_Proxy(IClassFactory*,IUnknown*,REFIID,void**); + HRESULT IClassFactory_CreateInstance_Stub(IClassFactory*,REFIID,IUnknown**); + HRESULT IClassFactory_LockServer_Proxy(IClassFactory*,BOOL); + HRESULT IClassFactory_LockServer_Stub(IClassFactory*,BOOL); + + void IUnknown_QueryInterface_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD); + void IUnknown_AddRef_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD); + void IUnknown_Release_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD); + void IClassFactory_RemoteCreateInstance_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD); + void IClassFactory_RemoteLockServer_Stub(LPRPCSTUBBUFFER,LPRPCCHANNELBUFFER,PRPC_MESSAGE,PDWORD); + +/ +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/usp10.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/usp10.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,334 @@ +/* USP - Unicode Complex Script processor + * http://msdn2.microsoft.com/library/ms776488 */ + + +module win32.usp10; +import win32.windows; + + + +/* Uniscribe Enumeration Types + * http://msdn2.microsoft.com/library/ms776518 */ + +enum : WORD { + SCRIPT_UNDEFINED = 0, +} + +enum : DWORD { + SGCM_RTL = 0x00000001, +} + +enum : DWORD { + SSA_PASSWORD = 0x00000001, + SSA_TAB = 0x00000002, + SSA_CLIP = 0x00000004, + SSA_FIT = 0x00000008, + SSA_DZWG = 0x00000010, + SSA_FALLBACK = 0x00000020, + SSA_BREAK = 0x00000040, + SSA_GLYPHS = 0x00000080, + SSA_RTL = 0x00000100, + SSA_GCP = 0x00000200, + SSA_HOTKEY = 0x00000400, + SSA_METAFILE = 0x00000800, + SSA_LINK = 0x00001000, + SSA_HIDEHOTKEY = 0x00002000, + SSA_HOTKEYONLY = 0x00002400, + SSA_FULLMEASURE = 0x04000000, + SSA_LPKANSIFALLBACK = 0x08000000, + SSA_PIDX = 0x10000000, + SSA_LAYOUTRTL = 0x20000000, + SSA_DONTGLYPH = 0x40000000, + SSA_NOKASHIDA = 0x80000000, +} + +enum : DWORD { + SIC_COMPLEX = 1, + SIC_ASCIIDIGIT = 2, + SIC_NEUTRAL = 4, +} + +enum : DWORD { + SCRIPT_DIGITSUBSTITUTE_CONTEXT, + SCRIPT_DIGITSUBSTITUTE_NONE, + SCRIPT_DIGITSUBSTITUTE_NATIONAL, + SCRIPT_DIGITSUBSTITUTE_TRADITIONAL, +} + +enum SCRIPT_JUSTIFY : WORD { + SCRIPT_JUSTIFY_NONE, + SCRIPT_JUSTIFY_ARABIC_BLANK, + SCRIPT_JUSTIFY_CHARACTER, + SCRIPT_JUSTIFY_RESERVED1, + SCRIPT_JUSTIFY_BLANK, + SCRIPT_JUSTIFY_RESERVED2, + SCRIPT_JUSTIFY_RESERVED3, + SCRIPT_JUSTIFY_ARABIC_NORMAL, + SCRIPT_JUSTIFY_ARABIC_KASHIDA, + SCRIPT_JUSTIFY_ARABIC_ALEF, + SCRIPT_JUSTIFY_ARABIC_HA, + SCRIPT_JUSTIFY_ARABIC_RA, + SCRIPT_JUSTIFY_ARABIC_BA, + SCRIPT_JUSTIFY_ARABIC_BARA, + SCRIPT_JUSTIFY_ARABIC_SEEN, + SCRIPT_JUSTIFY_ARABIC_SEEN_M, +} + + + +/* Uniscribe Structures + * http://msdn2.microsoft.com/library/ms776479 */ + +alias void* SCRIPT_CACHE; +alias void* SCRIPT_STRING_ANALYSIS; + +extern (C) +{ + struct SCRIPT_CONTROL + { + private DWORD _bitfield; + DWORD uDefaultLanguage() { return (_bitfield >> 0) & 0xFFFF; } + DWORD uDefaultLanguage(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFFF0000) | (val << 0)); return val; } + DWORD fContextDigits() { return (_bitfield >> 16) & 0x1; } + DWORD fContextDigits(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFFEFFFF) | (val << 16)); return val; } + DWORD fInvertPreBoundDir() { return (_bitfield >> 17) & 0x1; } + DWORD fInvertPreBoundDir(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFFDFFFF) | (val << 17)); return val; } + DWORD fInvertPostBoundDir() { return (_bitfield >> 18) & 0x1; } + DWORD fInvertPostBoundDir(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFFBFFFF) | (val << 18)); return val; } + DWORD fLinkStringBefore() { return (_bitfield >> 19) & 0x1; } + DWORD fLinkStringBefore(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFF7FFFF) | (val << 19)); return val; } + DWORD fLinkStringAfter() { return (_bitfield >> 20) & 0x1; } + DWORD fLinkStringAfter(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFEFFFFF) | (val << 20)); return val; } + DWORD fNeutralOverride() { return (_bitfield >> 21) & 0x1; } + DWORD fNeutralOverride(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFDFFFFF) | (val << 21)); return val; } + DWORD fNumericOverride() { return (_bitfield >> 22) & 0x1; } + DWORD fNumericOverride(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFFBFFFFF) | (val << 22)); return val; } + DWORD fLegacyBidiClass() { return (_bitfield >> 23) & 0x1; } + DWORD fLegacyBidiClass(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFFFF7FFFFF) | (val << 23)); return val; } + DWORD fReserved() { return (_bitfield >> 24) & 0xFF; } + DWORD fReserved(DWORD val) { _bitfield = cast(DWORD)((_bitfield & 0xFFFFFFFF00FFFFFF) | (val << 24)); return val; } + } + + struct SCRIPT_STATE + { + private WORD _bitfield; + WORD uBidiLevel() { return cast(WORD)((_bitfield >> 0) & 0x1F); } + WORD uBidiLevel(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFE0) | (val << 0)); return val; } + WORD fOverrideDirection() { return cast(WORD)((_bitfield >> 5) & 0x1); } + WORD fOverrideDirection(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFDF) | (val << 5)); return val; } + WORD fInhibitSymSwap() { return cast(WORD)((_bitfield >> 6) & 0x1); } + WORD fInhibitSymSwap(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFBF) | (val << 6)); return val; } + WORD fCharShape() { return cast(WORD)((_bitfield >> 7) & 0x1); } + WORD fCharShape(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFF7F) | (val << 7)); return val; } + WORD fDigitSubstitute() { return cast(WORD)((_bitfield >> 8) & 0x1); } + WORD fDigitSubstitute(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFEFF) | (val << 8)); return val; } + WORD fInhibitLigate() { return cast(WORD)((_bitfield >> 9) & 0x1); } + WORD fInhibitLigate(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFDFF) | (val << 9)); return val; } + WORD fDisplayZWG() { return cast(WORD)((_bitfield >> 10) & 0x1); } + WORD fDisplayZWG(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFBFF) | (val << 10)); return val; } + WORD fArabicNumContext() { return cast(WORD)((_bitfield >> 11) & 0x1); } + WORD fArabicNumContext(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFF7FF) | (val << 11)); return val; } + WORD fGcpClusters() { return cast(WORD)((_bitfield >> 12) & 0x1); } + WORD fGcpClusters(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFEFFF) | (val << 12)); return val; } + WORD fReserved() { return cast(WORD)((_bitfield >> 13) & 0x1); } + WORD fReserved(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFDFFF) | (val << 13)); return val; } + WORD fEngineReserved() { return cast(WORD)((_bitfield >> 14) & 0x3); } + WORD fEngineReserved(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFF3FFF) | (val << 14)); return val; } + } + + + struct SCRIPT_ANALYSIS + { + private WORD _bitfield; + WORD eScript() { return cast(WORD)((_bitfield >> 0) & 0x3FF); } + WORD eScript(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFC00) | (val << 0)); return val; } + WORD fRTL() { return cast(WORD)((_bitfield >> 10) & 0x1); } + WORD fRTL(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFBFF) | (val << 10)); return val; } + WORD fLayoutRTL() { return cast(WORD)((_bitfield >> 11) & 0x1); } + WORD fLayoutRTL(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFF7FF) | (val << 11)); return val; } + WORD fLinkBefore() { return cast(WORD)((_bitfield >> 12) & 0x1); } + WORD fLinkBefore(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFEFFF) | (val << 12)); return val; } + WORD fLinkAfter() { return cast(WORD)((_bitfield >> 13) & 0x1); } + WORD fLinkAfter(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFDFFF) | (val << 13)); return val; } + WORD fLogicalOrder() { return cast(WORD)((_bitfield >> 14) & 0x1); } + WORD fLogicalOrder(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFBFFF) | (val << 14)); return val; } + WORD fNoGlyphIndex() { return cast(WORD)((_bitfield >> 15) & 0x1); } + WORD fNoGlyphIndex(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFF7FFF) | (val << 15)); return val; } + SCRIPT_STATE s; + } + + + struct SCRIPT_ITEM + { + int iCharPos; + SCRIPT_ANALYSIS a; + } + + struct SCRIPT_VISATTR + { + private WORD _bitfield; + WORD uJustification() { return cast(WORD)((_bitfield >> 0) & 0xF); } + WORD uJustification(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFF0) | (val << 0)); return val; } + WORD fClusterStart() { return cast(WORD)((_bitfield >> 4) & 0x1); } + WORD fClusterStart(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFEF) | (val << 4)); return val; } + WORD fDiacritic() { return cast(WORD)((_bitfield >> 5) & 0x1); } + WORD fDiacritic(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFDF) | (val << 5)); return val; } + WORD fZeroWidth() { return cast(WORD)((_bitfield >> 6) & 0x1); } + WORD fZeroWidth(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFFBF) | (val << 6)); return val; } + WORD fReserved() { return cast(WORD)((_bitfield >> 7) & 0x1); } + WORD fReserved(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFFFF7F) | (val << 7)); return val; } + WORD fShapeReserved() { return cast(WORD)((_bitfield >> 8) & 0xFF); } + WORD fShapeReserved(WORD val) { _bitfield = cast(WORD)((_bitfield & 0xFFFFFFFFFFFF00FF) | (val << 8)); return val; } + } + + struct GOFFSET + { + LONG du; + LONG dv; + } + + struct SCRIPT_LOGATTR + { + BYTE _bitfield; + BYTE fSoftBreak() { return cast(BYTE)((_bitfield >> 0) & 0x1); } + BYTE fSoftBreak(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFFFE) | (val << 0)); return val; } + BYTE fWhiteSpace() { return cast(BYTE)((_bitfield >> 1) & 0x1); } + BYTE fWhiteSpace(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFFFD) | (val << 1)); return val; } + BYTE fCharStop() { return cast(BYTE)((_bitfield >> 2) & 0x1); } + BYTE fCharStop(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFFFB) | (val << 2)); return val; } + BYTE fWordStop() { return cast(BYTE)((_bitfield >> 3) & 0x1); } + BYTE fWordStop(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFFF7) | (val << 3)); return val; } + BYTE fInvalid() { return cast(BYTE)((_bitfield >> 4) & 0x1); } + BYTE fInvalid(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFFEF) | (val << 4)); return val; } + BYTE fReserved() { return cast(BYTE)((_bitfield >> 5) & 0x7); } + BYTE fReserved(BYTE val) { _bitfield = cast(BYTE)((_bitfield & 0xFFFFFFFFFFFFFF1F) | (val << 5)); return val; } + } + + struct SCRIPT_PROPERTIES + { + private DWORD _bitfield1; + DWORD langid() { return (_bitfield1 >> 0) & 0xFFFF; } + DWORD langid(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFFF0000) | (val << 0)); return val; } + DWORD fNumeric() { return (_bitfield1 >> 16) & 0x1; } + DWORD fNumeric(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFFEFFFF) | (val << 16)); return val; } + DWORD fComplex() { return (_bitfield1 >> 17) & 0x1; } + DWORD fComplex(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFFDFFFF) | (val << 17)); return val; } + DWORD fNeedsWordBreaking() { return (_bitfield1 >> 18) & 0x1; } + DWORD fNeedsWordBreaking(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFFBFFFF) | (val << 18)); return val; } + DWORD fNeedsCaretInfo() { return (_bitfield1 >> 19) & 0x1; } + DWORD fNeedsCaretInfo(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFF7FFFF) | (val << 19)); return val; } + DWORD bCharSet() { return (_bitfield1 >> 20) & 0xFF; } + DWORD bCharSet(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFF00FFFFF) | (val << 20)); return val; } + DWORD fControl() { return (_bitfield1 >> 28) & 0x1; } + DWORD fControl(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFEFFFFFFF) | (val << 28)); return val; } + DWORD fPrivateUseArea() { return (_bitfield1 >> 29) & 0x1; } + DWORD fPrivateUseArea(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFDFFFFFFF) | (val << 29)); return val; } + DWORD fNeedsCharacterJustify() { return (_bitfield1 >> 30) & 0x1; } + DWORD fNeedsCharacterJustify(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFBFFFFFFF) | (val << 30)); return val; } + DWORD fInvalidGlyph() { return (_bitfield1 >> 31) & 0x1; } + DWORD fInvalidGlyph(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFF7FFFFFFF) | (val << 31)); return val; } + private DWORD _bitfield2; + DWORD fInvalidLogAttr() { return (_bitfield2 >> 0) & 0x1; } + DWORD fInvalidLogAttr(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFFFE) | (val << 0)); return val; } + DWORD fCDM() { return (_bitfield2 >> 1) & 0x1; } + DWORD fCDM(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFFFD) | (val << 1)); return val; } + DWORD fAmbiguousCharSet() { return (_bitfield2 >> 2) & 0x1; } + DWORD fAmbiguousCharSet(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFFFB) | (val << 2)); return val; } + DWORD fClusterSizeVaries() { return (_bitfield2 >> 3) & 0x1; } + DWORD fClusterSizeVaries(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFFF7) | (val << 3)); return val; } + DWORD fRejectInvalid() { return (_bitfield2 >> 4) & 0x1; } + DWORD fRejectInvalid(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFFEF) | (val << 4)); return val; } + } + + struct SCRIPT_FONTPROPERTIES + { + int cBytes = SCRIPT_FONTPROPERTIES.sizeof; + WORD wgBlank; + WORD wgDefault; + WORD wgInvalid; + WORD wgKashida; + int iKashidaWidth; + } + + struct SCRIPT_TABDEF + { + int cTabStops; + int iScale; + int* pTabStops; + int iTabOrigin; + } + + struct SCRIPT_DIGITSUBSTITUTE + { + private DWORD _bitfield1; + DWORD NationalDigitLanguage() { return (_bitfield1 >> 0) & 0xFFFF; } + DWORD NationalDigitLanguage(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFFFFFF0000) | (val << 0)); return val; } + DWORD TraditionalDigitLanguage() { return (_bitfield1 >> 16) & 0xFFFF; } + DWORD TraditionalDigitLanguage(DWORD val) { _bitfield1 = cast(DWORD)((_bitfield1 & 0xFFFFFFFF0000FFFF) | (val << 16)); return val; } + private DWORD _bitfield2; + DWORD DigitSubstitute() { return (_bitfield2 >> 0) & 0xFF; } + DWORD DigitSubstitute(DWORD val) { _bitfield2 = cast(DWORD)((_bitfield2 & 0xFFFFFFFFFFFFFF00) | (val << 0)); return val; } + DWORD dwReserved; + } + + /* TODO: Windows Vista fearured structs + OPENTYPE_FEATURE_RECORD + OPENTYPE_TAG + SCRIPT_CHARPROP + SCRIPT_GLYPHPROP + TEXTRANGE_PROPERTIES + */ +} + + +/* Uniscribe Functions + * http://msdn2.microsoft.com/library/ms776469 */ +extern (Windows) +{ + HRESULT ScriptFreeCache(SCRIPT_CACHE*); + HRESULT ScriptItemize(WCHAR*, int, int, SCRIPT_CONTROL*, SCRIPT_STATE*, SCRIPT_ITEM*, int*); + HRESULT ScriptLayout(int, BYTE*, int*, int*); + HRESULT ScriptShape(HDC, SCRIPT_CACHE*, WCHAR*, int, int, SCRIPT_ANALYSIS*, WORD*, WORD*, SCRIPT_VISATTR*, int*); + HRESULT ScriptPlace(HDC, SCRIPT_CACHE*, WORD*, int, SCRIPT_VISATTR*, SCRIPT_ANALYSIS*, int*, GOFFSET*, ABC*); + HRESULT ScriptTextOut(HDC, SCRIPT_CACHE*, int, int, UINT, RECT*, SCRIPT_ANALYSIS*, WCHAR*, int, WORD*, int, int*, int*, GOFFSET*); + HRESULT ScriptJustify(SCRIPT_VISATTR*, int*, int, int, int, int*); + HRESULT ScriptBreak(WCHAR*, int, SCRIPT_ANALYSIS*, SCRIPT_LOGATTR*); + HRESULT ScriptCPtoX(int, BOOL, int, int, WORD*, SCRIPT_VISATTR*, int*, SCRIPT_ANALYSIS*, int*); + HRESULT ScriptXtoCP(int, int, int, WORD*, SCRIPT_VISATTR*, int*, SCRIPT_ANALYSIS*, int*, int*); + HRESULT ScriptGetLogicalWidths(SCRIPT_ANALYSIS*, int, int, int*, WORD*, SCRIPT_VISATTR*, int*); + HRESULT ScriptApplyLogicalWidth(int*, int, int, WORD*, SCRIPT_VISATTR*, int*, SCRIPT_ANALYSIS*, ABC*, int*); + HRESULT ScriptGetCMap(HDC, SCRIPT_CACHE*, WCHAR*, int, DWORD, WORD*); + HRESULT ScriptGetGlyphABCWidth(HDC, SCRIPT_CACHE*, WORD, ABC*); + HRESULT ScriptGetProperties(SCRIPT_PROPERTIES***, int*); + HRESULT ScriptGetFontProperties(HDC, SCRIPT_CACHE*, SCRIPT_FONTPROPERTIES*); + HRESULT ScriptCacheGetHeight(HDC, SCRIPT_CACHE*, int*); + HRESULT ScriptIsComplex(WCHAR*, int, DWORD); + HRESULT ScriptRecordDigitSubstitution(LCID, SCRIPT_DIGITSUBSTITUTE*); + HRESULT ScriptApplyDigitSubstitution(SCRIPT_DIGITSUBSTITUTE*, SCRIPT_CONTROL*, SCRIPT_STATE*); + + /* ScriptString Functions + * http://msdn2.microsoft.com/library/ms776485 */ + HRESULT ScriptStringAnalyse(HDC, void*, int, int, int, DWORD, int, SCRIPT_CONTROL*, SCRIPT_STATE*, int*, SCRIPT_TABDEF*, BYTE*, SCRIPT_STRING_ANALYSIS*); + HRESULT ScriptStringFree(SCRIPT_STRING_ANALYSIS*); + SIZE* ScriptString_pSize(SCRIPT_STRING_ANALYSIS); + int* ScriptString_pcOutChars(SCRIPT_STRING_ANALYSIS); + SCRIPT_LOGATTR* ScriptString_pLogAttr(SCRIPT_STRING_ANALYSIS); + HRESULT ScriptStringGetOrder(SCRIPT_STRING_ANALYSIS, UINT*); + HRESULT ScriptStringCPtoX(SCRIPT_STRING_ANALYSIS, int, BOOL, int*); + HRESULT ScriptStringXtoCP(SCRIPT_STRING_ANALYSIS, int, int*, int*); + HRESULT ScriptStringGetLogicalWidths(SCRIPT_STRING_ANALYSIS, int*); + HRESULT ScriptStringValidate(SCRIPT_STRING_ANALYSIS); + HRESULT ScriptStringOut(SCRIPT_STRING_ANALYSIS, int, int, UINT, RECT*, int, int, BOOL); + + /* TODO: Windows Vista fearured functions + ScriptGetFontAlternateGlyphs() + ScriptGetFontFeatureTags() + ScriptGetFontLanguageTags() + ScriptGetFontScriptTags() + ScriptItemizeOpenType() + ScriptPlaceOpenType() + ScriptPositionSingleGlyph() + ScriptShapeOpenType() + ScriptSubstituteSingleGlyph() + */ +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/uuid.di --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/uuid.di Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,4069 @@ +module win32.uuid; + +import win32.basetyps; + +export +extern(C) { + const IID _DBBMKGUID = {0xF6304BB0, 0xD188, 0x11CD, [0xAD, 0x48, 0x00, 0xAA, 0x00, 0x3C, 0x9C, 0xB6]}; + const IID _DBCIDGUID = {0xFE284700, 0xD188, 0x11CD, [0xAD, 0x48, 0x00, 0xAA, 0x00, 0x3C, 0x9C, 0xB6]}; + const IID _GUID_NAMEONLY = {0xE8BF1170, 0xD188, 0x11CD, [0xAD, 0x48, 0x00, 0xAA, 0x00, 0x3C, 0x9C, 0xB6]}; + const IID ARRAYID_PathProperties = {0x7ECBBA04, 0x2D97, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID BFID_GRAY_16 = {0xF9D6BC00, 0x449C, 0x11D0, [0x91, 0x8C, 0x00, 0xAA, 0x00, 0x6C, 0x1A, 0x01]}; + const IID BFID_GRAY_8 = {0xD93DE910, 0x449C, 0x11D0, [0x91, 0x8C, 0x00, 0xAA, 0x00, 0x6C, 0x1A, 0x01]}; + const IID BFID_MONOCHROME = {0xE436EB78, 0x524F, 0x11CE, [0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70]}; + const IID BFID_RGB_24 = {0xE436EB7D, 0x524F, 0x11CE, [0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70]}; + const IID BFID_RGB_32 = {0xE436EB7E, 0x524F, 0x11CE, [0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70]}; + const IID BFID_RGB_4 = {0xE436EB79, 0x524F, 0x11CE, [0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70]}; + const IID BFID_RGB_555 = {0xE436EB7C, 0x524F, 0x11CE, [0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70]}; + const IID BFID_RGB_565 = {0xE436EB7B, 0x524F, 0x11CE, [0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70]}; + const IID BFID_RGB_8 = {0xE436EB7A, 0x524F, 0x11CE, [0x9F, 0x53, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70]}; + const IID BFID_RGBA_32 = {0x773C9AC0, 0x3274, 0x11D0, [0xB7, 0x24, 0x00, 0xAA, 0x00, 0x6C, 0x1A, 0x01]}; + const IID BHID_LinkTargetItem = {0x3981E228, 0xF559, 0x11D3, [0x8E, 0x3A, 0x00, 0xC0, 0x4F, 0x68, 0x37, 0xD5]}; + const IID BHID_SFObject = {0x3981E224, 0xF559, 0x11D3, [0x8E, 0x3A, 0x00, 0xC0, 0x4F, 0x68, 0x37, 0xD5]}; + const IID BHID_SFUIObject = {0x3981E225, 0xF559, 0x11D3, [0x8E, 0x3A, 0x00, 0xC0, 0x4F, 0x68, 0x37, 0xD5]}; + const IID BHID_SFViewObject = {0x3981E226, 0xF559, 0x11D3, [0x8E, 0x3A, 0x00, 0xC0, 0x4F, 0x68, 0x37, 0xD5]}; + const IID BHID_Storage = {0x3981E227, 0xF559, 0x11D3, [0x8E, 0x3A, 0x00, 0xC0, 0x4F, 0x68, 0x37, 0xD5]}; + const IID BHID_StorageEnum = {0x4621A4E3, 0xF0D6, 0x4773, [0x8A, 0x9C, 0x46, 0xE7, 0x7B, 0x17, 0x48, 0x40]}; + const IID BHID_Stream = {0x1CEBB3AB, 0x7C10, 0x499A, [0xA4, 0x17, 0x92, 0xCA, 0x16, 0xC4, 0xCB, 0x83]}; + const IID CATID_BrowsableShellExt = {0x00021490, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CATID_BrowseInPlace = {0x00021491, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CATID_ClusCfgCapabilities = {0x4653EEC4, 0x2788, 0x4EBD, [0xA8, 0x31, 0x7E, 0x0D, 0x9F, 0x82, 0xD6, 0xE7]}; + const IID CATID_ClusCfgMemberSetChangeListener = {0x8A43EAD4, 0x10F1, 0x440D, [0x8D, 0xAA, 0x1F, 0xE3, 0x8D, 0x16, 0x98, 0xCD]}; + const IID CATID_ClusCfgResourceTypes = {0x7C4CAE52, 0xCAC9, 0x499D, [0x82, 0xC6, 0xBC, 0x6A, 0x21, 0x77, 0xE5, 0x56]}; + const IID CATID_ClusCfgStartupListeners = {0xDF406DB4, 0x7872, 0x4A99, [0xBB, 0x3C, 0x14, 0xA9, 0xC3, 0x39, 0x33, 0xD1]}; + const IID CATID_CommBand = {0x00021494, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CATID_Control = {0x40FC6ED4, 0x2438, 0x11CF, [0xA3, 0xDB, 0x08, 0x00, 0x36, 0xF1, 0x25, 0x02]}; + const IID CATID_DesignTimeUIActivatableControl = {0xF2BB56D1, 0xDB07, 0x11D1, [0xAA, 0x6B, 0x00, 0x60, 0x97, 0xDB, 0x95, 0x39]}; + const IID CATID_DeskBand = {0x00021492, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CATID_DocObject = {0x40FC6ED8, 0x2438, 0x11CF, [0xA3, 0xDB, 0x08, 0x00, 0x36, 0xF1, 0x25, 0x02]}; + const IID CATID_EnumClusCfgManagedResources = {0x02A34F88, 0xD31A, 0x4688, [0xBD, 0xDD, 0x38, 0xA7, 0x39, 0xE4, 0xF8, 0x9B]}; + const IID CATID_InfoBand = {0x00021493, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CATID_Insertable = {0x40FC6ED3, 0x2438, 0x11CF, [0xA3, 0xDB, 0x08, 0x00, 0x36, 0xF1, 0x25, 0x02]}; + const IID CATID_InternetAware = {0x0DE86A58, 0x2BAA, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID CATID_IsShortcut = {0x40FC6ED6, 0x2438, 0x11CF, [0xA3, 0xDB, 0x08, 0x00, 0x36, 0xF1, 0x25, 0x02]}; + const IID CATID_MARSHALER = {0x00000003, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CATID_NeverShowExt = {0x40FC6ED7, 0x2438, 0x11CF, [0xA3, 0xDB, 0x08, 0x00, 0x36, 0xF1, 0x25, 0x02]}; + const IID CATID_PersistsToFile = {0x0DE86A56, 0x2BAA, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID CATID_PersistsToMemory = {0x0DE86A55, 0x2BAA, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID CATID_PersistsToMoniker = {0x0DE86A51, 0x2BAA, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID CATID_PersistsToPropertyBag = {0x0DE86A57, 0x2BAA, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID CATID_PersistsToStorage = {0x0DE86A52, 0x2BAA, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID CATID_PersistsToStream = {0x0DE86A54, 0x2BAA, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID CATID_PersistsToStreamInit = {0x0DE86A53, 0x2BAA, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID CATID_Printable = {0x40FC6ED9, 0x2438, 0x11CF, [0xA3, 0xDB, 0x08, 0x00, 0x36, 0xF1, 0x25, 0x02]}; + const IID CATID_Programmable = {0x40FC6ED5, 0x2438, 0x11CF, [0xA3, 0xDB, 0x08, 0x00, 0x36, 0xF1, 0x25, 0x02]}; + const IID CATID_RequiresDataPathHost = {0x0DE86A50, 0x2BAA, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID CATID_SafeForInitializing = {0x7DD95802, 0x9882, 0x11CF, [0x9F, 0xA9, 0x00, 0xAA, 0x00, 0x6C, 0x42, 0xC4]}; + const IID CATID_SafeForScripting = {0x7DD95801, 0x9882, 0x11CF, [0x9F, 0xA9, 0x00, 0xAA, 0x00, 0x6C, 0x42, 0xC4]}; + const IID CGID_DocHostCommandHandler = {0xF38BC242, 0xB950, 0x11D1, [0x89, 0x18, 0x00, 0xC0, 0x4F, 0xC2, 0xC8, 0x36]}; + const IID CGID_DownloadHost = {0xE0608728, 0xAE4C, 0x11D1, [0xBA, 0x40, 0x00, 0xC0, 0x4F, 0xB9, 0x2D, 0x79]}; + const IID CGID_Explorer = {0x000214D0, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CGID_ExplorerBarDoc = {0x000214D3, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CGID_InternetExplorer = {0xEB7EED00, 0xF74D, 0x11D2, [0xBB, 0x7F, 0x00, 0x10, 0x4B, 0x35, 0xE7, 0xF9]}; + const IID CGID_MSHTML = {0xDE4BA900, 0x59CA, 0x11CF, [0x95, 0x92, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID CGID_ShellDocView = {0x000214D1, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CGID_ShellServiceObject = {0x000214D2, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CGID_ShortCut = {0x93A68750, 0x951A, 0x11D1, [0x94, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]}; + const IID CLSID_1 = {0xD34F1813, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_2 = {0xD34F1814, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_3 = {0xD34F1815, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_4 = {0xD34F1816, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_5 = {0xD34F1817, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_6 = {0xD34F1818, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_7 = {0xD34F1819, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_8 = {0xD34F181A, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_9 = {0xD34F181B, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_a = {0xD34F181C, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_AboutProtocol = {0x3050F406, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_AccessControlEntry = {0xB75AC000, 0x9BDD, 0x11D0, [0x85, 0x2C, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID CLSID_AccessControlList = {0xB85EA052, 0x9BDD, 0x11D0, [0x85, 0x2C, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID CLSID_AccountDiscovery = {0x3DAB30ED, 0x8132, 0x40BF, [0xA8, 0xBA, 0x7B, 0x50, 0x57, 0xF0, 0xCD, 0x10]}; + const IID CLSID_ACLCustomMRU = {0x6935DB93, 0x21E8, 0x4CCC, [0xBE, 0xB9, 0x9F, 0xE3, 0xC7, 0x7A, 0x29, 0x7A]}; + const IID CLSID_ACLHistory = {0x00BB2764, 0x6A77, 0x11D0, [0xA5, 0x35, 0x00, 0xC0, 0x4F, 0xD7, 0xD0, 0x62]}; + const IID CLSID_ACListISF = {0x03C036F1, 0xA186, 0x11D0, [0x82, 0x4A, 0x00, 0xAA, 0x00, 0x5B, 0x43, 0x83]}; + const IID CLSID_ACLMRU = {0x6756A641, 0xDE71, 0x11D0, [0x83, 0x1B, 0x00, 0xAA, 0x00, 0x5B, 0x43, 0x83]}; + const IID CLSID_ACLMulti = {0x00BB2765, 0x6A77, 0x11D0, [0xA5, 0x35, 0x00, 0xC0, 0x4F, 0xD7, 0xD0, 0x62]}; + const IID CLSID_ActiveDesktop = {0x75048700, 0xEF1F, 0x11D0, [0x98, 0x88, 0x00, 0x60, 0x97, 0xDE, 0xAC, 0xF9]}; + const IID CLSID_AdapterInfo = {0x6F9942C9, 0xC1B1, 0x4AB5, [0x93, 0xDA, 0x60, 0x58, 0x99, 0x1D, 0xC8, 0xF3]}; + const IID CLSID_AddrControl = {0x00000348, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_AddressBarParser = {0xE0E11A09, 0x5CB8, 0x4B6C, [0x83, 0x32, 0xE0, 0x07, 0x20, 0xA1, 0x68, 0xF2]}; + const IID CLSID_ADsDSOObject = {0x549365D0, 0xEC26, 0x11CF, [0x83, 0x10, 0x00, 0xAA, 0x00, 0xB5, 0x05, 0xDB]}; + const IID CLSID_ADsSecurityUtility = {0xF270C64A, 0xFFB8, 0x4AE4, [0x85, 0xFE, 0x3A, 0x75, 0xE5, 0x34, 0x79, 0x66]}; + const IID CLSID_ADSystemInfo = {0x50B6327F, 0xAFD1, 0x11D2, [0x9C, 0xB9, 0x00, 0x00, 0xF8, 0x7A, 0x36, 0x9E]}; + const IID CLSID_AlgSetup = {0x27D0BCCC, 0x344D, 0x4287, [0xAF, 0x37, 0x0C, 0x72, 0xC1, 0x61, 0xC1, 0x4C]}; + const IID CLSID_AllClasses = {0x00000330, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_AlphabeticalCategorizer = {0x3C2654C6, 0x7372, 0x4F6B, [0xB3, 0x10, 0x55, 0xD6, 0x12, 0x8F, 0x49, 0xD2]}; + const IID CLSID_AnchorClick = {0x13D5413C, 0x33B9, 0x11D2, [0x95, 0xA7, 0x00, 0xC0, 0x4F, 0x8E, 0xCB, 0x02]}; + const IID CLSID_AnimationComposerFactory = {0x332B2A56, 0xF86C, 0x47E7, [0x86, 0x02, 0xFC, 0x42, 0xAC, 0x8B, 0x99, 0x20]}; + const IID CLSID_AnimationComposerSiteFactory = {0x16911A65, 0xD41D, 0x4431, [0x87, 0xF7, 0xE7, 0x57, 0xF4, 0xD0, 0x3B, 0xD8]}; + const IID CLSID_ApplicationGatewayServices = {0xF8ADE1D3, 0x49DF, 0x4B75, [0x90, 0x05, 0xEF, 0x95, 0x08, 0xE6, 0xA3, 0x37]}; + const IID CLSID_AutoComplete = {0x00BB2763, 0x6A77, 0x11D0, [0xA5, 0x35, 0x00, 0xC0, 0x4F, 0xD7, 0xD0, 0x62]}; + const IID CLSID_AutoDiscoveryProvider = {0xC4F3D5BF, 0x4809, 0x44E3, [0x84, 0xA4, 0x36, 0x8B, 0x6B, 0x33, 0xB0, 0xB4]}; + const IID CLSID_AutoplayForSlideShow = {0x00E7B358, 0xF65B, 0x4DCF, [0x83, 0xDF, 0xCD, 0x02, 0x6B, 0x94, 0xBF, 0xD4]}; + const IID CLSID_b = {0xD34F181D, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_BackgroundCopyManager = {0x4991D34B, 0x80A1, 0x4291, [0x83, 0xB6, 0x33, 0x28, 0x36, 0x6B, 0x90, 0x97]}; + const IID CLSID_BackgroundCopyManager1_5 = {0xF087771F, 0xD74F, 0x4C1A, [0xBB, 0x8A, 0xE1, 0x6A, 0xCA, 0x91, 0x24, 0xEA]}; + const IID CLSID_BackgroundCopyQMgr = {0x69AD4AEE, 0x51BE, 0x439B, [0xA9, 0x2C, 0x86, 0xAE, 0x49, 0x0E, 0x8B, 0x30]}; + const IID CLSID_BackLink = {0xFCBF906F, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_BasicImageEffects = {0x16B280C8, 0xEE70, 0x11D1, [0x90, 0x66, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID CLSID_BasicImageEffectsPP = {0x16B280C9, 0xEE70, 0x11D1, [0x90, 0x66, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID CLSID_BlockFormats = {0x3050F831, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_BridgeTerminal = {0x8EBAE7A3, 0x8943, 0x11D1, [0x96, 0xB8, 0x00, 0xC0, 0x4F, 0xB6, 0xE8, 0x66]}; + const IID CLSID_c = {0xD34F181E, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_CAccPropServices = {0xB5F8350B, 0x0548, 0x48B1, [0xA6, 0xEE, 0x88, 0xBD, 0x00, 0xB4, 0xA5, 0xE7]}; + const IID CLSID_CActiveIMM = {0x4955DD33, 0xB159, 0x11D0, [0x8F, 0xCF, 0x00, 0xAA, 0x00, 0x6B, 0xCC, 0x59]}; + const IID CLSID_CAnchorBrowsePropertyPage = {0x3050F3BB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CaseIgnoreList = {0x15F88A55, 0x4680, 0x11D1, [0xA3, 0xB4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_CCheckBox = {0x3050F686, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CColorPropPage = {0x0BE35201, 0x8F91, 0x11CE, [0x9D, 0xE3, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51]}; + const IID CLSID_CCombobox = {0x3050F678, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CDBurn = {0xFBEB8A05, 0xBEEE, 0x4442, [0x80, 0x4E, 0x40, 0x9D, 0x6C, 0x45, 0x15, 0xE9]}; + const IID CLSID_CDebugDocumentHelper = {0x83B8BCA6, 0x687C, 0x11D0, [0xA4, 0x05, 0x00, 0xAA, 0x00, 0x60, 0x27, 0x5C]}; + const IID CLSID_CDeviceRect = {0x3050F6D4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CDirect3DRM = {0x4516EC41, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID CLSID_CDirect3DRMAnimation = {0x4FA35698, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMAnimationSet = {0x4FA35699, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMClippedVisual = {0x5434E72D, 0x6D66, 0x11D1, [0xBB, 0x0B, 0x00, 0x00, 0xF8, 0x75, 0x86, 0x5A]}; + const IID CLSID_CDirect3DRMDevice = {0x4FA3568E, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMFace = {0x4FA35693, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMFrame = {0x4FA35690, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMFrameInterpolator = {0x0DE9EAA2, 0x3B84, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID CLSID_CDirect3DRMLight = {0x4FA35694, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMLightInterpolator = {0x0DE9EAA6, 0x3B84, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID CLSID_CDirect3DRMMaterial = {0x4FA35697, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMMaterialInterpolato = {0x0DE9EAA7, 0x3B84, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID CLSID_CDirect3DRMMesh = {0x4FA35691, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMMeshBuilder = {0x4FA35692, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMMeshInterpolator = {0x0DE9EAA3, 0x3B84, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID CLSID_CDirect3DRMProgressiveMesh = {0x4516EC40, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID CLSID_CDirect3DRMShadow = {0x4FA3569B, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMTexture = {0x4FA35695, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMTextureInterpolator = {0x0DE9EAA8, 0x3B84, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID CLSID_CDirect3DRMUserVisual = {0x4FA3569A, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMViewport = {0x4FA3568F, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirect3DRMViewportInterpolato = {0x0DE9EAA1, 0x3B84, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID CLSID_CDirect3DRMWrap = {0x4FA35696, 0x623F, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID CLSID_CDirectXFile = {0x4516EC43, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID CLSID_CDLAgent = {0x7D559C10, 0x9FE9, 0x11D0, [0x93, 0xF7, 0x00, 0xAA, 0x00, 0x59, 0xCE, 0x02]}; + const IID CLSID_CdlProtocol = {0x3DD53D40, 0x7B8B, 0x11D0, [0xB0, 0x13, 0x00, 0xAA, 0x00, 0x59, 0xCE, 0x02]}; + const IID CLSID_CDocBrowsePropertyPage = {0x3050F3B4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CDownloadBehavior = {0x3050F5BE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CEnroll = {0x43F8F289, 0x7A20, 0x11D0, [0x8F, 0x06, 0x00, 0xC0, 0x4F, 0xC2, 0x95, 0xE1]}; + const IID CLSID_CEventObj = {0x3050F48A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CFontPropPage = {0x0BE35200, 0x8F91, 0x11CE, [0x9D, 0xE3, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51]}; + const IID CLSID_CFSIconOverlayManager = {0x63B51F81, 0xC868, 0x11D0, [0x99, 0x9C, 0x00, 0xC0, 0x4F, 0xD6, 0x55, 0xE1]}; + const IID CLSID_ChannelAgent = {0xE3A8BDE6, 0xABCE, 0x11D0, [0xBC, 0x4B, 0x00, 0xC0, 0x4F, 0xD9, 0x29, 0xDB]}; + const IID CLSID_ChannelMgr = {0xB3CDAE90, 0xD170, 0x11D0, [0x80, 0x2B, 0x00, 0xC0, 0x4F, 0xD7, 0x5D, 0x13]}; + const IID CLSID_CHeaderFooter = {0x3050F6CD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CHtmlArea = {0x3050F64F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CIEOptionElement = {0x3050F698, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CIESelectElement = {0x3050F688, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CImageBrowsePropertyPage = {0x3050F3B3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_ClassInstallFilter = {0x32B533BB, 0xEDAE, 0x11D0, [0xBD, 0x5A, 0x00, 0xAA, 0x00, 0xB9, 0x2A, 0xF1]}; + const IID CLSID_CLayoutRect = {0x3050F664, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_ClientCaps = {0x7E8BC44E, 0xAEFF, 0x11D1, [0x89, 0xC2, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4]}; + const IID CLSID_ClusAppWiz = {0x24F97150, 0x6689, 0x11D1, [0x9A, 0xA7, 0x00, 0xC0, 0x4F, 0xB9, 0x3A, 0x80]}; + const IID CLSID_ClusCfgAsyncEvictCleanup = {0x08F35A72, 0xD7C4, 0x42F4, [0xBC, 0x81, 0x51, 0x88, 0xE1, 0x9D, 0xFA, 0x39]}; + const IID CLSID_ClusCfgEvictCleanup = {0x32152BE9, 0xDE8C, 0x4D0F, [0x81, 0xB0, 0xBC, 0xE5, 0xD1, 0x1E, 0xCB, 0x00]}; + const IID CLSID_ClusCfgResTypeGenScript = {0xD513C4F4, 0x1D34, 0x44A3, [0x83, 0xD4, 0x81, 0x26, 0x51, 0xDB, 0x89, 0x18]}; + const IID CLSID_ClusCfgResTypeMajorityNodeSet = {0xB6870B44, 0x0BDF, 0x4B46, [0xAC, 0x1F, 0x6C, 0x69, 0x1B, 0x62, 0x2E, 0xDF]}; + const IID CLSID_ClusCfgResTypeServices = {0x6A370489, 0xBB52, 0x4727, [0xB7, 0x40, 0x08, 0xF4, 0x94, 0x16, 0x34, 0x78]}; + const IID CLSID_ClusCfgStartupNotify = {0x105EEEB6, 0x32FD, 0x4EA9, [0x89, 0x12, 0x84, 0x3A, 0x7F, 0xF3, 0xCA, 0x2D]}; + const IID CLSID_ClusCfgWizard = {0x1919C4FE, 0x6F46, 0x4027, [0x97, 0x7D, 0x0E, 0xF1, 0xC8, 0xF2, 0x63, 0x72]}; + const IID CLSID_ClusterConfigurationType = {0xBF3768C2, 0xE0E5, 0x448F, [0x95, 0x2B, 0x25, 0xD4, 0x33, 0x2D, 0xEF, 0xA3]}; + const IID CLSID_CMimeTypes = {0x3050F3FE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CMLangConvertCharset = {0xD66D6F99, 0xCDAA, 0x11D0, [0xB8, 0x22, 0x00, 0xC0, 0x4F, 0xC9, 0xB3, 0x1F]}; + const IID CLSID_CMLangString = {0xC04D65CF, 0xB70D, 0x11D0, [0xB1, 0x88, 0x00, 0xAA, 0x00, 0x38, 0xC9, 0x69]}; + const IID CLSID_CMultiLanguage = {0x275C23E2, 0x3747, 0x11D0, [0x9F, 0xEA, 0x00, 0xAA, 0x00, 0x3F, 0x86, 0x46]}; + const IID CLSID_CNetCfg = {0x5B035261, 0x40F9, 0x11D1, [0xAA, 0xEC, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID CLSID_CoDitherToRGB8 = {0xA860CE50, 0x3910, 0x11D0, [0x86, 0xFC, 0x00, 0xA0, 0xC9, 0x13, 0xF7, 0x50]}; + const IID CLSID_CoMapMIMEToCLSID = {0x30C3B080, 0x30FB, 0x11D0, [0xB7, 0x24, 0x00, 0xAA, 0x00, 0x6C, 0x1A, 0x01]}; + const IID CLSID_ComBinding = {0x00000328, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_CommonQuery = {0x83BC5EC0, 0x6F2A, 0x11D0, [0xA1, 0xC4, 0x00, 0xAA, 0x00, 0xC1, 0x6E, 0x65]}; + const IID CLSID_CompositePP = {0x25B33660, 0xFD83, 0x11D1, [0x8A, 0xDE, 0x44, 0x45, 0x53, 0x54, 0x00, 0x01]}; + const IID CLSID_ConnectionCommonUi = {0x7007ACD1, 0x3202, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID CLSID_ConnectionManager = {0xBA126AD1, 0x2166, 0x11D1, [0xB1, 0xD0, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID CLSID_ConnectionManager2 = {0xBA126AE5, 0x2166, 0x11D1, [0xB1, 0xD0, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID CLSID_ControlPanel = {0x21EC2020, 0x3AEA, 0x1069, [0xA2, 0xDD, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D]}; + const IID CLSID_ConvertVBX = {0xFB8F0822, 0x0164, 0x101B, [0x84, 0xED, 0x08, 0x00, 0x2B, 0x2E, 0xC7, 0x13]}; + const IID CLSID_ConvolvePP = {0x25B33661, 0xFD83, 0x11D1, [0x8A, 0xDE, 0x44, 0x45, 0x53, 0x54, 0x00, 0x01]}; + const IID CLSID_COpsProfile = {0x3050F402, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CoSniffStream = {0x6A01FDA0, 0x30DF, 0x11D0, [0xB7, 0x24, 0x00, 0xAA, 0x00, 0x6C, 0x1A, 0x01]}; + const IID CLSID_CPersistDataPeer = {0x3050F487, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CPersistHistory = {0x3050F4C8, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CPersistShortcut = {0x3050F4C6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CPersistSnapshot = {0x3050F4C9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CPersistUserData = {0x3050F48E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CPicturePropPage = {0x0BE35202, 0x8F91, 0x11CE, [0x9D, 0xE3, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51]}; + const IID CLSID_CPlugins = {0x3050F3FF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CRadioButton = {0x3050F69C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CrBarn = {0xC3BDF740, 0x0B58, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_CrBarnPP = {0xFCAD7436, 0xF151, 0x4110, [0xB9, 0x7E, 0x32, 0xBD, 0x60, 0x7F, 0xBD, 0xB8]}; + const IID CLSID_CrBlindPP = {0x213052C1, 0x100D, 0x11D2, [0x8B, 0x82, 0x00, 0xA0, 0xC9, 0x3C, 0x09, 0xB2]}; + const IID CLSID_CrBlinds = {0x00C429C0, 0x0BA9, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_CrBlur = {0x7312498D, 0xE87A, 0x11D1, [0x81, 0xE0, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID CLSID_CrBlurPP = {0x623E287E, 0xFC0E, 0x11D1, [0x9A, 0x77, 0x00, 0x00, 0xF8, 0x75, 0x6A, 0x10]}; + const IID CLSID_CrEmboss = {0xF515306D, 0x0156, 0x11D2, [0x81, 0xEA, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID CLSID_CrEngrave = {0xF515306E, 0x0156, 0x11D2, [0x81, 0xEA, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID CLSID_CrInset = {0x93073C40, 0x0BA5, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_CrIris = {0x3F69F351, 0x0379, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_CrIrisPP = {0x80DE22C4, 0x0F44, 0x11D2, [0x8B, 0x82, 0x00, 0xA0, 0xC9, 0x3C, 0x09, 0xB2]}; + const IID CLSID_CrRadialWipe = {0x424B71AF, 0x0695, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_CrRadialWipePP = {0x33D932E0, 0x0F48, 0x11D2, [0x8B, 0x82, 0x00, 0xA0, 0xC9, 0x3C, 0x09, 0xB2]}; + const IID CLSID_CrSlide = {0x810E402F, 0x056B, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_CrSlidePP = {0xCC8CEDE1, 0x1003, 0x11D2, [0x8B, 0x82, 0x00, 0xA0, 0xC9, 0x3C, 0x09, 0xB2]}; + const IID CLSID_CrSpiral = {0xACA97E00, 0x0C7D, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_CrSpiralPP = {0xC6A4FE81, 0x1022, 0x11D2, [0x8B, 0x82, 0x00, 0xA0, 0xC9, 0x3C, 0x09, 0xB2]}; + const IID CLSID_CrStretch = {0x7658F2A2, 0x0A83, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_CrStretchPP = {0x15FB95E0, 0x0F77, 0x11D2, [0x8B, 0x82, 0x00, 0xA0, 0xC9, 0x3C, 0x09, 0xB2]}; + const IID CLSID_CrWheel = {0x5AE1DAE0, 0x1461, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_CrWheelPP = {0xFA9F6180, 0x1464, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_CrZigzag = {0xE6E73D20, 0x0C8A, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_CrZigzagPP = {0x1559A3C1, 0x102B, 0x11D2, [0x8B, 0x82, 0x00, 0xA0, 0xC9, 0x3C, 0x09, 0xB2]}; + const IID CLSID_CScriptErrorList = {0xEFD01300, 0x160F, 0x11D2, [0xBB, 0x2E, 0x00, 0x80, 0x5F, 0xF7, 0xEF, 0xCA]}; + const IID CLSID_CScrollBar = {0x3050F68A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CSliderBar = {0x3050F68E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CSpinButton = {0x3050F68C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CTemplatePrinter = {0x3050F6B3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_CUrlHistory = {0x3C374A40, 0xBAE4, 0x11CF, [0xBF, 0x7D, 0x00, 0xAA, 0x00, 0x69, 0x46, 0xEE]}; + const IID CLSID_CURLSearchHook = {0xCFBFAE00, 0x17A6, 0x11D0, [0x99, 0xCB, 0x00, 0xC0, 0x4F, 0xD6, 0x44, 0x97]}; + const IID CLSID_CurrentUserClasses = {0x00000332, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_CUtilityButton = {0x3050F6B0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_d = {0xD34F181F, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_DAArray = {0x9CDE7340, 0x3C20, 0x11D0, [0xA3, 0x30, 0x00, 0xAA, 0x00, 0xB9, 0x2C, 0x03]}; + const IID CLSID_DABbox2 = {0x50B4791E, 0x4731, 0x11D0, [0x89, 0x12, 0x00, 0xC0, 0x4F, 0xC2, 0xA0, 0xCA]}; + const IID CLSID_DABbox3 = {0x4A933703, 0xE36F, 0x11D0, [0x9B, 0x99, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID CLSID_DABehavior = {0xC46C1BF2, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DABoolean = {0x25B0F91D, 0xD23D, 0x11D0, [0x9B, 0x85, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID CLSID_DACamera = {0xC46C1BD9, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAColor = {0xC46C1BC9, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DADashStyle = {0x9CADDC0C, 0xAD56, 0x11D1, [0x9F, 0xF8, 0x00, 0xC0, 0x4F, 0xA3, 0x21, 0x95]}; + const IID CLSID_DAEndStyle = {0xFC54BEAB, 0x5B12, 0x11D1, [0x8E, 0x7B, 0x00, 0xC0, 0x4F, 0xC2, 0x9D, 0x46]}; + const IID CLSID_DAEvent = {0x3E2487C4, 0x8709, 0x11D0, [0xB1, 0x77, 0x00, 0xC0, 0x4F, 0xC2, 0xA0, 0xCA]}; + const IID CLSID_DAFontStyle = {0x3F3DA01A, 0x4705, 0x11D0, [0x87, 0x10, 0x00, 0xC0, 0x4F, 0xC2, 0x9D, 0x46]}; + const IID CLSID_DAGeometry = {0xC46C1BDB, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAImage = {0xC46C1BCB, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAImportationResult = {0x283807B3, 0x2C60, 0x11D0, [0xA3, 0x1D, 0x00, 0xAA, 0x00, 0xB9, 0x2C, 0x03]}; + const IID CLSID_DAJoinStyle = {0xFC54BEAA, 0x5B12, 0x11D1, [0x8E, 0x7B, 0x00, 0xC0, 0x4F, 0xC2, 0x9D, 0x46]}; + const IID CLSID_DALineStyle = {0x283807B8, 0x2C60, 0x11D0, [0xA3, 0x1D, 0x00, 0xAA, 0x00, 0xB9, 0x2C, 0x03]}; + const IID CLSID_DAMatte = {0xC46C1BC3, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAMicrophone = {0xC46C1BE3, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAMontage = {0xC46C1BD7, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DANumber = {0xC46C1BC7, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAPair = {0xBC0BFD34, 0xD21D, 0x11D0, [0x93, 0x85, 0x00, 0xC0, 0x4F, 0xB6, 0xBD, 0x36]}; + const IID CLSID_DAPath2 = {0xC46C1BCF, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAPickableResult = {0x34F681D0, 0x3640, 0x11CF, [0x92, 0x94, 0x00, 0xAA, 0x00, 0xB8, 0xA7, 0x33]}; + const IID CLSID_DAPoint2 = {0xC46C1BD5, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAPoint3 = {0xC46C1BE5, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DarwinAppPublisher = {0xCFCCC7A0, 0xA282, 0x11D1, [0x90, 0x82, 0x00, 0x60, 0x08, 0x05, 0x93, 0x82]}; + const IID CLSID_DASound = {0xC46C1BD1, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAStatics = {0xC46C1BF3, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAString = {0xC46C1BD3, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DataChannel = {0xBBB36F15, 0x408D, 0x4056, [0x8C, 0x27, 0x92, 0x08, 0x43, 0xD4, 0x0B, 0xE5]}; + const IID CLSID_DATransform2 = {0xC46C1BDF, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DATransform3 = {0xC46C1BC5, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DATuple = {0x283807B7, 0x2C60, 0x11D0, [0xA3, 0x1D, 0x00, 0xAA, 0x00, 0xB9, 0x2C, 0x03]}; + const IID CLSID_DAUserData = {0x283807B4, 0x2C60, 0x11D0, [0xA3, 0x1D, 0x00, 0xAA, 0x00, 0xB9, 0x2C, 0x03]}; + const IID CLSID_DAVector2 = {0xC46C1BE1, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAVector3 = {0xC46C1BC0, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAView = {0x960D8EFF, 0xE494, 0x11D1, [0xAB, 0x75, 0x00, 0xC0, 0x4F, 0xD9, 0x2B, 0x6B]}; + const IID CLSID_DAViewerControl = {0xC46C1BEB, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DAViewerControlWindowed = {0xC46C1BF1, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID CLSID_DCOMAccessControl = {0x0000031D, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_DebugHelper = {0x0BFCC060, 0x8C1D, 0x11D0, [0xAC, 0xCD, 0x00, 0xAA, 0x00, 0x60, 0x27, 0x5C]}; + const IID CLSID_DeCompMimeFilter = {0x8F6B0360, 0xB80D, 0x11D0, [0xA9, 0xB3, 0x00, 0x60, 0x97, 0x94, 0x23, 0x11]}; + const IID CLSID_DefaultDebugSessionProvider = {0x834128A2, 0x51F4, 0x11D0, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID CLSID_DirectDraw = {0xD7B70EE0, 0x4340, 0x11CF, [0xB0, 0x63, 0x00, 0x20, 0xAF, 0xC2, 0xCD, 0x35]}; + const IID CLSID_DirectDrawClipper = {0x593817A0, 0x7DB3, 0x11CF, [0xA2, 0xDE, 0x00, 0xAA, 0x00, 0xB9, 0x33, 0x56]}; + const IID CLSID_DirectDrawFactory2 = {0xB9DC4790, 0x4AF1, 0x11D1, [0x8C, 0x4C, 0x00, 0xC0, 0x4F, 0xD9, 0x30, 0xC5]}; + const IID CLSID_DirectInput = {0x25E609E0, 0xB259, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID CLSID_DirectInputDevice = {0x25E609E1, 0xB259, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID CLSID_DirectMusic = {0x636B9F10, 0x0C7D, 0x11D1, [0x95, 0xB2, 0x00, 0x20, 0xAF, 0xDC, 0x74, 0x21]}; + const IID CLSID_DirectMusicBand = {0x79BA9E00, 0xB6EE, 0x11D1, [0x86, 0xBE, 0x00, 0xC0, 0x4F, 0xBF, 0x8F, 0xEF]}; + const IID CLSID_DirectMusicBandTrack = {0xD2AC2894, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicChordMap = {0xD2AC288F, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicChordMapTrack = {0xD2AC2896, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicChordTrack = {0xD2AC288B, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicCollection = {0x480FF4B0, 0x28B2, 0x11D1, [0xBE, 0xF7, 0x00, 0xC0, 0x4F, 0xBF, 0x8F, 0xEF]}; + const IID CLSID_DirectMusicCommandTrack = {0xD2AC288C, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicComposer = {0xD2AC2890, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicGraph = {0xD2AC2884, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicLoader = {0xD2AC2892, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicMotifTrack = {0xD2AC288E, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicMuteTrack = {0xD2AC2898, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicPerformance = {0xD2AC2881, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicSegment = {0xD2AC2882, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicSegmentState = {0xD2AC2883, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicSeqTrack = {0xD2AC2886, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicSignPostTrack = {0xF17E8672, 0xC3B4, 0x11D1, [0x87, 0x0B, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicStyle = {0xD2AC288A, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicStyleTrack = {0xD2AC288D, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicSynth = {0x58C2B4D0, 0x46E7, 0x11D1, [0x89, 0xAC, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29]}; + const IID CLSID_DirectMusicSysExTrack = {0xD2AC2887, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicTempoTrack = {0xD2AC2885, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectMusicTimeSigTrack = {0xD2AC2888, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID CLSID_DirectPlay = {0xD1EB6D20, 0x8923, 0x11D0, [0x9D, 0x97, 0x00, 0xA0, 0xC9, 0x0A, 0x43, 0xCB]}; + const IID CLSID_DirectPlayLobby = {0x2FE8F810, 0xB2A5, 0x11D0, [0xA7, 0x87, 0x00, 0x00, 0xF8, 0x03, 0xAB, 0xFC]}; + const IID CLSID_DirectSound = {0x47D4D946, 0x62E8, 0x11CF, [0x93, 0xBC, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID CLSID_DirectSoundCapture = {0xB0210780, 0x89CD, 0x11D0, [0xAF, 0x08, 0x00, 0xA0, 0xC9, 0x25, 0xCD, 0x16]}; + const IID CLSID_DispatchMapper = {0xE9225296, 0xC759, 0x11D1, [0xA0, 0x2B, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID CLSID_DNWithBinary = {0x7E99C0A3, 0xF935, 0x11D2, [0xBA, 0x96, 0x00, 0xC0, 0x4F, 0xB6, 0xD0, 0xD1]}; + const IID CLSID_DNWithString = {0x334857CC, 0xF934, 0x11D2, [0xBA, 0x96, 0x00, 0xC0, 0x4F, 0xB6, 0xD0, 0xD1]}; + const IID CLSID_DocFileColumnProvider = {0x24F14F01, 0x7B1C, 0x11D1, [0x83, 0x8F, 0x00, 0x00, 0xF8, 0x04, 0x61, 0xCF]}; + const IID CLSID_DocHostUIHandler = {0x7057E952, 0xBD1B, 0x11D1, [0x89, 0x19, 0x00, 0xC0, 0x4F, 0xC2, 0xC8, 0x36]}; + const IID CLSID_DOMChildrenCollection = {0x3050F5AA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_DOMDocument = {0x2933BF90, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID CLSID_DOMFreeThreadedDocument = {0x2933BF91, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID CLSID_DragDropHelper = {0x4657278A, 0x411B, 0x11D2, [0x83, 0x9A, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0]}; + const IID CLSID_DriveSizeCategorizer = {0x94357B53, 0xCA29, 0x4B78, [0x83, 0xAE, 0xE8, 0xFE, 0x74, 0x09, 0x13, 0x4F]}; + const IID CLSID_DriveTypeCategorizer = {0xB0A8F3CF, 0x4333, 0x4BAB, [0x88, 0x73, 0x1C, 0xCB, 0x1C, 0xAD, 0xA4, 0x8B]}; + const IID CLSID_DsDisplaySpecifier = {0x1AB4A8C0, 0x6A0B, 0x11D2, [0xAD, 0x49, 0x00, 0xC0, 0x4F, 0xA3, 0x1A, 0x86]}; + const IID CLSID_DsDomainTreeBrowser = {0x1698790A, 0xE2B4, 0x11D0, [0xB0, 0xB1, 0x00, 0xC0, 0x4F, 0xD8, 0xDC, 0xA6]}; + const IID CLSID_DsFindAdvanced = {0x83EE3FE3, 0x57D9, 0x11D0, [0xB9, 0x32, 0x00, 0xA0, 0x24, 0xAB, 0x2D, 0xBB]}; + const IID CLSID_DsFindComputer = {0x16006700, 0x87AD, 0x11D0, [0x91, 0x40, 0x00, 0xAA, 0x00, 0xC1, 0x6E, 0x65]}; + const IID CLSID_DsFindContainer = {0xC1B3CBF2, 0x886A, 0x11D0, [0x91, 0x40, 0x00, 0xAA, 0x00, 0xC1, 0x6E, 0x65]}; + const IID CLSID_DsFindDomainController = {0x538C7B7E, 0xD25E, 0x11D0, [0x97, 0x42, 0x00, 0xA0, 0xC9, 0x06, 0xAF, 0x45]}; + const IID CLSID_DsFindFrsMembers = {0x94CE4B18, 0xB3D3, 0x11D1, [0xB9, 0xB4, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0xB0]}; + const IID CLSID_DsFindObjects = {0x83EE3FE1, 0x57D9, 0x11D0, [0xB9, 0x32, 0x00, 0xA0, 0x24, 0xAB, 0x2D, 0xBB]}; + const IID CLSID_DsFindPeople = {0x83EE3FE2, 0x57D9, 0x11D0, [0xB9, 0x32, 0x00, 0xA0, 0x24, 0xAB, 0x2D, 0xBB]}; + const IID CLSID_DsFindPrinter = {0xB577F070, 0x7EE2, 0x11D0, [0x91, 0x3F, 0x00, 0xAA, 0x00, 0xC1, 0x6E, 0x65]}; + const IID CLSID_DsFindVolume = {0xC1B3CBF1, 0x886A, 0x11D0, [0x91, 0x40, 0x00, 0xAA, 0x00, 0xC1, 0x6E, 0x65]}; + const IID CLSID_DsFolderProperties = {0x9E51E0D0, 0x6E0F, 0x11D2, [0x96, 0x01, 0x00, 0xC0, 0x4F, 0xA3, 0x1A, 0x86]}; + const IID CLSID_DsPropertyPages = {0x0D45D530, 0x764B, 0x11D0, [0xA1, 0xCA, 0x00, 0xAA, 0x00, 0xC1, 0x6E, 0x65]}; + const IID CLSID_DsQuery = {0x8A23E65E, 0x31C2, 0x11D0, [0x89, 0x1C, 0x00, 0xA0, 0x24, 0xAB, 0x2D, 0xBB]}; + const IID CLSID_DWbemClassObject = {0x64AB3751, 0x12BC, 0x11D1, [0x9E, 0x61, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID CLSID_DWbemContext = {0x752FF212, 0xF7B7, 0x11D0, [0x9E, 0x4D, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID CLSID_DWbemLocator = {0xCB7CA032, 0xF729, 0x11D0, [0x9E, 0x4D, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID CLSID_DX2D = {0x473AA80B, 0x4577, 0x11D1, [0x81, 0xA8, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID CLSID_DXFade = {0x16B280C5, 0xEE70, 0x11D1, [0x90, 0x66, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID CLSID_DXGradient = {0xC6365470, 0xF667, 0x11D1, [0x90, 0x67, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID CLSID_DXLUTBuilder = {0x1E54333B, 0x2A00, 0x11D1, [0x81, 0x98, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID CLSID_DXRasterizer = {0x8652CE55, 0x9E80, 0x11D1, [0x90, 0x53, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID CLSID_DXSurface = {0x0E890F83, 0x5F79, 0x11D1, [0x90, 0x43, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID CLSID_DXSurfaceModifier = {0x3E669F1D, 0x9C23, 0x11D1, [0x90, 0x53, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID CLSID_DXTAlpha = {0xADC6CB82, 0x424C, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID CLSID_DXTAlphaImageLoader = {0x0C7EFBDE, 0x0303, 0x4C6F, [0xA4, 0xF7, 0x31, 0xFA, 0x2B, 0xE5, 0xE3, 0x97]}; + const IID CLSID_DXTAlphaImageLoaderPP = {0x8C80CE2D, 0x850D, 0x47DA, [0x8E, 0xCD, 0x55, 0x02, 0x35, 0x62, 0xD1, 0x67]}; + const IID CLSID_DXTAlphaPP = {0xD687A7E0, 0x4BA4, 0x11D2, [0x8A, 0xDE, 0x00, 0xA0, 0xC9, 0x8E, 0x65, 0x27]}; + const IID CLSID_DXTaskManager = {0x4CB26C03, 0xFF93, 0x11D0, [0x81, 0x7E, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID CLSID_DXTBarn = {0xEC9BA17D, 0x60B5, 0x462B, [0xA6, 0xD8, 0x14, 0xB8, 0x90, 0x57, 0xE2, 0x2A]}; + const IID CLSID_DXTBlinds = {0x9A4A4A51, 0xFB3A, 0x4F4B, [0x9B, 0x57, 0xA2, 0x91, 0x2A, 0x28, 0x97, 0x69]}; + const IID CLSID_DXTCheckerBoard = {0xB3EE7802, 0x8224, 0x4787, [0xA1, 0xEA, 0xF0, 0xDE, 0x16, 0xDE, 0xAB, 0xD3]}; + const IID CLSID_DXTCheckerBoardPP = {0xCBF47525, 0x98D2, 0x45EA, [0xB8, 0x43, 0xFD, 0x21, 0x3D, 0x93, 0x2B, 0x10]}; + const IID CLSID_DXTChroma = {0x421516C1, 0x3CF8, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID CLSID_DXTChromaPP = {0xEC7E0760, 0x4C76, 0x11D2, [0x8A, 0xDE, 0x00, 0xA0, 0xC9, 0x8E, 0x65, 0x27]}; + const IID CLSID_DXTComposite = {0x9A43A844, 0x0831, 0x11D1, [0x81, 0x7F, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID CLSID_DXTConvolution = {0x2BC0EF29, 0xE6BA, 0x11D1, [0x81, 0xDD, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID CLSID_DXTDropShadow = {0xADC6CB86, 0x424C, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID CLSID_DXTDropShadowPP = {0xEC7E0761, 0x4C76, 0x11D2, [0x8A, 0xDE, 0x00, 0xA0, 0xC9, 0x8E, 0x65, 0x27]}; + const IID CLSID_DXTFilter = {0x385A91BC, 0x1E8A, 0x4E4A, [0xA7, 0xA6, 0xF4, 0xFC, 0x1E, 0x6C, 0xA1, 0xBD]}; + const IID CLSID_DXTFilterBehavior = {0x649EEC1E, 0xB579, 0x4E8C, [0xBB, 0x3B, 0x49, 0x97, 0xF8, 0x42, 0x65, 0x36]}; + const IID CLSID_DXTFilterCollection = {0xA7EE7F34, 0x3BD1, 0x427F, [0x92, 0x31, 0xF9, 0x41, 0xE9, 0xB7, 0xE1, 0xFE]}; + const IID CLSID_DXTFilterFactory = {0x81397204, 0xF51A, 0x4571, [0x8D, 0x7B, 0xDC, 0x03, 0x05, 0x21, 0xAA, 0xBD]}; + const IID CLSID_DXTGlow = {0x9F8E6421, 0x3D9B, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID CLSID_DXTGlowPP = {0xEC7E0764, 0x4C76, 0x11D2, [0x8A, 0xDE, 0x00, 0xA0, 0xC9, 0x8E, 0x65, 0x27]}; + const IID CLSID_DXTGradientD = {0x623E2882, 0xFC0E, 0x11D1, [0x9A, 0x77, 0x00, 0x00, 0xF8, 0x75, 0x6A, 0x10]}; + const IID CLSID_DXTGradientWipe = {0xB96F67A2, 0x30C2, 0x47E8, [0xBD, 0x85, 0x70, 0xA2, 0xC9, 0x48, 0xB5, 0x0F]}; + const IID CLSID_DXTICMFilter = {0xA1BFB370, 0x5A9F, 0x4429, [0xBB, 0x72, 0xB1, 0x3E, 0x2F, 0xEA, 0xED, 0xEF]}; + const IID CLSID_DXTICMFilterPP = {0x1958FB12, 0x31E6, 0x47E5, [0xAA, 0x49, 0xB2, 0x3D, 0x12, 0xC8, 0x53, 0xE6]}; + const IID CLSID_DXTInset = {0x76F363F2, 0x7E9F, 0x4ED7, [0xA6, 0xA7, 0xEE, 0x30, 0x35, 0x1B, 0x66, 0x28]}; + const IID CLSID_DXTIris = {0x049F2CE6, 0xD996, 0x4721, [0x89, 0x7A, 0xDB, 0x15, 0xCE, 0x9E, 0xB7, 0x3D]}; + const IID CLSID_DXTLabel = {0x54702535, 0x2606, 0x11D1, [0x99, 0x9C, 0x00, 0x00, 0xF8, 0x75, 0x6A, 0x10]}; + const IID CLSID_DXTLight = {0xF9EFBEC2, 0x4302, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID CLSID_DXTLightPP = {0x694AF25F, 0x124D, 0x11D3, [0x91, 0xD5, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID CLSID_DXTMaskFilter = {0x3A04D93B, 0x1EDD, 0x4F3F, [0xA3, 0x75, 0xA0, 0x3E, 0xC1, 0x95, 0x72, 0xC4]}; + const IID CLSID_DXTMatrix = {0x4ABF5A06, 0x5568, 0x4834, [0xBE, 0xE3, 0x32, 0x7A, 0x6D, 0x95, 0xA6, 0x85]}; + const IID CLSID_DXTMatrixPP = {0xC591103A, 0xB3A8, 0x4D47, [0xA3, 0xF7, 0x2A, 0xEE, 0xE4, 0xB8, 0x01, 0x3F]}; + const IID CLSID_DXTMetaBurnFilm = {0x107045D1, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaCenterPeel = {0xAA0D4D0C, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID CLSID_DXTMetaColorFade = {0x2A54C908, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaFlowMotion = {0x2A54C90B, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaGriddler = {0x2A54C911, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaGriddler2 = {0x2A54C913, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaJaws = {0x2A54C904, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaLightWipe = {0x107045C8, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaLiquid = {0xAA0D4D0A, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID CLSID_DXTMetaPageTurn = {0xAA0D4D08, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID CLSID_DXTMetaPeelPiece = {0xAA0D4D10, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID CLSID_DXTMetaPeelSmall = {0xAA0D4D0E, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID CLSID_DXTMetaPeelSplit = {0xAA0D4D12, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID CLSID_DXTMetaRadialScaleWipe = {0x107045CA, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaRipple = {0xAA0D4D03, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID CLSID_DXTMetaRoll = {0x9C61F46E, 0x0530, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID CLSID_DXTMetaThreshold = {0x2A54C915, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaTwister = {0x107045CF, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaVacuum = {0x2A54C90D, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaWater = {0x107045C5, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaWhiteOut = {0x107045CC, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID CLSID_DXTMetaWormHole = {0x0E6AE022, 0x0C83, 0x11D2, [0x8C, 0xD4, 0x00, 0x10, 0x4B, 0xC7, 0x5D, 0x9A]}; + const IID CLSID_DXTMotionBlur = {0xDD13DE77, 0xD3BA, 0x42D4, [0xB5, 0xC6, 0x77, 0x45, 0xFA, 0x4E, 0x2D, 0x4B]}; + const IID CLSID_DXTMotionBlurPP = {0x926433E1, 0x7F8F, 0x4BC6, [0xBE, 0xC4, 0x8C, 0x12, 0x6C, 0x6B, 0x7D, 0xC4]}; + const IID CLSID_DXTRadialWipe = {0x164484A9, 0x35D9, 0x4FB7, [0x9F, 0xAB, 0x48, 0x27, 0x3B, 0x96, 0xAA, 0x1D]}; + const IID CLSID_DXTRandomBars = {0x2E7700B7, 0x27C4, 0x437F, [0x9F, 0xBF, 0x1E, 0x8B, 0xE2, 0x81, 0x75, 0x66]}; + const IID CLSID_DXTRandomBarsPP = {0xE3E6AE11, 0x7FDC, 0x40C4, [0xAF, 0xBF, 0x1D, 0xCE, 0xA8, 0x28, 0x62, 0xCC]}; + const IID CLSID_DXTRandomDissolve = {0xF7F4A1B6, 0x8E87, 0x452F, [0xA2, 0xD7, 0x30, 0x77, 0xF5, 0x08, 0xDB, 0xC0]}; + const IID CLSID_DXTransformFactory = {0xD1FE6762, 0xFC48, 0x11D0, [0x88, 0x3A, 0x3C, 0x8B, 0x00, 0xC1, 0x00, 0x00]}; + const IID CLSID_DXTRedirect = {0x42B07B28, 0x2280, 0x4937, [0xB0, 0x35, 0x02, 0x93, 0xFB, 0x81, 0x27, 0x81]}; + const IID CLSID_DXTRevealTrans = {0xE31E87C4, 0x86EA, 0x4940, [0x9B, 0x8A, 0x5B, 0xD5, 0xD1, 0x79, 0xA7, 0x37]}; + const IID CLSID_DXTScale = {0x555278E2, 0x05DB, 0x11D1, [0x88, 0x3A, 0x3C, 0x8B, 0x00, 0xC1, 0x00, 0x00]}; + const IID CLSID_DXTShadow = {0xE71B4063, 0x3E59, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID CLSID_DXTShadowPP = {0xEC7E0765, 0x4C76, 0x11D2, [0x8A, 0xDE, 0x00, 0xA0, 0xC9, 0x8E, 0x65, 0x27]}; + const IID CLSID_DXTSlide = {0xD1C5A1E7, 0xCC47, 0x4E32, [0xBD, 0xD2, 0x4B, 0x3C, 0x5F, 0xC5, 0x0A, 0xF5]}; + const IID CLSID_DXTSpiral = {0x4A03DCB9, 0x6E17, 0x4A39, [0x88, 0x45, 0x4E, 0xE7, 0xDC, 0x53, 0x31, 0xA5]}; + const IID CLSID_DXTStretch = {0xF088DE73, 0xBDD0, 0x4E3C, [0x81, 0xF8, 0x6D, 0x32, 0xF4, 0xFE, 0x9D, 0x28]}; + const IID CLSID_DXTStrips = {0x63A4B1FC, 0x259A, 0x4A5B, [0x81, 0x29, 0xA8, 0x3B, 0x8C, 0x9E, 0x6F, 0x4F]}; + const IID CLSID_DXTStripsPP = {0xFEC0B7EE, 0x7AEC, 0x4067, [0x9E, 0xE1, 0xFA, 0xCF, 0xB7, 0xCE, 0x9A, 0xF9]}; + const IID CLSID_DXTWave = {0xADC6CB88, 0x424C, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID CLSID_DXTWavePP = {0xF12456C0, 0x4C9E, 0x11D2, [0x8A, 0xDE, 0x00, 0xA0, 0xC9, 0x8E, 0x65, 0x27]}; + const IID CLSID_DXTWipe = {0xAF279B30, 0x86EB, 0x11D1, [0x81, 0xBF, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID CLSID_DXTWipePP = {0x7FFE4D08, 0xFBFD, 0x11D1, [0x9A, 0x77, 0x00, 0x00, 0xF8, 0x75, 0x6A, 0x10]}; + const IID CLSID_DXTZigzag = {0x23E26328, 0x3928, 0x40F2, [0x95, 0xE5, 0x93, 0xCA, 0xD6, 0x90, 0x16, 0xEB]}; + const IID CLSID_EAPOLManager = {0xBA126AE4, 0x2166, 0x11D1, [0xB1, 0xD0, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID CLSID_Email = {0x8F92A857, 0x478E, 0x11D1, [0xA3, 0xB4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_EnumAdapterInfo = {0x6F9942CA, 0xC1B1, 0x4AB5, [0x93, 0xDA, 0x60, 0x58, 0x99, 0x1D, 0xC8, 0xF3]}; + const IID CLSID_EVENTQUEUE = {0x6E0FF466, 0x339E, 0x11D1, [0xBE, 0x5B, 0x00, 0xC0, 0x4F, 0xC9, 0xE2, 0xBB]}; + const IID CLSID_EXTENDEDERRORINFO = {0xC8B522CF, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID CLSID_FadePP = {0x16B280C6, 0xEE70, 0x11D1, [0x90, 0x66, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID CLSID_FaxNumber = {0xA5062215, 0x4681, 0x11D1, [0xA3, 0xB4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_FilePlaybackTerminal = {0x0CB9914C, 0x79CD, 0x47DC, [0xAD, 0xB0, 0x32, 0x7F, 0x47, 0xCE, 0xFB, 0x20]}; + const IID CLSID_FileProtocol = {0x79EAC9E7, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_FileRecordingTerminal = {0x521F3D06, 0xC3D0, 0x4511, [0x86, 0x17, 0x86, 0xB9, 0xA7, 0x83, 0xDA, 0x77]}; + const IID CLSID_FileRecordingTrack = {0xBF14A2E4, 0xE88B, 0x4EF5, [0x97, 0x40, 0x5A, 0xC5, 0xD0, 0x22, 0xF8, 0xC9]}; + const IID CLSID_FileSearchBand = {0xC4EE31F3, 0x4768, 0x11D2, [0xBE, 0x5C, 0x00, 0xA0, 0xC9, 0xA8, 0x3D, 0xA1]}; + const IID CLSID_FileSysColumnProvider = {0x0D2E74C4, 0x3C34, 0x11D2, [0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71]}; + const IID CLSID_FileTerminal = {0xAAF578F1, 0xDC70, 0x11D0, [0x8E, 0xD3, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID CLSID_FolderShortcut = {0x0AFACED1, 0xE828, 0x11D1, [0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D]}; + const IID CLSID_FolderViewHost = {0x20B1CB23, 0x6968, 0x4EB9, [0xB7, 0xD4, 0xA6, 0x6D, 0x00, 0xD0, 0x7C, 0xEE]}; + const IID CLSID_FontNames = {0x3050F83A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_FramesCollection = {0x3050F7F6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_FreeSpaceCategorizer = {0xB5607793, 0x24AC, 0x44C7, [0x82, 0xE2, 0x83, 0x17, 0x26, 0xAA, 0x6C, 0xB7]}; + const IID CLSID_FtpProtocol = {0x79EAC9E3, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_GblComponentCategoriesMgr = {0x0002E006, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_GLOBAL_BROADCAST = {0xD34F1810, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_GopherProtocol = {0x79EAC9E4, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_GradientPP = {0x623E2880, 0xFC0E, 0x11D1, [0x9A, 0x77, 0x00, 0x00, 0xF8, 0x75, 0x6A, 0x10]}; + const IID CLSID_HandsetTerminal = {0xAAF578EB, 0xDC70, 0x11D0, [0x8E, 0xD3, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID CLSID_HeadsetTerminal = {0xAAF578ED, 0xDC70, 0x11D0, [0x8E, 0xD3, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID CLSID_HNetCfgMgr = {0x46C166AA, 0x3108, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID CLSID_Hold = {0xB3AD3E13, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_HomeNetAutoConfigService = {0x9A8EA3B5, 0x572E, 0x4CB3, [0x9E, 0xB9, 0xEC, 0x68, 0x9A, 0xC5, 0x75, 0xAE]}; + const IID CLSID_HomePage = {0x766BF2AE, 0xD650, 0x11D1, [0x98, 0x11, 0x00, 0xC0, 0x4F, 0xC3, 0x1D, 0x2E]}; + const IID CLSID_HostDialogHelper = {0x429AF92C, 0xA51F, 0x11D2, [0x86, 0x1E, 0x00, 0xC0, 0x4F, 0xA3, 0x5C, 0x89]}; + const IID CLSID_HTADocument = {0x3050F5C8, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTCAttachBehavior = {0x3050F5F5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTCDefaultDispatch = {0x3050F4FC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTCDescBehavior = {0x3050F5DD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTCEventBehavior = {0x3050F4FE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTCMethodBehavior = {0x3050F630, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTCPropertyBehavior = {0x3050F5DE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLAnchorElement = {0x3050F248, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLAppBehavior = {0x3050F5CB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLApplication = {0x3050F4D8, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLAreaElement = {0x3050F283, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLAreasCollection = {0x3050F4CA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLAttributeCollection = {0x3050F4CC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLBaseElement = {0x3050F276, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLBaseFontElement = {0x3050F282, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLBGsound = {0x3050F370, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLBlockElement = {0x3050F281, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLBody = {0x3050F24A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLBRElement = {0x3050F280, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLButtonElement = {0x3050F2C6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLCommentElement = {0x3050F317, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLCurrentStyle = {0x3050F3DC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLDDElement = {0x3050F27F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLDefaults = {0x3050F6C8, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLDialog = {0x3050F28A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLDivElement = {0x3050F27E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLDivPosition = {0x3050F249, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HtmlDlgSafeHelper = {0x3050F819, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLDListElement = {0x3050F27D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLDocument = {0x25336920, 0x03F9, 0x11CF, [0x8F, 0xD0, 0x00, 0xAA, 0x00, 0x68, 0x6F, 0x13]}; + const IID CLSID_HTMLDOMAttribute = {0x3050F4B2, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLDOMImplementation = {0x3050F80E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLDOMTextNode = {0x3050F4BA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLDTElement = {0x3050F27C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLElementCollection = {0x3050F4CB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLEmbed = {0x3050F25D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLFieldSetElement = {0x3050F3E8, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLFontElement = {0x3050F27B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLFormElement = {0x3050F251, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLFrameBase = {0x3050F312, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLFrameElement = {0x3050F314, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLFrameSetSite = {0x3050F31A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLGenericElement = {0x3050F4B8, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLHeadElement = {0x3050F493, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLHeaderElement = {0x3050F27A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLHistory = {0xFECEAAA3, 0x8405, 0x11CF, [0x8B, 0xA1, 0x00, 0xAA, 0x00, 0x47, 0x6D, 0xA6]}; + const IID CLSID_HTMLHRElement = {0x3050F252, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLHtmlElement = {0x3050F491, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLIFrame = {0x3050F316, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLImageElementFactory = {0x3050F38F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLImg = {0x3050F241, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLInputButtonElement = {0x3050F2B4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLInputElement = {0x3050F5D8, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLInputFileElement = {0x3050F2AE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLInputImage = {0x3050F2C4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLInputTextElement = {0x3050F2AB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLIsIndexElement = {0x3050F278, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLLabelElement = {0x3050F32B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLLegendElement = {0x3050F3E9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLLIElement = {0x3050F273, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLLinkElement = {0x3050F277, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLListElement = {0x3050F272, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLLoadOptions = {0x18845040, 0x0FA5, 0x11D1, [0xBA, 0x19, 0x00, 0xC0, 0x4F, 0xD9, 0x12, 0xD0]}; + const IID CLSID_HTMLLocation = {0x163BB1E1, 0x6E00, 0x11CF, [0x83, 0x7A, 0x48, 0xDC, 0x04, 0xC1, 0x00, 0x00]}; + const IID CLSID_HTMLMapElement = {0x3050F271, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLMarqueeElement = {0x3050F2B9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLMetaElement = {0x3050F275, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLNamespace = {0x3050F6BC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLNamespaceCollection = {0x3050F6B9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLNavigator = {0xFECEAAA6, 0x8405, 0x11CF, [0x8B, 0xA1, 0x00, 0xAA, 0x00, 0x47, 0x6D, 0xA6]}; + const IID CLSID_HTMLNextIdElement = {0x3050F279, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLNoShowElement = {0x3050F38B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLObjectElement = {0x3050F24E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLOListElement = {0x3050F270, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLOptionButtonElement = {0x3050F2BE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLOptionElement = {0x3050F24D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLOptionElementFactory = {0x3050F38D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLParaElement = {0x3050F26F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLParamElement = {0x3050F83E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLPhraseElement = {0x3050F26E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLPluginDocument = {0x25336921, 0x03F9, 0x11CF, [0x8F, 0xD0, 0x00, 0xAA, 0x00, 0x68, 0x6F, 0x13]}; + const IID CLSID_HTMLPopup = {0x3050F667, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLRenderStyle = {0x3050F6AA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLRichtextElement = {0x3050F2DF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLRuleStyle = {0x3050F3D0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLScreen = {0x3050F35D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLScriptElement = {0x3050F28C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLSelectElement = {0x3050F245, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLSpanElement = {0x3050F3F5, 0x98B4, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLSpanFlow = {0x3050F3E6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLStyle = {0x3050F285, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLStyleElement = {0x3050F37D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLStyleFontFace = {0x3050F3D4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLStyleSheet = {0x3050F2E4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLStyleSheetPage = {0x3050F7EF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLStyleSheetPagesCollection = {0x3050F7F1, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLStyleSheetRule = {0x3050F3CE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLStyleSheetRulesCollection = {0x3050F3CD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLStyleSheetsCollection = {0x3050F37F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLTable = {0x3050F26B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLTableCaption = {0x3050F2EC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLTableCell = {0x3050F246, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLTableCol = {0x3050F26C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLTableRow = {0x3050F26D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLTableSection = {0x3050F2E9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLTextAreaElement = {0x3050F2AC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLTextElement = {0x3050F26A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLTitleElement = {0x3050F284, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLUListElement = {0x3050F269, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLUnknownElement = {0x3050F268, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLUrnCollection = {0x3050F580, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HTMLWindow2 = {0xD48A6EC6, 0x6A4A, 0x11CF, [0x94, 0xA7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID CLSID_HTMLWindowProxy = {0x3050F391, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_HttpProtocol = {0x79EAC9E2, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_HttpSProtocol = {0x79EAC9E5, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_HWShellExecute = {0xFFB8655F, 0x81B9, 0x4FCE, [0xB8, 0x9C, 0x9A, 0x6B, 0xA7, 0x6D, 0x13, 0xE7]}; + const IID CLSID_IActiveXSafetyProvider = {0xAAF8C6CE, 0xF972, 0x11D0, [0x97, 0xEB, 0x00, 0xAA, 0x00, 0x61, 0x53, 0x33]}; + const IID CLSID_IImageDecodeFilter = {0x607FD4E8, 0x0A03, 0x11D1, [0xAB, 0x1D, 0x00, 0xC0, 0x4F, 0xC9, 0xB3, 0x04]}; + const IID CLSID_IImgCtx = {0x3050F3D6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_ImageList = {0x7C476BA2, 0x02B1, 0x48F4, [0x80, 0x48, 0xB2, 0x46, 0x19, 0xDD, 0xC0, 0x58]}; + const IID CLSID_ImageProperties = {0x7AB770C7, 0x0E23, 0x4D7A, [0x8A, 0xA2, 0x19, 0xBF, 0xAD, 0x47, 0x98, 0x29]}; + const IID CLSID_InProcFreeMarshaler = {0x0000033A, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_IntDitherer = {0x05F6FE1A, 0xECEF, 0x11D0, [0xAA, 0xE7, 0x00, 0xC0, 0x4F, 0xC9, 0xB3, 0x04]}; + const IID CLSID_IntelliForms = {0x613AB92E, 0x16BF, 0x11D2, [0xBC, 0xA5, 0x00, 0xC0, 0x4F, 0xD9, 0x29, 0xDB]}; + const IID CLSID_Internet = {0x871C5380, 0x42A0, 0x1069, [0xA2, 0xEA, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D]}; + const IID CLSID_InternetButtons = {0x1E796980, 0x9CC5, 0x11D1, [0xA8, 0x3F, 0x00, 0xC0, 0x4F, 0xC9, 0x9D, 0x61]}; + const IID CLSID_InternetConnectionBeaconServic = {0x04DF613A, 0x5610, 0x11D4, [0x9E, 0xC8, 0x00, 0xB0, 0xD0, 0x22, 0xDD, 0x1F]}; + const IID CLSID_InternetExplorer = {0x0002DF01, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_InternetPrintOrdering = {0xADD36AA8, 0x751A, 0x4579, [0xA2, 0x66, 0xD6, 0x6F, 0x52, 0x02, 0xCC, 0xBB]}; + const IID CLSID_InternetSecurityManager = {0x7B8A2D94, 0x0AC9, 0x11D1, [0x89, 0x6C, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4]}; + const IID CLSID_InternetShortcut = {0xFBF23B40, 0xE3F0, 0x101B, [0x84, 0x88, 0x00, 0xAA, 0x00, 0x3E, 0x56, 0xF8]}; + const IID CLSID_InternetZoneManager = {0x7B8A2D95, 0x0AC9, 0x11D1, [0x89, 0x6C, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4]}; + const IID CLSID_LanConnectionManager = {0xBA126AD3, 0x2166, 0x11D1, [0xB1, 0xD0, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID CLSID_LargeInteger = {0x927971F5, 0x0939, 0x11D1, [0x8B, 0xE1, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID CLSID_LDAPConnectionObject = {0x7DA2A9C4, 0x0C46, 0x43BD, [0xB0, 0x4E, 0xD9, 0x2B, 0x1B, 0xE2, 0x7C, 0x45]}; + const IID CLSID_LDAPObject = {0x05709878, 0x5195, 0x466C, [0x9E, 0x64, 0x48, 0x7C, 0xE3, 0xCA, 0x20, 0xBF]}; + const IID CLSID_LinkColumnProvider = {0x24F14F02, 0x7B1C, 0x11D1, [0x83, 0x8F, 0x00, 0x00, 0xF8, 0x04, 0x61, 0xCF]}; + const IID CLSID_LocalMachineClasses = {0x00000331, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_LogManager = {0x8FDA8FA4, 0x8763, 0x479F, [0xB9, 0xB1, 0x22, 0x02, 0xB2, 0x80, 0xD2, 0x93]}; + const IID CLSID_LUTBuilderPP = {0x25B33662, 0xFD83, 0x11D1, [0x8A, 0xDE, 0x44, 0x45, 0x53, 0x54, 0x00, 0x01]}; + const IID CLSID_MachineDebugManager = {0x0C0A3666, 0x30C9, 0x11D0, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID CLSID_MailAutoDiscovery = {0x008FD5DD, 0x6DBB, 0x48E3, [0x99, 0x1B, 0x2D, 0x3E, 0xD6, 0x58, 0x51, 0x6A]}; + const IID CLSID_MailProtocolADEntry = {0x61A5D6F3, 0xC131, 0x4C35, [0xBF, 0x40, 0x90, 0xA5, 0x0F, 0x21, 0x41, 0x22]}; + const IID CLSID_ManualResetEvent = {0x0000032C, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_McastAddressAllocation = {0xDF0DAEF2, 0xA289, 0x11D1, [0x86, 0x97, 0x00, 0x60, 0x08, 0xB0, 0xE5, 0xD2]}; + const IID CLSID_MediaStreamTerminal = {0xE2F7AEF7, 0x4971, 0x11D1, [0xA6, 0x71, 0x00, 0x60, 0x97, 0xC9, 0xA2, 0xE8]}; + const IID CLSID_MergedCategorizer = {0x8E827C11, 0x33E7, 0x4BC1, [0xB2, 0x42, 0x8C, 0xD9, 0xA1, 0xC2, 0xB3, 0x04]}; + const IID CLSID_MHTMLDocument = {0x3050F3D9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_MicrophoneTerminal = {0xAAF578EF, 0xDC70, 0x11D0, [0x8E, 0xD3, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID CLSID_MicrosoftDS = {0xFE1290F0, 0xCFBD, 0x11CF, [0xA3, 0x30, 0x00, 0xAA, 0x00, 0xC1, 0x6E, 0x65]}; + const IID CLSID_MigrationWizardAuto = {0x67331D85, 0xBE17, 0x42F6, [0x8D, 0x3F, 0x47, 0xB8, 0xE8, 0xB2, 0x66, 0x37]}; + const IID CLSID_MkProtocol = {0x79EAC9E6, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_MofCompiler = {0x6DAF9757, 0x2E37, 0x11D2, [0xAE, 0xC9, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID CLSID_MountedVolume = {0x12518493, 0x00B2, 0x11D2, [0x9F, 0xA5, 0x9E, 0x34, 0x20, 0x52, 0x41, 0x53]}; + const IID CLSID_MSBurnEngineObj = {0x520CCA67, 0x51A5, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID CLSID_MSDATT = {0xC8B522CE, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID CLSID_MSDAVTM = {0x0C733A8E, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID CLSID_MSDiscMasterObj = {0x520CCA63, 0x51A5, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID CLSID_MSDiscRecorderObj = {0x520CCA61, 0x51A5, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID CLSID_MSDiscStashObj = {0x520CCA65, 0x51A5, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID CLSID_MSEnumDiscRecordersObj = {0x8A03567A, 0x63CB, 0x4BA8, [0xBA, 0xF6, 0x52, 0x11, 0x98, 0x16, 0xD1, 0xEF]}; + const IID CLSID_MSOButtons = {0x178F34B8, 0xA282, 0x11D2, [0x86, 0xC5, 0x00, 0xC0, 0x4F, 0x8E, 0xEA, 0x99]}; + const IID CLSID_MyComputer = {0x20D04FE0, 0x3AEA, 0x1069, [0xA2, 0xD8, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D]}; + const IID CLSID_MyDocuments = {0x450D8FBA, 0xAD25, 0x11D0, [0x98, 0xA8, 0x08, 0x00, 0x36, 0x1B, 0x11, 0x03]}; + const IID CLSID_NameTranslate = {0x274FAE1F, 0x3626, 0x11D1, [0xA3, 0xA4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_NetAddress = {0xB0B71247, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_NetConnectionHNetUtil = {0xBA126AE3, 0x2166, 0x11D1, [0xB1, 0xD0, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID CLSID_NetConnectionUiUtilities = {0x7007ACD3, 0x3202, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID CLSID_NetCrawler = {0x601AC3DC, 0x786A, 0x4EB0, [0xBF, 0x40, 0xEE, 0x35, 0x21, 0xE7, 0x0B, 0xFB]}; + const IID CLSID_NetSharingManager = {0x5C63C1AD, 0x3956, 0x4FF8, [0x84, 0x86, 0x40, 0x03, 0x47, 0x58, 0x31, 0x5B]}; + const IID CLSID_NetworkDomain = {0x46E06680, 0x4BF0, 0x11D1, [0x83, 0xEE, 0x00, 0xA0, 0xC9, 0x0D, 0xC8, 0x49]}; + const IID CLSID_NetworkPlaces = {0x208D2C60, 0x3AEA, 0x1069, [0xA2, 0xD7, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D]}; + const IID CLSID_NetworkServer = {0xC0542A90, 0x4BF0, 0x11D1, [0x83, 0xEE, 0x00, 0xA0, 0xC9, 0x0D, 0xC8, 0x49]}; + const IID CLSID_NetworkShare = {0x54A754C0, 0x4BF0, 0x11D1, [0x83, 0xEE, 0x00, 0xA0, 0xC9, 0x0D, 0xC8, 0x49]}; + const IID CLSID_NetworkType = {0xD4F3D51B, 0x1755, 0x4953, [0x9C, 0x8B, 0x24, 0x95, 0xAB, 0xE5, 0xE0, 0x7E]}; + const IID CLSID_NodeType = {0x1AAA3D11, 0x4792, 0x44E4, [0x9D, 0x49, 0x78, 0xFE, 0xD3, 0x69, 0x1A, 0x14]}; + const IID CLSID_NotificaitonTest1 = {0xC733E501, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_NotificaitonTest2 = {0xC733E502, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_NotificaitonTest3 = {0xC733E503, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_NotificaitonTest4 = {0xC733E504, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_NotificationManager = {0xE1813DD0, 0xAADA, 0x4738, [0xB5, 0xFF, 0x96, 0xB4, 0x18, 0x9C, 0x50, 0x19]}; + const IID CLSID_ObjectManager = {0x955661BD, 0xCCA2, 0x4EAC, [0x91, 0xD0, 0xA0, 0x39, 0x6A, 0x28, 0xAE, 0xFD]}; + const IID CLSID_OctetList = {0x1241400F, 0x4680, 0x11D1, [0xA3, 0xB4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_OldHTMLDocument = {0xD48A6EC9, 0x6A4A, 0x11CF, [0x94, 0xA7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID CLSID_OldHTMLFormElement = {0x0D04D285, 0x6BEC, 0x11CF, [0x8B, 0x97, 0x00, 0xAA, 0x00, 0x47, 0x6D, 0xA6]}; + const IID CLSID_OLEDB_CONVERSIONLIBRARY = {0xC8B522D1, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID CLSID_OLEDB_ENUMERATOR = {0xC8B522D0, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID CLSID_OLEDB_ROWPOSITIONLIBRARY = {0x2048EEE6, 0x7FA2, 0x11D0, [0x9E, 0x6A, 0x00, 0xA0, 0xC9, 0x13, 0x8C, 0x29]}; + const IID CLSID_PassportClientServices = {0x2D2307C8, 0x7DB4, 0x40D6, [0x91, 0x00, 0xD5, 0x2A, 0xF4, 0xF9, 0x7A, 0x5B]}; + const IID CLSID_Path = {0xB2538919, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_Pathname = {0x080D0D78, 0xF421, 0x11D0, [0xA3, 0x6E, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_PeerFactory = {0x3050F4CF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_PendingProxyConnection = {0xD8A68E5E, 0x2B37, 0x426C, [0xA3, 0x29, 0xC1, 0x17, 0xC1, 0x4C, 0x42, 0x9E]}; + const IID CLSID_PersistentDataChannel = {0xBC9B54AB, 0x7883, 0x4C13, [0x90, 0x9F, 0x03, 0x3D, 0x03, 0x26, 0x79, 0x90]}; + const IID CLSID_PersistPropset = {0xFB8F0821, 0x0164, 0x101B, [0x84, 0xED, 0x08, 0x00, 0x2B, 0x2E, 0xC7, 0x13]}; + const IID CLSID_Picture_Dib = {0x00000316, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_Picture_EnhMetafile = {0x00000319, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_Picture_Metafile = {0x00000315, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_Pixelate = {0x4CCEA634, 0xFBE0, 0x11D1, [0x90, 0x6A, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID CLSID_PixelatePP = {0x4CCEA635, 0xFBE0, 0x11D1, [0x90, 0x6A, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID CLSID_PluggableSuperclassRegistratio = {0xBB918E32, 0x2A5C, 0x4986, [0xAB, 0x40, 0x16, 0x86, 0xA0, 0x34, 0x39, 0x0A]}; + const IID CLSID_PluggableTerminalRegistration = {0x45234E3E, 0x61CC, 0x4311, [0xA3, 0xAB, 0x24, 0x80, 0x82, 0x55, 0x44, 0x82]}; + const IID CLSID_PostAgent = {0xD8BD2030, 0x6FC9, 0x11D0, [0x86, 0x4F, 0x00, 0xAA, 0x00, 0x68, 0x09, 0xD9]}; + const IID CLSID_PostalAddress = {0x0A75AFCD, 0x4680, 0x11D1, [0xA3, 0xB4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_PrimaryControlChannel = {0x3CEB5509, 0xC1CD, 0x432F, [0x9D, 0x8F, 0x65, 0xD1, 0xE2, 0x86, 0xAA, 0x80]}; + const IID CLSID_Printers = {0x2227A280, 0x3AEA, 0x1069, [0xA2, 0xDE, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D]}; + const IID CLSID_PROCESS_BROADCAST = {0xD34F1811, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_ProcessDebugManager = {0x78A51822, 0x51F4, 0x11D0, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID CLSID_ProgressDialog = {0xF8383852, 0xFCD3, 0x11D1, [0xA6, 0xB9, 0x00, 0x60, 0x97, 0xDF, 0x5B, 0xD4]}; + const IID CLSID_PropertiesUI = {0xD912F8CF, 0x0396, 0x4915, [0x88, 0x4E, 0xFB, 0x42, 0x5D, 0x32, 0x94, 0x3B]}; + const IID CLSID_PropertyEntry = {0x72D3EDC2, 0xA4C4, 0x11D0, [0x85, 0x33, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID CLSID_PropertyValue = {0x7B9E38B0, 0xA97C, 0x11D0, [0x85, 0x34, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID CLSID_PSBindCtx = {0x00000312, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_PSClassObject = {0x0000030E, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_PSClientSite = {0x0000030D, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_PSDragDrop = {0x00000311, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_PSEnumerators = {0x00000313, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_PseudoSink = {0xE002E4F0, 0xE6EA, 0x11D2, [0x9C, 0xB3, 0x00, 0x10, 0x5A, 0x1F, 0x48, 0x01]}; + const IID CLSID_PSGenObject = {0x0000030C, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_PSInPlaceActive = {0x0000030F, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_PSInPlaceFrame = {0x00000310, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_PSUrlMonProxy = {0x79EAC9F1, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_PublishDropTarget = {0xCC6EEFFB, 0x43F6, 0x46C5, [0x96, 0x19, 0x51, 0xD5, 0x71, 0x96, 0x7F, 0x7D]}; + const IID CLSID_PublishingWizard = {0x6B33163C, 0x76A5, 0x4B6C, [0xBF, 0x21, 0x45, 0xDE, 0x9C, 0xD5, 0x03, 0xA1]}; + const IID CLSID_QueryAssociations = {0xA07034FD, 0x6CAA, 0x4954, [0xAC, 0x3F, 0x97, 0xA2, 0x72, 0x16, 0xF9, 0x8A]}; + const IID CLSID_QueryCancelAutoPlay = {0x331F1768, 0x05A9, 0x4DDD, [0xB8, 0x6E, 0xDA, 0xE3, 0x4D, 0xDC, 0x99, 0x8A]}; + const IID CLSID_RecycleBin = {0x645FF040, 0x5081, 0x101B, [0x9F, 0x08, 0x00, 0xAA, 0x00, 0x2F, 0x95, 0x4E]}; + const IID CLSID_RemoteUnknownPSFactory = {0x00000340, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_Rendezvous = {0xF1029E5B, 0xCB5B, 0x11D0, [0x8D, 0x59, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID CLSID_ReplicaPointer = {0xF5D1BADF, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_Request = {0x6BC096B1, 0x0CE6, 0x11D1, [0xBA, 0xAE, 0x00, 0xC0, 0x4F, 0xC2, 0xE2, 0x0D]}; + const IID CLSID_RequestMakeCall = {0xAC48FFE0, 0xF8C4, 0x11D1, [0xA0, 0x30, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID CLSID_ResProtocol = {0x3050F3BC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_RTCClient = {0x7A42EA29, 0xA2B7, 0x40C4, [0xB0, 0x91, 0xF6, 0xF0, 0x24, 0xAA, 0x89, 0xBE]}; + const IID CLSID_Scriptlet = {0xAE24FDAE, 0x03C6, 0x11D1, [0x8B, 0x76, 0x00, 0x80, 0xC7, 0x44, 0xF3, 0x89]}; + const IID CLSID_SdoMachine = {0xE9218AE7, 0x9E91, 0x11D1, [0xBF, 0x60, 0x00, 0x80, 0xC7, 0x84, 0x6B, 0xC0]}; + const IID CLSID_SdpConferenceBlob = {0x9B2719DD, 0xB696, 0x11D0, [0xA4, 0x89, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID CLSID_SearchAssistantOC = {0xB45FF030, 0x4447, 0x11D2, [0x85, 0xDE, 0x00, 0xC0, 0x4F, 0xA3, 0x5C, 0x89]}; + const IID CLSID_SearchCommand = {0xB005E690, 0x678D, 0x11D1, [0xB7, 0x58, 0x00, 0xA0, 0xC9, 0x05, 0x64, 0xFE]}; + const IID CLSID_SecondaryControlChannel = {0x7B3181A0, 0xC92F, 0x4567, [0xB0, 0xFA, 0xCD, 0x9A, 0x10, 0xEC, 0xD7, 0xD1]}; + const IID CLSID_SecurityDescriptor = {0xB958F73C, 0x9BDD, 0x11D0, [0x85, 0x2C, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID CLSID_SENS = {0xD597CAFE, 0x5B9F, 0x11D1, [0x8D, 0xD2, 0x00, 0xAA, 0x00, 0x4A, 0xBD, 0x5E]}; + const IID CLSID_ServiceManager = {0xABD0388A, 0xDEC1, 0x44F3, [0x98, 0xE1, 0x8D, 0x5C, 0xC8, 0x0B, 0x97, 0xEB]}; + const IID CLSID_SharingApplicationDefinition = {0x46C166B0, 0x3108, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID CLSID_SharingConfiguration = {0x46C166B1, 0x3108, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID CLSID_SharingManagerEnumApplicationDe = {0x46C166AE, 0x3108, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID CLSID_SharingManagerEnumPortMapping = {0x46C166AF, 0x3108, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID CLSID_SharingManagerEnumPrivateConnec = {0x46C166AD, 0x3108, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID CLSID_SharingManagerEnumPublicConnect = {0x46C166AC, 0x3108, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID CLSID_Shell = {0x13709620, 0xC279, 0x11CE, [0xA4, 0x9E, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID CLSID_ShellBrowserWindow = {0xC08AFD90, 0xF2A1, 0x11D1, [0x84, 0x55, 0x00, 0xA0, 0xC9, 0x1F, 0x38, 0x80]}; + const IID CLSID_ShellDesktop = {0x00021400, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_ShellDispatchInproc = {0x0A89A860, 0xD7B1, 0x11CE, [0x83, 0x50, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID CLSID_ShellFolderItem = {0x2FE352EA, 0xFD1F, 0x11D2, [0xB1, 0xF4, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x3E]}; + const IID CLSID_ShellFolderView = {0x62112AA1, 0xEBE4, 0x11CF, [0xA5, 0xFB, 0x00, 0x20, 0xAF, 0xE7, 0x29, 0x2D]}; + const IID CLSID_ShellFolderViewOC = {0x9BA05971, 0xF6A8, 0x11CF, [0xA4, 0x42, 0x00, 0xA0, 0xC9, 0x0A, 0x8F, 0x39]}; + const IID CLSID_ShellFSFolder = {0xF3364BA0, 0x65B9, 0x11CE, [0xA9, 0xBA, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37]}; + const IID CLSID_ShellImageDataFactory = {0x66E4E4FB, 0xF385, 0x4DD0, [0x8D, 0x74, 0xA2, 0xEF, 0xD1, 0xBC, 0x61, 0x78]}; + const IID CLSID_ShellLink = {0x00021401, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_ShellLinkObject = {0x11219420, 0x1768, 0x11D1, [0x95, 0xBE, 0x00, 0x60, 0x97, 0x97, 0xEA, 0x4F]}; + const IID CLSID_ShellLocalMachine = {0x60664CAF, 0xAF0D, 0x0005, [0xA3, 0x00, 0x5C, 0x7D, 0x25, 0xFF, 0x22, 0xA0]}; + const IID CLSID_ShellLogonEnumUsers = {0x60664CAF, 0xAF0D, 0x0004, [0xA3, 0x00, 0x5C, 0x7D, 0x25, 0xFF, 0x22, 0xA0]}; + const IID CLSID_ShellLogonStatusHost = {0x60664CAF, 0xAF0D, 0x0007, [0xA3, 0x00, 0x5C, 0x7D, 0x25, 0xFF, 0x22, 0xA0]}; + const IID CLSID_ShellLogonUser = {0x60664CAF, 0xAF0D, 0x0003, [0xA3, 0x00, 0x5C, 0x7D, 0x25, 0xFF, 0x22, 0xA0]}; + const IID CLSID_ShellNameSpace = {0x55136805, 0xB2DE, 0x11D1, [0xB9, 0xF2, 0x00, 0xA0, 0xC9, 0x8B, 0xC5, 0x47]}; + const IID CLSID_ShellUIHelper = {0x64AB4BB7, 0x111E, 0x11D1, [0x8F, 0x79, 0x00, 0xC0, 0x4F, 0xC2, 0xFB, 0xE1]}; + const IID CLSID_ShellWindows = {0x9BA05972, 0xF6A8, 0x11CF, [0xA4, 0x42, 0x00, 0xA0, 0xC9, 0x0A, 0x8F, 0x39]}; + const IID CLSID_SizeCategorizer = {0x55D7B852, 0xF6D1, 0x42F2, [0xAA, 0x75, 0x87, 0x28, 0xA1, 0xB2, 0xD2, 0x64]}; + const IID CLSID_SoftDistExt = {0xB15B8DC0, 0xC7E1, 0x11D0, [0x86, 0x80, 0x00, 0xAA, 0x00, 0xBD, 0xCB, 0x71]}; + const IID CLSID_SpeakerphoneTerminal = {0xAAF578EE, 0xDC70, 0x11D0, [0x8E, 0xD3, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID CLSID_SpeakersTerminal = {0xAAF578F0, 0xDC70, 0x11D0, [0x8E, 0xD3, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID CLSID_SpeechUIServer = {0x1443904B, 0x34E4, 0x40F6, [0xB3, 0x0F, 0x6B, 0xEB, 0x81, 0x26, 0x7B, 0x80]}; + const IID CLSID_StaticDib = {0x00000316, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_StaticMetafile = {0x00000315, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_StdAsyncActManager = {0x00000329, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_StdComponentCategoriesMgr = {0x0002E005, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_StdEncodingFilterFac = {0x54C37CD0, 0xD944, 0x11D0, [0xA9, 0xF4, 0x00, 0x60, 0x97, 0x94, 0x23, 0x11]}; + const IID CLSID_StdEvent = {0x0000032B, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_StdFont = {0x0BE35203, 0x8F91, 0x11CE, [0x9D, 0xE3, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51]}; + const IID CLSID_StdGlobalInterfaceTable = {0x00000323, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_StdHlink = {0x79EAC9D0, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_StdHlinkBrowseContext = {0x79EAC9D1, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_StdMarshal = {0x00000017, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_StdNotificationMgr = {0xC733E4AF, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_StdPicture = {0x0BE35204, 0x8F91, 0x11CE, [0x9D, 0xE3, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51]}; + const IID CLSID_StdURLMoniker = {0x79EAC9E0, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_StdURLProtocol = {0x79EAC9E1, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_StgFolder = {0xE773F1AF, 0x3A65, 0x4866, [0x85, 0x7D, 0x84, 0x6F, 0xC9, 0xC4, 0x59, 0x8A]}; + const IID CLSID_StockColorPage = {0x7EBDAAE1, 0x8120, 0x11CF, [0x89, 0x9F, 0x00, 0xAA, 0x00, 0x68, 0x8B, 0x10]}; + const IID CLSID_StockFontPage = {0x7EBDAAE0, 0x8120, 0x11CF, [0x89, 0x9F, 0x00, 0xAA, 0x00, 0x68, 0x8B, 0x10]}; + const IID CLSID_StockPicturePage = {0x7EBDAAE2, 0x8120, 0x11CF, [0x89, 0x9F, 0x00, 0xAA, 0x00, 0x68, 0x8B, 0x10]}; + const IID CLSID_SubscriptionMgr = {0xABBE31D0, 0x6DAE, 0x11D0, [0xBE, 0xCA, 0x00, 0xC0, 0x4F, 0xD9, 0x40, 0xBE]}; + const IID CLSID_SubscriptionThrottler = {0x1E9B00E5, 0x9846, 0x11D1, [0xA1, 0xEE, 0x00, 0xC0, 0x4F, 0xC2, 0xFB, 0xE1]}; + const IID CLSID_SWbemDateTime = {0x47DFBE54, 0xCF76, 0x11D3, [0xB3, 0x8F, 0x00, 0x10, 0x5A, 0x1F, 0x47, 0x3A]}; + const IID CLSID_SWbemEventSource = {0x04B83D58, 0x21AE, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemLastError = {0xC2FEEEAC, 0xCFCD, 0x11D1, [0x8B, 0x05, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemLocator = {0x76A64158, 0xCB41, 0x11D1, [0x8B, 0x02, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemMethod = {0x04B83D5B, 0x21AE, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemMethodSet = {0x04B83D5A, 0x21AE, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemNamedValue = {0x04B83D60, 0x21AE, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemNamedValueSet = {0x9AED384E, 0xCE8B, 0x11D1, [0x8B, 0x05, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemObject = {0x04B83D62, 0x21AE, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemObjectEx = {0xD6BDAFB2, 0x9435, 0x491F, [0xBB, 0x87, 0x6A, 0xA0, 0xF0, 0xBC, 0x31, 0xA2]}; + const IID CLSID_SWbemObjectPath = {0x5791BC26, 0xCE9C, 0x11D1, [0x97, 0xBF, 0x00, 0x00, 0xF8, 0x1E, 0x84, 0x9C]}; + const IID CLSID_SWbemObjectSet = {0x04B83D61, 0x21AE, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemPrivilege = {0x26EE67BC, 0x5804, 0x11D2, [0x8B, 0x4A, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemPrivilegeSet = {0x26EE67BE, 0x5804, 0x11D2, [0x8B, 0x4A, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemProperty = {0x04B83D5D, 0x21AE, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemPropertySet = {0x04B83D5C, 0x21AE, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemQualifier = {0x04B83D5F, 0x21AE, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemQualifierSet = {0x04B83D5E, 0x21AE, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemRefreshableItem = {0x8C6854BC, 0xDE4B, 0x11D3, [0xB3, 0x90, 0x00, 0x10, 0x5A, 0x1F, 0x47, 0x3A]}; + const IID CLSID_SWbemRefresher = {0xD269BF5C, 0xD9C1, 0x11D3, [0xB3, 0x8F, 0x00, 0x10, 0x5A, 0x1F, 0x47, 0x3A]}; + const IID CLSID_SWbemSecurity = {0xB54D66E9, 0x2287, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemServices = {0x04B83D63, 0x21AE, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID CLSID_SWbemServicesEx = {0x62E522DC, 0x8CF3, 0x40A8, [0x8B, 0x2E, 0x37, 0xD5, 0x95, 0x65, 0x1E, 0x40]}; + const IID CLSID_SWbemSink = {0x75718C9A, 0xF029, 0x11D1, [0xA1, 0xAC, 0x00, 0xC0, 0x4F, 0xB6, 0xC2, 0x23]}; + const IID CLSID_SynchronizeContainer = {0x0000032D, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID CLSID_SyncMgr = {0x6295DF27, 0x35EE, 0x11D1, [0x87, 0x07, 0x00, 0xC0, 0x4F, 0xD9, 0x33, 0x27]}; + const IID CLSID_TAPI = {0x21D6D48E, 0xA88B, 0x11D0, [0x83, 0xDD, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID CLSID_TaskbarList = {0x56FDF344, 0xFD6D, 0x11D0, [0x95, 0x8A, 0x00, 0x60, 0x97, 0xC9, 0xA0, 0x90]}; + const IID CLSID_TaskManager = {0xC0F615A7, 0xF874, 0x4521, [0x87, 0x91, 0xED, 0x3B, 0x84, 0x01, 0x7E, 0xF7]}; + const IID CLSID_TerminalManager = {0x7170F2E0, 0x9BE3, 0x11D0, [0xA0, 0x09, 0x00, 0xAA, 0x00, 0xB6, 0x05, 0xA4]}; + const IID CLSID_THREAD_BROADCAST = {0xD34F1812, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_ThreadDialogProcParam = {0x3050F5EB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID CLSID_ThumbnailFCNHandler = {0xCEFC65D8, 0x66D8, 0x11D1, [0x8D, 0x8C, 0x00, 0x00, 0xF8, 0x04, 0xB0, 0x57]}; + const IID CLSID_ThumbnailUpdater = {0xA3C63918, 0x889D, 0x11D1, [0x83, 0xE9, 0x00, 0xC0, 0x4F, 0xC2, 0xC6, 0xD4]}; + const IID CLSID_TIME = {0xE32EF57B, 0x7FDE, 0x4765, [0x9B, 0xC5, 0xA1, 0xBA, 0x97, 0x05, 0xC4, 0x4E]}; + const IID CLSID_TIMEAnimation = {0xF99D135A, 0xC07C, 0x449E, [0x96, 0x5C, 0x7D, 0xBB, 0x7C, 0x55, 0x4A, 0x51]}; + const IID CLSID_TimeCategorizer = {0x3BB4118F, 0xDDFD, 0x4D30, [0xA3, 0x48, 0x9F, 0xB5, 0xD6, 0xBF, 0x1A, 0xFE]}; + const IID CLSID_TIMEColorAnimation = {0x62F75052, 0xF3EC, 0x4A64, [0x84, 0xFB, 0xAB, 0x18, 0xE0, 0x74, 0x6E, 0xD8]}; + const IID CLSID_TIMEFactory = {0x17237A20, 0x3ADB, 0x48EC, [0xB1, 0x82, 0x35, 0x29, 0x1F, 0x11, 0x57, 0x90]}; + const IID CLSID_TIMEFilterAnimation = {0xC54515D0, 0xF2E5, 0x4BDD, [0xAA, 0x86, 0x1E, 0x4F, 0x23, 0xE4, 0x80, 0xE7]}; + const IID CLSID_TIMEMotionAnimation = {0x0019A09D, 0x1A81, 0x41C5, [0x89, 0xEC, 0xD9, 0xE7, 0x37, 0x81, 0x13, 0x03]}; + const IID CLSID_TIMESetAnimation = {0xBA91CE53, 0xBAEB, 0x4F05, [0x86, 0x1C, 0x0A, 0x2A, 0x09, 0x34, 0xF8, 0x2E]}; + const IID CLSID_Timestamp = {0xB2BED2EB, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_ToolbarExtButtons = {0x2CE4B5D8, 0xA28F, 0x11D2, [0x86, 0xC5, 0x00, 0xC0, 0x4F, 0x8E, 0xEA, 0x99]}; + const IID CLSID_TrackFile = {0x8790C947, 0xA30B, 0x11D0, [0x8C, 0xAB, 0x00, 0xC0, 0x4F, 0xD9, 0x0F, 0x85]}; + const IID CLSID_TrkForceOwnership = {0xA2531F45, 0xC67D, 0x11D0, [0x8C, 0xB1, 0x00, 0xC0, 0x4F, 0xD9, 0x0F, 0x85]}; + const IID CLSID_TrkRestoreNotify = {0xD0056F6C, 0xE2A0, 0x11D0, [0xB1, 0xC2, 0x00, 0xC0, 0x4F, 0xB9, 0x38, 0x6D]}; + const IID CLSID_TrkRestoreParser = {0x755939E4, 0xE381, 0x11D0, [0xB1, 0xC5, 0x00, 0xC0, 0x4F, 0xB9, 0x38, 0x6D]}; + const IID CLSID_TypedName = {0xB33143CB, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID CLSID_UmiLDAPQueryObject = {0xCD5D4D76, 0xA818, 0x4F95, [0xB9, 0x58, 0x79, 0x70, 0xFD, 0x94, 0x12, 0xCA]}; + const IID CLSID_UnsecuredApartment = {0x49BD2028, 0x1523, 0x11D1, [0xAD, 0x79, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID CLSID_UPnPDescriptionDocument = {0x1D8A9B47, 0x3A28, 0x4CE2, [0x8A, 0x4B, 0xBD, 0x34, 0xE4, 0x5B, 0xCE, 0xEB]}; + const IID CLSID_UPnPDevice = {0xA32552C5, 0xBA61, 0x457A, [0xB5, 0x9A, 0xA2, 0x56, 0x1E, 0x12, 0x5E, 0x33]}; + const IID CLSID_UPnPDeviceFinder = {0xE2085F28, 0xFEB7, 0x404A, [0xB8, 0xE7, 0xE6, 0x59, 0xBD, 0xEA, 0xAA, 0x02]}; + const IID CLSID_UPnPDeviceHostICSSupport = {0x797A9BB1, 0x9E49, 0x4E63, [0xAF, 0xE1, 0x1B, 0x45, 0xB9, 0xDC, 0x81, 0x62]}; + const IID CLSID_UPnPDeviceHostSetup = {0xB4609411, 0xC81C, 0x4CCE, [0x8C, 0x76, 0xC6, 0xB5, 0x0C, 0x94, 0x02, 0xC6]}; + const IID CLSID_UPnPDevices = {0xB9E84FFD, 0xAD3C, 0x40A4, [0xB8, 0x35, 0x08, 0x82, 0xEB, 0xCB, 0xAA, 0xA8]}; + const IID CLSID_UPnPNAT = {0xAE1E00AA, 0x3FD5, 0x403C, [0x8A, 0x27, 0x2B, 0xBD, 0xC3, 0x0C, 0xD0, 0xE1]}; + const IID CLSID_UPnPRegistrar = {0x204810B9, 0x73B2, 0x11D4, [0xBF, 0x42, 0x00, 0xB0, 0xD0, 0x11, 0x8B, 0x56]}; + const IID CLSID_UPnPService = {0xC624BA95, 0xFBCB, 0x4409, [0x8C, 0x03, 0x8C, 0xCE, 0xEC, 0x53, 0x3E, 0xF1]}; + const IID CLSID_UPnPServices = {0xC0BC4B4A, 0xA406, 0x4EFC, [0x93, 0x2F, 0xB8, 0x54, 0x6B, 0x81, 0x00, 0xCC]}; + const IID CLSID_UrlMkBindCtx = {0x79EAC9F2, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID CLSID_UserEventTimer = {0x864A1288, 0x354C, 0x4D19, [0x9D, 0x68, 0xC2, 0x74, 0x2B, 0xB1, 0x49, 0x97]}; + const IID CLSID_UserEventTimerCallback = {0x15FFFD13, 0x5140, 0x41B8, [0xB8, 0x9A, 0xC8, 0xD5, 0x75, 0x9C, 0xD2, 0xB2]}; + const IID CLSID_UserNotification = {0x0010890E, 0x8789, 0x413C, [0xAD, 0xBC, 0x48, 0xF5, 0xB5, 0x11, 0xB3, 0xAF]}; + const IID CLSID_VideoInputTerminal = {0xAAF578EC, 0xDC70, 0x11D0, [0x8E, 0xD3, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID CLSID_VideoWindowTerm = {0xF7438990, 0xD6EB, 0x11D0, [0x82, 0xA6, 0x00, 0xAA, 0x00, 0xB5, 0xCA, 0x1B]}; + const IID CLSID_VirusScan = {0xE88E5DE0, 0xBD3E, 0x11CF, [0xAA, 0xFA, 0x00, 0xAA, 0x00, 0xB6, 0x01, 0x5C]}; + const IID CLSID_WbemAdministrativeLocator = {0xCB8555CC, 0x9128, 0x11D1, [0xAD, 0x9B, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID CLSID_WbemAuthenticatedLocator = {0xCD184336, 0x9128, 0x11D1, [0xAD, 0x9B, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID CLSID_WbemBackupRestore = {0xC49E32C6, 0xBC8B, 0x11D2, [0x85, 0xD4, 0x00, 0x10, 0x5A, 0x1F, 0x83, 0x04]}; + const IID CLSID_WbemClassObject = {0x9A653086, 0x174F, 0x11D2, [0xB5, 0xF9, 0x00, 0x10, 0x4B, 0x70, 0x3E, 0xFD]}; + const IID CLSID_WbemContext = {0x674B6698, 0xEE92, 0x11D0, [0xAD, 0x71, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID CLSID_WbemDCOMTransport = {0xF7CE2E13, 0x8C90, 0x11D1, [0x9E, 0x7B, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID CLSID_WbemDecoupledBasicEventProvide = {0xF5F75737, 0x2843, 0x4F22, [0x93, 0x3D, 0xC7, 0x6A, 0x97, 0xCD, 0xA6, 0x2F]}; + const IID CLSID_WbemDecoupledRegistrar = {0x4CFC7932, 0x0F9D, 0x4BEF, [0x9C, 0x32, 0x8E, 0xA2, 0xA6, 0xB5, 0x6F, 0xCB]}; + const IID CLSID_WbemDefPath = {0xCF4CC405, 0xE2C5, 0x4DDD, [0xB3, 0xCE, 0x5E, 0x75, 0x82, 0xD8, 0xC9, 0xFA]}; + const IID CLSID_WbemLevel1Login = {0x8BC3F05E, 0xD86B, 0x11D0, [0xA0, 0x75, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID CLSID_WbemLocalAddrRes = {0xA1044801, 0x8F7E, 0x11D1, [0x9E, 0x7C, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID CLSID_WbemLocator = {0x4590F811, 0x1D3A, 0x11D0, [0x89, 0x1F, 0x00, 0xAA, 0x00, 0x4B, 0x2E, 0x24]}; + const IID CLSID_WbemObjectTextSrc = {0x8D1C559D, 0x84F0, 0x4BB3, [0xA7, 0xD5, 0x56, 0xA7, 0x43, 0x5A, 0x9B, 0xA6]}; + const IID CLSID_WbemQuery = {0xEAC8A024, 0x21E2, 0x4523, [0xAD, 0x73, 0xA7, 0x1A, 0x0A, 0xA2, 0xF5, 0x6A]}; + const IID CLSID_WbemRefresher = {0xC71566F2, 0x561E, 0x11D1, [0xAD, 0x87, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID CLSID_WbemStatusCodeText = {0xEB87E1BD, 0x3233, 0x11D2, [0xAE, 0xC9, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID CLSID_WbemUnauthenticatedLocator = {0x443E7B79, 0xDE31, 0x11D2, [0xB3, 0x40, 0x00, 0x10, 0x4B, 0xCC, 0x4B, 0x4A]}; + const IID CLSID_WbemUninitializedClassObject = {0x7A0227F6, 0x7108, 0x11D1, [0xAD, 0x90, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID CLSID_WebBrowser = {0x8856F961, 0x340A, 0x11D0, [0xA9, 0x6B, 0x00, 0xC0, 0x4F, 0xD7, 0x05, 0xA2]}; + const IID CLSID_WebBrowser_V1 = {0xEAB22AC3, 0x30C1, 0x11CF, [0xA7, 0xEB, 0x00, 0x00, 0xC0, 0x5B, 0xAE, 0x0B]}; + const IID CLSID_WebCheck = {0xE6FB5E20, 0xDE35, 0x11CF, [0x9C, 0x87, 0x00, 0xAA, 0x00, 0x51, 0x27, 0xED]}; + const IID CLSID_WebCheckDefaultProcess = {0xC733E4B0, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID CLSID_WebCheckOfflineSync = {0x7FC0B86E, 0x5FA7, 0x11D1, [0xBC, 0x7C, 0x00, 0xC0, 0x4F, 0xD9, 0x29, 0xDB]}; + const IID CLSID_WebCrawlerAgent = {0x08165EA0, 0xE946, 0x11CF, [0x9C, 0x87, 0x00, 0xAA, 0x00, 0x51, 0x27, 0xED]}; + const IID CLSID_WebViewFolderContents = {0x1820FED0, 0x473E, 0x11D0, [0xA9, 0x6C, 0x00, 0xC0, 0x4F, 0xD7, 0x05, 0xA2]}; + const IID CLSID_WebWizardHost = {0xC827F149, 0x55C1, 0x4D28, [0x93, 0x5E, 0x57, 0xE4, 0x7C, 0xAE, 0xD9, 0x73]}; + const IID CLSID_wfolders = {0xBAE31F9A, 0x1B81, 0x11D2, [0xA9, 0x7A, 0x00, 0xC0, 0x4F, 0x8E, 0xCB, 0x02]}; + const IID CLSID_WinNTConnectionObject = {0x7992C6EB, 0xD142, 0x4332, [0x83, 0x1E, 0x31, 0x54, 0xC5, 0x0A, 0x83, 0x16]}; + const IID CLSID_WinNTObject = {0xB8324185, 0x4050, 0x4220, [0x98, 0x0A, 0xAB, 0x14, 0x62, 0x3E, 0x06, 0x3A]}; + const IID CLSID_WinNTSystemInfo = {0x66182EC4, 0xAFD1, 0x11D2, [0x9C, 0xB9, 0x00, 0x00, 0xF8, 0x7A, 0x36, 0x9E]}; + const IID CLSID_WMIExtension = {0xF0975AFE, 0x5C7F, 0x11D2, [0x8B, 0x74, 0x00, 0x10, 0x4B, 0x2A, 0xFB, 0x41]}; + const IID CLSID_XMLDocument = {0xCFC399AF, 0xD876, 0x11D0, [0x9C, 0x10, 0x00, 0xC0, 0x4F, 0xC9, 0x9C, 0x8E]}; + const IID CLSID_XMLDSOControl = {0x550DDA30, 0x0541, 0x11D2, [0x9C, 0xA9, 0x00, 0x60, 0xB0, 0xEC, 0x3D, 0x39]}; + const IID CLSID_XMLHTTPRequest = {0xED8C108E, 0x4349, 0x11D2, [0x91, 0xA4, 0x00, 0xC0, 0x4F, 0x79, 0x69, 0xE8]}; + const IID CLSID_XMLParser = {0xD2423620, 0x51A0, 0x11D2, [0x9C, 0xAF, 0x00, 0x60, 0xB0, 0xEC, 0x3D, 0x39]}; + const IID DB_PROPERTY_AUTOMATICUPDATE = {0xC8B52209, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_BTREE = {0xC8B52201, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_CHECK_OPTION = {0xC8B5220B, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_CLUSTERED = {0xC8B521FF, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_CONSTRAINT_CHECK_DEFERRE = {0xC8B521F0, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_DISALLOWNULL = {0xC8B52205, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_DROP_CASCADE = {0xC8B521F3, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_EXPLICITUPDATE = {0xC8B5220A, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_FILLFACTOR = {0xC8B52203, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_HASH = {0xC8B52202, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_IGNOREANYNULL = {0xC8B52207, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_IGNORENULL = {0xC8B52206, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_INITIALSIZE = {0xC8B52204, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_NONCLUSTERED = {0xC8B52200, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_ON_COMMIT_PRESERVE_ROWS = {0xC8B52230, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_PRIMARY = {0xC8B521FC, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_SORTBOOKMARKS = {0xC8B52208, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DB_PROPERTY_UNIQUE = {0xC8B521F5, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBCOL_SELFCOLUMNS = {0xC8B52231, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBCOL_SPECIALCOL = {0xC8B52232, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_COMMAND = {0xC8B522F8, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_CONTAINEROBJECT = {0xC8B522FB, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_DBSQL = {0xC8B521FB, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_DEFAULT = {0xC8B521FB, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_DSO = {0xC8B522F4, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_HISTOGRAM_ROWSET = {0xC8B52300, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_LDAPDialect = {0xEFF65380, 0x9C98, 0x11CF, [0xB9, 0x63, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_LIKE_DOS = {0xC8B521F7, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_LIKE_MAPI = {0xC8B521F9, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_LIKE_OFS = {0xC8B521F8, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_LIKE_SQL = {0xC8B521F6, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_MDX = {0xA07CCCD0, 0x8148, 0x11D0, [0x87, 0xBB, 0x00, 0xC0, 0x4F, 0xC3, 0x39, 0x42]}; + const IID DBGUID_ROW = {0xC8B522F7, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_ROWSET = {0xC8B522F6, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_SESSION = {0xC8B522F5, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_SQL = {0xC8B522D7, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBGUID_STREAM = {0xC8B522F9, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_CHARACTERSET = {0xC8B522ED, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_COLLATION = {0xC8B522EA, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_COLUMN = {0xC8B522E4, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_DATABASE = {0xC8B522E5, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_DOMAIN = {0xC8B522E9, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_PROCEDURE = {0xC8B522E6, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_SCHEMA = {0xC8B522E8, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_SCHEMAROWSET = {0xC8B522EC, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_TABLE = {0xC8B522E2, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_TRANSLATION = {0xC8B522EE, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_TRUSTEE = {0xC8B522EB, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBOBJECT_VIEW = {0xC8B522E7, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_ADSIBIND = {0x6DA66DC8, 0xB7E8, 0x11D2, [0x9D, 0x60, 0x00, 0xC0, 0x4F, 0x68, 0x93, 0x45]}; + const IID DBPROPSET_ADSISEARCH = {0xCFCFC928, 0x9AA2, 0x11D0, [0xA7, 0x9A, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0xA8]}; + const IID DBPROPSET_COLUMN = {0xC8B522B9, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_COLUMNALL = {0xC8B522F0, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_CONSTRAINTALL = {0xC8B522FA, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_DATASOURCE = {0xC8B522BA, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_DATASOURCEALL = {0xC8B522C0, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_DATASOURCEINFO = {0xC8B522BB, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_DATASOURCEINFOALL = {0xC8B522C1, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_DBINIT = {0xC8B522BC, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_DBINITALL = {0xC8B522CA, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_INDEX = {0xC8B522BD, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_INDEXALL = {0xC8B522F1, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_PROPERTIESINERROR = {0xC8B522D4, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_ROWSET = {0xC8B522BE, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_ROWSETALL = {0xC8B522C2, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_SESSION = {0xC8B522C6, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_SESSIONALL = {0xC8B522C7, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_STREAM = {0xC8B522FD, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_STREAMALL = {0xC8B522FE, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_TABLE = {0xC8B522BF, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_TABLEALL = {0xC8B522F2, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_TRUSTEE = {0xC8B522E1, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_TRUSTEEALL = {0xC8B522F3, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_VIEW = {0xC8B522DF, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBPROPSET_VIEWALL = {0xC8B522FC, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_ASSERTIONS = {0xC8B52210, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_CATALOGS = {0xC8B52211, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_CHARACTER_SETS = {0xC8B52212, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_CHECK_CONSTRAINTS = {0xC8B52215, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_CHECK_CONSTRAINTS_BY_TABLE = {0xC8B52301, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_COLLATIONS = {0xC8B52213, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_COLUMN_DOMAIN_USAGE = {0xC8B5221B, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_COLUMN_PRIVILEGES = {0xC8B52221, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_COLUMNS = {0xC8B52214, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_CONSTRAINT_COLUMN_USAGE = {0xC8B52216, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_CONSTRAINT_TABLE_USAGE = {0xC8B52217, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_FOREIGN_KEYS = {0xC8B522C4, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_INDEXES = {0xC8B5221E, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_KEY_COLUMN_USAGE = {0xC8B52218, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_PRIMARY_KEYS = {0xC8B522C5, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_PROCEDURE_COLUMNS = {0xC8B522C9, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_PROCEDURE_PARAMETERS = {0xC8B522B8, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_PROCEDURES = {0xC8B52224, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_PROVIDER_TYPES = {0xC8B5222C, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_REFERENTIAL_CONSTRAINTS = {0xC8B52219, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_SCHEMATA = {0xC8B52225, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_SQL_LANGUAGES = {0xC8B52226, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_STATISTICS = {0xC8B52227, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_TABLE_CONSTRAINTS = {0xC8B5221A, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_TABLE_PRIVILEGES = {0xC8B52222, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_TABLE_STATISTICS = {0xC8B522FF, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_TABLES = {0xC8B52229, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_TABLES_INFO = {0xC8B522E0, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_TRANSLATIONS = {0xC8B5222A, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_TRUSTEE = {0xC8B522EF, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_USAGE_PRIVILEGES = {0xC8B52223, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_VIEW_COLUMN_USAGE = {0xC8B5222E, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_VIEW_TABLE_USAGE = {0xC8B5222F, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DBSCHEMA_VIEWS = {0xC8B5222D, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID DDVPTYPE_BROOKTREE = {0x1352A560, 0xDA61, 0x11CF, [0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8]}; + const IID DDVPTYPE_CCIR656 = {0xFCA326A0, 0xDA60, 0x11CF, [0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8]}; + const IID DDVPTYPE_E_HREFH_VREFL = {0x92783220, 0xDA60, 0x11CF, [0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8]}; + const IID DDVPTYPE_E_HREFL_VREFL = {0xE09C77E0, 0xDA60, 0x11CF, [0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8]}; + const IID DDVPTYPE_PHILIPS = {0x332CF160, 0xDA61, 0x11CF, [0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8]}; + const IID DIID__SearchAssistantEvents = {0x1611FDDA, 0x445B, 0x11D2, [0x85, 0xDE, 0x00, 0xC0, 0x4F, 0xA3, 0x5C, 0x89]}; + const IID DIID_DispCEventObj = {0x3050F558, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispDOMChildrenCollection = {0x3050F577, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTCAttachBehavior = {0x3050F583, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTCDefaultDispatch = {0x3050F573, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTCDescBehavior = {0x3050F57E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTCEventBehavior = {0x3050F574, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTCMethodBehavior = {0x3050F587, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTCPropertyBehavior = {0x3050F57F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLAnchorElement = {0x3050F502, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLAppBehavior = {0x3050F57C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLAreaElement = {0x3050F503, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLAreasCollection = {0x3050F56A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLAttributeCollection = {0x3050F56C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLBaseElement = {0x3050F518, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLBaseFontElement = {0x3050F504, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLBGsound = {0x3050F53C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLBlockElement = {0x3050F506, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLBody = {0x3050F507, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLBRElement = {0x3050F53A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLButtonElement = {0x3050F51F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLCommentElement = {0x3050F50A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLCurrentStyle = {0x3050F557, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLDDElement = {0x3050F50B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLDefaults = {0x3050F58C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLDivElement = {0x3050F50C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLDivPosition = {0x3050F50F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLDListElement = {0x3050F53B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLDocument = {0x3050F55F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLDOMAttribute = {0x3050F564, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLDOMImplementation = {0x3050F58F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLDOMTextNode = {0x3050F565, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLDTElement = {0x3050F50D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLElementCollection = {0x3050F56B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLEmbed = {0x3050F52E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLFieldSetElement = {0x3050F545, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLFontElement = {0x3050F512, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLFormElement = {0x3050F510, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLFrameBase = {0x3050F541, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLFrameElement = {0x3050F513, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLFrameSetSite = {0x3050F514, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLGenericElement = {0x3050F563, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLHeadElement = {0x3050F561, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLHeaderElement = {0x3050F515, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLHRElement = {0x3050F53D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLHtmlElement = {0x3050F560, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLIFrame = {0x3050F51B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLImg = {0x3050F51C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLInputElement = {0x3050F57D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLIsIndexElement = {0x3050F519, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLLabelElement = {0x3050F522, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLLegendElement = {0x3050F546, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLLIElement = {0x3050F523, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLLinkElement = {0x3050F524, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLListElement = {0x3050F525, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLMapElement = {0x3050F526, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLMarqueeElement = {0x3050F527, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLMetaElement = {0x3050F517, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLNextIdElement = {0x3050F51A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLNoShowElement = {0x3050F528, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLObjectElement = {0x3050F529, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLOListElement = {0x3050F52A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLOptionElement = {0x3050F52B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLParaElement = {0x3050F52C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLParamElement = {0x3050F590, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLPhraseElement = {0x3050F52D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLPopup = {0x3050F589, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLRenderStyle = {0x3050F58B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLRichtextElement = {0x3050F54D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLRuleStyle = {0x3050F55C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLScreen = {0x3050F591, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLScriptElement = {0x3050F530, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLSelectElement = {0x3050F531, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLSpanElement = {0x3050F548, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLSpanFlow = {0x3050F544, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLStyle = {0x3050F55A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLStyleElement = {0x3050F511, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLStyleSheet = {0x3050F58D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLTable = {0x3050F532, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLTableCaption = {0x3050F508, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLTableCell = {0x3050F536, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLTableCol = {0x3050F533, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLTableRow = {0x3050F535, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLTableSection = {0x3050F534, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLTextAreaElement = {0x3050F521, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLTextElement = {0x3050F537, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLTitleElement = {0x3050F516, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLUListElement = {0x3050F538, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLUnknownElement = {0x3050F539, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLWindow2 = {0x3050F55D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispHTMLWindowProxy = {0x3050F55E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispIHTMLInputButtonElement = {0x3050F51E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispIHTMLInputFileElement = {0x3050F542, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispIHTMLInputImage = {0x3050F51D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispIHTMLInputTextElement = {0x3050F520, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DispIHTMLOptionButtonElement = {0x3050F509, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_DMigrationWizardAutoEvents = {0xD2AC137D, 0xA6D8, 0x43B6, [0x98, 0x79, 0xEA, 0x34, 0xB6, 0x7E, 0x18, 0x80]}; + const IID DIID_DSearchCommandEvents = {0x60890160, 0x69F0, 0x11D1, [0xB7, 0x58, 0x00, 0xA0, 0xC9, 0x05, 0x64, 0xFE]}; + const IID DIID_DShellFolderViewEvents = {0x62112AA2, 0xEBE4, 0x11CF, [0xA5, 0xFB, 0x00, 0x20, 0xAF, 0xE7, 0x29, 0x2D]}; + const IID DIID_DShellNameSpaceEvents = {0x55136806, 0xB2DE, 0x11D1, [0xB9, 0xF2, 0x00, 0xA0, 0xC9, 0x8B, 0xC5, 0x47]}; + const IID DIID_DShellWindowsEvents = {0xFE4106E0, 0x399A, 0x11D0, [0xA4, 0x8C, 0x00, 0xA0, 0xC9, 0x0A, 0x8F, 0x39]}; + const IID DIID_DWebBridgeEvents = {0xA6D897FF, 0x0A95, 0x11D1, [0xB0, 0xBA, 0x00, 0x60, 0x08, 0x16, 0x6E, 0x11]}; + const IID DIID_DWebBrowserEvents = {0xEAB22AC2, 0x30C1, 0x11CF, [0xA7, 0xEB, 0x00, 0x00, 0xC0, 0x5B, 0xAE, 0x0B]}; + const IID DIID_DWebBrowserEvents2 = {0x34A715A0, 0x6587, 0x11D0, [0x92, 0x4A, 0x00, 0x20, 0xAF, 0xC7, 0xAC, 0x4D]}; + const IID DIID_HTMLAnchorEvents = {0x3050F29D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLAnchorEvents2 = {0x3050F610, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLAreaEvents = {0x3050F366, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLAreaEvents2 = {0x3050F611, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLButtonElementEvents = {0x3050F2B3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLButtonElementEvents2 = {0x3050F617, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLControlElementEvents = {0x3050F4EA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLControlElementEvents2 = {0x3050F612, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLDocumentEvents = {0x3050F260, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLDocumentEvents2 = {0x3050F613, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLElementEvents = {0x3050F33C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLElementEvents2 = {0x3050F60F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLFormElementEvents = {0x3050F364, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLFormElementEvents2 = {0x3050F614, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLFrameSiteEvents = {0x3050F800, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLFrameSiteEvents2 = {0x3050F7FF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLImgEvents = {0x3050F25B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLImgEvents2 = {0x3050F616, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLInputFileElementEvents = {0x3050F2AF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLInputFileElementEvents2 = {0x3050F61A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLInputImageEvents = {0x3050F2C3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLInputImageEvents2 = {0x3050F61B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLInputTextElementEvents = {0x3050F2A7, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLInputTextElementEvents2 = {0x3050F618, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLLabelEvents = {0x3050F329, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLLabelEvents2 = {0x3050F61C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLLinkElementEvents = {0x3050F3CC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLLinkElementEvents2 = {0x3050F61D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLMapEvents = {0x3050F3BA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLMapEvents2 = {0x3050F61E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLMarqueeElementEvents = {0x3050F2B8, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLMarqueeElementEvents2 = {0x3050F61F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLNamespaceEvents = {0x3050F6BD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLObjectElementEvents = {0x3050F3C4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLObjectElementEvents2 = {0x3050F620, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLOptionButtonElementEvents = {0x3050F2BD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLOptionButtonElementEvents2 = {0x3050F619, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLPersistEvents = {0x3050F4C7, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLScriptEvents = {0x3050F3E2, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLScriptEvents2 = {0x3050F621, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLSelectElementEvents = {0x3050F302, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLSelectElementEvents2 = {0x3050F622, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLStyleElementEvents = {0x3050F3CB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLStyleElementEvents2 = {0x3050F615, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLTableEvents = {0x3050F407, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLTableEvents2 = {0x3050F623, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLTextContainerEvents = {0x1FF6AA72, 0x5842, 0x11CF, [0xA7, 0x07, 0x00, 0xAA, 0x00, 0xC0, 0x09, 0x8D]}; + const IID DIID_HTMLTextContainerEvents2 = {0x3050F624, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_HTMLWindowEvents = {0x96A0A4E0, 0xD062, 0x11CF, [0x94, 0xB6, 0x00, 0xAA, 0x00, 0x60, 0x27, 0x5C]}; + const IID DIID_HTMLWindowEvents2 = {0x3050F625, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_IRTCDispatchEventNotification = {0x176DDFBE, 0xFEC0, 0x4D55, [0xBC, 0x87, 0x84, 0xCF, 0xF1, 0xEF, 0x7F, 0x91]}; + const IID DIID_ISWbemSinkEvents = {0x75718CA0, 0xF029, 0x11D1, [0xA1, 0xAC, 0x00, 0xC0, 0x4F, 0xB6, 0xC2, 0x23]}; + const IID DIID_ITTAPIDispatchEventNotification = {0x9F34325B, 0x7E62, 0x11D2, [0x94, 0x57, 0x00, 0xC0, 0x4F, 0x8E, 0xC8, 0x88]}; + const IID DIID_LayoutRectEvents = {0x3050F674, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID DIID_XMLDOMDocumentEvents = {0x3EFAA427, 0x272F, 0x11D2, [0x83, 0x6F, 0x00, 0x00, 0xF8, 0x7A, 0x77, 0x82]}; + const IID DPAID_ComPort = {0xF2F0CE00, 0xE0AF, 0x11CF, [0x9C, 0x4E, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID DPAID_INet = {0xC4A54DA0, 0xE0AF, 0x11CF, [0x9C, 0x4E, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID DPAID_INetPort = {0xE4524541, 0x8EA5, 0x11D1, [0x8A, 0x96, 0x00, 0x60, 0x97, 0xB0, 0x14, 0x11]}; + const IID DPAID_INetW = {0xE63232A0, 0x9DBF, 0x11D0, [0x9C, 0xC1, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID DPAID_LobbyProvider = {0x59B95640, 0x9667, 0x11D0, [0xA7, 0x7D, 0x00, 0x00, 0xF8, 0x03, 0xAB, 0xFC]}; + const IID DPAID_Modem = {0xF6DCC200, 0xA2FE, 0x11D0, [0x9C, 0x4F, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID DPAID_ModemW = {0x01FD92E0, 0xA2FF, 0x11D0, [0x9C, 0x4F, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID DPAID_Phone = {0x78EC89A0, 0xE0AF, 0x11CF, [0x9C, 0x4E, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID DPAID_PhoneW = {0xBA5A7A70, 0x9DBF, 0x11D0, [0x9C, 0xC1, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID DPAID_ServiceProvider = {0x07D916C0, 0xE0AF, 0x11CF, [0x9C, 0x4E, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID DPAID_TotalSize = {0x1318F560, 0x912C, 0x11D0, [0x9D, 0xAA, 0x00, 0xA0, 0xC9, 0x0A, 0x43, 0xCB]}; + const IID DPLPROPERTY_LobbyGuid = {0xF56920A0, 0xD218, 0x11D0, [0xBA, 0x39, 0x00, 0xC0, 0x4F, 0xD7, 0xED, 0x67]}; + const IID DPLPROPERTY_MessagesSupported = {0x762CCDA1, 0xD916, 0x11D0, [0xBA, 0x39, 0x00, 0xC0, 0x4F, 0xD7, 0xED, 0x67]}; + const IID DPLPROPERTY_PlayerGuid = {0xB4319322, 0xD20D, 0x11D0, [0xBA, 0x39, 0x00, 0xC0, 0x4F, 0xD7, 0xED, 0x67]}; + const IID DPLPROPERTY_PlayerScore = {0x48784000, 0xD219, 0x11D0, [0xBA, 0x39, 0x00, 0xC0, 0x4F, 0xD7, 0xED, 0x67]}; + const IID DPSPGUID_IPX = {0x685BC400, 0x9D2C, 0x11CF, [0xA9, 0xCD, 0x00, 0xAA, 0x00, 0x68, 0x86, 0xE3]}; + const IID DPSPGUID_MODEM = {0x44EAA760, 0xCB68, 0x11CF, [0x9C, 0x4E, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID DPSPGUID_SERIAL = {0x0F1D6860, 0x88D9, 0x11CF, [0x9C, 0x4E, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID DPSPGUID_TCPIP = {0x36E95EE0, 0x8577, 0x11CF, [0x96, 0x0C, 0x00, 0x80, 0xC7, 0x53, 0x4E, 0x82]}; + const IID DS3DALG_HRTF_FULL = {0xC2413340, 0x1C1B, 0x11D2, [0x94, 0xF5, 0x00, 0xC0, 0x4F, 0xC2, 0x8A, 0xCA]}; + const IID DS3DALG_HRTF_LIGHT = {0xC2413342, 0x1C1B, 0x11D2, [0x94, 0xF5, 0x00, 0xC0, 0x4F, 0xC2, 0x8A, 0xCA]}; + const IID DS3DALG_NO_VIRTUALIZATION = {0xC241333F, 0x1C1B, 0x11D2, [0x94, 0xF5, 0x00, 0xC0, 0x4F, 0xC2, 0x8A, 0xCA]}; + const IID FLAGID_Internet = {0x96300DA0, 0x2BAB, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID FMTID_AudioSummaryInformation = {0x64440490, 0x4C8B, 0x11D1, [0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03]}; + const IID FMTID_Briefcase = {0x328D8B21, 0x7729, 0x4BFC, [0x95, 0x4C, 0x90, 0x2B, 0x32, 0x9D, 0x56, 0xB0]}; + const IID FMTID_DiscardableInformation = {0xD725EBB0, 0xC9B8, 0x11D1, [0x89, 0xBC, 0x00, 0x00, 0xF8, 0x04, 0xB0, 0x57]}; + const IID FMTID_Displaced = {0x9B174B33, 0x40FF, 0x11D2, [0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71]}; + const IID FMTID_DocSummaryInformation = {0xD5CDD502, 0x2E9C, 0x101B, [0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE]}; + const IID FMTID_DRM = {0xAEAC19E4, 0x89AE, 0x4508, [0xB9, 0xB7, 0xBB, 0x86, 0x7A, 0xBE, 0xE2, 0xED]}; + const IID FMTID_ImageProperties = {0x14B81DA1, 0x0135, 0x4D31, [0x96, 0xD9, 0x6C, 0xBF, 0xC9, 0x67, 0x1A, 0x99]}; + const IID FMTID_ImageSummaryInformation = {0x6444048F, 0x4C8B, 0x11D1, [0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03]}; + const IID FMTID_InternetSite = {0x000214A1, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID FMTID_Intshcut = {0x000214A0, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID FMTID_MediaFileSummaryInformation = {0x64440492, 0x4C8B, 0x11D1, [0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03]}; + const IID FMTID_Misc = {0x9B174B34, 0x40FF, 0x11D2, [0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71]}; + const IID FMTID_MUSIC = {0x56A3372E, 0xCE9C, 0x11D2, [0x9F, 0x0E, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6]}; + const IID FMTID_PropertyBag = {0x20001801, 0x5DE6, 0x11D1, [0x8E, 0x38, 0x00, 0xC0, 0x4F, 0xB9, 0x38, 0x6D]}; + const IID FMTID_Query = {0x49691C90, 0x7E17, 0x101A, [0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9]}; + const IID FMTID_ShellDetails = {0x28636AA6, 0x953D, 0x11D2, [0xB5, 0xD6, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0]}; + const IID FMTID_Storage = {0xB725F130, 0x47EF, 0x101A, [0xA5, 0xF1, 0x02, 0x60, 0x8C, 0x9E, 0xEB, 0xAC]}; + const IID FMTID_SummaryInformation = {0xF29F85E0, 0x4FF9, 0x1068, [0xAB, 0x91, 0x08, 0x00, 0x2B, 0x27, 0xB3, 0xD9]}; + const IID FMTID_UserDefinedProperties = {0xD5CDD505, 0x2E9C, 0x101B, [0x93, 0x97, 0x08, 0x00, 0x2B, 0x2C, 0xF9, 0xAE]}; + const IID FMTID_VideoSummaryInformation = {0x64440491, 0x4C8B, 0x11D1, [0x8B, 0x70, 0x08, 0x00, 0x36, 0xB1, 0x1A, 0x03]}; + const IID FMTID_Volume = {0x9B174B35, 0x40FF, 0x11D2, [0xA2, 0x7E, 0x00, 0xC0, 0x4F, 0xC3, 0x08, 0x71]}; + const IID FMTID_WebView = {0xF2275480, 0xF782, 0x4291, [0xBD, 0x94, 0xF1, 0x36, 0x93, 0x51, 0x3A, 0xEC]}; + const IID GUID_ACPI_CMOS_INTERFACE_STANDARD = {0x3A8D0384, 0x6505, 0x40CA, [0xBC, 0x39, 0x56, 0xC1, 0x5F, 0x8C, 0x5F, 0xED]}; + const IID GUID_ACPI_INTERFACE_STANDARD = {0xB091A08A, 0xBA97, 0x11D0, [0xBD, 0x14, 0x00, 0xAA, 0x00, 0xB7, 0xB3, 0x2A]}; + const IID GUID_ACPI_PORT_RANGES_INTERFACE_STAND = {0xF14F609B, 0xCBBD, 0x4957, [0xA6, 0x74, 0xBC, 0x00, 0x21, 0x3F, 0x1C, 0x97]}; + const IID GUID_ACPI_REGS_INTERFACE_STANDARD = {0x06141966, 0x7245, 0x6369, [0x46, 0x2E, 0x4E, 0x65, 0x6C, 0x73, 0x6F, 0x6E]}; + const IID GUID_ARBITER_INTERFACE_STANDARD = {0xE644F185, 0x8C0E, 0x11D0, [0xBE, 0xCF, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F]}; + const IID GUID_BUS_INTERFACE_STANDARD = {0x496B8280, 0x6F25, 0x11D0, [0xBE, 0xAF, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F]}; + const IID GUID_BUS_TYPE_1394 = {0xF74E73EB, 0x9AC5, 0x45EB, [0xBE, 0x4D, 0x77, 0x2C, 0xC7, 0x1D, 0xDF, 0xB3]}; + const IID GUID_BUS_TYPE_AVC = {0xC06FF265, 0xAE09, 0x48F0, [0x81, 0x2C, 0x16, 0x75, 0x3D, 0x7C, 0xBA, 0x83]}; + const IID GUID_BUS_TYPE_DOT4PRT = {0x441EE001, 0x4342, 0x11D5, [0xA1, 0x84, 0x00, 0xC0, 0x4F, 0x60, 0x52, 0x4D]}; + const IID GUID_BUS_TYPE_EISA = {0xDDC35509, 0xF3FC, 0x11D0, [0xA5, 0x37, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xD1]}; + const IID GUID_BUS_TYPE_HID = {0xEEAF37D0, 0x1963, 0x47C4, [0xAA, 0x48, 0x72, 0x47, 0x6D, 0xB7, 0xCF, 0x49]}; + const IID GUID_BUS_TYPE_INTERNAL = {0x1530EA73, 0x086B, 0x11D1, [0xA0, 0x9F, 0x00, 0xC0, 0x4F, 0xC3, 0x40, 0xB1]}; + const IID GUID_BUS_TYPE_IRDA = {0x7AE17DC1, 0xC944, 0x44D6, [0x88, 0x1F, 0x4C, 0x2E, 0x61, 0x05, 0x3B, 0xC1]}; + const IID GUID_BUS_TYPE_ISAPNP = {0xE676F854, 0xD87D, 0x11D0, [0x92, 0xB2, 0x00, 0xA0, 0xC9, 0x05, 0x5F, 0xC5]}; + const IID GUID_BUS_TYPE_LPTENUM = {0xC4CA1000, 0x2DDC, 0x11D5, [0xA1, 0x7A, 0x00, 0xC0, 0x4F, 0x60, 0x52, 0x4D]}; + const IID GUID_BUS_TYPE_MCA = {0x1C75997A, 0xDC33, 0x11D0, [0x92, 0xB2, 0x00, 0xA0, 0xC9, 0x05, 0x5F, 0xC5]}; + const IID GUID_BUS_TYPE_PCI = {0xC8EBDFB0, 0xB510, 0x11D0, [0x80, 0xE5, 0x00, 0xA0, 0xC9, 0x25, 0x42, 0xE3]}; + const IID GUID_BUS_TYPE_PCMCIA = {0x09343630, 0xAF9F, 0x11D0, [0x92, 0xE9, 0x00, 0x00, 0xF8, 0x1E, 0x1B, 0x30]}; + const IID GUID_BUS_TYPE_SERENUM = {0x77114A87, 0x8944, 0x11D1, [0xBD, 0x90, 0x00, 0xA0, 0xC9, 0x06, 0xBE, 0x2D]}; + const IID GUID_BUS_TYPE_USB = {0x9D7DEBBC, 0xC85D, 0x11D1, [0x9E, 0xB4, 0x00, 0x60, 0x08, 0xC3, 0xA1, 0x9A]}; + const IID GUID_BUS_TYPE_USBPRINT = {0x441EE000, 0x4342, 0x11D5, [0xA1, 0x84, 0x00, 0xC0, 0x4F, 0x60, 0x52, 0x4D]}; + const IID GUID_Button = {0xA36D02F0, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_CHECKVALUEEXCLUSIVE = {0x6650430C, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_ChordParam = {0xD2AC289E, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_Clear_All_Bands = {0xD2AC28AB, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_COLOR = {0x66504301, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_ColorControlCallbacks = {0xEFD60CC2, 0x49E7, 0x11D0, [0x88, 0x9D, 0x00, 0xAA, 0x00, 0xBB, 0xB7, 0x6A]}; + const IID GUID_CommandParam = {0xD2AC289D, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_CommandParam2 = {0x28F97EF7, 0x9538, 0x11D2, [0x97, 0xA9, 0x00, 0xC0, 0x4F, 0xA3, 0x6E, 0x58]}; + const IID GUID_ConnectToDLSCollection = {0x1DB1AE6B, 0xE92E, 0x11D1, [0xA8, 0xC5, 0x00, 0xC0, 0x4F, 0xA3, 0x72, 0x6E]}; + const IID GUID_ConstantForce = {0x13541C20, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_CustomForce = {0x13541C2B, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_D3DCallbacks2 = {0x0BA584E1, 0x70B6, 0x11D0, [0x88, 0x9D, 0x00, 0xAA, 0x00, 0xBB, 0xB7, 0x6A]}; + const IID GUID_D3DCallbacks3 = {0xDDF41230, 0xEC0A, 0x11D0, [0xA9, 0xB6, 0x00, 0xAA, 0x00, 0xC0, 0x99, 0x3E]}; + const IID GUID_D3DExtendedCaps = {0x7DE41F80, 0x9D93, 0x11D0, [0x89, 0xAB, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29]}; + const IID GUID_D3DParseUnknownCommandCallback = {0x2E04FFA0, 0x98E4, 0x11D1, [0x8C, 0xE1, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8]}; + const IID GUID_Damper = {0x13541C28, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_DDMoreCaps = {0x880BAF30, 0xB030, 0x11D0, [0x8E, 0xA7, 0x00, 0x60, 0x97, 0x97, 0xEA, 0x5B]}; + const IID GUID_DDMoreSurfaceCaps = {0x3B8A0466, 0xF269, 0x11D1, [0x88, 0x0B, 0x00, 0xC0, 0x4F, 0xD9, 0x30, 0xC5]}; + const IID GUID_DDStereoMode = {0xF828169C, 0xA8E8, 0x11D2, [0xA1, 0xF2, 0x00, 0xA0, 0xC9, 0x83, 0xEA, 0xF6]}; + const IID GUID_DefaultGMCollection = {0xF17E8673, 0xC3B4, 0x11D1, [0x87, 0x0B, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_DEVCLASS_1394 = {0x6BDD1FC1, 0x810F, 0x11D0, [0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F]}; + const IID GUID_DEVCLASS_1394DEBUG = {0x66F250D6, 0x7801, 0x4A64, [0xB1, 0x39, 0xEE, 0xA8, 0x0A, 0x45, 0x0B, 0x24]}; + const IID GUID_DEVCLASS_61883 = {0x7EBEFBC0, 0x3200, 0x11D2, [0xB4, 0xC2, 0x00, 0xA0, 0xC9, 0x69, 0x7D, 0x07]}; + const IID GUID_DEVCLASS_ADAPTER = {0x4D36E964, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_APMSUPPORT = {0xD45B1C18, 0xC8FA, 0x11D1, [0x9F, 0x77, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30]}; + const IID GUID_DEVCLASS_AVC = {0xC06FF265, 0xAE09, 0x48F0, [0x81, 0x2C, 0x16, 0x75, 0x3D, 0x7C, 0xBA, 0x83]}; + const IID GUID_DEVCLASS_BATTERY = {0x72631E54, 0x78A4, 0x11D0, [0xBC, 0xF7, 0x00, 0xAA, 0x00, 0xB7, 0xB3, 0x2A]}; + const IID GUID_DEVCLASS_BLUETOOTH = {0xE0CBF06C, 0xCD8B, 0x4647, [0xBB, 0x8A, 0x26, 0x3B, 0x43, 0xF0, 0xF9, 0x74]}; + const IID GUID_DEVCLASS_CDROM = {0x4D36E965, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_COMPUTER = {0x4D36E966, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_DECODER = {0x6BDD1FC2, 0x810F, 0x11D0, [0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F]}; + const IID GUID_DEVCLASS_DISKDRIVE = {0x4D36E967, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_DISPLAY = {0x4D36E968, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_DOT4 = {0x48721B56, 0x6795, 0x11D2, [0xB1, 0xA8, 0x00, 0x80, 0xC7, 0x2E, 0x74, 0xA2]}; + const IID GUID_DEVCLASS_DOT4PRINT = {0x49CE6AC8, 0x6F86, 0x11D2, [0xB1, 0xE5, 0x00, 0x80, 0xC7, 0x2E, 0x74, 0xA2]}; + const IID GUID_DEVCLASS_ENUM1394 = {0xC459DF55, 0xDB08, 0x11D1, [0xB0, 0x09, 0x00, 0xA0, 0xC9, 0x08, 0x1F, 0xF6]}; + const IID GUID_DEVCLASS_FDC = {0x4D36E969, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_FLOPPYDISK = {0x4D36E980, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_FSFILTER_ACTIVITYMONIT = {0xB86DFF51, 0xA31E, 0x4BAC, [0xB3, 0xCF, 0xE8, 0xCF, 0xE7, 0x5C, 0x9F, 0xC2]}; + const IID GUID_DEVCLASS_FSFILTER_ANTIVIRUS = {0xB1D1A169, 0xC54F, 0x4379, [0x81, 0xDB, 0xBE, 0xE7, 0xD8, 0x8D, 0x74, 0x54]}; + const IID GUID_DEVCLASS_FSFILTER_CFSMETADATASER = {0xCDCF0939, 0xB75B, 0x4630, [0xBF, 0x76, 0x80, 0xF7, 0xBA, 0x65, 0x58, 0x84]}; + const IID GUID_DEVCLASS_FSFILTER_COMPRESSION = {0xF3586BAF, 0xB5AA, 0x49B5, [0x8D, 0x6C, 0x05, 0x69, 0x28, 0x4C, 0x63, 0x9F]}; + const IID GUID_DEVCLASS_FSFILTER_CONTENTSCREEN = {0x3E3F0674, 0xC83C, 0x4558, [0xBB, 0x26, 0x98, 0x20, 0xE1, 0xEB, 0xA5, 0xC5]}; + const IID GUID_DEVCLASS_FSFILTER_CONTINUOUSBACK = {0x71AA14F8, 0x6FAD, 0x4622, [0xAD, 0x77, 0x92, 0xBB, 0x9D, 0x7E, 0x69, 0x47]}; + const IID GUID_DEVCLASS_FSFILTER_COPYPROTECTIO = {0x89786FF1, 0x9C12, 0x402F, [0x9C, 0x9E, 0x17, 0x75, 0x3C, 0x7F, 0x43, 0x75]}; + const IID GUID_DEVCLASS_FSFILTER_ENCRYPTION = {0xA0A701C0, 0xA511, 0x42FF, [0xAA, 0x6C, 0x06, 0xDC, 0x03, 0x95, 0x57, 0x6F]}; + const IID GUID_DEVCLASS_FSFILTER_HSM = {0xD546500A, 0x2AEB, 0x45F6, [0x94, 0x82, 0xF4, 0xB1, 0x79, 0x9C, 0x31, 0x77]}; + const IID GUID_DEVCLASS_FSFILTER_INFRASTRUCTUR = {0xE55FA6F9, 0x128C, 0x4D04, [0xAB, 0xAB, 0x63, 0x0C, 0x74, 0xB1, 0x45, 0x3A]}; + const IID GUID_DEVCLASS_FSFILTER_OPENFILEBACKU = {0xF8ECAFA6, 0x66D1, 0x41A5, [0x89, 0x9B, 0x66, 0x58, 0x5D, 0x72, 0x16, 0xB7]}; + const IID GUID_DEVCLASS_FSFILTER_PHYSICALQUOTAM = {0x6A0A8E78, 0xBBA6, 0x4FC4, [0xA7, 0x09, 0x1E, 0x33, 0xCD, 0x09, 0xD6, 0x7E]}; + const IID GUID_DEVCLASS_FSFILTER_QUOTAMANAGEME = {0x8503C911, 0xA6C7, 0x4919, [0x8F, 0x79, 0x50, 0x28, 0xF5, 0x86, 0x6B, 0x0C]}; + const IID GUID_DEVCLASS_FSFILTER_REPLICATION = {0x48D3EBC4, 0x4CF8, 0x48FF, [0xB8, 0x69, 0x9C, 0x68, 0xAD, 0x42, 0xEB, 0x9F]}; + const IID GUID_DEVCLASS_FSFILTER_SECURITYENHANC = {0xD02BC3DA, 0x0C8E, 0x4945, [0x9B, 0xD5, 0xF1, 0x88, 0x3C, 0x22, 0x6C, 0x8C]}; + const IID GUID_DEVCLASS_FSFILTER_SYSTEM = {0x5D1B9AAA, 0x01E2, 0x46AF, [0x84, 0x9F, 0x27, 0x2B, 0x3F, 0x32, 0x4C, 0x46]}; + const IID GUID_DEVCLASS_FSFILTER_SYSTEMRECOVER = {0x2DB15374, 0x706E, 0x4131, [0xA0, 0xC7, 0xD7, 0xC7, 0x8E, 0xB0, 0x28, 0x9A]}; + const IID GUID_DEVCLASS_FSFILTER_UNDELETE = {0xFE8F1572, 0xC67A, 0x48C0, [0xBB, 0xAC, 0x0B, 0x5C, 0x6D, 0x66, 0xCA, 0xFB]}; + const IID GUID_DEVCLASS_GPS = {0x6BDD1FC3, 0x810F, 0x11D0, [0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F]}; + const IID GUID_DEVCLASS_HDC = {0x4D36E96A, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_HIDCLASS = {0x745A17A0, 0x74D3, 0x11D0, [0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA]}; + const IID GUID_DEVCLASS_IMAGE = {0x6BDD1FC6, 0x810F, 0x11D0, [0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F]}; + const IID GUID_DEVCLASS_INFRARED = {0x6BDD1FC5, 0x810F, 0x11D0, [0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F]}; + const IID GUID_DEVCLASS_KEYBOARD = {0x4D36E96B, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_LEGACYDRIVER = {0x8ECC055D, 0x047F, 0x11D1, [0xA5, 0x37, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xD1]}; + const IID GUID_DEVCLASS_MEDIA = {0x4D36E96C, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_MEDIUM_CHANGER = {0xCE5939AE, 0xEBDE, 0x11D0, [0xB1, 0x81, 0x00, 0x00, 0xF8, 0x75, 0x3E, 0xC4]}; + const IID GUID_DEVCLASS_MODEM = {0x4D36E96D, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_MONITOR = {0x4D36E96E, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_MOUSE = {0x4D36E96F, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_MTD = {0x4D36E970, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_MULTIFUNCTION = {0x4D36E971, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_MULTIPORTSERIAL = {0x50906CB8, 0xBA12, 0x11D1, [0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30]}; + const IID GUID_DEVCLASS_NET = {0x4D36E972, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_NETCLIENT = {0x4D36E973, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_NETSERVICE = {0x4D36E974, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_NETTRANS = {0x4D36E975, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_NODRIVER = {0x4D36E976, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_PCMCIA = {0x4D36E977, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_PNPPRINTERS = {0x4658EE7E, 0xF050, 0x11D1, [0xB6, 0xBD, 0x00, 0xC0, 0x4F, 0xA3, 0x72, 0xA7]}; + const IID GUID_DEVCLASS_PORTS = {0x4D36E978, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_PRINTER = {0x4D36E979, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_PRINTERUPGRADE = {0x4D36E97A, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_PROCESSOR = {0x50127DC3, 0x0F36, 0x415E, [0xA6, 0xCC, 0x4C, 0xB3, 0xBE, 0x91, 0x0B, 0x65]}; + const IID GUID_DEVCLASS_SBP2 = {0xD48179BE, 0xEC20, 0x11D1, [0xB6, 0xB8, 0x00, 0xC0, 0x4F, 0xA3, 0x72, 0xA7]}; + const IID GUID_DEVCLASS_SCSIADAPTER = {0x4D36E97B, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_SMARTCARDREADER = {0x50DD5230, 0xBA8A, 0x11D1, [0xBF, 0x5D, 0x00, 0x00, 0xF8, 0x05, 0xF5, 0x30]}; + const IID GUID_DEVCLASS_SOUND = {0x4D36E97C, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_SYSTEM = {0x4D36E97D, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_TAPEDRIVE = {0x6D807884, 0x7D21, 0x11CF, [0x80, 0x1C, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_UNKNOWN = {0x4D36E97E, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVCLASS_USB = {0x36FC9E60, 0xC465, 0x11CF, [0x80, 0x56, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_DEVCLASS_VOLUME = {0x71A27CDD, 0x812A, 0x11D0, [0xBE, 0xC7, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F]}; + const IID GUID_DEVCLASS_VOLUMESNAPSHOT = {0x533C5B84, 0xEC70, 0x11D2, [0x95, 0x05, 0x00, 0xC0, 0x4F, 0x79, 0xDE, 0xAF]}; + const IID GUID_DEVCLASS_WCEUSBS = {0x25DBCE51, 0x6C8F, 0x4A72, [0x8A, 0x6D, 0xB5, 0x4C, 0x2B, 0x4F, 0xC8, 0x35]}; + const IID GUID_DEVICE_INTERFACE_ARRIVAL = {0xCB3A4004, 0x46F0, 0x11D0, [0xB0, 0x8F, 0x00, 0x60, 0x97, 0x13, 0x05, 0x3F]}; + const IID GUID_DEVICE_INTERFACE_REMOVAL = {0xCB3A4005, 0x46F0, 0x11D0, [0xB0, 0x8F, 0x00, 0x60, 0x97, 0x13, 0x05, 0x3F]}; + const IID GUID_DEVINTERFACE_CDCHANGER = {0x53F56312, 0xB6BF, 0x11D0, [0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B]}; + const IID GUID_DEVINTERFACE_CDROM = {0x53F56308, 0xB6BF, 0x11D0, [0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B]}; + const IID GUID_DEVINTERFACE_COMPORT = {0x86E0D1E0, 0x8089, 0x11D0, [0x9C, 0xE4, 0x08, 0x00, 0x3E, 0x30, 0x1F, 0x73]}; + const IID GUID_DEVINTERFACE_DISK = {0x53F56307, 0xB6BF, 0x11D0, [0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B]}; + const IID GUID_DEVINTERFACE_FLOPPY = {0x53F56311, 0xB6BF, 0x11D0, [0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B]}; + const IID GUID_DEVINTERFACE_MEDIUMCHANGER = {0x53F56310, 0xB6BF, 0x11D0, [0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B]}; + const IID GUID_DEVINTERFACE_PARTITION = {0x53F5630A, 0xB6BF, 0x11D0, [0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B]}; + const IID GUID_DEVINTERFACE_SERENUM_BUS_ENUMERA = {0x4D36E978, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_DEVINTERFACE_STORAGEPORT = {0x2ACCFE60, 0xC130, 0x11D2, [0xB0, 0x82, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B]}; + const IID GUID_DEVINTERFACE_TAPE = {0x53F5630B, 0xB6BF, 0x11D0, [0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B]}; + const IID GUID_DEVINTERFACE_VOLUME = {0x53F5630D, 0xB6BF, 0x11D0, [0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B]}; + const IID GUID_DEVINTERFACE_WRITEONCEDISK = {0x53F5630C, 0xB6BF, 0x11D0, [0x94, 0xF2, 0x00, 0xA0, 0xC9, 0x1E, 0xFB, 0x8B]}; + const IID GUID_DirectDrawPaletteStream = {0x730C7FFC, 0x5347, 0x11D1, [0x8C, 0x4D, 0x00, 0xC0, 0x4F, 0xD9, 0x30, 0xC5]}; + const IID GUID_DirectDrawSurfaceStream = {0xE043BC46, 0x5317, 0x11D1, [0x8C, 0x4D, 0x00, 0xC0, 0x4F, 0xD9, 0x30, 0xC5]}; + const IID GUID_DirectMusicAllTypes = {0xD2AC2893, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_Disable_Auto_Download = {0xD2AC28AA, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_DisableTempo = {0x45FC707D, 0x1DB4, 0x11D2, [0xBC, 0xAC, 0x00, 0xA0, 0xC9, 0x22, 0xE6, 0xEB]}; + const IID GUID_DisableTimeSig = {0x45FC707B, 0x1DB4, 0x11D2, [0xBC, 0xAC, 0x00, 0xA0, 0xC9, 0x22, 0xE6, 0xEB]}; + const IID GUID_DMUS_PROP_DLS1 = {0x178F2F27, 0xC364, 0x11D1, [0xA7, 0x60, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12]}; + const IID GUID_DMUS_PROP_DLS2 = {0xF14599E5, 0x4689, 0x11D2, [0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6]}; + const IID GUID_DMUS_PROP_Effects = {0xCDA8D611, 0x684A, 0x11D2, [0x87, 0x1E, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_DMUS_PROP_GM_Hardware = {0x178F2F24, 0xC364, 0x11D1, [0xA7, 0x60, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12]}; + const IID GUID_DMUS_PROP_GS_Capable = {0x6496ABA2, 0x61B0, 0x11D2, [0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6]}; + const IID GUID_DMUS_PROP_GS_Hardware = {0x178F2F25, 0xC364, 0x11D1, [0xA7, 0x60, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12]}; + const IID GUID_DMUS_PROP_INSTRUMENT2 = {0x865FD372, 0x9F67, 0x11D2, [0x87, 0x2A, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_DMUS_PROP_LegacyCaps = {0xCFA7CDC2, 0x00A1, 0x11D2, [0xAA, 0xD5, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12]}; + const IID GUID_DMUS_PROP_MemorySize = {0x178F2F28, 0xC364, 0x11D1, [0xA7, 0x60, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12]}; + const IID GUID_DMUS_PROP_SampleMemorySize = {0x178F2F28, 0xC364, 0x11D1, [0xA7, 0x60, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12]}; + const IID GUID_DMUS_PROP_SamplePlaybackRate = {0x2A91F713, 0xA4BF, 0x11D2, [0xBB, 0xDF, 0x00, 0x60, 0x08, 0x33, 0xDB, 0xD8]}; + const IID GUID_DMUS_PROP_SynthSink_DSOUND = {0x0AA97844, 0xC877, 0x11D1, [0x87, 0x0C, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_DMUS_PROP_SynthSink_WAVE = {0x0AA97845, 0xC877, 0x11D1, [0x87, 0x0C, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_DMUS_PROP_Volume = {0xFEDFAE25, 0xE46E, 0x11D1, [0xAA, 0xCE, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12]}; + const IID GUID_DMUS_PROP_WavesReverb = {0x04CB5622, 0x32E5, 0x11D2, [0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6]}; + const IID GUID_DMUS_PROP_WriteLatency = {0x268A0FA0, 0x60F2, 0x11D2, [0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6]}; + const IID GUID_DMUS_PROP_WritePeriod = {0x268A0FA1, 0x60F2, 0x11D2, [0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6]}; + const IID GUID_DMUS_PROP_XG_Capable = {0x6496ABA1, 0x61B0, 0x11D2, [0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6]}; + const IID GUID_DMUS_PROP_XG_Hardware = {0x178F2F26, 0xC364, 0x11D1, [0xA7, 0x60, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12]}; + const IID GUID_Download = {0xD2AC28A7, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_Enable_Auto_Download = {0xD2AC28A9, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_EnableTempo = {0x45FC707E, 0x1DB4, 0x11D2, [0xBC, 0xAC, 0x00, 0xA0, 0xC9, 0x22, 0xE6, 0xEB]}; + const IID GUID_EnableTimeSig = {0x45FC707C, 0x1DB4, 0x11D2, [0xBC, 0xAC, 0x00, 0xA0, 0xC9, 0x22, 0xE6, 0xEB]}; + const IID GUID_FONTBOLD = {0x6650430F, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_FONTITALIC = {0x66504310, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_FONTNAME = {0x6650430D, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_FONTSIZE = {0x6650430E, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_FONTSTRIKETHROUGH = {0x66504312, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_FONTUNDERSCORE = {0x66504311, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_Friction = {0x13541C2A, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_HANDLE = {0x66504313, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_HasPathProperties = {0x0002DE81, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID GUID_HIDClass = {0x745A17A0, 0x74D3, 0x11D0, [0xB6, 0xFE, 0x00, 0xA0, 0xC9, 0x0F, 0x57, 0xDA]}; + const IID GUID_HIMETRIC = {0x66504300, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_HWPROFILE_CHANGE_CANCELLED = {0xCB3A4002, 0x46F0, 0x11D0, [0xB0, 0x8F, 0x00, 0x60, 0x97, 0x13, 0x05, 0x3F]}; + const IID GUID_HWPROFILE_CHANGE_COMPLETE = {0xCB3A4003, 0x46F0, 0x11D0, [0xB0, 0x8F, 0x00, 0x60, 0x97, 0x13, 0x05, 0x3F]}; + const IID GUID_HWPROFILE_QUERY_CHANGE = {0xCB3A4001, 0x46F0, 0x11D0, [0xB0, 0x8F, 0x00, 0x60, 0x97, 0x13, 0x05, 0x3F]}; + const IID GUID_IDirectMusicBand = {0xD2AC28AC, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_IDirectMusicChordMap = {0xD2AC28AD, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_IDirectMusicStyle = {0xD2AC28A1, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_Inertia = {0x13541C29, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_INT_ROUTE_INTERFACE_STANDARD = {0x70941BF4, 0x0073, 0x11D1, [0xA0, 0x9E, 0x00, 0xC0, 0x4F, 0xC3, 0x40, 0xB1]}; + const IID GUID_Joystick = {0x6F1D2B70, 0xD5A0, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_KernelCallbacks = {0x80863800, 0x6B06, 0x11D0, [0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8]}; + const IID GUID_KernelCaps = {0xFFAA7540, 0x7AA8, 0x11D0, [0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8]}; + const IID GUID_Key = {0x55728220, 0xD33C, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_KeyboardClass = {0x4D36E96B, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_LEGACY_DEVICE_DETECTION_STANDAR = {0x50FEB0DE, 0x596A, 0x11D2, [0xA5, 0xB8, 0x00, 0x00, 0xF8, 0x1A, 0x46, 0x19]}; + const IID GUID_MediaClass = {0x4D36E96C, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_MF_ENUMERATION_INTERFACE = {0xAEB895F0, 0x5586, 0x11D1, [0x8D, 0x84, 0x00, 0xA0, 0xC9, 0x06, 0xB2, 0x44]}; + const IID GUID_Miscellaneous2Callbacks = {0x406B2F00, 0x3E5A, 0x11D1, [0xB6, 0x40, 0x00, 0xAA, 0x00, 0xA1, 0xF9, 0x6A]}; + const IID GUID_MiscellaneousCallbacks = {0xEFD60CC0, 0x49E7, 0x11D0, [0x88, 0x9D, 0x00, 0xAA, 0x00, 0xBB, 0xB7, 0x6A]}; + const IID GUID_MotionCompCallbacks = {0xB1122B40, 0x5DA5, 0x11D1, [0x8F, 0xCF, 0x00, 0xC0, 0x4F, 0xC2, 0x9B, 0x4E]}; + const IID GUID_MouseClass = {0x4D36E96F, 0xE325, 0x11CE, [0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18]}; + const IID GUID_MuteParam = {0xD2AC28AF, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_NDIS_802_11_ADD_WEP = {0x4307BFF0, 0x2129, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_AUTHENTICATION_MODE = {0x43920A24, 0x2129, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_BASIC_RATES = {0x4A198516, 0x2068, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_BSSID = {0x2504B6C2, 0x1FA5, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_BSSID_LIST = {0x69526F9A, 0x2062, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_BSSID_LIST_SCAN = {0x0D9E01E1, 0xBA70, 0x11D4, [0xB6, 0x75, 0x00, 0x20, 0x48, 0x57, 0x03, 0x37]}; + const IID GUID_NDIS_802_11_CONFIGURATION = {0x4A4DF982, 0x2068, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_DESIRED_RATES = {0x452EE08E, 0x2536, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_DISASSOCIATE = {0x43671F40, 0x2129, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_FRAGMENTATION_THRESH = {0x69AAA7C4, 0x2062, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_INFRASTRUCTURE_MODE = {0x697D5A7E, 0x2062, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_NETWORK_TYPE_IN_USE = {0x857E2326, 0x2041, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_NETWORK_TYPES_SUPPOR = {0x8531D6E6, 0x2041, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_NUMBER_OF_ANTENNAS = {0x01779336, 0x2064, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_POWER_MODE = {0x85BE837C, 0x2041, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_PRIVACY_FILTER = {0x6733C4E9, 0x4792, 0x11D4, [0x97, 0xF1, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_REMOVE_WEP = {0x433C345C, 0x2129, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_RSSI = {0x1507DB16, 0x2053, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_RSSI_TRIGGER = {0x155689B8, 0x2053, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_RTS_THRESHOLD = {0x0134D07E, 0x2064, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_RX_ANTENNA_SELECTED = {0x01AC07A2, 0x2064, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_SSID = {0x7D2A90EA, 0x2041, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_STATISTICS = {0x42BB73B0, 0x2129, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_SUPPORTED_RATES = {0x49DB8722, 0x2068, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_TX_ANTENNA_SELECTED = {0x01DBB74A, 0x2064, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_TX_POWER_LEVEL = {0x11E6BA76, 0x2053, 0x11D4, [0x97, 0xEB, 0x00, 0xC0, 0x4F, 0x79, 0xC4, 0x03]}; + const IID GUID_NDIS_802_11_WEP_STATUS = {0xB027A21F, 0x3CFA, 0x4125, [0x80, 0x0B, 0x3F, 0x7A, 0x18, 0xFD, 0xDC, 0xDC]}; + const IID GUID_NDIS_802_3_CURRENT_ADDRESS = {0x44795700, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_3_MAC_OPTIONS = {0x44795703, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_3_MAXIMUM_LIST_SIZE = {0x44795702, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_3_MULTICAST_LIST = {0x44795701, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_3_PERMANENT_ADDRESS = {0x447956FF, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_3_RCV_ERROR_ALIGNMENT = {0x44795704, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_3_XMIT_MORE_COLLISIONS = {0x44795706, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_3_XMIT_ONE_COLLISION = {0x44795705, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_5_CURRENT_ADDRESS = {0x44795708, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_5_CURRENT_FUNCTIONAL = {0x44795709, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_5_CURRENT_GROUP = {0x4479570A, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_5_CURRENT_RING_STATE = {0xACF14032, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_5_CURRENT_RING_STATUS = {0x890A36EC, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_5_LAST_OPEN_STATUS = {0x4479570B, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_5_LINE_ERRORS = {0xACF14033, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_5_LOST_FRAMES = {0xACF14034, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_802_5_PERMANENT_ADDRESS = {0x44795707, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_HW_CURRENT_ADDRESS = {0x791AD1A1, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_MAX_AAL0_PACKET_SIZE = {0x791AD1A5, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_MAX_AAL1_PACKET_SIZE = {0x791AD1A6, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_MAX_AAL34_PACKET_SIZE = {0x791AD1A7, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_MAX_AAL5_PACKET_SIZE = {0x791AD191, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_MAX_ACTIVE_VCI_BITS = {0x791AD1A3, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_MAX_ACTIVE_VCS = {0x791AD1A2, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_MAX_ACTIVE_VPI_BITS = {0x791AD1A4, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_RCV_CELLS_DROPPED = {0x0A21480C, 0xE35F, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_RCV_CELLS_OK = {0x0A21480A, 0xE35F, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_SUPPORTED_AAL_TYPES = {0x791AD1A0, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_SUPPORTED_SERVICE_CATEG = {0x791AD19F, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_SUPPORTED_VC_RATES = {0x791AD19E, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ATM_XMIT_CELLS_OK = {0x0A21480B, 0xE35F, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ENUMERATE_ADAPTER = {0x981F2D7F, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_ENUMERATE_VC = {0x981F2D82, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_ATTACHMENT_TYPE = {0xACF1403D, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_DOWNSTREAM_NODE_LONG = {0xACF1403F, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_FRAME_ERRORS = {0xACF14040, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_FRAMES_LOST = {0xACF14041, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_LCONNECTION_STATE = {0xACF14045, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_LCT_FAILURES = {0xACF14043, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_LEM_REJECTS = {0xACF14044, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_LONG_CURRENT_ADDR = {0xACF14036, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_LONG_MAX_LIST_SIZE = {0xACF14038, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_LONG_MULTICAST_LIST = {0xACF14037, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_LONG_PERMANENT_ADDR = {0xACF14035, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_RING_MGT_STATE = {0xACF14042, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_SHORT_CURRENT_ADDR = {0xACF1403A, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_SHORT_MAX_LIST_SIZE = {0xACF1403C, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_SHORT_MULTICAST_LIST = {0xACF1403B, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_SHORT_PERMANENT_ADDR = {0xACF14039, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_FDDI_UPSTREAM_NODE_LONG = {0xACF1403E, 0xA61C, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_DRIVER_VERSION = {0x791AD198, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_HARDWARE_STATUS = {0x791AD192, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_LINK_SPEED = {0x791AD195, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_MAC_OPTIONS = {0x791AD19A, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_MEDIA_CONNECT_STATU = {0x791AD19B, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_MEDIA_IN_USE = {0x791AD194, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_MEDIA_SUPPORTED = {0x791AD193, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_MINIMUM_LINK_SPEED = {0x791AD19D, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_RCV_PDUS_ERROR = {0x0A214808, 0xE35F, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_RCV_PDUS_NO_BUFFER = {0x0A214809, 0xE35F, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_RCV_PDUS_OK = {0x0A214806, 0xE35F, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_VENDOR_DESCRIPTION = {0x791AD197, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_VENDOR_DRIVER_VERSI = {0x791AD19C, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_VENDOR_ID = {0x791AD196, 0xE35C, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_XMIT_PDUS_ERROR = {0x0A214807, 0xE35F, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CO_XMIT_PDUS_OK = {0x0A214805, 0xE35F, 0x11D0, [0x96, 0x92, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CURRENT_LOOKAHEAD = {0x5EC10361, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_CURRENT_PACKET_FILTER = {0x5EC10360, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_DRIVER_VERSION = {0x5EC10362, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_HARDWARE_STATUS = {0x5EC10354, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_LINK_SPEED = {0x5EC10359, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_MAC_OPTIONS = {0x5EC10365, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_MAXIMUM_FRAME_SIZE = {0x5EC10358, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_MAXIMUM_LOOKAHEAD = {0x5EC10357, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_MAXIMUM_SEND_PACKETS = {0x5EC10367, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_MAXIMUM_TOTAL_SIZE = {0x5EC10363, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_MEDIA_CONNECT_STATUS = {0x5EC10366, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_MEDIA_IN_USE = {0x5EC10356, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_MEDIA_SUPPORTED = {0x5EC10355, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_PHYSICAL_MEDIUM = {0x418CA16D, 0x3937, 0x4208, [0x94, 0x0A, 0xEC, 0x61, 0x96, 0x27, 0x80, 0x85]}; + const IID GUID_NDIS_GEN_RCV_ERROR = {0x447956FD, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_RCV_NO_BUFFER = {0x447956FE, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_RCV_OK = {0x447956FB, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_RECEIVE_BLOCK_SIZE = {0x5EC1035D, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_RECEIVE_BUFFER_SPACE = {0x5EC1035B, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_TRANSMIT_BLOCK_SIZE = {0x5EC1035C, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_TRANSMIT_BUFFER_SPACE = {0x5EC1035A, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_VENDOR_DESCRIPTION = {0x5EC1035F, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_VENDOR_DRIVER_VERSION = {0x447956F9, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_VENDOR_ID = {0x5EC1035E, 0xA61A, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_VLAN_ID = {0x765DC702, 0xC5E8, 0x4B67, [0x84, 0x3B, 0x3F, 0x5A, 0x4F, 0xF2, 0x64, 0x8B]}; + const IID GUID_NDIS_GEN_XMIT_ERROR = {0x447956FC, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_GEN_XMIT_OK = {0x447956FA, 0xA61B, 0x11D0, [0x8D, 0xD4, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_LAN_CLASS = {0xAD498944, 0x762F, 0x11D0, [0x8D, 0xCB, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_NOTIFY_ADAPTER_ARRIVAL = {0x981F2D81, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_NOTIFY_ADAPTER_REMOVAL = {0x981F2D80, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_NOTIFY_BIND = {0x5413531C, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_NOTIFY_UNBIND = {0x6E3CE1EC, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_NOTIFY_VC_ARRIVAL = {0x182F9E0C, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_NOTIFY_VC_REMOVAL = {0x981F2D79, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_STATUS_LINK_SPEED_CHANGE = {0x981F2D85, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_STATUS_MEDIA_CONNECT = {0x981F2D7D, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_STATUS_MEDIA_DISCONNECT = {0x981F2D7E, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_STATUS_MEDIA_SPECIFIC_INDIC = {0x981F2D84, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_STATUS_RESET_END = {0x981F2D77, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_STATUS_RESET_START = {0x981F2D76, 0xB1F3, 0x11D0, [0x8D, 0xD7, 0x00, 0xC0, 0x4F, 0xC3, 0x35, 0x8C]}; + const IID GUID_NDIS_WAKE_ON_MAGIC_PACKET_ONLY = {0xA14F1C97, 0x8839, 0x4F8A, [0x99, 0x96, 0xA2, 0x89, 0x96, 0xEB, 0xBF, 0x1D]}; + const IID GUID_NETSHELL_PROPS = {0x2D15A9A1, 0xA556, 0x4189, [0x91, 0xAD, 0x02, 0x74, 0x58, 0xF1, 0x1A, 0x07]}; + const IID GUID_NonLocalVidMemCaps = {0x86C4FA80, 0x8D84, 0x11D0, [0x94, 0xE8, 0x00, 0xC0, 0x4F, 0xC3, 0x41, 0x37]}; + const IID GUID_NOTIFICATION_CHORD = {0xD2AC289B, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_NOTIFICATION_COMMAND = {0xD2AC289C, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_NOTIFICATION_MEASUREANDBEAT = {0xD2AC289A, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_NOTIFICATION_PERFORMANCE = {0x81F75BC5, 0x4E5D, 0x11D2, [0xBC, 0xC7, 0x00, 0xA0, 0xC9, 0x22, 0xE6, 0xEB]}; + const IID GUID_NOTIFICATION_SEGMENT = {0xD2AC2899, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_NULL = {0x00000000, 0x0000, 0x0000, [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]}; + const IID GUID_OPTIONVALUEEXCLUSIVE = {0x6650430B, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_OptSurfaceKmodeInfo = {0xE05C8472, 0x51D4, 0x11D1, [0x8C, 0xCE, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8]}; + const IID GUID_OptSurfaceUmodeInfo = {0x9D792804, 0x5FA8, 0x11D1, [0x8C, 0xD0, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8]}; + const IID GUID_PathProperty = {0x0002DE80, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID GUID_PCI_BUS_INTERFACE_STANDARD = {0x496B8281, 0x6F25, 0x11D0, [0xBE, 0xAF, 0x08, 0x00, 0x2B, 0xE2, 0x09, 0x2F]}; + const IID GUID_PCI_DEVICE_PRESENT_INTERFACE = {0xD1B82C26, 0xBF49, 0x45EF, [0xB2, 0x16, 0x71, 0xCB, 0xD7, 0x88, 0x9B, 0x57]}; + const IID GUID_PCMCIA_BUS_INTERFACE_STANDARD = {0x76173AF0, 0xC504, 0x11D1, [0x94, 0x7F, 0x00, 0xC0, 0x4F, 0xB9, 0x60, 0xEE]}; + const IID GUID_PerfAutoDownload = {0xFB09565B, 0x3631, 0x11D2, [0xBC, 0xB8, 0x00, 0xA0, 0xC9, 0x22, 0xE6, 0xEB]}; + const IID GUID_PerfMasterGrooveLevel = {0xD2AC28B2, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_PerfMasterTempo = {0xD2AC28B0, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_PerfMasterVolume = {0xD2AC28B1, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_PNP_CUSTOM_NOTIFICATION = {0xACA73F8E, 0x8D23, 0x11D1, [0xAC, 0x7D, 0x00, 0x00, 0xF8, 0x75, 0x71, 0xD0]}; + const IID GUID_PNP_POWER_NOTIFICATION = {0xC2CF0660, 0xEB7A, 0x11D1, [0xBD, 0x7F, 0x00, 0x00, 0xF8, 0x75, 0x71, 0xD0]}; + const IID GUID_POV = {0xA36D02F2, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_POWER_DEVICE_ENABLE = {0x827C0A6F, 0xFEB0, 0x11D0, [0xBD, 0x26, 0x00, 0xAA, 0x00, 0xB7, 0xB3, 0x2A]}; + const IID GUID_POWER_DEVICE_TIMEOUTS = {0xA45DA735, 0xFEB0, 0x11D0, [0xBD, 0x26, 0x00, 0xAA, 0x00, 0xB7, 0xB3, 0x2A]}; + const IID GUID_POWER_DEVICE_WAKE_ENABLE = {0xA9546A82, 0xFEB0, 0x11D0, [0xBD, 0x26, 0x00, 0xAA, 0x00, 0xB7, 0xB3, 0x2A]}; + const IID GUID_QOS_BESTEFFORT_BANDWIDTH = {0xED885290, 0x40EC, 0x11D1, [0x2C, 0x91, 0x00, 0xAA, 0x00, 0x57, 0x49, 0x15]}; + const IID GUID_QOS_ENABLE_AVG_STATS = {0xBAFB6D11, 0x27C4, 0x4801, [0xA4, 0x6F, 0xEF, 0x80, 0x80, 0xC1, 0x88, 0xC8]}; + const IID GUID_QOS_ENABLE_WINDOW_ADJUSTMENT = {0xAA966725, 0xD3E9, 0x4C55, [0xB3, 0x35, 0x2A, 0x00, 0x27, 0x9A, 0x1E, 0x64]}; + const IID GUID_QOS_FLOW_8021P_CONFORMING = {0x08C1E013, 0xFCD2, 0x11D2, [0xBE, 0x1E, 0x00, 0xA0, 0xC9, 0x9E, 0xE6, 0x3B]}; + const IID GUID_QOS_FLOW_8021P_NONCONFORMING = {0x09023F91, 0xFCD2, 0x11D2, [0xBE, 0x1E, 0x00, 0xA0, 0xC9, 0x9E, 0xE6, 0x3B]}; + const IID GUID_QOS_FLOW_COUNT = {0x1147F880, 0x40ED, 0x11D1, [0x2C, 0x91, 0x00, 0xAA, 0x00, 0x57, 0x49, 0x15]}; + const IID GUID_QOS_FLOW_IP_CONFORMING = {0x07F99A8B, 0xFCD2, 0x11D2, [0xBE, 0x1E, 0x00, 0xA0, 0xC9, 0x9E, 0xE6, 0x3B]}; + const IID GUID_QOS_FLOW_IP_NONCONFORMING = {0x087A5987, 0xFCD2, 0x11D2, [0xBE, 0x1E, 0x00, 0xA0, 0xC9, 0x9E, 0xE6, 0x3B]}; + const IID GUID_QOS_FLOW_MODE = {0x5C82290A, 0x515A, 0x11D2, [0x8E, 0x58, 0x00, 0xC0, 0x4F, 0xC9, 0xBF, 0xCB]}; + const IID GUID_QOS_ISSLOW_FLOW = {0xABF273A4, 0xEE07, 0x11D2, [0xBE, 0x1B, 0x00, 0xA0, 0xC9, 0x9E, 0xE6, 0x3B]}; + const IID GUID_QOS_LATENCY = {0xFC408EF0, 0x40EC, 0x11D1, [0x2C, 0x91, 0x00, 0xAA, 0x00, 0x57, 0x49, 0x15]}; + const IID GUID_QOS_MAX_OUTSTANDING_SENDS = {0x161FFA86, 0x6120, 0x11D1, [0x2C, 0x91, 0x00, 0xAA, 0x00, 0x57, 0x49, 0x15]}; + const IID GUID_QOS_NON_BESTEFFORT_LIMIT = {0x185C44E0, 0x40ED, 0x11D1, [0x2C, 0x91, 0x00, 0xAA, 0x00, 0x57, 0x49, 0x15]}; + const IID GUID_QOS_REMAINING_BANDWIDTH = {0xC4C51720, 0x40EC, 0x11D1, [0x2C, 0x91, 0x00, 0xAA, 0x00, 0x57, 0x49, 0x15]}; + const IID GUID_QOS_STATISTICS_BUFFER = {0xBB2C0980, 0xE900, 0x11D1, [0xB0, 0x7E, 0x00, 0x80, 0xC7, 0x13, 0x82, 0xBF]}; + const IID GUID_QOS_TIMER_RESOLUTION = {0xBA10CC88, 0xF13E, 0x11D2, [0xBE, 0x1B, 0x00, 0xA0, 0xC9, 0x9E, 0xE6, 0x3B]}; + const IID GUID_RampForce = {0x13541C21, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_RhythmParam = {0xD2AC289F, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_RxAxis = {0xA36D02F4, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_RyAxis = {0xA36D02F5, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_RzAxis = {0xA36D02E3, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_SawtoothDown = {0x13541C26, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_SawtoothUp = {0x13541C25, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_SeedVariations = {0x65B76FA5, 0xFF37, 0x11D2, [0x81, 0x4E, 0x00, 0xC0, 0x4F, 0xA3, 0x6E, 0x58]}; + const IID GUID_Sine = {0x13541C23, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_Slider = {0xA36D02E4, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_Spring = {0x13541C27, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_Square = {0x13541C22, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_StandardMIDIFile = {0x06621075, 0xE92E, 0x11D1, [0xA8, 0xC5, 0x00, 0xC0, 0x4F, 0xA3, 0x72, 0x6E]}; + const IID GUID_SysKeyboard = {0x6F1D2B61, 0xD5A0, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_SysKeyboardEm = {0x6F1D2B82, 0xD5A0, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_SysKeyboardEm2 = {0x6F1D2B83, 0xD5A0, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_SysMouse = {0x6F1D2B60, 0xD5A0, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_SysMouseEm = {0x6F1D2B80, 0xD5A0, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_SysMouseEm2 = {0x6F1D2B81, 0xD5A0, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_TARGET_DEVICE_QUERY_REMOVE = {0xCB3A4006, 0x46F0, 0x11D0, [0xB0, 0x8F, 0x00, 0x60, 0x97, 0x13, 0x05, 0x3F]}; + const IID GUID_TARGET_DEVICE_REMOVE_CANCELLED = {0xCB3A4007, 0x46F0, 0x11D0, [0xB0, 0x8F, 0x00, 0x60, 0x97, 0x13, 0x05, 0x3F]}; + const IID GUID_TARGET_DEVICE_REMOVE_COMPLETE = {0xCB3A4008, 0x46F0, 0x11D0, [0xB0, 0x8F, 0x00, 0x60, 0x97, 0x13, 0x05, 0x3F]}; + const IID GUID_TempoParam = {0xD2AC28A5, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_TimeSignature = {0xD2AC28A4, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_TRANSLATOR_INTERFACE_STANDARD = {0x6C154A92, 0xAACF, 0x11D0, [0x8D, 0x2A, 0x00, 0xA0, 0xC9, 0x06, 0xB2, 0x44]}; + const IID GUID_Triangle = {0x13541C24, 0x8E33, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID GUID_TRISTATE = {0x6650430A, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_Unknown = {0xA36D02F3, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_Unload = {0xD2AC28A8, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID GUID_UserModeDriverInfo = {0xF0B0E8E2, 0x5F97, 0x11D1, [0x8C, 0xD0, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8]}; + const IID GUID_UserModeDriverPassword = {0x97F861B6, 0x60A1, 0x11D1, [0x8C, 0xD0, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8]}; + const IID GUID_VideoPortCallbacks = {0xEFD60CC1, 0x49E7, 0x11D0, [0x88, 0x9D, 0x00, 0xAA, 0x00, 0xBB, 0xB7, 0x6A]}; + const IID GUID_VideoPortCaps = {0xEFD60CC3, 0x49E7, 0x11D0, [0x88, 0x9D, 0x00, 0xAA, 0x00, 0xBB, 0xB7, 0x6A]}; + const IID GUID_XAxis = {0xA36D02E0, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_XPOS = {0x66504306, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_XPOSPIXEL = {0x66504302, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_XSIZE = {0x66504308, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_XSIZEPIXEL = {0x66504304, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_YAxis = {0xA36D02E1, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_YPOS = {0x66504307, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_YPOSPIXEL = {0x66504303, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_YSIZE = {0x66504309, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_YSIZEPIXEL = {0x66504305, 0xBE0F, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID GUID_ZAxis = {0xA36D02E2, 0xC9F3, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID GUID_ZPixelFormats = {0x93869880, 0x36CF, 0x11D1, [0x9B, 0x1B, 0x00, 0xAA, 0x00, 0xBB, 0xB8, 0xAE]}; + const IID IID_AsyncIAdviseSink = {0x00000150, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_AsyncIAdviseSink2 = {0x00000151, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_AsyncIBackgroundCopyCallback = {0xCA29D251, 0xB4BB, 0x4679, [0xA3, 0xD9, 0xAE, 0x80, 0x06, 0x11, 0x9D, 0x54]}; + const IID IID_AsyncIClusCfgBaseCluster = {0xA8A5C614, 0x2518, 0x47F5, [0x96, 0xCA, 0xCA, 0xFA, 0x7F, 0xFB, 0xAF, 0x68]}; + const IID IID_AsyncIClusCfgCallback = {0xEBCE8945, 0xAC69, 0x4B3A, [0x86, 0x5D, 0xE2, 0xD4, 0xEB, 0x33, 0xE4, 0x1B]}; + const IID IID_AsyncIClusCfgClusterInfo = {0x8BDBA247, 0x04F5, 0x4114, [0x83, 0x7E, 0xB2, 0x63, 0x41, 0x2A, 0x4B, 0x64]}; + const IID IID_AsyncIClusCfgCredentials = {0x54AA9406, 0xA409, 0x4B49, [0xB3, 0x14, 0x5F, 0x0A, 0x0C, 0xE4, 0xC8, 0x8F]}; + const IID IID_AsyncIClusCfgEvictCleanup = {0x6FE3E362, 0xD373, 0x4C5F, [0xA0, 0xAF, 0x1D, 0xFE, 0x84, 0x93, 0xC6, 0x55]}; + const IID IID_AsyncIClusCfgInitialize = {0x2A0EB82E, 0xF878, 0x492A, [0x95, 0x1E, 0xAE, 0x00, 0x09, 0x18, 0xC4, 0xA6]}; + const IID IID_AsyncIClusCfgIPAddressInfo = {0xAAEAF0A5, 0xE310, 0x4604, [0xA5, 0x5E, 0x2F, 0x9D, 0xDC, 0x41, 0x57, 0xA9]}; + const IID IID_AsyncIClusCfgManagedResourceInfo = {0x73616028, 0x1243, 0x4749, [0xAD, 0x84, 0x0B, 0x5E, 0xB3, 0x58, 0xFF, 0xA0]}; + const IID IID_AsyncIClusCfgMemberSetChangeListe = {0x2B645350, 0x2643, 0x4ABC, [0xA4, 0xE5, 0x82, 0x4D, 0x88, 0x1B, 0x75, 0x82]}; + const IID IID_AsyncIClusCfgNetworkInfo = {0xED71FD2D, 0xAD02, 0x4DFC, [0xB3, 0x76, 0x5F, 0xFA, 0x5F, 0x5A, 0x7C, 0x2C]}; + const IID IID_AsyncIClusCfgNodeInfo = {0x4F3BB40B, 0xDF27, 0x40A0, [0xB3, 0x1A, 0xBA, 0x18, 0x32, 0x4C, 0xEB, 0x9D]}; + const IID IID_AsyncIClusCfgPartitionInfo = {0xEC1EBD9F, 0x5866, 0x4846, [0x89, 0x52, 0xEC, 0x36, 0xC3, 0x96, 0x1E, 0xEF]}; + const IID IID_AsyncIClusCfgResourceTypeCreate = {0x3AFCE3B9, 0x5F3E, 0x4DDF, [0xA8, 0xF4, 0x4B, 0x4F, 0xCB, 0xF2, 0x8F, 0x8F]}; + const IID IID_AsyncIClusCfgResourceTypeInfo = {0xC649A282, 0xC847, 0x4F5C, [0x98, 0x41, 0xD2, 0xF7, 0x3B, 0x5A, 0xA7, 0x1D]}; + const IID IID_AsyncIClusCfgServer = {0x2A1640AA, 0x4561, 0x4A08, [0xB5, 0xD9, 0x0A, 0xA3, 0x8C, 0x6B, 0xE6, 0x28]}; + const IID IID_AsyncIClusCfgStartupListener = {0xD282CAF0, 0x2EDE, 0x4AB9, [0xA5, 0xD5, 0xF7, 0xBD, 0xE3, 0xD2, 0x3F, 0x10]}; + const IID IID_AsyncIClusCfgStartupNotify = {0xC2B0D06A, 0x6353, 0x4EE1, [0xB2, 0x53, 0x6B, 0x0D, 0x75, 0xDB, 0x2C, 0xD3]}; + const IID IID_AsyncIEnumClusCfgIPAddresses = {0xBD5F35BA, 0x0BC0, 0x455F, [0x92, 0x6D, 0xC3, 0xD3, 0x56, 0x41, 0x94, 0x87]}; + const IID IID_AsyncIEnumClusCfgManagedResource = {0xB138483F, 0x9695, 0x4FA6, [0xA9, 0x8F, 0x0D, 0xE2, 0xFB, 0x35, 0x54, 0x49]}; + const IID IID_AsyncIEnumClusCfgNetworks = {0xF56B9B0D, 0xE7B8, 0x49EC, [0xA8, 0x43, 0x54, 0x75, 0x07, 0x6B, 0x94, 0x7D]}; + const IID IID_AsyncIEnumClusCfgPartitions = {0x4440BB6A, 0xB0AC, 0x479D, [0xB5, 0x34, 0x72, 0x65, 0xA3, 0x1D, 0x6C, 0x56]}; + const IID IID_AsyncIMultiQI = {0x000E0020, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_AsyncIPipeByte = {0xDB2F3ACB, 0x2F86, 0x11D1, [0x8E, 0x04, 0x00, 0xC0, 0x4F, 0xB9, 0x98, 0x9A]}; + const IID IID_AsyncIPipeDouble = {0xDB2F3ACF, 0x2F86, 0x11D1, [0x8E, 0x04, 0x00, 0xC0, 0x4F, 0xB9, 0x98, 0x9A]}; + const IID IID_AsyncIPipeLong = {0xDB2F3ACD, 0x2F86, 0x11D1, [0x8E, 0x04, 0x00, 0xC0, 0x4F, 0xB9, 0x98, 0x9A]}; + const IID IID_AsyncIUnknown = {0x000E0000, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_DFConstraint = {0x4A3DF050, 0x23BD, 0x11D2, [0x93, 0x9F, 0x00, 0xA0, 0xC9, 0x1E, 0xED, 0xBA]}; + const IID IID_DIEnumWbemClassObject = {0xCB7CA037, 0xF729, 0x11D0, [0x9E, 0x4D, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID IID_DIWbemCallResult = {0xCB7CA039, 0xF729, 0x11D0, [0x9E, 0x4D, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID IID_DIWbemClassObject = {0xCB7CA033, 0xF729, 0x11D0, [0x9E, 0x4D, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID IID_DIWbemContext = {0xCB7CA038, 0xF729, 0x11D0, [0x9E, 0x4D, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID IID_DIWbemLocator = {0xCB7CA035, 0xF729, 0x11D0, [0x9E, 0x4D, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID IID_DIWbemObjectSink = {0xCB7CA036, 0xF729, 0x11D0, [0x9E, 0x4D, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID IID_DIWbemQualifierSet = {0xCB7CA034, 0xF729, 0x11D0, [0x9E, 0x4D, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID IID_DIWbemServices = {0xCB7CA03A, 0xF729, 0x11D0, [0x9E, 0x4D, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID IID_Folder = {0xBBCBDE60, 0xC3FF, 0x11CE, [0x83, 0x50, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_Folder2 = {0xF0D2D8EF, 0x3890, 0x11D2, [0xBF, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x36, 0x61]}; + const IID IID_Folder3 = {0xA7AE5F64, 0xC4D7, 0x4D7F, [0x93, 0x07, 0x4D, 0x24, 0xEE, 0x54, 0xB8, 0x41]}; + const IID IID_FolderItem = {0xFAC32C80, 0xCBE4, 0x11CE, [0x83, 0x50, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_FolderItem2 = {0xEDC817AA, 0x92B8, 0x11D1, [0xB0, 0x75, 0x00, 0xC0, 0x4F, 0xC3, 0x3A, 0xA5]}; + const IID IID_FolderItems = {0x744129E0, 0xCBE5, 0x11CE, [0x83, 0x50, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_FolderItems2 = {0xC94F0AD0, 0xF363, 0x11D2, [0xA3, 0x27, 0x00, 0xC0, 0x4F, 0x8E, 0xEC, 0x7F]}; + const IID IID_FolderItems3 = {0xEAA7C309, 0xBBEC, 0x49D5, [0x82, 0x1D, 0x64, 0xD9, 0x66, 0xCB, 0x66, 0x7F]}; + const IID IID_FolderItemVerb = {0x08EC3E00, 0x50B0, 0x11CF, [0x96, 0x0C, 0x00, 0x80, 0xC7, 0xF4, 0xEE, 0x85]}; + const IID IID_FolderItemVerbs = {0x1F8352C0, 0x50B0, 0x11CF, [0x96, 0x0C, 0x00, 0x80, 0xC7, 0xF4, 0xEE, 0x85]}; + const IID IID_IAccessControl = {0xEEDD23E0, 0x8410, 0x11CE, [0xA1, 0xC3, 0x08, 0x00, 0x2B, 0x2B, 0x8D, 0x8F]}; + const IID IID_IAccessible = {0x618736E0, 0x3C3D, 0x11CF, [0x81, 0x0C, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71]}; + const IID IID_IAccessibleHandler = {0x03022430, 0xABC4, 0x11D0, [0xBD, 0xE2, 0x00, 0xAA, 0x00, 0x1A, 0x19, 0x53]}; + const IID IID_IAccessor = {0x0C733A8C, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IAccIdentity = {0x7852B78D, 0x1CFD, 0x41C1, [0xA6, 0x15, 0x9C, 0x0C, 0x85, 0x96, 0x0B, 0x5F]}; + const IID IID_IAccountDiscovery = {0xFA202BBC, 0x6ABE, 0x4C17, [0xB1, 0x84, 0x57, 0x0B, 0x6C, 0xF2, 0x56, 0xA6]}; + const IID IID_IAccPropServer = {0x76C0DBBB, 0x15E0, 0x4E7B, [0xB6, 0x1B, 0x20, 0xEE, 0xEA, 0x20, 0x01, 0xE0]}; + const IID IID_IAccPropServices = {0x6E26E776, 0x04F0, 0x495D, [0x80, 0xE4, 0x33, 0x30, 0x35, 0x2E, 0x31, 0x69]}; + const IID IID_IACList = {0x77A130B0, 0x94FD, 0x11D0, [0xA5, 0x44, 0x00, 0xC0, 0x4F, 0xD7, 0xD0, 0x62]}; + const IID IID_IACList2 = {0x470141A0, 0x5186, 0x11D2, [0xBB, 0xB6, 0x00, 0x60, 0x97, 0x7B, 0x46, 0x4C]}; + const IID IID_IActionProgress = {0x49FF1173, 0xEADC, 0x446D, [0x92, 0x85, 0x15, 0x64, 0x53, 0xA6, 0x43, 0x1C]}; + const IID IID_IActionProgressDialog = {0x49FF1172, 0xEADC, 0x446D, [0x92, 0x85, 0x15, 0x64, 0x53, 0xA6, 0x43, 0x1C]}; + const IID IID_IActiveDesktop = {0xF490EB00, 0x1240, 0x11D1, [0x98, 0x88, 0x00, 0x60, 0x97, 0xDE, 0xAC, 0xF9]}; + const IID IID_IActiveIME = {0x6FE20962, 0xD077, 0x11D0, [0x8F, 0xE7, 0x00, 0xAA, 0x00, 0x6B, 0xCC, 0x59]}; + const IID IID_IActiveIME2 = {0xE1C4BF0E, 0x2D53, 0x11D2, [0x93, 0xE1, 0x00, 0x60, 0xB0, 0x67, 0xB8, 0x6E]}; + const IID IID_IActiveIMMApp = {0x08C0E040, 0x62D1, 0x11D1, [0x93, 0x26, 0x00, 0x60, 0xB0, 0x67, 0xB8, 0x6E]}; + const IID IID_IActiveIMMIME = {0x08C03411, 0xF96B, 0x11D0, [0xA4, 0x75, 0x00, 0xAA, 0x00, 0x6B, 0xCC, 0x59]}; + const IID IID_IActiveIMMMessagePumpOwner = {0xB5CF2CFA, 0x8AEB, 0x11D1, [0x93, 0x64, 0x00, 0x60, 0xB0, 0x67, 0xB8, 0x6E]}; + const IID IID_IActiveIMMRegistrar = {0xB3458082, 0xBD00, 0x11D1, [0x93, 0x9B, 0x00, 0x60, 0xB0, 0x67, 0xB8, 0x6E]}; + const IID IID_IActiveScript = {0xBB1A2AE1, 0xA4F9, 0x11CF, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID IID_IActiveScriptAuthor = {0x9C109DA0, 0x7006, 0x11D1, [0xB3, 0x6C, 0x00, 0xA0, 0xC9, 0x11, 0xE8, 0xB2]}; + const IID IID_IActiveScriptAuthorProcedure = {0x7E2D4B70, 0xBD9A, 0x11D0, [0x93, 0x36, 0x00, 0xA0, 0xC9, 0x0D, 0xCA, 0xA9]}; + const IID IID_IActiveScriptDebug = {0x51973C10, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IActiveScriptDebug32 = {0x51973C10, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IActiveScriptDebug64 = {0xBC437E23, 0xF5B8, 0x47F4, [0xBB, 0x79, 0x7D, 0x1C, 0xE5, 0x48, 0x3B, 0x86]}; + const IID IID_IActiveScriptEncode = {0xBB1A2AE3, 0xA4F9, 0x11CF, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID IID_IActiveScriptError = {0xEAE1BA61, 0xA4ED, 0x11CF, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID IID_IActiveScriptError64 = {0xB21FB2A1, 0x5B8F, 0x4963, [0x8C, 0x21, 0x21, 0x45, 0x0F, 0x84, 0xED, 0x7F]}; + const IID IID_IActiveScriptErrorDebug = {0x51973C12, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IActiveScriptGarbageCollector = {0x6AA2C4A0, 0x2B53, 0x11D4, [0xA2, 0xA0, 0x00, 0x10, 0x4B, 0xD3, 0x50, 0x90]}; + const IID IID_IActiveScriptHostEncode = {0xBEE9B76E, 0xCFE3, 0x11D1, [0xB7, 0x47, 0x00, 0xC0, 0x4F, 0xC2, 0xB0, 0x85]}; + const IID IID_IActiveScriptParse = {0xBB1A2AE2, 0xA4F9, 0x11CF, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID IID_IActiveScriptParse32 = {0xBB1A2AE2, 0xA4F9, 0x11CF, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID IID_IActiveScriptParse64 = {0xC7EF7658, 0xE1EE, 0x480E, [0x97, 0xEA, 0xD5, 0x2C, 0xB4, 0xD7, 0x6D, 0x17]}; + const IID IID_IActiveScriptParseProcedure = {0xAA5B6A80, 0xB834, 0x11D0, [0x93, 0x2F, 0x00, 0xA0, 0xC9, 0x0D, 0xCA, 0xA9]}; + const IID IID_IActiveScriptParseProcedure2_32 = {0x71EE5B20, 0xFB04, 0x11D1, [0xB3, 0xA8, 0x00, 0xA0, 0xC9, 0x11, 0xE8, 0xB2]}; + const IID IID_IActiveScriptParseProcedure2_64 = {0xFE7C4271, 0x210C, 0x448D, [0x9F, 0x54, 0x76, 0xDA, 0xB7, 0x04, 0x7B, 0x28]}; + const IID IID_IActiveScriptParseProcedure32 = {0xAA5B6A80, 0xB834, 0x11D0, [0x93, 0x2F, 0x00, 0xA0, 0xC9, 0x0D, 0xCA, 0xA9]}; + const IID IID_IActiveScriptParseProcedure64 = {0xC64713B6, 0xE029, 0x4CC5, [0x92, 0x00, 0x43, 0x8B, 0x72, 0x89, 0x0B, 0x6A]}; + const IID IID_IActiveScriptParseProcedureOld = {0x1CFF0050, 0x6FDD, 0x11D0, [0x93, 0x28, 0x00, 0xA0, 0xC9, 0x0D, 0xCA, 0xA9]}; + const IID IID_IActiveScriptParseProcedureOld32 = {0x1CFF0050, 0x6FDD, 0x11D0, [0x93, 0x28, 0x00, 0xA0, 0xC9, 0x0D, 0xCA, 0xA9]}; + const IID IID_IActiveScriptParseProcedureOld64 = {0x21F57128, 0x08C9, 0x4638, [0xBA, 0x12, 0x22, 0xD1, 0x5D, 0x88, 0xDC, 0x5C]}; + const IID IID_IActiveScriptProperty = {0x4954E0D0, 0xFBC7, 0x11D1, [0x84, 0x10, 0x00, 0x60, 0x08, 0xC3, 0xFB, 0xFC]}; + const IID IID_IActiveScriptSIPInfo = {0x764651D0, 0x38DE, 0x11D4, [0xA2, 0xA3, 0x00, 0x10, 0x4B, 0xD3, 0x50, 0x90]}; + const IID IID_IActiveScriptSite = {0xDB01A1E3, 0xA42B, 0x11CF, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID IID_IActiveScriptSiteDebug32 = {0x51973C11, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IActiveScriptSiteDebug64 = {0xD6B96B0A, 0x7463, 0x402C, [0x92, 0xAC, 0x89, 0x98, 0x42, 0x26, 0x94, 0x2F]}; + const IID IID_IActiveScriptSiteInterruptPoll = {0x539698A0, 0xCDCA, 0x11CF, [0xA5, 0xEB, 0x00, 0xAA, 0x00, 0x47, 0xA0, 0x63]}; + const IID IID_IActiveScriptSiteWindow = {0xD10F6761, 0x83E9, 0x11CF, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID IID_IActiveScriptStats = {0xB8DA6310, 0xE19B, 0x11D0, [0x93, 0x3C, 0x00, 0xA0, 0xC9, 0x0D, 0xCA, 0xA9]}; + const IID IID_IActiveXSafetyProvider = {0x69FF5101, 0xFC63, 0x11D0, [0x97, 0xEB, 0x00, 0xAA, 0x00, 0x61, 0x53, 0x33]}; + const IID IID_IAdapterInfo = {0x480BF94A, 0x09FD, 0x4F8A, [0xA3, 0xE0, 0xB0, 0x70, 0x02, 0x82, 0xD8, 0x4D]}; + const IID IID_IAdapterNotificationSink = {0x44AB2DC3, 0x23B2, 0x47DE, [0x82, 0x28, 0x2E, 0x1C, 0xCE, 0xEB, 0x99, 0x11]}; + const IID IID_IAddEvents = {0xD710A6AE, 0x3371, 0x11D1, [0xBE, 0x5B, 0x00, 0xC0, 0x4F, 0xC9, 0xE2, 0xBB]}; + const IID IID_IAddressBarParser = {0xC9D81948, 0x443A, 0x40C7, [0x94, 0x5C, 0x5E, 0x17, 0x1B, 0x8C, 0x66, 0xB4]}; + const IID IID_IAddrExclusionControl = {0x00000148, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IAddrTrackingControl = {0x00000147, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IADs = {0xFD8256D0, 0xFD15, 0x11CE, [0xAB, 0xC4, 0x02, 0x60, 0x8C, 0x9E, 0x75, 0x53]}; + const IID IID_IADsAccessControlEntry = {0xB4F3A14C, 0x9BDD, 0x11D0, [0x85, 0x2C, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsAccessControlList = {0xB7EE91CC, 0x9BDD, 0x11D0, [0x85, 0x2C, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsAcePrivate = {0xFD145DF2, 0xFD96, 0x4135, [0x9B, 0x22, 0x68, 0xFF, 0x0F, 0x6B, 0xF5, 0xBB]}; + const IID IID_IADsAcl = {0x8452D3AB, 0x0869, 0x11D1, [0xA3, 0x77, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsADSystemInfo = {0x5BB11929, 0xAFD1, 0x11D2, [0x9C, 0xB9, 0x00, 0x00, 0xF8, 0x7A, 0x36, 0x9E]}; + const IID IID_IADsBackLink = {0xFD1302BD, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsCaseIgnoreList = {0x7B66B533, 0x4680, 0x11D1, [0xA3, 0xB4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsClass = {0xC8F93DD0, 0x4AE0, 0x11CF, [0x9E, 0x73, 0x00, 0xAA, 0x00, 0x4A, 0x56, 0x91]}; + const IID IID_IADsCollection = {0x72B945E0, 0x253B, 0x11CF, [0xA9, 0x88, 0x00, 0xAA, 0x00, 0x6B, 0xC1, 0x49]}; + const IID IID_IADsComputer = {0xEFE3CC70, 0x1D9F, 0x11CF, [0xB1, 0xF3, 0x02, 0x60, 0x8C, 0x9E, 0x75, 0x53]}; + const IID IID_IADsComputerOperations = {0xEF497680, 0x1D9F, 0x11CF, [0xB1, 0xF3, 0x02, 0x60, 0x8C, 0x9E, 0x75, 0x53]}; + const IID IID_IADsContainer = {0x001677D0, 0xFD16, 0x11CE, [0xAB, 0xC4, 0x02, 0x60, 0x8C, 0x9E, 0x75, 0x53]}; + const IID IID_IADsDeleteOps = {0xB2BD0902, 0x8878, 0x11D1, [0x8C, 0x21, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsDNWithBinary = {0x7E99C0A2, 0xF935, 0x11D2, [0xBA, 0x96, 0x00, 0xC0, 0x4F, 0xB6, 0xD0, 0xD1]}; + const IID IID_IADsDNWithString = {0x370DF02E, 0xF934, 0x11D2, [0xBA, 0x96, 0x00, 0xC0, 0x4F, 0xB6, 0xD0, 0xD1]}; + const IID IID_IADsDomain = {0x00E4C220, 0xFD16, 0x11CE, [0xAB, 0xC4, 0x02, 0x60, 0x8C, 0x9E, 0x75, 0x53]}; + const IID IID_IADsEmail = {0x97AF011A, 0x478E, 0x11D1, [0xA3, 0xB4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsExtension = {0x3D35553C, 0xD2B0, 0x11D1, [0xB1, 0x7B, 0x00, 0x00, 0xF8, 0x75, 0x93, 0xA0]}; + const IID IID_IADsFaxNumber = {0xA910DEA9, 0x4680, 0x11D1, [0xA3, 0xB4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsFileService = {0xA89D1900, 0x31CA, 0x11CF, [0xA9, 0x8A, 0x00, 0xAA, 0x00, 0x6B, 0xC1, 0x49]}; + const IID IID_IADsFileServiceOperations = {0xA02DED10, 0x31CA, 0x11CF, [0xA9, 0x8A, 0x00, 0xAA, 0x00, 0x6B, 0xC1, 0x49]}; + const IID IID_IADsFileShare = {0xEB6DCAF0, 0x4B83, 0x11CF, [0xA9, 0x95, 0x00, 0xAA, 0x00, 0x6B, 0xC1, 0x49]}; + const IID IID_IADsGroup = {0x27636B00, 0x410F, 0x11CF, [0xB1, 0xFF, 0x02, 0x60, 0x8C, 0x9E, 0x75, 0x53]}; + const IID IID_IADsHold = {0xB3EB3B37, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsLargeInteger = {0x9068270B, 0x0939, 0x11D1, [0x8B, 0xE1, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsLocality = {0xA05E03A2, 0xEFFE, 0x11CF, [0x8A, 0xBC, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsMembers = {0x451A0030, 0x72EC, 0x11CF, [0xB0, 0x3B, 0x00, 0xAA, 0x00, 0x6E, 0x09, 0x75]}; + const IID IID_IADsNamespaces = {0x28B96BA0, 0xB330, 0x11CF, [0xA9, 0xAD, 0x00, 0xAA, 0x00, 0x6B, 0xC1, 0x49]}; + const IID IID_IADsNameTranslate = {0xB1B272A3, 0x3625, 0x11D1, [0xA3, 0xA4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsNetAddress = {0xB21A50A9, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsO = {0xA1CD2DC6, 0xEFFE, 0x11CF, [0x8A, 0xBC, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsObjectOptions = {0x46F14FDA, 0x232B, 0x11D1, [0xA8, 0x08, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0xA8]}; + const IID IID_IADsObjOptPrivate = {0x81CBB829, 0x1867, 0x11D2, [0x92, 0x20, 0x00, 0xC0, 0x4F, 0xB6, 0xD0, 0xD1]}; + const IID IID_IADsOctetList = {0x7B28B80F, 0x4680, 0x11D1, [0xA3, 0xB4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsOpenDSObject = {0xDDF2891E, 0x0F9C, 0x11D0, [0x8A, 0xD4, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsOU = {0xA2F733B8, 0xEFFE, 0x11CF, [0x8A, 0xBC, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsPath = {0xB287FCD5, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsPathname = {0xD592AED4, 0xF420, 0x11D0, [0xA3, 0x6E, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsPathnameProvider = {0xAACD1D30, 0x8BD0, 0x11D2, [0x92, 0xA9, 0x00, 0xC0, 0x4F, 0x79, 0xF8, 0x34]}; + const IID IID_IADsPostalAddress = {0x7ADECF29, 0x4680, 0x11D1, [0xA3, 0xB4, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsPrintJob = {0x32FB6780, 0x1ED0, 0x11CF, [0xA9, 0x88, 0x00, 0xAA, 0x00, 0x6B, 0xC1, 0x49]}; + const IID IID_IADsPrintJobOperations = {0x9A52DB30, 0x1ECF, 0x11CF, [0xA9, 0x88, 0x00, 0xAA, 0x00, 0x6B, 0xC1, 0x49]}; + const IID IID_IADsPrintQueue = {0xB15160D0, 0x1226, 0x11CF, [0xA9, 0x85, 0x00, 0xAA, 0x00, 0x6B, 0xC1, 0x49]}; + const IID IID_IADsPrintQueueOperations = {0x124BE5C0, 0x156E, 0x11CF, [0xA9, 0x86, 0x00, 0xAA, 0x00, 0x6B, 0xC1, 0x49]}; + const IID IID_IADsProperty = {0xC8F93DD3, 0x4AE0, 0x11CF, [0x9E, 0x73, 0x00, 0xAA, 0x00, 0x4A, 0x56, 0x91]}; + const IID IID_IADsPropertyEntry = {0x05792C8E, 0x941F, 0x11D0, [0x85, 0x29, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsPropertyList = {0xC6F602B6, 0x8F69, 0x11D0, [0x85, 0x28, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsPropertyValue = {0x79FA9AD0, 0xA97C, 0x11D0, [0x85, 0x34, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsPropertyValue2 = {0x306E831C, 0x5BC7, 0x11D1, [0xA3, 0xB8, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsReplicaPointer = {0xF60FB803, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsResource = {0x34A05B20, 0x4AAB, 0x11CF, [0xAE, 0x2C, 0x00, 0xAA, 0x00, 0x6E, 0xBF, 0xB9]}; + const IID IID_IADsSearch = {0xC69F7780, 0x4008, 0x11D0, [0xB9, 0x4C, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0xA8]}; + const IID IID_IADsSecurityDescriptor = {0xB8C787CA, 0x9BDD, 0x11D0, [0x85, 0x2C, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsSecurityUtility = {0xA63251B2, 0x5F21, 0x474B, [0xAB, 0x52, 0x4A, 0x8E, 0xFA, 0xD1, 0x08, 0x95]}; + const IID IID_IADsService = {0x68AF66E0, 0x31CA, 0x11CF, [0xA9, 0x8A, 0x00, 0xAA, 0x00, 0x6B, 0xC1, 0x49]}; + const IID IID_IADsServiceOperations = {0x5D7B33F0, 0x31CA, 0x11CF, [0xA9, 0x8A, 0x00, 0xAA, 0x00, 0x6B, 0xC1, 0x49]}; + const IID IID_IADsSession = {0x398B7DA0, 0x4AAB, 0x11CF, [0xAE, 0x2C, 0x00, 0xAA, 0x00, 0x6E, 0xBF, 0xB9]}; + const IID IID_IADsSyntax = {0xC8F93DD2, 0x4AE0, 0x11CF, [0x9E, 0x73, 0x00, 0xAA, 0x00, 0x4A, 0x56, 0x91]}; + const IID IID_IADsTimestamp = {0xB2F5A901, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsTypedName = {0xB371A349, 0x4080, 0x11D1, [0xA3, 0xAC, 0x00, 0xC0, 0x4F, 0xB9, 0x50, 0xDC]}; + const IID IID_IADsUmiHelperPrivate = {0x4FE243F0, 0xAD89, 0x4CBC, [0x9B, 0x14, 0x48, 0x61, 0x26, 0x44, 0x6A, 0xE0]}; + const IID IID_IADsUser = {0x3E37E320, 0x17E2, 0x11CF, [0xAB, 0xC4, 0x02, 0x60, 0x8C, 0x9E, 0x75, 0x53]}; + const IID IID_IADsValue = {0x1E3EF0AA, 0xAEF5, 0x11D0, [0x85, 0x37, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IADsWinNTSystemInfo = {0x6C6D65DC, 0xAFD1, 0x11D2, [0x9C, 0xB9, 0x00, 0x00, 0xF8, 0x7A, 0x36, 0x9E]}; + const IID IID_IAdviseSink = {0x0000010F, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IAdviseSink2 = {0x00000125, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IAdviseSinkEx = {0x3AF24290, 0x0C96, 0x11CE, [0xA0, 0xCF, 0x00, 0xAA, 0x00, 0x60, 0x0A, 0xB8]}; + const IID IID_IAlertReport = {0x4E81DFE8, 0x4CA0, 0x101A, [0x82, 0x06, 0x08, 0x00, 0x2B, 0x2F, 0xC0, 0x9B]}; + const IID IID_IAlertTarget = {0x589B61C0, 0x54E6, 0x11CE, [0x94, 0xDD, 0x00, 0xAA, 0x00, 0x51, 0xE4, 0x0F]}; + const IID IID_IAlgSetup = {0xA779AF1A, 0x009A, 0x4C44, [0xB9, 0xF0, 0x8F, 0x0F, 0x4C, 0xF2, 0xAE, 0x49]}; + const IID IID_IAlterIndex = {0x0C733AA6, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IAlterTable = {0x0C733AA5, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IAnchorClick = {0x13D5413B, 0x33B9, 0x11D2, [0x95, 0xA7, 0x00, 0xC0, 0x4F, 0x8E, 0xCB, 0x02]}; + const IID IID_IAnimationComposer = {0x5459C83D, 0x322B, 0x44B3, [0x8D, 0xAA, 0x24, 0xC9, 0x47, 0xE7, 0xB2, 0x75]}; + const IID IID_IAnimationComposer2 = {0x1A4F0E79, 0x09CD, 0x47F3, [0xAF, 0xF1, 0x48, 0x3B, 0xF3, 0xA2, 0x22, 0xDC]}; + const IID IID_IAnimationComposerFactory = {0xBEEB3233, 0xF71F, 0x4683, [0x8B, 0x05, 0x9A, 0x53, 0x14, 0xC9, 0x7D, 0xBC]}; + const IID IID_IAnimationComposerSite = {0x488FCB56, 0x8FD6, 0x4CDA, [0xA0, 0x6A, 0x5B, 0xB2, 0x32, 0x93, 0x0E, 0xCA]}; + const IID IID_IAnimationComposerSiteFactory = {0xB4EA5681, 0xED72, 0x4EFE, [0xBB, 0xD7, 0x7C, 0x47, 0xD1, 0x32, 0x56, 0x96]}; + const IID IID_IAnimationComposerSiteSink = {0x8EF76C64, 0x71CD, 0x480F, [0x96, 0xFC, 0xBA, 0x26, 0x96, 0xE6, 0x59, 0xBE]}; + const IID IID_IAnimationFragment = {0x319DFD88, 0x0AC6, 0x4AB1, [0xA1, 0x9F, 0x90, 0x22, 0x3B, 0xA2, 0xDA, 0x16]}; + const IID IID_IAnimationRoot = {0x29DF6387, 0x30B4, 0x4A62, [0x89, 0x1B, 0xA9, 0xC5, 0xBE, 0x37, 0xBE, 0x88]}; + const IID IID_IApplicationDebugger = {0x51973C2A, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IApplicationDebuggerUI = {0x51973C2B, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IApplicationGateway = {0x5134842B, 0xFDCE, 0x485D, [0x93, 0xCD, 0xDE, 0x16, 0x40, 0x64, 0x3B, 0xBE]}; + const IID IID_IApplicationGatewayServices = {0x5134842A, 0xFDCE, 0x485D, [0x93, 0xCD, 0xDE, 0x16, 0x40, 0x64, 0x3B, 0xBE]}; + const IID IID_IAppPublisher = {0x07250A10, 0x9CF9, 0x11D1, [0x90, 0x76, 0x00, 0x60, 0x08, 0x05, 0x93, 0x82]}; + const IID IID_IAsyncBindCtx = {0x79EAC9D4, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IAsyncManager = {0x0000002A, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IAsyncMoniker = {0x79EAC9D3, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IAsyncOperation = {0x3D8B0590, 0xF691, 0x11D2, [0x8E, 0xA9, 0x00, 0x60, 0x97, 0xDF, 0x5B, 0xD4]}; + const IID IID_IAsyncRpcChannelBuffer = {0xA5029FB6, 0x3C34, 0x11D1, [0x9C, 0x99, 0x00, 0xC0, 0x4F, 0xB9, 0x98, 0xAA]}; + const IID IID_IAttributesRaw = {0x6BC096A8, 0x0CE6, 0x11D1, [0xBA, 0xAE, 0x00, 0xC0, 0x4F, 0xC2, 0xE2, 0x0D]}; + const IID IID_IAuditControl = {0x1DA6292F, 0xBC66, 0x11CE, [0xAA, 0xE3, 0x00, 0xAA, 0x00, 0x4C, 0x27, 0x37]}; + const IID IID_IAuthenticate = {0x79EAC9D0, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IAutoComplete = {0x00BB2762, 0x6A77, 0x11D0, [0xA5, 0x35, 0x00, 0xC0, 0x4F, 0xD7, 0xD0, 0x62]}; + const IID IID_IAutoComplete2 = {0xEAC04BC0, 0x3791, 0x11D2, [0xBB, 0x95, 0x00, 0x60, 0x97, 0x7B, 0x46, 0x4C]}; + const IID IID_IAutoCompleteDropDown = {0x3CD141F4, 0x3C6A, 0x11D2, [0xBC, 0xAA, 0x00, 0xC0, 0x4F, 0xD9, 0x29, 0xDB]}; + const IID IID_IAutoCompList = {0x00BB2760, 0x6A77, 0x11D0, [0xA5, 0x35, 0x00, 0xC0, 0x4F, 0xD7, 0xD0, 0x62]}; + const IID IID_IAutoDiscoveryProvider = {0x9DCF4A37, 0x01DE, 0x4549, [0xA9, 0xCB, 0x3A, 0xC3, 0x1E, 0xC2, 0x3C, 0x4F]}; + const IID IID_IBackgroundCopyCallback = {0x97EA99C7, 0x0186, 0x4AD4, [0x8D, 0xF9, 0xC5, 0xB4, 0xE0, 0xED, 0x6B, 0x22]}; + const IID IID_IBackgroundCopyCallback1 = {0x084F6593, 0x3800, 0x4E08, [0x9B, 0x59, 0x99, 0xFA, 0x59, 0xAD, 0xDF, 0x82]}; + const IID IID_IBackgroundCopyError = {0x19C613A0, 0xFCB8, 0x4F28, [0x81, 0xAE, 0x89, 0x7C, 0x3D, 0x07, 0x8F, 0x81]}; + const IID IID_IBackgroundCopyFile = {0x01B7BD23, 0xFB88, 0x4A77, [0x84, 0x90, 0x58, 0x91, 0xD3, 0xE4, 0x65, 0x3A]}; + const IID IID_IBackgroundCopyGroup = {0x1DED80A7, 0x53EA, 0x424F, [0x8A, 0x04, 0x17, 0xFE, 0xA9, 0xAD, 0xC4, 0xF5]}; + const IID IID_IBackgroundCopyJob = {0x37668D37, 0x507E, 0x4160, [0x93, 0x16, 0x26, 0x30, 0x6D, 0x15, 0x0B, 0x12]}; + const IID IID_IBackgroundCopyJob1 = {0x59F5553C, 0x2031, 0x4629, [0xBB, 0x18, 0x26, 0x45, 0xA6, 0x97, 0x09, 0x47]}; + const IID IID_IBackgroundCopyJob2 = {0x54B50739, 0x686F, 0x45EB, [0x9D, 0xFF, 0xD6, 0xA9, 0xA0, 0xFA, 0xA9, 0xAF]}; + const IID IID_IBackgroundCopyManager = {0x5CE34C0D, 0x0DC9, 0x4C1F, [0x89, 0x7C, 0xDA, 0xA1, 0xB7, 0x8C, 0xEE, 0x7C]}; + const IID IID_IBackgroundCopyQMgr = {0x16F41C69, 0x09F5, 0x41D2, [0x8C, 0xD8, 0x3C, 0x08, 0xC4, 0x7B, 0xC8, 0xA8]}; + const IID IID_IBidiRequestSpl = {0x9C007000, 0xFFA8, 0x44FF, [0xB2, 0xB3, 0xAE, 0x91, 0x02, 0xC7, 0x4D, 0x4C]}; + const IID IID_IBindCtx = {0x0000000E, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IBindEventHandler = {0x63CDBCB0, 0xC1B1, 0x11D0, [0x93, 0x36, 0x00, 0xA0, 0xC9, 0x0D, 0xCA, 0xA9]}; + const IID IID_IBindHost = {0xFC4801A1, 0x2BA9, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID IID_IBinding = {0x79EAC9C0, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IBindProtocol = {0x79EAC9CD, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IBindResource = {0x0C733AB1, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IBindStatusCallback = {0x79EAC9C1, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IBindStatusCallbackHolder = {0x79EAC9CC, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IBindStatusCallbackMsg = {0x79EAC9D5, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IBitsTest1 = {0x51A183DB, 0x67E0, 0x4472, [0x86, 0x02, 0x3D, 0xBC, 0x73, 0x0B, 0x7E, 0xF5]}; + const IID IID_IBlockFormats = {0x3050F830, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IBlockingLock = {0x30F3D47A, 0x6447, 0x11D1, [0x8E, 0x3C, 0x00, 0xC0, 0x4F, 0xB9, 0x38, 0x6D]}; + const IID IID_IBoundObject = {0x9BFBBC00, 0xEFF1, 0x101A, [0x84, 0xED, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IBoundObjectSite = {0x9BFBBC01, 0xEFF1, 0x101A, [0x84, 0xED, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IBriefcaseStg = {0x8BCE1FA1, 0x0921, 0x101B, [0xB1, 0xFF, 0x00, 0xDD, 0x01, 0x0C, 0xCC, 0x48]}; + const IID IID_IBurnEngine = {0x520CCA66, 0x51A5, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID IID_ICallFactory = {0x1C733A30, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICallFrame = {0xD573B4B0, 0x894E, 0x11D2, [0xB8, 0xB6, 0x00, 0xC0, 0x4F, 0xB9, 0x61, 0x8A]}; + const IID IID_ICallFrameEvents = {0xFD5E0843, 0xFC91, 0x11D0, [0x97, 0xD7, 0x00, 0xC0, 0x4F, 0xB9, 0x61, 0x8A]}; + const IID IID_ICallFrameWalker = {0x08B23919, 0x392D, 0x11D2, [0xB8, 0xA4, 0x00, 0xC0, 0x4F, 0xB9, 0x61, 0x8A]}; + const IID IID_ICallIndirect = {0xD573B4B1, 0x894E, 0x11D2, [0xB8, 0xB6, 0x00, 0xC0, 0x4F, 0xB9, 0x61, 0x8A]}; + const IID IID_ICallInterceptor = {0x60C7CA75, 0x896D, 0x11D2, [0xB8, 0xB6, 0x00, 0xC0, 0x4F, 0xB9, 0x61, 0x8A]}; + const IID IID_ICallUnmarshal = {0x5333B003, 0x2E42, 0x11D2, [0xB8, 0x9D, 0x00, 0xC0, 0x4F, 0xB9, 0x61, 0x8A]}; + const IID IID_ICancelMethodCalls = {0x00000029, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ICatalogFileInfo = {0x711C7600, 0x6B48, 0x11D1, [0xB4, 0x03, 0x00, 0xAA, 0x00, 0xB9, 0x2A, 0xF1]}; + const IID IID_ICategorizer = {0xA3B14589, 0x9174, 0x49A8, [0x89, 0xA3, 0x06, 0xA1, 0xAE, 0x2B, 0x9B, 0xA7]}; + const IID IID_ICategoryProvider = {0x9AF64809, 0x5864, 0x4C26, [0xA7, 0x20, 0xC1, 0xF7, 0x8C, 0x08, 0x6E, 0xE3]}; + const IID IID_ICatInformation = {0x0002E013, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ICatRegister = {0x0002E012, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ICDBurn = {0x3D73A659, 0xE5D0, 0x4D42, [0xAF, 0xC0, 0x51, 0x21, 0xBA, 0x42, 0x5C, 0x8D]}; + const IID IID_ICEnroll = {0x43F8F288, 0x7A20, 0x11D0, [0x8F, 0x06, 0x00, 0xC0, 0x4F, 0xC2, 0x95, 0xE1]}; + const IID IID_ICEnroll2 = {0x704CA730, 0xC90B, 0x11D1, [0x9B, 0xEC, 0x00, 0xC0, 0x4F, 0xC2, 0x95, 0xE1]}; + const IID IID_ICEnroll3 = {0xC28C2D95, 0xB7DE, 0x11D2, [0xA4, 0x21, 0x00, 0xC0, 0x4F, 0x79, 0xFE, 0x8E]}; + const IID IID_ICEnroll4 = {0xC1F1188A, 0x2EB5, 0x4A80, [0x84, 0x1B, 0x7E, 0x72, 0x9A, 0x35, 0x6D, 0x90]}; + const IID IID_IChannelHook = {0x1008C4A0, 0x7613, 0x11CF, [0x9A, 0xF1, 0x00, 0x20, 0xAF, 0x6E, 0x72, 0xF4]}; + const IID IID_IChannelMgr = {0x85BD8E82, 0x0FBA, 0x11D1, [0x90, 0xC3, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x68]}; + const IID IID_IChapteredRowset = {0x0C733A93, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICheckBox = {0x3050F685, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ICiAdmin = {0xAE67C7D8, 0x85D3, 0x11D0, [0x8C, 0x45, 0x00, 0xC0, 0x4F, 0xC2, 0xDB, 0x8D]}; + const IID IID_ICiAdminParams = {0xA82D48C6, 0x3F0F, 0x11D0, [0x8C, 0x91, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCAdviseStatus = {0xCA05734A, 0x1218, 0x11D3, [0xAE, 0x7A, 0x00, 0xC0, 0x4F, 0x72, 0xF8, 0x31]}; + const IID IID_ICiCDeferredPropRetriever = {0xC273AF70, 0x6D72, 0x11D0, [0x8D, 0x64, 0x00, 0xA0, 0xC9, 0x08, 0xDB, 0xF1]}; + const IID IID_ICiCDocName = {0x76615076, 0x3C2B, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCDocNameToWorkidTranslator = {0x25FC3F54, 0x3CB4, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCDocNameToWorkidTranslatorEx = {0x7BBA76E6, 0xA0E3, 0x11D2, [0xBC, 0x5D, 0x00, 0xC0, 0x4F, 0xA3, 0x54, 0xBA]}; + const IID IID_ICiCDocStore = {0x46625468, 0x3C32, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCDocStoreEx = {0xF98282A7, 0xFA72, 0x11D1, [0x97, 0x98, 0x00, 0xC0, 0x4F, 0xC2, 0xF4, 0x10]}; + const IID IID_ICiCDocStoreLocator = {0x97EE7C06, 0x5908, 0x11D0, [0x8C, 0x9B, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCEventLogItem = {0x44CC886A, 0x4314, 0x11D0, [0x8C, 0x91, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCFilterClient = {0xA1E0BCB6, 0x3C24, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCFilterStatus = {0xBC5F3D60, 0x8BBC, 0x11D1, [0x8F, 0x73, 0x00, 0xA0, 0xC9, 0x19, 0x17, 0xF5]}; + const IID IID_ICiCIndexNotificationStatus = {0x5FFF3840, 0x8E76, 0x11D0, [0x8D, 0x69, 0x00, 0xA0, 0xC9, 0x08, 0xDB, 0xF1]}; + const IID IID_ICiCLangRes = {0x914C2E6C, 0x43FE, 0x11D0, [0x8C, 0x91, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiControl = {0x63DEB7F4, 0x3CCB, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCOpenedDoc = {0x151EDFBE, 0x3C2F, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCPropertyStorage = {0x4C46225A, 0x3CB5, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCPropRetriever = {0x77D9B2DA, 0x4401, 0x11D0, [0x8C, 0x91, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCQueryNotification = {0x0A9E9F6C, 0x3CE2, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCQuerySession = {0xAE461FD6, 0x4E1D, 0x11D0, [0x8C, 0x94, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCResourceMonitor = {0xF700FF8E, 0x20EE, 0x11D2, [0x80, 0xF7, 0x00, 0xC0, 0x4F, 0xA3, 0x54, 0xBA]}; + const IID IID_ICiCScope = {0x1021C882, 0x3CC0, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCScopeChecker = {0x7D820C9C, 0x3CBC, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCScopeEnumerator = {0xCF8505EA, 0x3CCA, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCSecurityChecker = {0xCA130CF4, 0x3CC2, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiCUserSecurity = {0x5D01D9CE, 0x3CC2, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiDocChangeNotifySink = {0x8BFA1386, 0x3CE5, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiEnumWorkids = {0x77900150, 0xA09C, 0x11D0, [0xA8, 0x0D, 0x00, 0xA0, 0xC9, 0x06, 0x24, 0x1A]}; + const IID IID_ICiFrameworkQuery = {0xAE67C7D9, 0x85D3, 0x11D0, [0x8C, 0x45, 0x00, 0xC0, 0x4F, 0xC2, 0xDB, 0x8D]}; + const IID IID_ICiIndexNotification = {0x4F2CD6E0, 0x8E74, 0x11D0, [0x8D, 0x69, 0x00, 0xA0, 0xC9, 0x08, 0xDB, 0xF1]}; + const IID IID_ICiIndexNotificationEntry = {0x210769D0, 0x8E75, 0x11D0, [0x8D, 0x69, 0x00, 0xA0, 0xC9, 0x08, 0xDB, 0xF1]}; + const IID IID_ICiISearchCreator = {0x7DC07FA0, 0x902E, 0x11D0, [0xA8, 0x0C, 0x00, 0xA0, 0xC9, 0x06, 0x24, 0x1A]}; + const IID IID_ICiManager = {0xCF0FCF56, 0x3CCE, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiPersistIncrFile = {0x31B311E2, 0x4498, 0x11D0, [0x8C, 0x91, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_ICiQueryPropertyMapper = {0xD2333EB0, 0x756B, 0x11D0, [0x8D, 0x66, 0x00, 0xA0, 0xC9, 0x08, 0xDB, 0xF1]}; + const IID IID_ICiStartup = {0x68232CB8, 0x3CCC, 0x11D0, [0x8C, 0x90, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_IClassActivator = {0x00000140, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IClassFactory = {0x00000001, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IClassFactory2 = {0xB196B28F, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IClassFactoryEx = {0x342D1EA0, 0xAE25, 0x11D1, [0x89, 0xC5, 0x00, 0x60, 0x08, 0xC3, 0xFB, 0xFC]}; + const IID IID_IClientCaps = {0x7E8BC44D, 0xAEFF, 0x11D1, [0x89, 0xC2, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4]}; + const IID IID_IClientSecurity = {0x0000013D, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IClusCfgAsyncEvictCleanup = {0x52C80B95, 0xC1AD, 0x4240, [0x8D, 0x89, 0x72, 0xE9, 0xFA, 0x84, 0x02, 0x5E]}; + const IID IID_IClusCfgBaseCluster = {0xA8A5C613, 0x2518, 0x47F5, [0x96, 0xCA, 0xCA, 0xFA, 0x7F, 0xFB, 0xAF, 0x68]}; + const IID IID_IClusCfgCallback = {0x238DCA63, 0xE2EF, 0x4F32, [0xA2, 0x4D, 0xAC, 0xBF, 0x97, 0x5B, 0xE8, 0x42]}; + const IID IID_IClusCfgCapabilities = {0xD94AB253, 0x36C7, 0x41C1, [0xB5, 0x2E, 0x26, 0xB4, 0x51, 0x97, 0x5C, 0x8D]}; + const IID IID_IClusCfgClusterConnection = {0xCE6EF90C, 0x3602, 0x41E7, [0x95, 0xBD, 0xAA, 0xFD, 0x37, 0xA6, 0x76, 0xDF]}; + const IID IID_IClusCfgClusterInfo = {0x85B4BBC0, 0xDDC4, 0x4AE7, [0x82, 0x68, 0xF4, 0x85, 0x0B, 0xB2, 0xA6, 0xEE]}; + const IID IID_IClusCfgCredentials = {0x54AA9406, 0xA409, 0x4B49, [0xB3, 0x14, 0x5F, 0x0A, 0x0C, 0xE4, 0xC8, 0x8E]}; + const IID IID_IClusCfgEvictCleanup = {0x6FE3E361, 0xD373, 0x4C5F, [0xA0, 0xAF, 0x1D, 0xFE, 0x84, 0x93, 0xC6, 0x55]}; + const IID IID_IClusCfgGroupCfg = {0xDCB6D3D2, 0xA55F, 0x49E5, [0xA6, 0x4A, 0x0C, 0xCF, 0xEB, 0x01, 0xED, 0x3A]}; + const IID IID_IClusCfgInitialize = {0x2A0EB82D, 0xF878, 0x492A, [0x95, 0x1E, 0xAE, 0x00, 0x09, 0x18, 0xC4, 0xA6]}; + const IID IID_IClusCfgIPAddressInfo = {0xAAEAF0A5, 0xE310, 0x4604, [0xA5, 0x5E, 0x2F, 0x9D, 0xDC, 0x41, 0x57, 0xA8]}; + const IID IID_IClusCfgManagedResourceCfg = {0x60300A0F, 0x77E1, 0x440C, [0xBD, 0x94, 0x6B, 0xFB, 0x0D, 0xBF, 0xDB, 0x3A]}; + const IID IID_IClusCfgManagedResourceInfo = {0xE0324847, 0x1520, 0x41B0, [0xB9, 0x60, 0x54, 0x19, 0x8D, 0xA5, 0xF8, 0xAF]}; + const IID IID_IClusCfgMemberSetChangeListener = {0x2B64534F, 0x2643, 0x4ABC, [0xA4, 0xE5, 0x82, 0x4D, 0x88, 0x1B, 0x75, 0x82]}; + const IID IID_IClusCfgNetworkInfo = {0x19FC7580, 0x950A, 0x44A6, [0x96, 0x6E, 0x74, 0xB1, 0x4B, 0x20, 0x91, 0x8F]}; + const IID IID_IClusCfgNodeInfo = {0xE4B5FA15, 0xDD07, 0x439E, [0xA6, 0x23, 0x88, 0x23, 0x52, 0x4E, 0x3D, 0x19]}; + const IID IID_IClusCfgPartitionInfo = {0xEC1EBD9F, 0x5866, 0x4846, [0x89, 0x52, 0xEC, 0x36, 0xC3, 0x96, 0x1E, 0xEE]}; + const IID IID_IClusCfgPollingCallback = {0xC72DB1FD, 0x51A2, 0x43E6, [0xB7, 0x08, 0xD9, 0xDB, 0x7D, 0xA7, 0x96, 0x30]}; + const IID IID_IClusCfgPollingCallbackInfo = {0x2AF55DA7, 0xCB6F, 0x40DE, [0xBB, 0x11, 0x66, 0x73, 0x46, 0x4B, 0x2C, 0x54]}; + const IID IID_IClusCfgResourceCreate = {0x0647B41A, 0xC777, 0x443C, [0x94, 0x32, 0x02, 0xCC, 0xCF, 0x4F, 0xF4, 0x43]}; + const IID IID_IClusCfgResourcePostCreate = {0x72A9BF54, 0x13B6, 0x451F, [0x91, 0x0D, 0x69, 0x13, 0xEB, 0xF0, 0x25, 0xAB]}; + const IID IID_IClusCfgResourcePreCreate = {0x4240F6A1, 0x9D49, 0x427E, [0x8F, 0x3D, 0x09, 0x38, 0x4E, 0x1F, 0x59, 0xE4]}; + const IID IID_IClusCfgResourceTypeCreate = {0x3AFCE3B8, 0x5F3E, 0x4DDF, [0xA8, 0xF4, 0x4B, 0x4F, 0xCB, 0xF2, 0x8F, 0x8F]}; + const IID IID_IClusCfgResourceTypeInfo = {0xC649A281, 0xC847, 0x4F5C, [0x98, 0x41, 0xD2, 0xF7, 0x3B, 0x5A, 0xA7, 0x1D]}; + const IID IID_IClusCfgResTypeServicesInitializ = {0x6E109698, 0xDFC4, 0x4471, [0xAC, 0xE1, 0x04, 0x14, 0x93, 0x1B, 0x3B, 0xB3]}; + const IID IID_IClusCfgServer = {0x4C06EAE6, 0x990E, 0x4051, [0x8A, 0xA1, 0xAD, 0x4B, 0x4E, 0xAE, 0x9C, 0xAF]}; + const IID IID_IClusCfgSetCredentials = {0x58E6E5B9, 0x4788, 0x4D9A, [0x82, 0x55, 0x1E, 0x27, 0x4E, 0x5D, 0xCC, 0xB0]}; + const IID IID_IClusCfgStartupListener = {0xD282CAEF, 0x2EDE, 0x4AB9, [0xA5, 0xD5, 0xF7, 0xBD, 0xE3, 0xD2, 0x3F, 0x0F]}; + const IID IID_IClusCfgStartupNotify = {0xC2B0D069, 0x6353, 0x4EE1, [0xB2, 0x53, 0x6B, 0x0D, 0x75, 0xDB, 0x2C, 0xD3]}; + const IID IID_IClusCfgVerify = {0xD47BBEEC, 0x2286, 0x4514, [0xAA, 0x90, 0x7E, 0x88, 0xBD, 0x0F, 0xE5, 0x43]}; + const IID IID_IClusCfgWizard = {0x2EB57A3B, 0xDA8D, 0x4B56, [0x97, 0xCF, 0xA3, 0x19, 0x1B, 0xF8, 0xFD, 0x5B]}; + const IID IID_IClusterApplicationWizard = {0x24F97151, 0x6689, 0x11D1, [0x9A, 0xA7, 0x00, 0xC0, 0x4F, 0xB9, 0x3A, 0x80]}; + const IID IID_ICodeInstall = {0x79EAC9D1, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IColumnMapper = {0x0B63E37A, 0x9CCC, 0x11D0, [0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04]}; + const IID IID_IColumnMapperCreator = {0x0B63E37B, 0x9CCC, 0x11D0, [0xBC, 0xDB, 0x00, 0x80, 0x5F, 0xCC, 0xCE, 0x04]}; + const IID IID_IColumnProvider = {0xE8025004, 0x1C42, 0x11D2, [0xBE, 0x2C, 0x00, 0xA0, 0xC9, 0xA8, 0x3D, 0xA1]}; + const IID IID_IColumnsInfo = {0x0C733A11, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IColumnsInfo2 = {0x0C733AB8, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IColumnsRowset = {0x0C733A10, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICombobox = {0x3050F677, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ICommand = {0x0C733A63, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICommandCost = {0x0C733A4E, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICommandPersist = {0x0C733AA7, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICommandPrepare = {0x0C733A26, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICommandProperties = {0x0C733A79, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICommandStream = {0x0C733ABF, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICommandText = {0x0C733A27, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICommandTree = {0x0C733A87, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICommandValidate = {0x0C733A18, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICommandWithParameters = {0x0C733A64, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICommDlgBrowser = {0x000214F1, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ICommDlgBrowser2 = {0x10339516, 0x2894, 0x11D2, [0x90, 0x39, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x3E]}; + const IID IID_ICommonQuery = {0xAB50DEC0, 0x6F1D, 0x11D0, [0xA1, 0xC4, 0x00, 0xAA, 0x00, 0xC1, 0x6E, 0x65]}; + const IID IID_IComThreadingInfo = {0x000001CE, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IConfigurationConnection = {0xDDAD8191, 0x66C5, 0x4A30, [0xA4, 0xDF, 0xCB, 0x6C, 0x21, 0x67, 0x04, 0xCA]}; + const IID IID_IConnectionInfo = {0x15182CE3, 0x82D7, 0x473F, [0x92, 0xDE, 0x70, 0x6E, 0x2B, 0xCE, 0xA9, 0x02]}; + const IID IID_IConnectionManager = {0xC0017768, 0x1BF3, 0x4352, [0x8D, 0x6C, 0x3A, 0x8C, 0x1D, 0x0F, 0xB4, 0x77]}; + const IID IID_IConnectionPoint = {0xB196B286, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IConnectionPointContainer = {0xB196B284, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IContextCallback = {0x000001DA, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IContextMenu = {0x000214E4, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IContextMenu2 = {0x000214F4, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IContextMenu3 = {0xBCFCE0A0, 0xEC17, 0x11D0, [0x8D, 0x10, 0x00, 0xA0, 0xC9, 0x0F, 0x27, 0x19]}; + const IID IID_IContinue = {0x0000012A, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IContinueCallback = {0xB722BCCA, 0x4E68, 0x101B, [0xA2, 0xBC, 0x00, 0xAA, 0x00, 0x40, 0x47, 0x70]}; + const IID IID_IConvertType = {0x0C733A88, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICrBarn = {0x276A2EE0, 0x0B5D, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID IID_ICrBarn2 = {0xB66A7A1B, 0x8FC6, 0x448C, [0xA2, 0xEB, 0x3C, 0x55, 0x95, 0x74, 0x78, 0xA1]}; + const IID IID_ICrBlinds = {0x5AF5C340, 0x0BA9, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID IID_ICrBlinds2 = {0x7059D403, 0x599A, 0x4264, [0x81, 0x40, 0x64, 0x1E, 0xB8, 0xAE, 0x1F, 0x64]}; + const IID IID_ICrBlur = {0x9F7C7827, 0xE87A, 0x11D1, [0x81, 0xE0, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_ICreateErrorInfo = {0x22F03340, 0x547D, 0x101B, [0x8E, 0x65, 0x08, 0x00, 0x2B, 0x2B, 0xD1, 0x19]}; + const IID IID_ICreateRow = {0x0C733AB2, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ICreateTypeInfo = {0x00020405, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ICreateTypeInfo2 = {0x0002040E, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ICreateTypeLib = {0x00020406, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ICreateTypeLib2 = {0x0002040F, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ICrEmboss = {0xE4ACFB80, 0x053E, 0x11D2, [0x81, 0xEA, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_ICrEngrave = {0xE4ACFB7F, 0x053E, 0x11D2, [0x81, 0xEA, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_ICrInset = {0x05C5EE20, 0x0BA6, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID IID_ICrIris = {0x3F69F350, 0x0379, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID IID_ICrIris2 = {0xF7B06961, 0xBA8C, 0x4970, [0x91, 0x8B, 0x1C, 0x60, 0xCB, 0x9F, 0xF1, 0x80]}; + const IID IID_ICrRadialWipe = {0x424B71AE, 0x0695, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID IID_ICrSlide = {0x810E402E, 0x056B, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID IID_ICrSpiral = {0x0DE527A0, 0x0C7E, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID IID_ICrStretch = {0x6684AF00, 0x0A87, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID IID_ICrWheel = {0x3943DE80, 0x1464, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID IID_ICrZigzag = {0x4E5A64A0, 0x0C8B, 0x11D2, [0xA4, 0x84, 0x00, 0xC0, 0x4F, 0x8E, 0xFB, 0x69]}; + const IID IID_ICSSFilter = {0x3050F3EC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ICSSFilterDispatch = {0x9519152B, 0x9484, 0x4A6C, [0xB6, 0xA7, 0x4F, 0x25, 0xE9, 0x2D, 0x6C, 0x6B]}; + const IID IID_ICSSFilterSite = {0x3050F3ED, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ICurrentWorkingDirectory = {0x91956D21, 0x9276, 0x11D1, [0x92, 0x1A, 0x00, 0x60, 0x97, 0xDF, 0x5B, 0xD4]}; + const IID IID_ICursor = {0x9F6AA700, 0xD188, 0x11CD, [0xAD, 0x48, 0x00, 0xAA, 0x00, 0x3C, 0x9C, 0xB6]}; + const IID IID_ICursorFind = {0xE01D7850, 0xD188, 0x11CD, [0xAD, 0x48, 0x00, 0xAA, 0x00, 0x3C, 0x9C, 0xB6]}; + const IID IID_ICursorMove = {0xACFF0690, 0xD188, 0x11CD, [0xAD, 0x48, 0x00, 0xAA, 0x00, 0x3C, 0x9C, 0xB6]}; + const IID IID_ICursorScroll = {0xBB87E420, 0xD188, 0x11CD, [0xAD, 0x48, 0x00, 0xAA, 0x00, 0x3C, 0x9C, 0xB6]}; + const IID IID_ICursorUpdateARow = {0xD14216A0, 0xD188, 0x11CD, [0xAD, 0x48, 0x00, 0xAA, 0x00, 0x3C, 0x9C, 0xB6]}; + const IID IID_ICustomDoc = {0x3050F3F0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ICustomRatingHelper = {0xD0D9842D, 0xE211, 0x4B2C, [0x88, 0xDC, 0xBC, 0x72, 0x93, 0x42, 0xDF, 0xCB]}; + const IID IID_IDA2Array = {0x2A8F0B06, 0xBE2B, 0x11D1, [0xB2, 0x19, 0x00, 0xC0, 0x4F, 0xC2, 0xA0, 0xCA]}; + const IID IID_IDA2Behavior = {0xC46C1BF0, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDA2Event = {0x69B5BC70, 0x9B19, 0x11D0, [0x9B, 0x60, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID IID_IDA2FontStyle = {0x283807B5, 0x2C60, 0x11D0, [0xA3, 0x1D, 0x00, 0xAA, 0x00, 0xB9, 0x2C, 0x03]}; + const IID IID_IDA2Geometry = {0x4A933702, 0xE36F, 0x11D0, [0x9B, 0x99, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID IID_IDA2Image = {0x45393DF0, 0x54B9, 0x11CF, [0x92, 0xA2, 0x00, 0xAA, 0x00, 0xB8, 0xA7, 0x33]}; + const IID IID_IDA2LineStyle = {0x2AE71568, 0x4B34, 0x11D1, [0xB1, 0xE3, 0x00, 0xC0, 0x4F, 0xC2, 0xA0, 0xCA]}; + const IID IID_IDA2Statics = {0xD17506C2, 0x6B26, 0x11D0, [0x89, 0x14, 0x00, 0xC0, 0x4F, 0xC2, 0xA0, 0xCA]}; + const IID IID_IDA2View = {0x5F00F545, 0xDF18, 0x11D1, [0xAB, 0x6F, 0x00, 0xC0, 0x4F, 0xD9, 0x2B, 0x6B]}; + const IID IID_IDA2ViewerControl = {0xC46C1BEF, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDA2ViewerControlWindowed = {0xC46C1BED, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAArray = {0xFA261CF0, 0xC44E, 0x11D1, [0x9B, 0xE4, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID IID_IDABbox2 = {0xBA8B033E, 0x1E91, 0x11D1, [0x88, 0x09, 0x00, 0xC0, 0x4F, 0xC2, 0x9D, 0x46]}; + const IID IID_IDABbox3 = {0x0E41257B, 0x812D, 0x11D0, [0x9B, 0x4A, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID IID_IDABehavior = {0x5DFB2651, 0x9668, 0x11D0, [0xB1, 0x7B, 0x00, 0xC0, 0x4F, 0xC2, 0xA0, 0xCA]}; + const IID IID_IDABoolean = {0xC46C1BDA, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDABvrHook = {0x50B4791F, 0x4731, 0x11D0, [0x89, 0x12, 0x00, 0xC0, 0x4F, 0xC2, 0xA0, 0xCA]}; + const IID IID_IDACamera = {0xC46C1BCA, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAColor = {0xC46C1BDC, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDADashStyle = {0xF3E1B522, 0xD8A6, 0x11D1, [0x9B, 0xE5, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID IID_IDADrawingSurface = {0xC46C1BF4, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDADXTransformResult = {0xAF868305, 0xAB0B, 0x11D0, [0x87, 0x6A, 0x00, 0xC0, 0x4F, 0xC2, 0x9D, 0x46]}; + const IID IID_IDAEndStyle = {0xB6FFC24C, 0x7E13, 0x11D0, [0x9B, 0x47, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID IID_IDAEvent = {0xC46C1BCE, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAFontStyle = {0xC46C1BC1, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAGeometry = {0xC46C1BCC, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAImage = {0xC46C1BC4, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAImport = {0xC46C1BEE, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAImportationResult = {0xB90E5258, 0x574A, 0x11D1, [0x8E, 0x7B, 0x00, 0xC0, 0x4F, 0xC2, 0x9D, 0x46]}; + const IID IID_IDAJoinStyle = {0xA3034056, 0xEC1C, 0x11D1, [0x9B, 0xE8, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID IID_IDALineStyle = {0x69AD90EF, 0x1C20, 0x11D1, [0x88, 0x01, 0x00, 0xC0, 0x4F, 0xC2, 0x9D, 0x46]}; + const IID IID_IDAMatte = {0xC46C1BE4, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAMicrophone = {0xC46C1BD8, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAModifiableBehavior = {0xC46C1BEC, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAMontage = {0xC46C1BC8, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDANumber = {0xD17506C3, 0x6B26, 0x11D0, [0x89, 0x14, 0x00, 0xC0, 0x4F, 0xC2, 0xA0, 0xCA]}; + const IID IID_IDAPair = {0x542FB453, 0x5003, 0x11CF, [0x92, 0xA2, 0x00, 0xAA, 0x00, 0xB8, 0xA7, 0x33]}; + const IID IID_IDAPath2 = {0xC46C1BD0, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAPickableResult = {0xC46C1BDE, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAPoint2 = {0x9CDE7341, 0x3C20, 0x11D0, [0xA3, 0x30, 0x00, 0xAA, 0x00, 0xB9, 0x2C, 0x03]}; + const IID IID_IDAPoint3 = {0xC46C1BD6, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAPreferences = {0xB90E525A, 0x574A, 0x11D1, [0x8E, 0x7B, 0x00, 0xC0, 0x4F, 0xC2, 0x9D, 0x46]}; + const IID IID_IDASite = {0xB90E5259, 0x574A, 0x11D1, [0x8E, 0x7B, 0x00, 0xC0, 0x4F, 0xC2, 0x9D, 0x46]}; + const IID IID_IDASound = {0xC46C1BE6, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAStatics = {0x5DFB2650, 0x9668, 0x11D0, [0xB1, 0x7B, 0x00, 0xC0, 0x4F, 0xC2, 0xA0, 0xCA]}; + const IID IID_IDAString = {0xC46C1BD2, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDataAdviseHolder = {0x00000110, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IDataChannel = {0xAD42D12A, 0x4AD0, 0x4856, [0x91, 0x9E, 0xE8, 0x54, 0xC9, 0x1D, 0x18, 0x56]}; + const IID IID_IDataConvert = {0x0C733A8D, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDataFilter = {0x69D14C80, 0xC18E, 0x11D0, [0xA9, 0xCE, 0x00, 0x60, 0x97, 0x94, 0x23, 0x11]}; + const IID IID_IDataObject = {0x0000010E, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IDATransform2 = {0xC46C1BD4, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDATransform3 = {0xC46C1BE0, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDATuple = {0x542FB452, 0x5003, 0x11CF, [0x92, 0xA2, 0x00, 0xAA, 0x00, 0xB8, 0xA7, 0x33]}; + const IID IID_IDAUntilNotifier = {0x25B0F91C, 0xD23D, 0x11D0, [0x9B, 0x85, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID IID_IDAUserData = {0xBACD4D86, 0x4A4F, 0x11D1, [0x9B, 0xC8, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID IID_IDAVector2 = {0xC46C1BC6, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAVector3 = {0xC46C1BE2, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAView = {0xAF868304, 0xAB0B, 0x11D0, [0x87, 0x6A, 0x00, 0xC0, 0x4F, 0xC2, 0x9D, 0x46]}; + const IID IID_IDAViewerControl = {0xC46C1BDD, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAViewerControlWindowed = {0xC46C1BCD, 0x3C52, 0x11D0, [0x92, 0x00, 0x84, 0x8C, 0x1D, 0x00, 0x00, 0x00]}; + const IID IID_IDAViewSite = {0xBCBB1F75, 0xE384, 0x11D0, [0x9B, 0x99, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID IID_IDBAsynchNotify = {0x0C733A96, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDBAsynchStatus = {0x0C733A95, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDBBinderProperties = {0x0C733AB3, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDBCreateCommand = {0x0C733A1D, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDBCreateSession = {0x0C733A5D, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDBDataSourceAdmin = {0x0C733A7A, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDBInfo = {0x0C733A89, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDBInitialize = {0x0C733A8B, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDBProperties = {0x0C733A8A, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDBSchemaCommand = {0x0C733A50, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDBSchemaRowset = {0x0C733A7B, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDCInfo = {0x0C733A9C, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IDDVideoAcceleratorContainer = {0xACA12120, 0x3356, 0x11D1, [0x8F, 0xCF, 0x00, 0xC0, 0x4F, 0xC2, 0x9B, 0x4E]}; + const IID IID_IDDVideoPortContainer = {0x6C142760, 0xA733, 0x11CE, [0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60]}; + const IID IID_IDebug = {0x00000123, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IDebugApplication = {0x51973C32, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugApplication32 = {0x51973C32, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugApplication64 = {0x4DEDC754, 0x04C7, 0x4F10, [0x9E, 0x60, 0x16, 0xA3, 0x90, 0xFE, 0x6E, 0x62]}; + const IID IID_IDebugApplicationEx = {0x51973C00, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugApplicationNode = {0x51973C34, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugApplicationNodeEvents = {0x51973C35, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugApplicationThread = {0x51973C38, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugApplicationThread64 = {0x9DAC5886, 0xDBAD, 0x456D, [0x9D, 0xEE, 0x5D, 0xEC, 0x39, 0xAB, 0x3D, 0xDA]}; + const IID IID_IDebugAsyncOperation = {0x51973C1B, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugAsyncOperationCallBack = {0x51973C1C, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugCodeContext = {0x51973C13, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugCookie = {0x51973C39, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugDocument = {0x51973C21, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugDocumentContext = {0x51973C28, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugDocumentHelper32 = {0x51973C26, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugDocumentHelper64 = {0xC4C7363C, 0x20FD, 0x47F9, [0xBD, 0x82, 0x48, 0x55, 0xE0, 0x15, 0x08, 0x71]}; + const IID IID_IDebugDocumentHelperEx = {0x51973C02, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugDocumentHost = {0x51973C27, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugDocumentInfo = {0x51973C1F, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugDocumentProvider = {0x51973C20, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugDocumentText = {0x51973C22, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugDocumentTextAuthor = {0x51973C24, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugDocumentTextEvents = {0x51973C23, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugDocumentTextExternalAuthor = {0x51973C25, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugExpression = {0x51973C14, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugExpressionCallBack = {0x51973C16, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugExpressionContext = {0x51973C15, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugExtendedProperty = {0x51973C52, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugFormatter = {0x51973C05, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugHelper = {0x51973C3F, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugHelperEx = {0x51973C08, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugOut = {0xC733E4F1, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_IDebugProperty = {0x51973C50, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugPropertyEnumType_All = {0x51973C55, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugPropertyEnumType_Arguments = {0x51973C57, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugPropertyEnumType_Locals = {0x51973C56, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugPropertyEnumType_LocalsPlus = {0x51973C58, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugPropertyEnumType_Registers = {0x51973C59, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugRegister = {0xC733E4F0, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_IDebugSessionProvider = {0x51973C29, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugSessionProviderEx = {0x51973C09, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugSetValueCallback = {0x51973C06, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugStackFrame = {0x51973C17, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugStackFrameSniffer = {0x51973C18, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugStackFrameSnifferEx = {0x51973C19, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugStackFrameSnifferEx32 = {0x51973C19, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugStackFrameSnifferEx64 = {0x8CD12AF4, 0x49C1, 0x4D52, [0x8D, 0x8A, 0xC1, 0x46, 0xF4, 0x75, 0x81, 0xAA]}; + const IID IID_IDebugStream = {0x00000124, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IDebugSyncOperation = {0x51973C1A, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugThreadCall = {0x51973C36, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugThreadCall32 = {0x51973C36, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IDebugThreadCall64 = {0xCB3FA335, 0xE979, 0x42FD, [0x9F, 0xCF, 0xA7, 0x54, 0x6A, 0x0F, 0x39, 0x05]}; + const IID IID_IDelaydC = {0xBFF9C030, 0xB58F, 0x11CE, [0xB5, 0xB0, 0x00, 0xAA, 0x00, 0x6C, 0xB3, 0x7D]}; + const IID IID_IDelayedRelease = {0x000214ED, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IDelegateFolder = {0xADD8BA80, 0x002B, 0x11D0, [0x8F, 0x0F, 0x00, 0xC0, 0x4F, 0xD7, 0xD0, 0x62]}; + const IID IID_IDeskBand = {0xEB0FE172, 0x1A3A, 0x11D0, [0x89, 0xB3, 0x00, 0xA0, 0xC9, 0x0A, 0x90, 0xAC]}; + const IID IID_IDeviceRect = {0x3050F6D5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IDfReserved1 = {0x00000013, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IDfReserved2 = {0x00000014, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IDfReserved3 = {0x00000015, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IDialBranding = {0x8AECAFA9, 0x4306, 0x43CC, [0x8C, 0x5A, 0x76, 0x5F, 0x29, 0x79, 0xCC, 0x16]}; + const IID IID_IDialEngine = {0x39FD782B, 0x7905, 0x40D5, [0x91, 0x48, 0x3C, 0x9B, 0x19, 0x04, 0x23, 0xD5]}; + const IID IID_IDialEventSink = {0x2D86F4FF, 0x6E2D, 0x4488, [0xB2, 0xE9, 0x69, 0x34, 0xAF, 0xD4, 0x1B, 0xEA]}; + const IID IID_IDifferencing = {0x994F0AF0, 0x2977, 0x11CE, [0xBB, 0x80, 0x08, 0x00, 0x2B, 0x36, 0xB2, 0xB0]}; + const IID IID_IDirect3D = {0x3BBA0080, 0x2421, 0x11CF, [0xA3, 0x1A, 0x00, 0xAA, 0x00, 0xB9, 0x33, 0x56]}; + const IID IID_IDirect3D2 = {0x6AAE1EC1, 0x662A, 0x11D0, [0x88, 0x9D, 0x00, 0xAA, 0x00, 0xBB, 0xB7, 0x6A]}; + const IID IID_IDirect3D3 = {0xBB223240, 0xE72B, 0x11D0, [0xA9, 0xB4, 0x00, 0xAA, 0x00, 0xC0, 0x99, 0x3E]}; + const IID IID_IDirect3D7 = {0xF5049E77, 0x4861, 0x11D2, [0xA4, 0x07, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8]}; + const IID IID_IDirect3DDevice = {0x64108800, 0x957D, 0x11D0, [0x89, 0xAB, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29]}; + const IID IID_IDirect3DDevice2 = {0x93281501, 0x8CF8, 0x11D0, [0x89, 0xAB, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29]}; + const IID IID_IDirect3DDevice3 = {0xB0AB3B60, 0x33D7, 0x11D1, [0xA9, 0x81, 0x00, 0xC0, 0x4F, 0xD7, 0xB1, 0x74]}; + const IID IID_IDirect3DDevice7 = {0xF5049E79, 0x4861, 0x11D2, [0xA4, 0x07, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8]}; + const IID IID_IDirect3DExecuteBuffer = {0x4417C145, 0x33AD, 0x11CF, [0x81, 0x6F, 0x00, 0x00, 0xC0, 0x20, 0x15, 0x6E]}; + const IID IID_IDirect3DHALDevice = {0x84E63DE0, 0x46AA, 0x11CF, [0x81, 0x6F, 0x00, 0x00, 0xC0, 0x20, 0x15, 0x6E]}; + const IID IID_IDirect3DLight = {0x4417C142, 0x33AD, 0x11CF, [0x81, 0x6F, 0x00, 0x00, 0xC0, 0x20, 0x15, 0x6E]}; + const IID IID_IDirect3DMaterial = {0x4417C144, 0x33AD, 0x11CF, [0x81, 0x6F, 0x00, 0x00, 0xC0, 0x20, 0x15, 0x6E]}; + const IID IID_IDirect3DMaterial2 = {0x93281503, 0x8CF8, 0x11D0, [0x89, 0xAB, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29]}; + const IID IID_IDirect3DMaterial3 = {0xCA9C46F4, 0xD3C5, 0x11D1, [0xB7, 0x5A, 0x00, 0x60, 0x08, 0x52, 0xB3, 0x12]}; + const IID IID_IDirect3DMMXDevice = {0x881949A1, 0xD6F3, 0x11D0, [0x89, 0xAB, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29]}; + const IID IID_IDirect3DNullDevice = {0x8767DF22, 0xBACC, 0x11D1, [0x89, 0x69, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8]}; + const IID IID_IDirect3DRampDevice = {0xF2086B20, 0x259F, 0x11CF, [0xA3, 0x1A, 0x00, 0xAA, 0x00, 0xB9, 0x33, 0x56]}; + const IID IID_IDirect3DRefDevice = {0x50936643, 0x13E9, 0x11D1, [0x89, 0xAA, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29]}; + const IID IID_IDirect3DRGBDevice = {0xA4665C60, 0x2673, 0x11CF, [0xA3, 0x1A, 0x00, 0xAA, 0x00, 0xB9, 0x33, 0x56]}; + const IID IID_IDirect3DRM = {0x2BC49361, 0x8327, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRM2 = {0x4516ECC8, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID IID_IDirect3DRM3 = {0x4516EC83, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID IID_IDirect3DRMAnimation = {0xEB16CB0D, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMAnimation2 = {0xFF6B7F77, 0xA40E, 0x11D1, [0x91, 0xF9, 0x00, 0x00, 0xF8, 0x75, 0x8E, 0x66]}; + const IID IID_IDirect3DRMAnimationArray = {0xD5F1CAE0, 0x4BD7, 0x11D1, [0xB9, 0x74, 0x00, 0x60, 0x08, 0x3E, 0x45, 0xF3]}; + const IID IID_IDirect3DRMAnimationSet = {0xEB16CB0E, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMAnimationSet2 = {0xFF6B7F79, 0xA40E, 0x11D1, [0x91, 0xF9, 0x00, 0x00, 0xF8, 0x75, 0x8E, 0x66]}; + const IID IID_IDirect3DRMClippedVisual = {0x5434E733, 0x6D66, 0x11D1, [0xBB, 0x0B, 0x00, 0x00, 0xF8, 0x75, 0x86, 0x5A]}; + const IID IID_IDirect3DRMDevice = {0xE9E19280, 0x6E05, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMDevice2 = {0x4516EC78, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID IID_IDirect3DRMDevice3 = {0x549F498B, 0xBFEB, 0x11D1, [0x8E, 0xD8, 0x00, 0xA0, 0xC9, 0x67, 0xA4, 0x82]}; + const IID IID_IDirect3DRMDeviceArray = {0xEB16CB10, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMFace = {0xEB16CB07, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMFace2 = {0x4516EC81, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID IID_IDirect3DRMFaceArray = {0xEB16CB17, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMFrame = {0xEB16CB03, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMFrame2 = {0xC3DFBD60, 0x3988, 0x11D0, [0x9E, 0xC2, 0x00, 0x00, 0xC0, 0x29, 0x1A, 0xC3]}; + const IID IID_IDirect3DRMFrame3 = {0xFF6B7F70, 0xA40E, 0x11D1, [0x91, 0xF9, 0x00, 0x00, 0xF8, 0x75, 0x8E, 0x66]}; + const IID IID_IDirect3DRMFrameArray = {0xEB16CB12, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMInterpolator = {0x242F6BC1, 0x3849, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID IID_IDirect3DRMLight = {0xEB16CB08, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMLightArray = {0xEB16CB14, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMMaterial = {0xEB16CB0B, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMMaterial2 = {0xFF6B7F75, 0xA40E, 0x11D1, [0x91, 0xF9, 0x00, 0x00, 0xF8, 0x75, 0x8E, 0x66]}; + const IID IID_IDirect3DRMMesh = {0xA3A80D01, 0x6E12, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMMeshBuilder = {0xA3A80D02, 0x6E12, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMMeshBuilder2 = {0x4516EC77, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID IID_IDirect3DRMMeshBuilder3 = {0x4516EC82, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID IID_IDirect3DRMObject = {0xEB16CB00, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMObject2 = {0x4516EC7C, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID IID_IDirect3DRMObjectArray = {0x242F6BC2, 0x3849, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID IID_IDirect3DRMPicked2Array = {0x4516EC7B, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID IID_IDirect3DRMPickedArray = {0xEB16CB16, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMProgressiveMesh = {0x4516EC79, 0x8F20, 0x11D0, [0x9B, 0x6D, 0x00, 0x00, 0xC0, 0x78, 0x1B, 0xC3]}; + const IID IID_IDirect3DRMShadow = {0xAF359780, 0x6BA3, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMShadow2 = {0x86B44E25, 0x9C82, 0x11D1, [0xBB, 0x0B, 0x00, 0xA0, 0xC9, 0x81, 0xA0, 0xA6]}; + const IID IID_IDirect3DRMTexture = {0xEB16CB09, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMTexture2 = {0x120F30C0, 0x1629, 0x11D0, [0x94, 0x1C, 0x00, 0x80, 0xC8, 0x0C, 0xFA, 0x7B]}; + const IID IID_IDirect3DRMTexture3 = {0xFF6B7F73, 0xA40E, 0x11D1, [0x91, 0xF9, 0x00, 0x00, 0xF8, 0x75, 0x8E, 0x66]}; + const IID IID_IDirect3DRMUserVisual = {0x59163DE0, 0x6D43, 0x11CF, [0xAC, 0x4A, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMViewport = {0xEB16CB02, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMViewport2 = {0x4A1B1BE6, 0xBFED, 0x11D1, [0x8E, 0xD8, 0x00, 0xA0, 0xC9, 0x67, 0xA4, 0x82]}; + const IID IID_IDirect3DRMViewportArray = {0xEB16CB11, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMVisual = {0xEB16CB04, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMVisualArray = {0xEB16CB13, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMWinDevice = {0xC5016CC0, 0xD273, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DRMWrap = {0xEB16CB0A, 0xD271, 0x11CE, [0xAC, 0x48, 0x00, 0x00, 0xC0, 0x38, 0x25, 0xA1]}; + const IID IID_IDirect3DTexture = {0x2CDCD9E0, 0x25A0, 0x11CF, [0xA3, 0x1A, 0x00, 0xAA, 0x00, 0xB9, 0x33, 0x56]}; + const IID IID_IDirect3DTexture2 = {0x93281502, 0x8CF8, 0x11D0, [0x89, 0xAB, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29]}; + const IID IID_IDirect3DTnLHalDevice = {0xF5049E78, 0x4861, 0x11D2, [0xA4, 0x07, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8]}; + const IID IID_IDirect3DVertexBuffer = {0x7A503555, 0x4A83, 0x11D1, [0xA5, 0xDB, 0x00, 0xA0, 0xC9, 0x03, 0x67, 0xF8]}; + const IID IID_IDirect3DVertexBuffer7 = {0xF5049E7D, 0x4861, 0x11D2, [0xA4, 0x07, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8]}; + const IID IID_IDirect3DViewport = {0x4417C146, 0x33AD, 0x11CF, [0x81, 0x6F, 0x00, 0x00, 0xC0, 0x20, 0x15, 0x6E]}; + const IID IID_IDirect3DViewport2 = {0x93281500, 0x8CF8, 0x11D0, [0x89, 0xAB, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x29]}; + const IID IID_IDirect3DViewport3 = {0xB0AB3B61, 0x33D7, 0x11D1, [0xA9, 0x81, 0x00, 0xC0, 0x4F, 0xD7, 0xB1, 0x74]}; + const IID IID_IDirectDraw = {0x6C14DB80, 0xA733, 0x11CE, [0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60]}; + const IID IID_IDirectDraw2 = {0xB3A6F3E0, 0x2B43, 0x11CF, [0xA2, 0xDE, 0x00, 0xAA, 0x00, 0xB9, 0x33, 0x56]}; + const IID IID_IDirectDraw4 = {0x9C59509A, 0x39BD, 0x11D1, [0x8C, 0x4A, 0x00, 0xC0, 0x4F, 0xD9, 0x30, 0xC5]}; + const IID IID_IDirectDraw7 = {0x15E65EC0, 0x3B9C, 0x11D2, [0xB9, 0x2F, 0x00, 0x60, 0x97, 0x97, 0xEA, 0x5B]}; + const IID IID_IDirectDrawClipper = {0x6C14DB85, 0xA733, 0x11CE, [0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60]}; + const IID IID_IDirectDrawColorControl = {0x4B9F0EE0, 0x0D7E, 0x11D0, [0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8]}; + const IID IID_IDirectDrawFactory2 = {0x89B2C488, 0x4AF4, 0x11D1, [0x8C, 0x4C, 0x00, 0xC0, 0x4F, 0xD9, 0x30, 0xC5]}; + const IID IID_IDirectDrawGammaControl = {0x69C11C3E, 0xB46B, 0x11D1, [0xAD, 0x7A, 0x00, 0xC0, 0x4F, 0xC2, 0x9B, 0x4E]}; + const IID IID_IDirectDrawKernel = {0x8D56C120, 0x6A08, 0x11D0, [0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8]}; + const IID IID_IDirectDrawOptSurface = {0x51191F1E, 0x4F2B, 0x11D1, [0x8C, 0xC3, 0x00, 0xA0, 0xC9, 0x06, 0x29, 0xA8]}; + const IID IID_IDirectDrawPalette = {0x6C14DB84, 0xA733, 0x11CE, [0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60]}; + const IID IID_IDirectDrawPalette2 = {0xC03C477E, 0x6519, 0x11D1, [0x8C, 0x52, 0x00, 0xC0, 0x4F, 0xD9, 0x30, 0xC5]}; + const IID IID_IDirectDrawSurface = {0x6C14DB81, 0xA733, 0x11CE, [0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60]}; + const IID IID_IDirectDrawSurface2 = {0x57805885, 0x6EEC, 0x11CF, [0x94, 0x41, 0xA8, 0x23, 0x03, 0xC1, 0x0E, 0x27]}; + const IID IID_IDirectDrawSurface3 = {0xDA044E00, 0x69B2, 0x11D0, [0xA1, 0xD5, 0x00, 0xAA, 0x00, 0xB8, 0xDF, 0xBB]}; + const IID IID_IDirectDrawSurface4 = {0x0B2B8630, 0xAD35, 0x11D0, [0x8E, 0xA6, 0x00, 0x60, 0x97, 0x97, 0xEA, 0x5B]}; + const IID IID_IDirectDrawSurface7 = {0x06675A80, 0x3B9B, 0x11D2, [0xB9, 0x2F, 0x00, 0x60, 0x97, 0x97, 0xEA, 0x5B]}; + const IID IID_IDirectDrawSurfaceKernel = {0x60755DA0, 0x6A40, 0x11D0, [0x9B, 0x06, 0x00, 0xA0, 0xC9, 0x03, 0xA3, 0xB8]}; + const IID IID_IDirectDrawVideoAccelerator = {0xC9B2D740, 0x3356, 0x11D1, [0x8F, 0xCF, 0x00, 0xC0, 0x4F, 0xC2, 0x9B, 0x4E]}; + const IID IID_IDirectDrawVideoPort = {0xB36D93E0, 0x2B43, 0x11CF, [0xA2, 0xDE, 0x00, 0xAA, 0x00, 0xB9, 0x33, 0x56]}; + const IID IID_IDirectInput2A = {0x5944E662, 0xAA8A, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IDirectInput2W = {0x5944E663, 0xAA8A, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IDirectInput7A = {0x9A4CB684, 0x236D, 0x11D3, [0x8E, 0x9D, 0x00, 0xC0, 0x4F, 0x68, 0x44, 0xAE]}; + const IID IID_IDirectInput7W = {0x9A4CB685, 0x236D, 0x11D3, [0x8E, 0x9D, 0x00, 0xC0, 0x4F, 0x68, 0x44, 0xAE]}; + const IID IID_IDirectInputA = {0x89521360, 0xAA8A, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IDirectInputDevice2A = {0x5944E682, 0xC92E, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IDirectInputDevice2W = {0x5944E683, 0xC92E, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IDirectInputDevice7A = {0x57D7C6BC, 0x2356, 0x11D3, [0x8E, 0x9D, 0x00, 0xC0, 0x4F, 0x68, 0x44, 0xAE]}; + const IID IID_IDirectInputDevice7W = {0x57D7C6BD, 0x2356, 0x11D3, [0x8E, 0x9D, 0x00, 0xC0, 0x4F, 0x68, 0x44, 0xAE]}; + const IID IID_IDirectInputDeviceA = {0x5944E680, 0xC92E, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IDirectInputDeviceW = {0x5944E681, 0xC92E, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IDirectInputEffect = {0xE7E1F7C0, 0x88D2, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID IID_IDirectInputEffectDriver = {0x02538130, 0x898F, 0x11D0, [0x9A, 0xD0, 0x00, 0xA0, 0xC9, 0xA0, 0x6E, 0x35]}; + const IID IID_IDirectInputJoyConfig = {0x1DE12AB1, 0xC9F5, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IDirectInputPIDDriver = {0xEEC6993A, 0xB3FD, 0x11D2, [0xA9, 0x16, 0x00, 0xC0, 0x4F, 0xB9, 0x86, 0x38]}; + const IID IID_IDirectInputW = {0x89521361, 0xAA8A, 0x11CF, [0xBF, 0xC7, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IDirectMusic = {0x6536115A, 0x7B2D, 0x11D2, [0xBA, 0x18, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12]}; + const IID IID_IDirectMusic2 = {0x6FC2CAE1, 0xBC78, 0x11D2, [0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6]}; + const IID IID_IDirectMusicBand = {0xD2AC28C0, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicBuffer = {0xD2AC2878, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicChordMap = {0xD2AC28BE, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicCollection = {0xD2AC287C, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicComposer = {0xD2AC28BF, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicDownload = {0xD2AC287B, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicDownloadedInstrument = {0xD2AC287E, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicGetLoader = {0x68A04844, 0xD13D, 0x11D1, [0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6]}; + const IID IID_IDirectMusicGraph = {0x2BEFC277, 0x5497, 0x11D2, [0xBC, 0xCB, 0x00, 0xA0, 0xC9, 0x22, 0xE6, 0xEB]}; + const IID IID_IDirectMusicInstrument = {0xD2AC287D, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicLoader = {0x2FFAACA2, 0x5DCA, 0x11D2, [0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6]}; + const IID IID_IDirectMusicObject = {0xD2AC28B5, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicPerformance = {0x07D43D03, 0x6523, 0x11D2, [0x87, 0x1D, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicPerformance2 = {0x6FC2CAE0, 0xBC78, 0x11D2, [0xAF, 0xA6, 0x00, 0xAA, 0x00, 0x24, 0xD8, 0xB6]}; + const IID IID_IDirectMusicPort = {0x08F2D8C9, 0x37C2, 0x11D2, [0xB9, 0xF9, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12]}; + const IID IID_IDirectMusicPortDownload = {0xD2AC287A, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicSegment = {0xF96029A2, 0x4282, 0x11D2, [0x87, 0x17, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicSegment2 = {0xD38894D1, 0xC052, 0x11D2, [0x87, 0x2F, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicSegmentState = {0xA3AFDCC7, 0xD3EE, 0x11D1, [0xBC, 0x8D, 0x00, 0xA0, 0xC9, 0x22, 0xE6, 0xEB]}; + const IID IID_IDirectMusicStyle = {0xD2AC28BD, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicThru = {0xCED153E7, 0x3606, 0x11D2, [0xB9, 0xF9, 0x00, 0x00, 0xF8, 0x75, 0xAC, 0x12]}; + const IID IID_IDirectMusicTool = {0xD2AC28BA, 0xB39B, 0x11D1, [0x87, 0x04, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectMusicTrack = {0xF96029A1, 0x4282, 0x11D2, [0x87, 0x17, 0x00, 0x60, 0x08, 0x93, 0xB1, 0xBD]}; + const IID IID_IDirectoryObject = {0xE798DE2C, 0x22E4, 0x11D0, [0x84, 0xFE, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IDirectorySchemaMgmt = {0x75DB3B9C, 0xA4D8, 0x11D0, [0xA7, 0x9C, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0xA8]}; + const IID IID_IDirectorySearch = {0x109BA8EC, 0x92F0, 0x11D0, [0xA7, 0x90, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0xA8]}; + const IID IID_IDirectPlay = {0x5454E9A0, 0xDB65, 0x11CE, [0x92, 0x1C, 0x00, 0xAA, 0x00, 0x6C, 0x49, 0x72]}; + const IID IID_IDirectPlay2 = {0x2B74F7C0, 0x9154, 0x11CF, [0xA9, 0xCD, 0x00, 0xAA, 0x00, 0x68, 0x86, 0xE3]}; + const IID IID_IDirectPlay2A = {0x9D460580, 0xA822, 0x11CF, [0x96, 0x0C, 0x00, 0x80, 0xC7, 0x53, 0x4E, 0x82]}; + const IID IID_IDirectPlay3 = {0x133EFE40, 0x32DC, 0x11D0, [0x9C, 0xFB, 0x00, 0xA0, 0xC9, 0x0A, 0x43, 0xCB]}; + const IID IID_IDirectPlay3A = {0x133EFE41, 0x32DC, 0x11D0, [0x9C, 0xFB, 0x00, 0xA0, 0xC9, 0x0A, 0x43, 0xCB]}; + const IID IID_IDirectPlay4 = {0x0AB1C530, 0x4745, 0x11D1, [0xA7, 0xA1, 0x00, 0x00, 0xF8, 0x03, 0xAB, 0xFC]}; + const IID IID_IDirectPlay4A = {0x0AB1C531, 0x4745, 0x11D1, [0xA7, 0xA1, 0x00, 0x00, 0xF8, 0x03, 0xAB, 0xFC]}; + const IID IID_IDirectPlayLobby = {0xAF465C71, 0x9588, 0x11CF, [0xA0, 0x20, 0x00, 0xAA, 0x00, 0x61, 0x57, 0xAC]}; + const IID IID_IDirectPlayLobby2 = {0x0194C220, 0xA303, 0x11D0, [0x9C, 0x4F, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID IID_IDirectPlayLobby2A = {0x1BB4AF80, 0xA303, 0x11D0, [0x9C, 0x4F, 0x00, 0xA0, 0xC9, 0x05, 0x42, 0x5E]}; + const IID IID_IDirectPlayLobby3 = {0x2DB72490, 0x652C, 0x11D1, [0xA7, 0xA8, 0x00, 0x00, 0xF8, 0x03, 0xAB, 0xFC]}; + const IID IID_IDirectPlayLobby3A = {0x2DB72491, 0x652C, 0x11D1, [0xA7, 0xA8, 0x00, 0x00, 0xF8, 0x03, 0xAB, 0xFC]}; + const IID IID_IDirectPlayLobbyA = {0x26C66A70, 0xB367, 0x11CF, [0xA0, 0x24, 0x00, 0xAA, 0x00, 0x61, 0x57, 0xAC]}; + const IID IID_IDirectSound = {0x279AFA83, 0x4981, 0x11CE, [0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60]}; + const IID IID_IDirectSound3DBuffer = {0x279AFA86, 0x4981, 0x11CE, [0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60]}; + const IID IID_IDirectSound3DListener = {0x279AFA84, 0x4981, 0x11CE, [0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60]}; + const IID IID_IDirectSoundBuffer = {0x279AFA85, 0x4981, 0x11CE, [0xA5, 0x21, 0x00, 0x20, 0xAF, 0x0B, 0xE5, 0x60]}; + const IID IID_IDirectSoundCapture = {0xB0210781, 0x89CD, 0x11D0, [0xAF, 0x08, 0x00, 0xA0, 0xC9, 0x25, 0xCD, 0x16]}; + const IID IID_IDirectSoundCaptureBuffer = {0xB0210782, 0x89CD, 0x11D0, [0xAF, 0x08, 0x00, 0xA0, 0xC9, 0x25, 0xCD, 0x16]}; + const IID IID_IDirectSoundNotify = {0xB0210783, 0x89CD, 0x11D0, [0xAF, 0x08, 0x00, 0xA0, 0xC9, 0x25, 0xCD, 0x16]}; + const IID IID_IDirectWriterLock = {0x0E6D4D92, 0x6738, 0x11CF, [0x96, 0x08, 0x00, 0xAA, 0x00, 0x68, 0x0D, 0xB4]}; + const IID IID_IDirectXFile = {0x3D82AB40, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID IID_IDirectXFileBinary = {0x3D82AB46, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID IID_IDirectXFileData = {0x3D82AB44, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID IID_IDirectXFileDataReference = {0x3D82AB45, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID IID_IDirectXFileEnumObject = {0x3D82AB41, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID IID_IDirectXFileObject = {0x3D82AB43, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID IID_IDirectXFileSaveObject = {0x3D82AB42, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID IID_IDiscardableBrowserProperty = {0x49C3DE7C, 0xD329, 0x11D0, [0xAB, 0x73, 0x00, 0xC0, 0x4F, 0xC3, 0x3E, 0x80]}; + const IID IID_IDiscMaster = {0x520CCA62, 0x51A5, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID IID_IDiscMasterProgressEvents = {0xEC9E51C1, 0x4E5D, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID IID_IDiscRecorder = {0x85AC9776, 0xCA88, 0x4CF2, [0x89, 0x4E, 0x09, 0x59, 0x8C, 0x07, 0x8A, 0x41]}; + const IID IID_IDiscStash = {0x520CCA64, 0x51A5, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID IID_IDispatch = {0x00020400, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IDispatchEx = {0xA6EF9860, 0xC720, 0x11D0, [0x93, 0x37, 0x00, 0xA0, 0xC9, 0x0D, 0xCA, 0xA9]}; + const IID IID_IDispError = {0xA6EF9861, 0xC720, 0x11D0, [0x93, 0x37, 0x00, 0xA0, 0xC9, 0x0D, 0xCA, 0xA9]}; + const IID IID_IDisplayPointer = {0x3050F69E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IDisplayServices = {0x3050F69D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IDithererImpl = {0x7C48E840, 0x3910, 0x11D0, [0x86, 0xFC, 0x00, 0xA0, 0xC9, 0x13, 0xF7, 0x50]}; + const IID IID_IDocHostShowUI = {0xC4D244B0, 0xD43E, 0x11CF, [0x89, 0x3B, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x1A]}; + const IID IID_IDocHostUIHandler = {0xBD3F23C0, 0xD43E, 0x11CF, [0x89, 0x3B, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x1A]}; + const IID IID_IDocHostUIHandler2 = {0x3050F6D0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IDockingWindow = {0x012DD920, 0x7B26, 0x11D0, [0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8]}; + const IID IID_IDockingWindowFrame = {0x47D2657A, 0x7B27, 0x11D0, [0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8]}; + const IID IID_IDockingWindowSite = {0x2A342FC2, 0x7B26, 0x11D0, [0x8C, 0xA9, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8]}; + const IID IID_IDoTask = {0x0230C9F8, 0xEE7F, 0x4307, [0x98, 0xDB, 0x72, 0x6E, 0xBC, 0xAE, 0x55, 0xD6]}; + const IID IID_IDownloadBehavior = {0x3050F5BD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IDownloadManager = {0x988934A4, 0x064B, 0x11D3, [0xBB, 0x80, 0x00, 0x10, 0x4B, 0x35, 0xE7, 0xF9]}; + const IID IID_IDownloadNotify = {0xCAEB5D28, 0xAE4C, 0x11D1, [0xBA, 0x40, 0x00, 0xC0, 0x4F, 0xB9, 0x2D, 0x79]}; + const IID IID_IDragSourceHelper = {0xDE5BF786, 0x477A, 0x11D2, [0x83, 0x9D, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0]}; + const IID IID_IDropSource = {0x00000121, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IDropTarget = {0x00000122, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IDropTargetHelper = {0x4657278B, 0x411B, 0x11D2, [0x83, 0x9A, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xD0]}; + const IID IID_IDsBrowseDomainTree = {0x7CABCF1E, 0x78F5, 0x11D2, [0x96, 0x0C, 0x00, 0xC0, 0x4F, 0xA3, 0x1A, 0x86]}; + const IID IID_IDsQueryColumnHandler = {0xC072999E, 0xFA49, 0x11D1, [0xA0, 0xAF, 0x00, 0xC0, 0x4F, 0xA3, 0x1A, 0x86]}; + const IID IID_IDummy = {0x0D7CA54A, 0xD252, 0x4FCB, [0x91, 0x04, 0xF6, 0xDD, 0xD3, 0x10, 0xB3, 0xF9]}; + const IID IID_IDummyHICONIncluder = {0x947990DE, 0xCC28, 0x11D2, [0xA0, 0xF7, 0x00, 0x80, 0x5F, 0x85, 0x8F, 0xB1]}; + const IID IID_IDX2D = {0x9EFD02A9, 0xA996, 0x11D1, [0x81, 0xC9, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_IDX2DDebug = {0x03BB2457, 0xA279, 0x11D1, [0x81, 0xC6, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_IDXARGBReadPtr = {0xEAAAC2D6, 0xC290, 0x11D1, [0x90, 0x5D, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXARGBReadWritePtr = {0xEAAAC2D7, 0xC290, 0x11D1, [0x90, 0x5D, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXARGBSurfaceInit = {0x9EA3B63A, 0xC37D, 0x11D1, [0x90, 0x5E, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXBaseObject = {0x17B59B2B, 0x9CC8, 0x11D1, [0x90, 0x53, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXBasicImage = {0x16B280C7, 0xEE70, 0x11D1, [0x90, 0x66, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXDCLock = {0x0F619456, 0xCF39, 0x11D1, [0x90, 0x5E, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXDLUTBuilder = {0x73068231, 0x35EE, 0x11D1, [0x81, 0xA1, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_IDXDMapper = {0x7FD9088B, 0x35ED, 0x11D1, [0x81, 0xA1, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_IDXEffect = {0xE31FB81B, 0x1335, 0x11D1, [0x81, 0x89, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_IDXGradient = {0xB2024B51, 0xEE77, 0x11D1, [0x90, 0x66, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXGradient2 = {0xD0EF2A80, 0x61DC, 0x11D2, [0xB2, 0xEB, 0x00, 0xA0, 0xC9, 0x36, 0xB2, 0x12]}; + const IID IID_IDXLookupTable = {0x01BAFC7F, 0x9E63, 0x11D1, [0x90, 0x53, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXLUTBuilder = {0xF4370FC1, 0xCADB, 0x11D0, [0xB5, 0x2C, 0x00, 0xA0, 0xC9, 0x05, 0x43, 0x73]}; + const IID IID_IDXMapper = {0x555278E5, 0x05DB, 0x11D1, [0x88, 0x3A, 0x3C, 0x8B, 0x00, 0xC1, 0x00, 0x00]}; + const IID IID_IDXPixelate = {0xD33E180F, 0xFBE9, 0x11D1, [0x90, 0x6A, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXRasterizer = {0x9EA3B635, 0xC37D, 0x11D1, [0x90, 0x5E, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXRawSurface = {0x09756C8A, 0xD96A, 0x11D1, [0x90, 0x62, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXSurface = {0xB39FD73F, 0xE139, 0x11D1, [0x90, 0x65, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXSurfaceFactory = {0x144946F5, 0xC4D4, 0x11D1, [0x81, 0xD1, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_IDXSurfaceInit = {0x9EA3B639, 0xC37D, 0x11D1, [0x90, 0x5E, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXSurfaceModifier = {0x9EA3B637, 0xC37D, 0x11D1, [0x90, 0x5E, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXSurfacePick = {0x30A5FB79, 0xE11F, 0x11D1, [0x90, 0x64, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXTAlpha = {0x1D4637E0, 0x383C, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID IID_IDXTAlphaImageLoader = {0xA5F2D3E8, 0x7A7E, 0x48E5, [0xBC, 0x75, 0x40, 0x79, 0x0B, 0xE4, 0xA9, 0x41]}; + const IID IID_IDXTaskManager = {0x254DBBC1, 0xF922, 0x11D0, [0x88, 0x3A, 0x3C, 0x8B, 0x00, 0xC1, 0x00, 0x00]}; + const IID IID_IDXTBindHost = {0xD26BCE55, 0xE9DC, 0x11D1, [0x90, 0x66, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXTCheckerBoard = {0xAD3C2576, 0x117C, 0x4510, [0x84, 0xDD, 0xB6, 0x68, 0x97, 0x1D, 0xCF, 0xD1]}; + const IID IID_IDXTChroma = {0x1D4637E2, 0x383C, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID IID_IDXTClipOrigin = {0xEE1663D8, 0x0988, 0x4C48, [0x9F, 0xD6, 0xDB, 0x44, 0x50, 0x88, 0x56, 0x68]}; + const IID IID_IDXTComposite = {0x9A43A843, 0x0831, 0x11D1, [0x81, 0x7F, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_IDXTConvolution = {0x7BA7F8AF, 0xE5EA, 0x11D1, [0x81, 0xDD, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_IDXTDropShadow = {0x1D4637E3, 0x383C, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID IID_IDXTFade = {0x16B280C4, 0xEE70, 0x11D1, [0x90, 0x66, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXTFilter = {0x6187E5A2, 0xA445, 0x4608, [0x8F, 0xC0, 0xBE, 0x7A, 0x6C, 0x8D, 0xB3, 0x86]}; + const IID IID_IDXTFilterBehavior = {0x14D7DDDD, 0xACA2, 0x4E45, [0x95, 0x04, 0x38, 0x08, 0xAB, 0xEB, 0x4F, 0x92]}; + const IID IID_IDXTFilterBehaviorSite = {0x909B23C2, 0x9018, 0x499F, [0xA8, 0x6D, 0x4E, 0x7D, 0xA9, 0x37, 0xE9, 0x31]}; + const IID IID_IDXTFilterCollection = {0x22B07B33, 0x8BFB, 0x49D4, [0x9B, 0x90, 0x09, 0x38, 0x37, 0x0C, 0x90, 0x19]}; + const IID IID_IDXTFilterController = {0x5CF315F2, 0x273D, 0x47B6, [0xB9, 0xED, 0xF7, 0x5D, 0xC3, 0xB0, 0x15, 0x0B]}; + const IID IID_IDXTGlow = {0x1D4637E4, 0x383C, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID IID_IDXTGradientD = {0x623E2881, 0xFC0E, 0x11D1, [0x9A, 0x77, 0x00, 0x00, 0xF8, 0x75, 0x6A, 0x10]}; + const IID IID_IDXTGridSize = {0xD6BBE91E, 0xFF60, 0x11D2, [0x8F, 0x6E, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x74]}; + const IID IID_IDXTICMFilter = {0x734321ED, 0x1E7B, 0x4E1C, [0xBB, 0xFA, 0x89, 0xC8, 0x19, 0x80, 0x0E, 0x2F]}; + const IID IID_IDXTLabel = {0xC0C17F0E, 0xAE41, 0x11D1, [0x9A, 0x3B, 0x00, 0x00, 0xF8, 0x75, 0x6A, 0x10]}; + const IID IID_IDXTLight = {0xF9EFBEC1, 0x4302, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID IID_IDXTMask = {0xA1067146, 0xB063, 0x47D7, [0xA5, 0x4A, 0x2C, 0x23, 0x09, 0xE9, 0x88, 0x9D]}; + const IID IID_IDXTMatrix = {0xAC66A493, 0x0F0C, 0x4C76, [0x82, 0x5C, 0x9D, 0x68, 0xBE, 0xDE, 0x91, 0x88]}; + const IID IID_IDXTMetaBurnFilm = {0x107045D0, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaCenterPeel = {0xAA0D4D0B, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID IID_IDXTMetaColorFade = {0x2A54C907, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaFlowMotion = {0x2A54C90A, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaGriddler = {0x2A54C910, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaGriddler2 = {0x2A54C912, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaJaws = {0x2A54C903, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaLightWipe = {0x107045C7, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaLiquid = {0xAA0D4D09, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID IID_IDXTMetaPageTurn = {0xAA0D4D07, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID IID_IDXTMetaPeelPiece = {0xAA0D4D0F, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID IID_IDXTMetaPeelSmall = {0xAA0D4D0D, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID IID_IDXTMetaPeelSplit = {0xAA0D4D11, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID IID_IDXTMetaRadialScaleWipe = {0x107045C9, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaRipple = {0xAA0D4D02, 0x06A3, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID IID_IDXTMetaRoll = {0x9C61F46D, 0x0530, 0x11D2, [0x8F, 0x98, 0x00, 0xC0, 0x4F, 0xB9, 0x2E, 0xB7]}; + const IID IID_IDXTMetaThreshold = {0x2A54C914, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaTwister = {0x107045CE, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaVacuum = {0x2A54C90C, 0x07AA, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaWater = {0x107045C4, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaWhiteOut = {0x107045CB, 0x06E0, 0x11D2, [0x8D, 0x6D, 0x00, 0xC0, 0x4F, 0x8E, 0xF8, 0xE0]}; + const IID IID_IDXTMetaWormHole = {0x0E6AE021, 0x0C83, 0x11D2, [0x8C, 0xD4, 0x00, 0x10, 0x4B, 0xC7, 0x5D, 0x9A]}; + const IID IID_IDXTMotionBlur = {0x089057BE, 0xD3F5, 0x4A2C, [0xB1, 0x0A, 0xA5, 0x13, 0x01, 0x84, 0xA0, 0xF7]}; + const IID IID_IDXTRandomBars = {0x8A6D2022, 0x4A8F, 0x4EB9, [0xBB, 0x25, 0xAA, 0x05, 0x20, 0x1F, 0x9C, 0x84]}; + const IID IID_IDXTransform = {0x30A5FB78, 0xE11F, 0x11D1, [0x90, 0x64, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXTransformFactory = {0x6A950B2B, 0xA971, 0x11D1, [0x81, 0xC8, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_IDXTRedirect = {0x02F5140B, 0x626F, 0x4019, [0x9C, 0x9E, 0x2D, 0xAA, 0x1E, 0x93, 0xE8, 0xFC]}; + const IID IID_IDXTRedirectFilterInit = {0xD1A57094, 0x21F7, 0x4E6C, [0x93, 0xE5, 0xF5, 0xF7, 0x7F, 0x74, 0x82, 0x93]}; + const IID IID_IDXTRevealTrans = {0xB8095006, 0xA128, 0x464B, [0x8B, 0x2D, 0x90, 0x58, 0x0A, 0xEE, 0x2B, 0x05]}; + const IID IID_IDXTScale = {0xB39FD742, 0xE139, 0x11D1, [0x90, 0x65, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXTScaleOutput = {0xB2024B50, 0xEE77, 0x11D1, [0x90, 0x66, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0x9D]}; + const IID IID_IDXTShadow = {0x1D4637E6, 0x383C, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID IID_IDXTStrips = {0xA83C9B5C, 0xFB11, 0x4AF5, [0x8F, 0x65, 0xD0, 0x3F, 0x15, 0x1D, 0x3E, 0xD5]}; + const IID IID_IDXTWave = {0x1D4637E7, 0x383C, 0x11D2, [0x95, 0x2A, 0x00, 0xC0, 0x4F, 0xA3, 0x4F, 0x05]}; + const IID IID_IDXTWipe = {0xAF279B2F, 0x86EB, 0x11D1, [0x81, 0xBF, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID IID_IDXTWipe2 = {0xE1FF8091, 0x442B, 0x4801, [0x88, 0xB6, 0x2B, 0x47, 0xB1, 0x61, 0x1F, 0xD2]}; + const IID IID_IDynamicPortMapping = {0x4FC80282, 0x23B6, 0x4378, [0x9A, 0x27, 0xCD, 0x8F, 0x17, 0xC9, 0x40, 0x0C]}; + const IID IID_IDynamicPortMappingCollection = {0xB60DE00F, 0x156E, 0x4E8D, [0x9E, 0xC1, 0x3A, 0x23, 0x42, 0xC1, 0x08, 0x99]}; + const IID IID_IEditDebugServices = {0x3050F60B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementAdorner = {0x3050F607, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehavior = {0x3050F425, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorCategory = {0x3050F4ED, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorFactory = {0x3050F429, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorFocus = {0x3050F6B6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorLayout = {0x3050F6BA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorLayout2 = {0x3050F846, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorRender = {0x3050F4AA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorSite = {0x3050F427, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorSiteCategory = {0x3050F4EE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorSiteLayout = {0x3050F6B7, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorSiteLayout2 = {0x3050F847, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorSiteOM = {0x3050F489, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorSiteOM2 = {0x3050F659, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorSiteRender = {0x3050F4A7, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorSubmit = {0x3050F646, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementBehaviorUI = {0x3050F4BF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementNamespace = {0x3050F671, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementNamespaceFactory = {0x3050F672, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementNamespaceFactory2 = {0x3050F805, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementNamespaceFactoryCallback = {0x3050F7FD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementNamespacePrivate = {0x3050F7FF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementNamespaceTable = {0x3050F670, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IElementSegment = {0x3050F68F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IEmptyVolumeCache = {0x8FCE5227, 0x04DA, 0x11D1, [0xA0, 0x04, 0x00, 0x80, 0x5F, 0x8A, 0xBE, 0x06]}; + const IID IID_IEmptyVolumeCache2 = {0x02B7E3BA, 0x4DB3, 0x11D2, [0xB2, 0xD9, 0x00, 0xC0, 0x4F, 0x8E, 0xEC, 0x8C]}; + const IID IID_IEmptyVolumeCacheCallBack = {0x6E793361, 0x73C6, 0x11D0, [0x84, 0x69, 0x00, 0xAA, 0x00, 0x44, 0x29, 0x01]}; + const IID IID_IEncodingFilterFactory = {0x70BDDE00, 0xC18E, 0x11D0, [0xA9, 0xCE, 0x00, 0x60, 0x97, 0x94, 0x23, 0x11]}; + const IID IID_IEnroll = {0xACAA7838, 0x4585, 0x11D1, [0xAB, 0x57, 0x00, 0xC0, 0x4F, 0xC2, 0x95, 0xE1]}; + const IID IID_IEnroll2 = {0xC080E199, 0xB7DF, 0x11D2, [0xA4, 0x21, 0x00, 0xC0, 0x4F, 0x79, 0xFE, 0x8E]}; + const IID IID_IEnroll4 = {0xF8053FE5, 0x78F4, 0x448F, [0xA0, 0xDB, 0x41, 0xD6, 0x1B, 0x73, 0x44, 0x6B]}; + const IID IID_IEntryID = {0xE4D19810, 0xD188, 0x11CD, [0xAD, 0x48, 0x00, 0xAA, 0x00, 0x3C, 0x9C, 0xB6]}; + const IID IID_IEnumACDGroup = {0x5AFC3157, 0x4BCC, 0x11D1, [0xBF, 0x80, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_IEnumACString = {0x8E74C210, 0xCF9D, 0x4EAF, [0xA4, 0x03, 0x73, 0x56, 0x42, 0x8F, 0x0A, 0x5A]}; + const IID IID_IEnumAdapterInfo = {0xA23F9D11, 0x714C, 0x41FE, [0x84, 0x71, 0xFF, 0xB1, 0x9B, 0xC2, 0x84, 0x54]}; + const IID IID_IEnumAddress = {0x1666FCA1, 0x9363, 0x11D0, [0x83, 0x5C, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_IEnumAgent = {0x5AFC314D, 0x4BCC, 0x11D1, [0xBF, 0x80, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_IEnumAgentHandler = {0x587E8C28, 0x9802, 0x11D1, [0xA0, 0xA4, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_IEnumAgentSession = {0x5AFC314E, 0x4BCC, 0x11D1, [0xBF, 0x80, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_IEnumBackgroundCopyFiles = {0xCA51E165, 0xC365, 0x424C, [0x8D, 0x41, 0x24, 0xAA, 0xA4, 0xFF, 0x3C, 0x40]}; + const IID IID_IEnumBackgroundCopyGroups = {0xD993E603, 0x4AA4, 0x47C5, [0x86, 0x65, 0xC2, 0x0D, 0x39, 0xC2, 0xBA, 0x4F]}; + const IID IID_IEnumBackgroundCopyJobs = {0x1AF4F612, 0x3B71, 0x466F, [0x8F, 0x58, 0x7B, 0x6F, 0x73, 0xAC, 0x57, 0xAD]}; + const IID IID_IEnumBackgroundCopyJobs1 = {0x8BAEBA9D, 0x8F1C, 0x42C4, [0xB8, 0x2C, 0x09, 0xAE, 0x79, 0x98, 0x0D, 0x25]}; + const IID IID_IEnumBstr = {0x35372049, 0x0BC6, 0x11D2, [0xA0, 0x33, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_IEnumCall = {0xAE269CF6, 0x935E, 0x11D0, [0x83, 0x5C, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_IEnumCallback = {0x00000108, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumCallHub = {0xA3C15450, 0x5B92, 0x11D1, [0x8F, 0x4E, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_IEnumCallingCard = {0x0C4D8F02, 0x8DDB, 0x11D1, [0xA0, 0x9E, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_IEnumCATEGORYINFO = {0x0002E011, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumChannels = {0xA4C65425, 0x0F82, 0x11D1, [0x90, 0xC3, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x68]}; + const IID IID_IEnumClusCfgIPAddresses = {0xBD5F35BA, 0x0BC0, 0x455F, [0x92, 0x6D, 0xC3, 0xD3, 0x56, 0x41, 0x94, 0x86]}; + const IID IID_IEnumClusCfgManagedResources = {0x7DBE11EB, 0xA5DF, 0x4534, [0xAB, 0xF6, 0x8B, 0xAC, 0x7B, 0x53, 0xFC, 0x95]}; + const IID IID_IEnumClusCfgNetworks = {0xCF3FAED8, 0x1322, 0x4BCB, [0x99, 0x23, 0xB5, 0xB7, 0x45, 0xA6, 0x9E, 0x36]}; + const IID IID_IEnumClusCfgPartitions = {0x4440BB6A, 0xB0AC, 0x479D, [0xB5, 0x34, 0x72, 0x65, 0xA3, 0x1D, 0x6C, 0x55]}; + const IID IID_IEnumCodePage = {0x275C23E3, 0x3747, 0x11D0, [0x9F, 0xEA, 0x00, 0xAA, 0x00, 0x3F, 0x86, 0x46]}; + const IID IID_IEnumConnectionPoints = {0xB196B285, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IEnumConnections = {0xB196B287, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IEnumCookies = {0x5E3E482E, 0x3C22, 0x482C, [0xB6, 0x64, 0x69, 0x30, 0x51, 0xAD, 0x0A, 0x5D]}; + const IID IID_IEnumDebugApplicationNodes = {0x51973C3A, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IEnumDebugCodeContexts = {0x51973C1D, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IEnumDebugExpressionContexts = {0x51973C40, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IEnumDebugExtendedPropertyInfo = {0x51973C53, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IEnumDebugPropertyInfo = {0x51973C51, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IEnumDebugStackFrames = {0x51973C1E, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IEnumDebugStackFrames64 = {0x0DC38853, 0xC1B0, 0x4176, [0xA9, 0x84, 0xB2, 0x98, 0x36, 0x10, 0x27, 0xAF]}; + const IID IID_IEnumDialableAddrs = {0x34621D70, 0x6CFF, 0x11D1, [0xAF, 0xF7, 0x00, 0xC0, 0x4F, 0xC3, 0x1F, 0xEE]}; + const IID IID_IEnumDirectory = {0x34621D6D, 0x6CFF, 0x11D1, [0xAF, 0xF7, 0x00, 0xC0, 0x4F, 0xC3, 0x1F, 0xEE]}; + const IID IID_IEnumDirectoryObject = {0x06C9B64A, 0x306D, 0x11D1, [0x97, 0x74, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_IEnumDiscMasterFormats = {0xDDF445E1, 0x54BA, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID IID_IEnumDiscRecorders = {0x9B1921E1, 0x54AC, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID IID_IEnumExtraSearch = {0x0E700BE1, 0x9DB6, 0x11D1, [0xA1, 0xCE, 0x00, 0xC0, 0x4F, 0xD7, 0x5D, 0x13]}; + const IID IID_IEnumFORMATETC = {0x00000103, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumGeneric = {0x00000106, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumGUID = {0x0002E000, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumHLITEM = {0x79EAC9C6, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IEnumHNetApplicationProtocols = {0x85D18B7B, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IEnumHNetBridgedConnections = {0x85D18B7D, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IEnumHNetBridges = {0x85D18B77, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IEnumHNetFirewalledConnections = {0x85D18B78, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IEnumHNetIcsPrivateConnections = {0x85D18B7A, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IEnumHNetIcsPublicConnections = {0x85D18B79, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IEnumHNetPortMappingBindings = {0x85D18B81, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IEnumHNetPortMappingProtocols = {0x85D18B7C, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IEnumHolder = {0x00000107, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumIDList = {0x000214F2, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumInputContext = {0x09B5EAB0, 0xF997, 0x11D1, [0x93, 0xD4, 0x00, 0x60, 0xB0, 0x67, 0xB8, 0x6E]}; + const IID IID_IEnumItemProperties = {0xF72C8D96, 0x6DBD, 0x11D1, [0xA1, 0xE8, 0x00, 0xC0, 0x4F, 0xC2, 0xFB, 0xE1]}; + const IID IID_IEnumLocation = {0x0C4D8F01, 0x8DDB, 0x11D1, [0xA0, 0x9E, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_IEnumMcastScope = {0xDF0DAF09, 0xA289, 0x11D1, [0x86, 0x97, 0x00, 0x60, 0x08, 0xB0, 0xE5, 0xD2]}; + const IID IID_IEnumMedia = {0xCA8397BE, 0x2FA4, 0x11D1, [0x97, 0x74, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_IEnumMoniker = {0x00000102, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumNetCfgBindingInterface = {0xC0E8AE90, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_IEnumNetCfgBindingPath = {0xC0E8AE91, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_IEnumNetCfgComponent = {0xC0E8AE92, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_IEnumNetConnection = {0xC08956A0, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_IEnumNetSharingEveryConnection = {0xC08956B8, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_IEnumNetSharingPortMapping = {0xC08956B0, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_IEnumNetSharingPrivateConnection = {0xC08956B5, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_IEnumNetSharingPublicConnection = {0xC08956B4, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_IEnumNodes = {0xC477E363, 0xAF0A, 0x4203, [0xA6, 0x04, 0x45, 0xCD, 0x60, 0x7D, 0xD7, 0x10]}; + const IID IID_IEnumNotification = {0xC733E4A8, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_IEnumNotificationSinkItem = {0xC733E4AA, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_IEnumOleDocumentViews = {0xB722BCC8, 0x4E68, 0x101B, [0xA2, 0xBC, 0x00, 0xAA, 0x00, 0x40, 0x47, 0x70]}; + const IID IID_IEnumOleUndoUnits = {0xB3E7C340, 0xEF97, 0x11CE, [0x9B, 0xC9, 0x00, 0xAA, 0x00, 0x60, 0x8E, 0x01]}; + const IID IID_IEnumOLEVERB = {0x00000104, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumParticipant = {0x0A91B56C, 0x5A35, 0x11D2, [0x95, 0xA0, 0x00, 0xA0, 0x24, 0x4D, 0x22, 0x98]}; + const IID IID_IEnumPhone = {0xF15B7669, 0x4780, 0x4595, [0x8C, 0x89, 0xFB, 0x36, 0x9C, 0x8C, 0xF7, 0xAA]}; + const IID IID_IEnumPluggableSuperclassInfo = {0xE9586A80, 0x89E6, 0x4CFF, [0x93, 0x1D, 0x47, 0x8D, 0x57, 0x51, 0xF4, 0xC0]}; + const IID IID_IEnumPluggableTerminalClassInfo = {0x4567450C, 0xDBEE, 0x4E3F, [0xAA, 0xF5, 0x37, 0xBF, 0x9E, 0xBF, 0x5E, 0x29]}; + const IID IID_IEnumPrivacyRecords = {0x3050F844, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IEnumPropertyMap = {0xC733E4A1, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_IEnumPublishedApps = {0x0B124F8C, 0x91F0, 0x11D1, [0xB8, 0xB5, 0x00, 0x60, 0x08, 0x05, 0x93, 0x82]}; + const IID IID_IEnumQueue = {0x5AFC3158, 0x4BCC, 0x11D1, [0xBF, 0x80, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_IEnumRegisterWordA = {0x08C03412, 0xF96B, 0x11D0, [0xA4, 0x75, 0x00, 0xAA, 0x00, 0x6B, 0xCC, 0x59]}; + const IID IID_IEnumRegisterWordW = {0x4955DD31, 0xB159, 0x11D0, [0x8F, 0xCF, 0x00, 0xAA, 0x00, 0x6B, 0xCC, 0x59]}; + const IID IID_IEnumRemoteDebugApplications = {0x51973C3B, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IEnumRemoteDebugApplicationThrea = {0x51973C3C, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IEnumRfc1766 = {0x3DC39D1D, 0xC030, 0x11D0, [0xB8, 0x1B, 0x00, 0xC0, 0x4F, 0xC9, 0xB3, 0x1F]}; + const IID IID_IEnumScheduleGroup = {0xC733E4A9, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_IEnumScript = {0xAE5F1430, 0x388B, 0x11D2, [0x83, 0x80, 0x00, 0xC0, 0x4F, 0x8F, 0x5D, 0xA1]}; + const IID IID_IEnumSTATDATA = {0x00000105, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumSTATPROPBAG = {0x20021801, 0x5DE6, 0x11D1, [0x8E, 0x38, 0x00, 0xC0, 0x4F, 0xB9, 0x38, 0x6D]}; + const IID IID_IEnumSTATPROPSETSTG = {0x0000013B, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumSTATPROPSTG = {0x00000139, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumSTATSTG = {0x0000000D, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumSTATURL = {0x3C374A42, 0xBAE4, 0x11CF, [0xBF, 0x7D, 0x00, 0xAA, 0x00, 0x69, 0x46, 0xEE]}; + const IID IID_IEnumStream = {0xEE3BD606, 0x3868, 0x11D2, [0xA0, 0x45, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_IEnumString = {0x00000101, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumSubscription = {0xF72C8D97, 0x6DBD, 0x11D1, [0xA1, 0xE8, 0x00, 0xC0, 0x4F, 0xC2, 0xFB, 0xE1]}; + const IID IID_IEnumSubStream = {0xEE3BD609, 0x3868, 0x11D2, [0xA0, 0x45, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_IEnumSyncItems = {0xF0E1589A, 0xA700, 0x11D1, [0x98, 0x31, 0x00, 0xC0, 0x4F, 0xD9, 0x10, 0xDD]}; + const IID IID_IEnumSyncSchedules = {0xF0E15898, 0xA700, 0x11D1, [0x98, 0x31, 0x00, 0xC0, 0x4F, 0xD9, 0x10, 0xDD]}; + const IID IID_IEnumTerminal = {0xAE269CF4, 0x935E, 0x11D0, [0x83, 0x5C, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_IEnumTerminalClass = {0xAE269CF5, 0x935E, 0x11D0, [0x83, 0x5C, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_IEnumTime = {0x9055322E, 0x2FA8, 0x11D1, [0x97, 0x74, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_IEnumTravelLogEntry = {0x7EBFDD85, 0xAD18, 0x11D3, [0xA4, 0xC5, 0x00, 0xC0, 0x4F, 0x72, 0xD6, 0xB8]}; + const IID IID_IEnumUnknown = {0x00000100, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumVARIANT = {0x00020404, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IEnumWbemClassObject = {0x027947E1, 0xD731, 0x11CE, [0xA3, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01]}; + const IID IID_IErrorInfo = {0x1CF2B120, 0x547D, 0x101B, [0x8E, 0x65, 0x08, 0x00, 0x2B, 0x2B, 0xD1, 0x19]}; + const IID IID_IErrorLog = {0x3127CA40, 0x446E, 0x11CE, [0x81, 0x35, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51]}; + const IID IID_IErrorLookup = {0x0C733A66, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IErrorRecords = {0x0C733A67, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IESP = {0xE99A04AA, 0xAB95, 0x11D0, [0xBE, 0x96, 0x00, 0xA0, 0xC9, 0x49, 0x89, 0xDE]}; + const IID IID_IExtendObjectManager = {0xCA7BB0B9, 0x700C, 0x4DC5, [0x99, 0x1E, 0x75, 0xF9, 0xE6, 0x5E, 0xE9, 0x75]}; + const IID IID_IExtensionServices = {0x79EAC9CB, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IExternalConnection = {0x00000019, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IExtractIconA = {0x000214EB, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IExtractIconW = {0x000214FA, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IExtractImage = {0xBB2E617C, 0x0920, 0x11D1, [0x9A, 0x0B, 0x00, 0xC0, 0x4F, 0xC2, 0xD6, 0xC1]}; + const IID IID_IExtractImage2 = {0x953BB1EE, 0x93B4, 0x11D1, [0x98, 0xA3, 0x00, 0xC0, 0x4F, 0xB6, 0x87, 0xDA]}; + const IID IID_IFileSearchBand = {0x2D91EEA1, 0x9932, 0x11D2, [0xBE, 0x86, 0x00, 0xA0, 0xC9, 0xA8, 0x3D, 0xA1]}; + const IID IID_IFileSystemBindData = {0x01E18D10, 0x4D8B, 0x11D2, [0x85, 0x5D, 0x00, 0x60, 0x08, 0x05, 0x93, 0x67]}; + const IID IID_IFileViewerA = {0x000214F0, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IFileViewerSite = {0x000214F3, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IFileViewerW = {0x000214F8, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IFillLockBytes = {0x99CAF010, 0x415E, 0x11CF, [0x88, 0x14, 0x00, 0xAA, 0x00, 0xB5, 0x69, 0xF5]}; + const IID IID_IFilter = {0x89BCB740, 0x6119, 0x101A, [0xBC, 0xB7, 0x00, 0xDD, 0x01, 0x06, 0x55, 0xAF]}; + const IID IID_IFilterAnimationInfo = {0x02E29300, 0xC758, 0x49B4, [0x9E, 0x11, 0xC5, 0x8B, 0xFE, 0x90, 0x55, 0x8B]}; + const IID IID_IFilterStatus = {0xF4EB8260, 0x8DDA, 0x11D1, [0xB3, 0xAA, 0x00, 0xA0, 0xC9, 0x06, 0x37, 0x96]}; + const IID IID_IFolderFilter = {0x9CC22886, 0xDC8E, 0x11D2, [0xB1, 0xD0, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x3E]}; + const IID IID_IFolderFilterSite = {0xC0A651F5, 0xB48B, 0x11D2, [0xB5, 0xED, 0x00, 0x60, 0x97, 0xC6, 0x86, 0xF6]}; + const IID IID_IFolderView = {0xCDE725B0, 0xCCC9, 0x4519, [0x91, 0x7E, 0x32, 0x5D, 0x72, 0xFA, 0xB4, 0xCE]}; + const IID IID_IFolderViewHost = {0x1EA58F02, 0xD55A, 0x411D, [0xB0, 0x9E, 0x9E, 0x65, 0xAC, 0x21, 0x60, 0x5B]}; + const IID IID_IFolderViewOC = {0x9BA05970, 0xF6A8, 0x11CF, [0xA4, 0x42, 0x00, 0xA0, 0xC9, 0x0A, 0x8F, 0x39]}; + const IID IID_IFont = {0xBEF6E002, 0xA874, 0x101A, [0x8B, 0xBA, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID IID_IFontDisp = {0xBEF6E003, 0xA874, 0x101A, [0x8B, 0xBA, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID IID_IFontEventsDisp = {0x4EF6100A, 0xAF88, 0x11D0, [0x98, 0x46, 0x00, 0xC0, 0x4F, 0xC2, 0x99, 0x93]}; + const IID IID_IFontNames = {0x3050F839, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IForegroundTransfer = {0x00000145, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IFsCiAdmin = {0x75398C30, 0x7A26, 0x11D0, [0xA8, 0x0A, 0x00, 0xA0, 0xC9, 0x06, 0x24, 0x1A]}; + const IID IID_IGatherData = {0x65318F4A, 0xB63C, 0x4E21, [0xAD, 0xDC, 0xBD, 0xCF, 0xB9, 0x69, 0xE1, 0x81]}; + const IID IID_IGetClusterDataInfo = {0x97DEDE51, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IGetClusterGroupInfo = {0x97DEDE54, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IGetClusterNetInterfaceInfo = {0x97DEDE57, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IGetClusterNetworkInfo = {0x97DEDE56, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IGetClusterNodeInfo = {0x97DEDE53, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IGetClusterObjectInfo = {0x97DEDE52, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IGetClusterResourceInfo = {0x97DEDE55, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IGetClusterUIInfo = {0x97DEDE50, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IGetDataSource = {0x0C733A75, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IGetRow = {0x0C733AAF, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IGetSession = {0x0C733ABA, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IGetSourceRow = {0x0C733ABB, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IGlobalInterfaceTable = {0x00000146, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IH26XEncodeOptions = {0x65698D40, 0x282D, 0x11D0, [0x88, 0x00, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IH26XEncoderControl = {0xF9B78AA1, 0xEA12, 0x11CF, [0x9F, 0xEC, 0x00, 0xAA, 0x00, 0xA5, 0x9F, 0x69]}; + const IID IID_IH26XRTPControl = {0x1FC3F2C0, 0x2BFD, 0x11D0, [0x88, 0x00, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IH26XSnapshot = {0x3CB194A0, 0x10AA, 0x11D0, [0x88, 0x00, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IH26XVideoEffects = {0x21555140, 0x9C2B, 0x11CF, [0x90, 0xFA, 0x00, 0xAA, 0x00, 0xA7, 0x29, 0xEA]}; + const IID IID_IH323LineEx = {0x44CF6A9D, 0xCB40, 0x4BBC, [0xB2, 0xD3, 0xB6, 0xAA, 0x93, 0x32, 0x2C, 0x71]}; + const IID IID_IHeaderFooter = {0x3050F6CE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHighlightRenderingServices = {0x3050F606, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHighlightSegment = {0x3050F690, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHlink = {0x79EAC9C3, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IHlinkBrowseContext = {0x79EAC9C7, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IHlinkFrame = {0x79EAC9C5, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IHlinkSite = {0x79EAC9C2, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IHlinkTarget = {0x79EAC9C4, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IHNetApplicationProtocol = {0x85D18B7F, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetBridge = {0x85D18B75, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetBridgedConnection = {0x85D18B76, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetBridgeSettings = {0x85D18B6D, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetCfgMgr = {0x85D18B6C, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetConnection = {0x85D18B71, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetFirewalledConnection = {0x85D18B72, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetFirewallSettings = {0x85D18B6E, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetIcsPrivateConnection = {0x85D18B74, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetIcsPublicConnection = {0x85D18B73, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetIcsSettings = {0x85D18B6F, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetPortMappingBinding = {0x85D18B80, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetPortMappingProtocol = {0x85D18B7E, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHNetProtocolSettings = {0x85D18B70, 0x3032, 0x11D4, [0x93, 0x48, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x71]}; + const IID IID_IHomePage = {0x766BF2AF, 0xD650, 0x11D1, [0x98, 0x11, 0x00, 0xC0, 0x4F, 0xC3, 0x1D, 0x2E]}; + const IID IID_IHostBehaviorInit = {0x3050F842, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHostDialogHelper = {0x53DEC138, 0xA51E, 0x11D2, [0x86, 0x1E, 0x00, 0xC0, 0x4F, 0xA3, 0x5C, 0x89]}; + const IID IID_IHTCAttachBehavior = {0x3050F5F4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTCAttachBehavior2 = {0x3050F7EB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTCDefaultDispatch = {0x3050F4FD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTCDescBehavior = {0x3050F5DC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTCEventBehavior = {0x3050F4FF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTCMethodBehavior = {0x3050F631, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTCPropertyBehavior = {0x3050F5DF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLAnchorElement = {0x3050F1DA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLAnchorElement2 = {0x3050F825, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLAppBehavior = {0x3050F5CA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLAppBehavior2 = {0x3050F5C9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLAppBehavior3 = {0x3050F5CD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHtmlArea = {0x3050F64E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLAreaElement = {0x3050F265, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLAreasCollection = {0x3050F383, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLAreasCollection2 = {0x3050F5EC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLAreasCollection3 = {0x3050F837, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLAttributeCollection = {0x3050F4C3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLAttributeCollection2 = {0x3050F80A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLBaseElement = {0x3050F204, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLBaseFontElement = {0x3050F202, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLBGsound = {0x3050F369, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLBlockElement = {0x3050F208, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLBlockElement2 = {0x3050F823, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLBodyElement = {0x3050F1D8, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLBodyElement2 = {0x3050F5C5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLBookmarkCollection = {0x3050F4CE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLBRElement = {0x3050F1F0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLButtonElement = {0x3050F2BB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLCaret = {0x3050F604, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLChangeLog = {0x3050F649, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLChangePlayback = {0x3050F6E0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLChangeSink = {0x3050F64A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLCommentElement = {0x3050F20C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLCommentElement2 = {0x3050F813, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLComputedStyle = {0x3050F6C3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLControlElement = {0x3050F4E9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLControlRange = {0x3050F29C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLControlRange2 = {0x3050F65E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLCurrentStyle = {0x3050F3DB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLCurrentStyle2 = {0x3050F658, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLCurrentStyle3 = {0x3050F818, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDatabinding = {0x3050F3F2, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDataTransfer = {0x3050F4B3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDDElement = {0x3050F1F2, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDialog = {0x3050F216, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDialog2 = {0x3050F5E0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDialog3 = {0x3050F388, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDivElement = {0x3050F200, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDivPosition = {0x3050F212, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHtmlDlgSafeHelper = {0x3050F81A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDListElement = {0x3050F1F1, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDocument = {0x626FC520, 0xA41E, 0x11CF, [0xA7, 0x31, 0x00, 0xA0, 0xC9, 0x08, 0x26, 0x37]}; + const IID IID_IHTMLDocument2 = {0x332C4425, 0x26CB, 0x11D0, [0xB4, 0x83, 0x00, 0xC0, 0x4F, 0xD9, 0x01, 0x19]}; + const IID IID_IHTMLDocument3 = {0x3050F485, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDocument4 = {0x3050F69A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDocument5 = {0x3050F80C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDOMAttribute = {0x3050F4B0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDOMAttribute2 = {0x3050F810, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDOMChildrenCollection = {0x3050F5AB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDOMImplementation = {0x3050F80D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDOMNode = {0x3050F5DA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDOMNode2 = {0x3050F80B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDOMTextNode = {0x3050F4B1, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDOMTextNode2 = {0x3050F809, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDTElement = {0x3050F1F3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLDXTransform = {0x30E2AB7D, 0x4FDD, 0x4159, [0xB7, 0xEA, 0xDC, 0x72, 0x2B, 0xF4, 0xAD, 0xE5]}; + const IID IID_IHTMLEditDesigner = {0x3050F662, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLEditHost = {0x3050F6A0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLEditHost2 = {0x3050F848, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0D]}; + const IID IID_IHTMLEditingServices = {0x3050F7FB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLEditor = {0x3050F7FA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLEditServices = {0x3050F663, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLEditServices2 = {0x3050F812, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLElement = {0x3050F1FF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLElement2 = {0x3050F434, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLElement3 = {0x3050F673, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLElement4 = {0x3050F80F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLElementCollection = {0x3050F21F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLElementCollection2 = {0x3050F5EE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLElementCollection3 = {0x3050F835, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLElementDefaults = {0x3050F6C9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLElementRender = {0x3050F669, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLEmbedElement = {0x3050F25F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLEventObj = {0x3050F32D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLEventObj2 = {0x3050F48B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLEventObj3 = {0x3050F680, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLEventObj4 = {0x3050F814, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFieldSetElement = {0x3050F3E7, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFieldSetElement2 = {0x3050F833, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFilterPainter = {0x3050F6DE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFilterPaintSite = {0x3050F6D3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFiltersCollection = {0x3050F3EE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFontElement = {0x3050F1D9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFontNamesCollection = {0x3050F376, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFontSizesCollection = {0x3050F377, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFormElement = {0x3050F1F7, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFormElement2 = {0x3050F4F6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFormElement3 = {0x3050F836, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFrameBase = {0x3050F311, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFrameBase2 = {0x3050F6DB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFrameBase3 = {0x3050F82E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFrameElement = {0x3050F313, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFrameElement2 = {0x3050F7F5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFramesCollection2 = {0x332C4426, 0x26CB, 0x11D0, [0xB4, 0x83, 0x00, 0xC0, 0x4F, 0xD9, 0x01, 0x19]}; + const IID IID_IHTMLFrameSetElement = {0x3050F319, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLFrameSetElement2 = {0x3050F5C6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLGenericElement = {0x3050F4B7, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLHeadElement = {0x3050F81D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLHeaderElement = {0x3050F1F6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLHRElement = {0x3050F1F4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLHtmlElement = {0x3050F81C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLIFrameElement = {0x3050F315, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLIFrameElement2 = {0x3050F4E6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLImageElementFactory = {0x3050F38E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLImgElement = {0x3050F240, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLImgElement2 = {0x3050F826, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLInputButtonElement = {0x3050F2B2, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLInputElement = {0x3050F5D2, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLInputElement2 = {0x3050F821, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLInputFileElement = {0x3050F2AD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLInputHiddenElement = {0x3050F2A4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLInputImage = {0x3050F2C2, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLInputTextElement = {0x3050F2A6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLIPrintCollection = {0x3050F6B5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLIsIndexElement = {0x3050F206, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLIsIndexElement2 = {0x3050F82F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLLabelElement = {0x3050F32A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLLabelElement2 = {0x3050F832, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLLegendElement = {0x3050F3EA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLLegendElement2 = {0x3050F834, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLLIElement = {0x3050F1E0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLLinkElement = {0x3050F205, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLLinkElement2 = {0x3050F4E5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLLinkElement3 = {0x3050F81E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLListElement = {0x3050F20E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLListElement2 = {0x3050F822, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHtmlLoadOptions = {0xA71A0808, 0x0F88, 0x11D1, [0xBA, 0x19, 0x00, 0xC0, 0x4F, 0xD9, 0x12, 0xD0]}; + const IID IID_IHTMLLocation = {0x163BB1E0, 0x6E00, 0x11CF, [0x83, 0x7A, 0x48, 0xDC, 0x04, 0xC1, 0x00, 0x00]}; + const IID IID_IHTMLMapElement = {0x3050F266, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLMarqueeElement = {0x3050F2B5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLMetaElement = {0x3050F203, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLMetaElement2 = {0x3050F81F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLMimeTypesCollection = {0x3050F3FC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLModelessInit = {0x3050F5E4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLNamespace = {0x3050F6BB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLNamespaceCollection = {0x3050F6B8, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLNextIdElement = {0x3050F207, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLNoShowElement = {0x3050F38A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLObjectElement = {0x3050F24F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLObjectElement2 = {0x3050F4CD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLObjectElement3 = {0x3050F827, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLOListElement = {0x3050F1DE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLOMWindowServices = {0x3050F5FC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLOpsProfile = {0x3050F401, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLOptionButtonElement = {0x3050F2BC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLOptionElement = {0x3050F211, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLOptionElement2 = {0x3050F697, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLOptionElement3 = {0x3050F820, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLOptionElementFactory = {0x3050F38C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLOptionsHolder = {0x3050F378, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPainter = {0x3050F6A6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPainterEventInfo = {0x3050F6DF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPainterOverlay = {0x3050F7E3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPaintSite = {0x3050F6A7, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLParaElement = {0x3050F1F5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLParamElement = {0x3050F83D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPersistData = {0x3050F4C5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPersistDataOM = {0x3050F4C0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPhraseElement = {0x3050F20A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPhraseElement2 = {0x3050F824, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPluginsCollection = {0x3050F3FD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPopup = {0x3050F666, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPrivateWindow = {0x3050F6DC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPrivateWindow2 = {0x3050F7E5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLPrivateWindow3 = {0x3050F840, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLRect = {0x3050F4A3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLRectCollection = {0x3050F4A4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLRenderStyle = {0x3050F6AE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLRuleStyle = {0x3050F3CF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLRuleStyle2 = {0x3050F4AC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLRuleStyle3 = {0x3050F657, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLRuleStyle4 = {0x3050F817, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLScreen = {0x3050F35C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLScreen2 = {0x3050F84A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLScriptElement = {0x3050F28B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLScriptElement2 = {0x3050F828, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLSelectElement = {0x3050F244, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLSelectElement2 = {0x3050F5ED, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLSelectElement3 = {0x3050F687, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLSelectElement4 = {0x3050F838, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLSelectionObject = {0x3050F25A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLSelectionObject2 = {0x3050F7EC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLSpanElement = {0x3050F3F3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLSpanFlow = {0x3050F3E5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyle = {0x3050F25E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyle2 = {0x3050F4A2, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyle3 = {0x3050F656, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyle4 = {0x3050F816, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyleElement = {0x3050F375, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyleFontFace = {0x3050F3D5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyleSheet = {0x3050F2E3, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyleSheet2 = {0x3050F3D1, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyleSheetPage = {0x3050F7EE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyleSheetPagesCollection = {0x3050F7F0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyleSheetRule = {0x3050F357, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyleSheetRulesCollection = {0x3050F2E5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLStyleSheetsCollection = {0x3050F37E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLSubmitData = {0x3050F645, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTable = {0x3050F21E, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTable2 = {0x3050F4AD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTable3 = {0x3050F829, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableCaption = {0x3050F2EB, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableCell = {0x3050F23D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableCell2 = {0x3050F82D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableCol = {0x3050F23A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableCol2 = {0x3050F82A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableRow = {0x3050F23C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableRow2 = {0x3050F4A1, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableRow3 = {0x3050F82C, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableRowMetrics = {0x3050F413, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableSection = {0x3050F23B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableSection2 = {0x3050F5C7, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTableSection3 = {0x3050F82B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTextAreaElement = {0x3050F2AA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTextContainer = {0x3050F230, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTextElement = {0x3050F218, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTextRangeMetrics = {0x3050F40B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTextRangeMetrics2 = {0x3050F4A6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTitleElement = {0x3050F322, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTxtRange = {0x3050F220, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLTxtRangeCollection = {0x3050F7ED, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLUListElement = {0x3050F1DD, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLUniqueName = {0x3050F4D0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLUnknownElement = {0x3050F209, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLUrnCollection = {0x3050F5E2, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLUserDataOM = {0x3050F48F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLViewFilter = {0x3050F2F1, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLViewFilterSite = {0x3050F2F4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLWindow2 = {0x332C4427, 0x26CB, 0x11D0, [0xB4, 0x83, 0x00, 0xC0, 0x4F, 0xD9, 0x01, 0x19]}; + const IID IID_IHTMLWindow3 = {0x3050F4AE, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHTMLWindow4 = {0x3050F6CF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IHttpNegotiate = {0x79EAC9D2, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IHttpNegotiate2 = {0x4F9F9FCB, 0xE0F4, 0x48EB, [0xB7, 0xAB, 0xFA, 0x2E, 0xA9, 0x36, 0x5C, 0xB4]}; + const IID IID_IHttpSecurity = {0x79EAC9D7, 0xBAFA, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IHWEventHandler = {0xC1FB73D0, 0xEC3A, 0x4BA2, [0xB5, 0x12, 0x8C, 0xDB, 0x91, 0x87, 0xB6, 0xD1]}; + const IID IID_IImageDecodeEventSink = {0xBAA342A0, 0x2DED, 0x11D0, [0x86, 0xF4, 0x00, 0xA0, 0xC9, 0x13, 0xF7, 0x50]}; + const IID IID_IImageDecodeFilter = {0xA3CCEDF3, 0x2DE2, 0x11D0, [0x86, 0xF4, 0x00, 0xA0, 0xC9, 0x13, 0xF7, 0x50]}; + const IID IID_IImageList = {0x46EB5926, 0x582E, 0x4017, [0x9F, 0xDF, 0xE8, 0x99, 0x8D, 0xAA, 0x09, 0x50]}; + const IID IID_IIMEServices = {0x3050F6CA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IImgCtx = {0x3050F3D7, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IIndexDefinition = {0x0C733A68, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IInputObject = {0x68284FAA, 0x6A48, 0x11D0, [0x8C, 0x78, 0x00, 0xC0, 0x4F, 0xD9, 0x18, 0xB4]}; + const IID IID_IInputObjectSite = {0xF1DB8392, 0x7331, 0x11D0, [0x8C, 0x99, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8]}; + const IID IID_IIntDitherer = {0x06670CA0, 0xECEF, 0x11D0, [0xAA, 0xE7, 0x00, 0xC0, 0x4F, 0xC9, 0xB3, 0x04]}; + const IID IID_IIntelliForms = {0x9B9F68E6, 0x1AAA, 0x11D2, [0xBC, 0xA5, 0x00, 0xC0, 0x4F, 0xD9, 0x29, 0xDB]}; + const IID IID_IInterfaceRelated = {0xD1FB5A79, 0x7706, 0x11D1, [0xAD, 0xBA, 0x00, 0xC0, 0x4F, 0xC2, 0xAD, 0xC0]}; + const IID IID_IInternalMoniker = {0x00000011, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IInternalUnknown = {0x00000021, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IInternet = {0x79EAC9E0, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetBindInfo = {0x79EAC9E1, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetConnectionDevice = {0x04DF6137, 0x5610, 0x11D4, [0x9E, 0xC8, 0x00, 0xB0, 0xD0, 0x22, 0xDD, 0x1F]}; + const IID IID_IInternetConnectionDeviceClient = {0x04DF6139, 0x5610, 0x11D4, [0x9E, 0xC8, 0x00, 0xB0, 0xD0, 0x22, 0xDD, 0x1F]}; + const IID IID_IInternetConnectionDeviceSharedCo = {0x04DF6138, 0x5610, 0x11D4, [0x9E, 0xC8, 0x00, 0xB0, 0xD0, 0x22, 0xDD, 0x1F]}; + const IID IID_IInternetHostSecurityManager = {0x3AF280B6, 0xCB3F, 0x11D0, [0x89, 0x1E, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4]}; + const IID IID_IInternetPriority = {0x79EAC9EB, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetProtocol = {0x79EAC9E4, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetProtocolInfo = {0x79EAC9EC, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetProtocolRoot = {0x79EAC9E3, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetProtocolSink = {0x79EAC9E5, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetProtocolSinkStackable = {0x79EAC9F0, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetSecurityManager = {0x79EAC9EE, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetSecurityMgrSite = {0x79EAC9ED, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetSession = {0x79EAC9E7, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetThreadSwitch = {0x79EAC9E8, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IInternetZoneManager = {0x79EAC9EF, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IIpxAdapterInfo = {0x98133270, 0x4B20, 0x11D1, [0xAB, 0x01, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_IItemNameLimits = {0x1DF0D7F1, 0xB267, 0x4D28, [0x8B, 0x10, 0x12, 0xE2, 0x32, 0x02, 0xA5, 0xC4]}; + const IID IID_IJolietDiscMaster = {0xE3BC42CE, 0x4E5C, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID IID_IKeyFrameControl = {0xC3341386, 0xAF91, 0x4EF9, [0x83, 0xB6, 0xBE, 0x37, 0x62, 0xE4, 0x2E, 0xCB]}; + const IID IID_IKsControl = {0x28F54685, 0x06FD, 0x11D2, [0xB2, 0x7A, 0x00, 0xA0, 0xC9, 0x22, 0x31, 0x96]}; + const IID IID_IKsPropertySet = {0x31EFAC30, 0x515C, 0x11D0, [0xA9, 0xAA, 0x00, 0xAA, 0x00, 0x61, 0xBE, 0x93]}; + const IID IID_ILayoutRect = {0x3050F665, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ILayoutStorage = {0x0E6D4D90, 0x6738, 0x11CF, [0x96, 0x08, 0x00, 0xAA, 0x00, 0x68, 0x0D, 0xB4]}; + const IID IID_ILineInfo = {0x3050F7E2, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ILocalMachine = {0x60664CAF, 0xAF0D, 0x1005, [0xA3, 0x00, 0x5C, 0x7D, 0x25, 0xFF, 0x22, 0xA0]}; + const IID IID_ILockBytes = {0x0000000A, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ILogger = {0xD9598418, 0x304E, 0x4F94, [0xB6, 0xA1, 0xE6, 0x42, 0xFE, 0x95, 0xED, 0x57]}; + const IID IID_ILogManager = {0x4759DC11, 0x8DA0, 0x4261, [0xBB, 0xFB, 0xEC, 0x32, 0x19, 0x11, 0xD1, 0xC9]}; + const IID IID_ILogonEnumUsers = {0x60664CAF, 0xAF0D, 0x1004, [0xA3, 0x00, 0x5C, 0x7D, 0x25, 0xFF, 0x22, 0xA0]}; + const IID IID_ILogonStatusHost = {0x60664CAF, 0xAF0D, 0x1007, [0xA3, 0x00, 0x5C, 0x7D, 0x25, 0xFF, 0x22, 0xA0]}; + const IID IID_ILogonUser = {0x60664CAF, 0xAF0D, 0x1003, [0xA3, 0x00, 0x5C, 0x7D, 0x25, 0xFF, 0x22, 0xA0]}; + const IID IID_IMachineDebugManager = {0x51973C2C, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IMachineDebugManagerCookie = {0x51973C2D, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IMachineDebugManagerEvents = {0x51973C2E, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IMailAutoDiscovery = {0x80402DEE, 0xB114, 0x4D32, [0xB4, 0x4E, 0x82, 0xFD, 0x82, 0x34, 0xC9, 0x2A]}; + const IID IID_IMailProtocolADEntry = {0x40EF8C68, 0xD554, 0x47ED, [0xAA, 0x37, 0xE5, 0xFB, 0x6B, 0xC9, 0x10, 0x75]}; + const IID IID_IMalloc = {0x00000002, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IMallocSpy = {0x0000001D, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IMapMIMEToCLSID = {0xD9E89500, 0x30FA, 0x11D0, [0xB7, 0x24, 0x00, 0xAA, 0x00, 0x6C, 0x1A, 0x01]}; + const IID IID_IMarkupContainer = {0x3050F5F9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IMarkupContainer2 = {0x3050F648, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IMarkupPointer = {0x3050F49F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IMarkupPointer2 = {0x3050F675, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IMarkupServices = {0x3050F4A0, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IMarkupServices2 = {0x3050F682, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IMarkupTextFrags = {0x3050F5FA, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IMarshal = {0x00000003, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IMarshal2 = {0x000001CF, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IMcastAddressAllocation = {0xDF0DAEF1, 0xA289, 0x11D1, [0x86, 0x97, 0x00, 0x60, 0x08, 0xB0, 0xE5, 0xD2]}; + const IID IID_IMcastLeaseInfo = {0xDF0DAEFD, 0xA289, 0x11D1, [0x86, 0x97, 0x00, 0x60, 0x08, 0xB0, 0xE5, 0xD2]}; + const IID IID_IMcastScope = {0xDF0DAEF4, 0xA289, 0x11D1, [0x86, 0x97, 0x00, 0x60, 0x08, 0xB0, 0xE5, 0xD2]}; + const IID IID_IMDDataset = {0xA07CCCD1, 0x8148, 0x11D0, [0x87, 0xBB, 0x00, 0xC0, 0x4F, 0xC3, 0x39, 0x42]}; + const IID IID_IMDFind = {0xA07CCCD2, 0x8148, 0x11D0, [0x87, 0xBB, 0x00, 0xC0, 0x4F, 0xC3, 0x39, 0x42]}; + const IID IID_IMDRangeRowset = {0x0C733AA0, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IMessageFilter = {0x00000016, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IMigrationWizardAuto = {0xCE20DAB9, 0xB353, 0x469B, [0x8B, 0x4D, 0x6D, 0xBB, 0x3A, 0x7B, 0xA0, 0x16]}; + const IID IID_IMimeInfo = {0xF77459A0, 0xBF9A, 0x11CF, [0xBA, 0x4E, 0x00, 0xC0, 0x4F, 0xD7, 0x08, 0x16]}; + const IID IID_IMLangCodePages = {0x359F3443, 0xBD4A, 0x11D0, [0xB1, 0x88, 0x00, 0xAA, 0x00, 0x38, 0xC9, 0x69]}; + const IID IID_IMLangConvertCharset = {0xD66D6F98, 0xCDAA, 0x11D0, [0xB8, 0x22, 0x00, 0xC0, 0x4F, 0xC9, 0xB3, 0x1F]}; + const IID IID_IMLangFontLink = {0x359F3441, 0xBD4A, 0x11D0, [0xB1, 0x88, 0x00, 0xAA, 0x00, 0x38, 0xC9, 0x69]}; + const IID IID_IMLangFontLink2 = {0xDCCFC162, 0x2B38, 0x11D2, [0xB7, 0xEC, 0x00, 0xC0, 0x4F, 0x8F, 0x5D, 0x9A]}; + const IID IID_IMLangLineBreakConsole = {0xF5BE2EE1, 0xBFD7, 0x11D0, [0xB1, 0x88, 0x00, 0xAA, 0x00, 0x38, 0xC9, 0x69]}; + const IID IID_IMLangString = {0xC04D65CE, 0xB70D, 0x11D0, [0xB1, 0x88, 0x00, 0xAA, 0x00, 0x38, 0xC9, 0x69]}; + const IID IID_IMLangStringAStr = {0xC04D65D2, 0xB70D, 0x11D0, [0xB1, 0x88, 0x00, 0xAA, 0x00, 0x38, 0xC9, 0x69]}; + const IID IID_IMLangStringBufA = {0xD24ACD23, 0xBA72, 0x11D0, [0xB1, 0x88, 0x00, 0xAA, 0x00, 0x38, 0xC9, 0x69]}; + const IID IID_IMLangStringBufW = {0xD24ACD21, 0xBA72, 0x11D0, [0xB1, 0x88, 0x00, 0xAA, 0x00, 0x38, 0xC9, 0x69]}; + const IID IID_IMLangStringWStr = {0xC04D65D0, 0xB70D, 0x11D0, [0xB1, 0x88, 0x00, 0xAA, 0x00, 0x38, 0xC9, 0x69]}; + const IID IID_IMofCompiler = {0x6DAF974E, 0x2E37, 0x11D2, [0xAE, 0xC9, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID IID_IMoniker = {0x0000000F, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IMonikerProp = {0xA5CA5F7F, 0x1847, 0x4D87, [0x9C, 0x5B, 0x91, 0x85, 0x09, 0xF7, 0x51, 0x1D]}; + const IID IID_IMountedVolume = {0x12518492, 0x00B2, 0x11D2, [0x9F, 0xA5, 0x9E, 0x34, 0x20, 0x52, 0x41, 0x53]}; + const IID IID_IMulticastControl = {0x410FA507, 0x4DC6, 0x415A, [0x90, 0x14, 0x63, 0x38, 0x75, 0xD5, 0x40, 0x6E]}; + const IID IID_IMultiLanguage = {0x275C23E1, 0x3747, 0x11D0, [0x9F, 0xEA, 0x00, 0xAA, 0x00, 0x3F, 0x86, 0x46]}; + const IID IID_IMultiLanguage2 = {0xDCCFC164, 0x2B38, 0x11D2, [0xB7, 0xEC, 0x00, 0xC0, 0x4F, 0x8F, 0x5D, 0x9A]}; + const IID IID_IMultiLanguage3 = {0x4E5868AB, 0xB157, 0x4623, [0x9A, 0xCC, 0x6A, 0x1D, 0x9C, 0xAE, 0xBE, 0x04]}; + const IID IID_IMultiplePropertyAccess = {0xEC81FEDE, 0xD432, 0x11CE, [0x92, 0x44, 0x00, 0x20, 0xAF, 0x6E, 0x72, 0xDB]}; + const IID IID_IMultipleResults = {0x0C733A90, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IMultiQI = {0x00000020, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_INamedPropertyBag = {0xFB700430, 0x952C, 0x11D1, [0x94, 0x6F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]}; + const IID IID_INATEventManager = {0x624BD588, 0x9060, 0x4109, [0xB0, 0xB0, 0x1A, 0xDB, 0xBC, 0xAC, 0x32, 0xDF]}; + const IID IID_INATExternalIPAddressCallback = {0x9C416740, 0xA34E, 0x446F, [0xBA, 0x06, 0xAB, 0xD0, 0x4C, 0x31, 0x49, 0xAE]}; + const IID IID_INATNumberOfEntriesCallback = {0xC83A0A74, 0x91EE, 0x41B6, [0xB6, 0x7A, 0x67, 0xE0, 0xF0, 0x0B, 0xBD, 0x78]}; + const IID IID_INetCfg = {0xC0E8AE93, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgBindingInterface = {0xC0E8AE94, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgBindingPath = {0xC0E8AE96, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgClass = {0xC0E8AE97, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgClassSetup = {0xC0E8AE9D, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgComponent = {0xC0E8AE99, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgComponentBindings = {0xC0E8AE9E, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgComponentControl = {0x932238DF, 0xBEA1, 0x11D0, [0x92, 0x98, 0x00, 0xC0, 0x4F, 0xC9, 0x9D, 0xCF]}; + const IID IID_INetCfgComponentNotifyBinding = {0x932238E1, 0xBEA1, 0x11D0, [0x92, 0x98, 0x00, 0xC0, 0x4F, 0xC9, 0x9D, 0xCF]}; + const IID IID_INetCfgComponentNotifyGlobal = {0x932238E2, 0xBEA1, 0x11D0, [0x92, 0x98, 0x00, 0xC0, 0x4F, 0xC9, 0x9D, 0xCF]}; + const IID IID_INetCfgComponentPrivate = {0x98133273, 0x4B20, 0x11D1, [0xAB, 0x01, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgComponentPropertyUi = {0x932238E0, 0xBEA1, 0x11D0, [0x92, 0x98, 0x00, 0xC0, 0x4F, 0xC9, 0x9D, 0xCF]}; + const IID IID_INetCfgComponentSetup = {0x932238E3, 0xBEA1, 0x11D0, [0x92, 0x98, 0x00, 0xC0, 0x4F, 0xC9, 0x9D, 0xCF]}; + const IID IID_INetCfgComponentSysPrep = {0xC0E8AE9A, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgComponentUpperEdge = {0x932238E4, 0xBEA1, 0x11D0, [0x92, 0x98, 0x00, 0xC0, 0x4F, 0xC9, 0x9D, 0xCF]}; + const IID IID_INetCfgInternalSetup = {0x98133276, 0x4B20, 0x11D1, [0xAB, 0x01, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgLock = {0xC0E8AE9F, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgPnpReconfigCallback = {0x8D84BD35, 0xE227, 0x11D2, [0xB7, 0x00, 0x00, 0xA0, 0xC9, 0x8A, 0x6A, 0x85]}; + const IID IID_INetCfgSpecialCase = {0xC0E8AE95, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCfgSysPrep = {0xC0E8AE98, 0x306E, 0x11D1, [0xAA, 0xCF, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnection = {0xC08956A1, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnection2 = {0xFAEDCF6A, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionBrandingInfo = {0xFAEDCF5B, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionCMUtil = {0xFAEDCF60, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionCommonUi = {0xC08956A5, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionConnectUi = {0xC08956A3, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionHNetUtil = {0xFAEDCF64, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionManager = {0xC08956A2, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionManager2 = {0xFAEDCF69, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionManagerDebug = {0xFAEDCF5D, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionManagerEvents = {0xC08956BA, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionNotifySink = {0xFAEDCF5C, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionPropertyUi = {0xC08956A4, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionPropertyUi2 = {0xC08956B9, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionProps = {0xF4277C95, 0xCE5B, 0x463D, [0x81, 0x67, 0x56, 0x62, 0xD9, 0xBC, 0xAA, 0x72]}; + const IID IID_INetConnectionRefresh = {0xFAEDCF5F, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionSysTray = {0xFAEDCF65, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionUiLock = {0xFAEDCF50, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionUiUtilities = {0xFAEDCF5E, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionWizardUi = {0xFAEDCF51, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetConnectionWizardUiContext = {0xFAEDCF52, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetCrawler = {0x49C929EE, 0xA1B7, 0x4C58, [0xB5, 0x39, 0xE6, 0x3B, 0xE3, 0x92, 0xB6, 0xF3]}; + const IID IID_INetDefaultConnection = {0xFAEDCF66, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetInboundConnection = {0xFAEDCF53, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetInstallQueue = {0x98133274, 0x4B20, 0x11D1, [0xAB, 0x01, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetLanConnection = {0xFAEDCF54, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetLanConnectionUiInfo = {0xC08956A6, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetLanConnectionWizardUi = {0xFAEDCF56, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetMachinePolicies = {0xFAEDCF68, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetRasConnection = {0xFAEDCF57, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetRasConnectionIpUiInfo = {0xFAEDCF58, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetSharedAccessConnection = {0xFAEDCF55, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetSharingConfiguration = {0xC08956B6, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetSharingEveryConnectionCollect = {0x33C4643C, 0x7811, 0x46FA, [0xA8, 0x9A, 0x76, 0x85, 0x97, 0xBD, 0x72, 0x23]}; + const IID IID_INetSharingManager = {0xC08956B7, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetSharingPortMapping = {0xC08956B1, 0x1CD3, 0x11D1, [0xB1, 0xC5, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_INetSharingPortMappingCollection = {0x02E4A2DE, 0xDA20, 0x4E34, [0x89, 0xC8, 0xAC, 0x22, 0x27, 0x5A, 0x01, 0x0B]}; + const IID IID_INetSharingPortMappingProps = {0x24B7E9B5, 0xE38F, 0x4685, [0x85, 0x1B, 0x00, 0x89, 0x2C, 0xF5, 0xF9, 0x40]}; + const IID IID_INetSharingPrivateConnectionColle = {0x38AE69E0, 0x4409, 0x402A, [0xA2, 0xCB, 0xE9, 0x65, 0xC7, 0x27, 0xF8, 0x40]}; + const IID IID_INetSharingPublicConnectionCollec = {0x7D7A6355, 0xF372, 0x4971, [0xA1, 0x49, 0xBF, 0xC9, 0x27, 0xBE, 0x76, 0x2A]}; + const IID IID_INewShortcutHookA = {0x000214E1, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_INewShortcutHookW = {0x000214F7, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_INewWDEvents = {0x0751C551, 0x7568, 0x41C9, [0x8E, 0x5B, 0xE2, 0x2E, 0x38, 0x91, 0x92, 0x36]}; + const IID IID_INotification = {0xC733E4A3, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_INotificationHelper = {0xC733E4AB, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_INotificationManager = {0x95531501, 0x8782, 0x4845, [0x90, 0x1D, 0x31, 0x2F, 0x36, 0xBA, 0x6C, 0x6E]}; + const IID IID_INotificationMgr = {0xC733E4A4, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_INotificationPing = {0xC733E4AC, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_INotificationProcessMgr0 = {0xC733E4AE, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_INotificationReport = {0xC733E4A7, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_INotificationRunning = {0xC733E4AD, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_INotificationSink = {0xC733E4A5, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_INotifyDBEvents = {0xDB526CC0, 0xD188, 0x11CD, [0xAD, 0x48, 0x00, 0xAA, 0x00, 0x3C, 0x9C, 0xB6]}; + const IID IID_INotifyReplica = {0x99180163, 0xDA16, 0x101A, [0x93, 0x5C, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_INotifyUI = {0xE5E8D401, 0x1A37, 0x4FBF, [0x88, 0x0C, 0x82, 0x6C, 0xC8, 0x95, 0x16, 0xFD]}; + const IID IID_IObjectAccessControl = {0x0C733AA3, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IObjectIdentity = {0xCA04B7E6, 0x0D21, 0x11D1, [0x8C, 0xC5, 0x00, 0xC0, 0x4F, 0xC2, 0xB0, 0x85]}; + const IID IID_IObjectManager = {0xD51351DF, 0x6394, 0x4236, [0x97, 0x83, 0x65, 0xED, 0x05, 0x63, 0x10, 0x68]}; + const IID IID_IObjectSafety = {0xCB5BDC81, 0x93C1, 0x11CF, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID IID_IObjectWithSite = {0xFC4801A3, 0x2BA9, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID IID_IObjMgr = {0x00BB2761, 0x6A77, 0x11D0, [0xA5, 0x35, 0x00, 0xC0, 0x4F, 0xD7, 0xD0, 0x62]}; + const IID IID_IOInet = {0x79EAC9E0, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IOInetBindClient = {0x79EAC9E2, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IOInetBindInfo = {0x79EAC9E1, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IOInetCache = {0x79EAC9EA, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IOInetPriority = {0x79EAC9EB, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IOInetProtocol = {0x79EAC9E4, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IOInetProtocolInfo = {0x79EAC9EC, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IOInetProtocolRoot = {0x79EAC9E3, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IOInetProtocolSink = {0x79EAC9E5, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IOInetSession = {0x79EAC967, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IOInetThreadSwitch = {0x79EAC968, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IOldSyncMgrRegister = {0x894D8C55, 0xBDDF, 0x11D1, [0xB8, 0x5D, 0x00, 0xC0, 0x4F, 0xB9, 0x39, 0x81]}; + const IID IID_IOldSyncMgrSynchronize = {0x6295DF28, 0x35EE, 0x11D1, [0x87, 0x07, 0x00, 0xC0, 0x4F, 0xD9, 0x33, 0x27]}; + const IID IID_IOldSyncMgrSynchronizeCallback = {0x6295DF29, 0x35EE, 0x11D1, [0x87, 0x07, 0x00, 0xC0, 0x4F, 0xD9, 0x33, 0x27]}; + const IID IID_IOleAdviseHolder = {0x00000111, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleCache = {0x0000011E, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleCache2 = {0x00000128, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleCacheControl = {0x00000129, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleClientSite = {0x00000118, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleCommandTarget = {0xB722BCCB, 0x4E68, 0x101B, [0xA2, 0xBC, 0x00, 0xAA, 0x00, 0x40, 0x47, 0x70]}; + const IID IID_IOleContainer = {0x0000011B, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleControl = {0xB196B288, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IOleControlSite = {0xB196B289, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IOleDocument = {0xB722BCC5, 0x4E68, 0x101B, [0xA2, 0xBC, 0x00, 0xAA, 0x00, 0x40, 0x47, 0x70]}; + const IID IID_IOleDocumentSite = {0xB722BCC7, 0x4E68, 0x101B, [0xA2, 0xBC, 0x00, 0xAA, 0x00, 0x40, 0x47, 0x70]}; + const IID IID_IOleDocumentView = {0xB722BCC6, 0x4E68, 0x101B, [0xA2, 0xBC, 0x00, 0xAA, 0x00, 0x40, 0x47, 0x70]}; + const IID IID_IOleInPlaceActiveObject = {0x00000117, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleInPlaceFrame = {0x00000116, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleInPlaceObject = {0x00000113, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleInPlaceObjectWindowless = {0x1C2056CC, 0x5EF4, 0x101B, [0x8B, 0xC8, 0x00, 0xAA, 0x00, 0x3E, 0x3B, 0x29]}; + const IID IID_IOleInPlaceSite = {0x00000119, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleInPlaceSiteEx = {0x9C2CAD80, 0x3424, 0x11CF, [0xB6, 0x70, 0x00, 0xAA, 0x00, 0x4C, 0xD6, 0xD8]}; + const IID IID_IOleInPlaceSiteWindowless = {0x922EADA0, 0x3424, 0x11CF, [0xB6, 0x70, 0x00, 0xAA, 0x00, 0x4C, 0xD6, 0xD8]}; + const IID IID_IOleInPlaceUIWindow = {0x00000115, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleItemContainer = {0x0000011C, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleLink = {0x0000011D, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleManager = {0x0000011F, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleObject = {0x00000112, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleParentUndoUnit = {0xA1FAF330, 0xEF97, 0x11CE, [0x9B, 0xC9, 0x00, 0xAA, 0x00, 0x60, 0x8E, 0x01]}; + const IID IID_IOlePresObj = {0x00000120, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOleUndoManager = {0xD001F200, 0xEF97, 0x11CE, [0x9B, 0xC9, 0x00, 0xAA, 0x00, 0x60, 0x8E, 0x01]}; + const IID IID_IOleUndoUnit = {0x894AD3B0, 0xEF97, 0x11CE, [0x9B, 0xC9, 0x00, 0xAA, 0x00, 0x60, 0x8E, 0x01]}; + const IID IID_IOleWindow = {0x00000114, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOmHistory = {0xFECEAAA2, 0x8405, 0x11CF, [0x8B, 0xA1, 0x00, 0xAA, 0x00, 0x47, 0x6D, 0xA6]}; + const IID IID_IOmNavigator = {0xFECEAAA5, 0x8405, 0x11CF, [0x8B, 0xA1, 0x00, 0xAA, 0x00, 0x47, 0x6D, 0xA6]}; + const IID IID_IOpaqueDataInfo = {0x000001A9, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IOpenRowset = {0x0C733A69, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IOplockStorage = {0x8D19C834, 0x8879, 0x11D1, [0x83, 0xE9, 0x00, 0xC0, 0x4F, 0xC2, 0xC6, 0xD4]}; + const IID IID_IOpsProfileSimple = {0x7DD1362C, 0x28B6, 0x11D2, [0xBC, 0xA7, 0x00, 0xC0, 0x4F, 0xD9, 0x29, 0xDB]}; + const IID IID_IOptionArray = {0x22B6D492, 0x0F88, 0x11D1, [0xBA, 0x19, 0x00, 0xC0, 0x4F, 0xD9, 0x12, 0xD0]}; + const IID IID_IOverlappedCompletion = {0x521A28F0, 0xE40B, 0x11CE, [0xB2, 0xC9, 0x00, 0xAA, 0x00, 0x68, 0x09, 0x37]}; + const IID IID_IOverlappedStream = {0x49384070, 0xE40A, 0x11CE, [0xB2, 0xC9, 0x00, 0xAA, 0x00, 0x68, 0x09, 0x37]}; + const IID IID_IParentRowset = {0x0C733AAA, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IParseDisplayName = {0x0000011A, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IParser = {0x186442B0, 0x472E, 0x11D1, [0x89, 0x52, 0x00, 0xC0, 0x4F, 0xD6, 0x11, 0xD7]}; + const IID IID_IParserSession = {0x186442B1, 0x472E, 0x11D1, [0x89, 0x52, 0x00, 0xC0, 0x4F, 0xD6, 0x11, 0xD7]}; + const IID IID_IParserTreeProperties = {0x186442B2, 0x472E, 0x11D1, [0x89, 0x52, 0x00, 0xC0, 0x4F, 0xD6, 0x11, 0xD7]}; + const IID IID_IParserVerify = {0x186442B3, 0x472E, 0x11D1, [0x89, 0x52, 0x00, 0xC0, 0x4F, 0xD6, 0x11, 0xD7]}; + const IID IID_IPassportClientServices = {0xB30F7305, 0x5967, 0x45D1, [0xB7, 0xBC, 0xD6, 0xEB, 0x71, 0x63, 0xD7, 0x70]}; + const IID IID_IPeerFactory = {0x6663F9D3, 0xB482, 0x11D1, [0x89, 0xC6, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4]}; + const IID IID_IPendingProxyConnection = {0xB68E5043, 0x3E3D, 0x4CC2, [0xB9, 0xC1, 0x5F, 0x8F, 0x88, 0xFE, 0xE8, 0x1C]}; + const IID IID_IPerPropertyBrowsing = {0x376BD3AA, 0x3845, 0x101B, [0x84, 0xED, 0x08, 0x00, 0x2B, 0x2E, 0xC7, 0x13]}; + const IID IID_IPerPropertyBrowsing2 = {0x51973C54, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IPersist = {0x0000010C, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IPersistentDataChannel = {0xA180E934, 0xD92A, 0x415D, [0x91, 0x44, 0x75, 0x9F, 0x80, 0x54, 0xE8, 0xF6]}; + const IID IID_IPersistFile = {0x0000010B, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IPersistFolder = {0x000214EA, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IPersistFolder2 = {0x1AC3D9F0, 0x175C, 0x11D1, [0x95, 0xBE, 0x00, 0x60, 0x97, 0x97, 0xEA, 0x4F]}; + const IID IID_IPersistFolder3 = {0xCEF04FDF, 0xFE72, 0x11D2, [0x87, 0xA5, 0x00, 0xC0, 0x4F, 0x68, 0x37, 0xCF]}; + const IID IID_IPersistHistory = {0x91A565C1, 0xE38F, 0x11D0, [0x94, 0xBF, 0x00, 0xA0, 0xC9, 0x05, 0x5C, 0xBF]}; + const IID IID_IPersistIDList = {0x1079ACFC, 0x29BD, 0x11D3, [0x8E, 0x0D, 0x00, 0xC0, 0x4F, 0x68, 0x37, 0xD5]}; + const IID IID_IPersistMemory = {0xBD1AE5E0, 0xA6AE, 0x11CE, [0xBD, 0x37, 0x50, 0x42, 0x00, 0xC1, 0x00, 0x00]}; + const IID IID_IPersistMoniker = {0x79EAC9C9, 0xBAF9, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IPersistNetConnection = {0xFAEDCF59, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_IPersistPropertyBag = {0x37D84F60, 0x42CB, 0x11CE, [0x81, 0x35, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51]}; + const IID IID_IPersistPropertyBag2 = {0x22F55881, 0x280B, 0x11D0, [0xA8, 0xA9, 0x00, 0xA0, 0xC9, 0x0C, 0x20, 0x04]}; + const IID IID_IPersistQuery = {0x1A3114B8, 0xA62E, 0x11D0, [0xA6, 0xC5, 0x00, 0xA0, 0xC9, 0x06, 0xAF, 0x45]}; + const IID IID_IPersistStorage = {0x0000010A, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IPersistStream = {0x00000109, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IPersistStreamInit = {0x7FD52380, 0x4E07, 0x101B, [0xAE, 0x2D, 0x08, 0x00, 0x2B, 0x2E, 0xC7, 0x13]}; + const IID IID_IPhraseSink = {0xCC906FF0, 0xC058, 0x101A, [0xB5, 0x54, 0x08, 0x00, 0x2B, 0x33, 0xB0, 0xE6]}; + const IID IID_IPicture = {0x7BF80980, 0xBF32, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID IID_IPictureDisp = {0x7BF80981, 0xBF32, 0x101A, [0x8B, 0xBB, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID IID_IPipeByte = {0xDB2F3ACA, 0x2F86, 0x11D1, [0x8E, 0x04, 0x00, 0xC0, 0x4F, 0xB9, 0x98, 0x9A]}; + const IID IID_IPipeDouble = {0xDB2F3ACE, 0x2F86, 0x11D1, [0x8E, 0x04, 0x00, 0xC0, 0x4F, 0xB9, 0x98, 0x9A]}; + const IID IID_IPipeLong = {0xDB2F3ACC, 0x2F86, 0x11D1, [0x8E, 0x04, 0x00, 0xC0, 0x4F, 0xB9, 0x98, 0x9A]}; + const IID IID_IPointerInactive = {0x55980BA0, 0x35AA, 0x11CF, [0xB6, 0x71, 0x00, 0xAA, 0x00, 0x4C, 0xD6, 0xD8]}; + const IID IID_IPrimaryControlChannel = {0x1A2E8B62, 0x9012, 0x4BE6, [0x84, 0xAE, 0x32, 0xBD, 0x66, 0xBA, 0x65, 0x7A]}; + const IID IID_IPrint = {0xB722BCC9, 0x4E68, 0x101B, [0xA2, 0xBC, 0x00, 0xAA, 0x00, 0x40, 0x47, 0x70]}; + const IID IID_IPrintDialogCallback = {0x5852A2C3, 0x6530, 0x11D1, [0xB6, 0xA3, 0x00, 0x00, 0xF8, 0x75, 0x7B, 0xF9]}; + const IID IID_IPrintDialogServices = {0x509AAEDA, 0x5639, 0x11D1, [0xB6, 0xA1, 0x00, 0x00, 0xF8, 0x75, 0x7B, 0xF9]}; + const IID IID_IPrivacyServices = {0x3050F84B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IPrivateDispatch = {0x86AB4BBE, 0x65F6, 0x11D1, [0x8C, 0x13, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IPrivateUnknown = {0x89126BAB, 0x6EAD, 0x11D1, [0x8C, 0x18, 0x00, 0xC0, 0x4F, 0xD8, 0xD5, 0x03]}; + const IID IID_IPrivSyncMgrSynchronizeInvoke = {0x6295DF2E, 0x35EE, 0x11D1, [0x87, 0x07, 0x00, 0xC0, 0x4F, 0xD9, 0x33, 0x27]}; + const IID IID_IProcessDebugManager = {0x51973C2F, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IProcessDebugManager32 = {0x51973C2F, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IProcessDebugManager64 = {0x56B9FC1C, 0x63A9, 0x4CC1, [0xAC, 0x21, 0x08, 0x7D, 0x69, 0xA1, 0x7F, 0xAB]}; + const IID IID_IProcessInitControl = {0x72380D55, 0x8D2B, 0x43A3, [0x85, 0x13, 0x2B, 0x6E, 0xF3, 0x14, 0x34, 0xE9]}; + const IID IID_IProfferService = {0xCB728B20, 0xF786, 0x11CE, [0x92, 0xAD, 0x00, 0xAA, 0x00, 0xA7, 0x4C, 0xD0]}; + const IID IID_IProgressDialog = {0xEBBC7C04, 0x315E, 0x11D2, [0xB6, 0x2F, 0x00, 0x60, 0x97, 0xDF, 0x5B, 0xD4]}; + const IID IID_IProgressNotify = {0xA9D758A0, 0x4617, 0x11CF, [0x95, 0xFC, 0x00, 0xAA, 0x00, 0x68, 0x0D, 0xB4]}; + const IID IID_IProgSink = {0x3050F371, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IPropertyBag = {0x55272A00, 0x42CB, 0x11CE, [0x81, 0x35, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51]}; + const IID IID_IPropertyBag2 = {0x22F55882, 0x280B, 0x11D0, [0xA8, 0xA9, 0x00, 0xA0, 0xC9, 0x0C, 0x20, 0x04]}; + const IID IID_IPropertyBagEx = {0x20011801, 0x5DE6, 0x11D1, [0x8E, 0x38, 0x00, 0xC0, 0x4F, 0xB9, 0x38, 0x6D]}; + const IID IID_IPropertyFrame = {0xB196B28A, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IPropertyMap = {0xC733E4A2, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_IPropertyMapper = {0xB324B226, 0x41A0, 0x11D0, [0x8C, 0x91, 0x00, 0x20, 0xAF, 0x1D, 0x74, 0x0E]}; + const IID IID_IPropertyNotifySink = {0x9BFBBC02, 0xEFF1, 0x101A, [0x84, 0xED, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IPropertyPage = {0xB196B28D, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IPropertyPage2 = {0x01E44665, 0x24AC, 0x101B, [0x84, 0xED, 0x08, 0x00, 0x2B, 0x2E, 0xC7, 0x13]}; + const IID IID_IPropertyPageSite = {0xB196B28C, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IPropertySetContainer = {0xB4FFAE60, 0xA7CA, 0x11CD, [0xB5, 0x8B, 0x00, 0x00, 0x6B, 0x82, 0x91, 0x56]}; + const IID IID_IPropertySetStorage = {0x0000013A, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IPropertyStorage = {0x00000138, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IPropertyUI = {0x757A7D9F, 0x919A, 0x4118, [0x99, 0xD7, 0xDB, 0xB2, 0x08, 0xC8, 0xCC, 0x66]}; + const IID IID_IPropSheetPage = {0x000214F6, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IProvideClassInfo = {0xB196B283, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_IProvideClassInfo2 = {0xA6BC3AC0, 0xDBAA, 0x11CE, [0x9D, 0xE3, 0x00, 0xAA, 0x00, 0x4B, 0xB8, 0x51]}; + const IID IID_IProvideExpressionContexts = {0x51973C41, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IProvideMoniker = {0x0C733A4D, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IProvideMultipleClassInfo = {0xA7ABA9C1, 0x8983, 0x11CF, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID IID_IProxy = {0x00000027, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IProxyManager = {0x00000008, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IPSFactory = {0x00000009, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IPSFactoryBuffer = {0xD5F569D0, 0x593B, 0x101A, [0xB5, 0x69, 0x08, 0x00, 0x2B, 0x2D, 0xBF, 0x7A]}; + const IID IID_IPublishedApp = {0x1BC752E0, 0x9046, 0x11D1, [0xB8, 0xB3, 0x00, 0x60, 0x08, 0x05, 0x93, 0x82]}; + const IID IID_IPublishingWizard = {0xAA9198BB, 0xCCEC, 0x472D, [0xBE, 0xED, 0x19, 0xA4, 0xF6, 0x73, 0x3F, 0x7A]}; + const IID IID_IQualityControl = {0x6BC096AB, 0x0CE6, 0x11D1, [0xBA, 0xAE, 0x00, 0xC0, 0x4F, 0xC2, 0xE2, 0x0D]}; + const IID IID_IQuery = {0x0C733A51, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IQueryAssociations = {0xC46CA590, 0x3C3F, 0x11D2, [0xBE, 0xE6, 0x00, 0x00, 0xF8, 0x05, 0xCA, 0x57]}; + const IID IID_IQueryCancelAutoPlay = {0xDDEFE873, 0x6997, 0x4E68, [0xBE, 0x26, 0x39, 0xB6, 0x33, 0xAD, 0xBE, 0x12]}; + const IID IID_IQueryContinue = {0x7307055C, 0xB24A, 0x486B, [0x9F, 0x25, 0x16, 0x3E, 0x59, 0x7A, 0x28, 0xA9]}; + const IID IID_IQueryForm = {0x8CFCEE30, 0x39BD, 0x11D0, [0xB8, 0xD1, 0x00, 0xA0, 0x24, 0xAB, 0x2D, 0xBB]}; + const IID IID_IQueryFrame = {0x7E8C7C20, 0x7C9D, 0x11D0, [0x91, 0x3F, 0x00, 0xAA, 0x00, 0xC1, 0x6E, 0x65]}; + const IID IID_IQueryHandler = {0xA60CC73F, 0xE0FC, 0x11D0, [0x97, 0x50, 0x00, 0xA0, 0xC9, 0x06, 0xAF, 0x45]}; + const IID IID_IQueryInfo = {0x00021500, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IQuickActivate = {0xCF51ED10, 0x62FE, 0x11CF, [0xBF, 0x86, 0x00, 0xA0, 0xC9, 0x03, 0x48, 0x36]}; + const IID IID_IRadioButton = {0x3050F69B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IRatingNotification = {0x639447BD, 0xB2D3, 0x44B9, [0x9F, 0xB0, 0x51, 0x0F, 0x23, 0xCB, 0x45, 0xE4]}; + const IID IID_IReadData = {0x0C733A6A, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IReadEvents = {0xF64AEFDE, 0x3376, 0x11D1, [0xBE, 0x5B, 0x00, 0xC0, 0x4F, 0xC9, 0xE2, 0xBB]}; + const IID IID_IRecalcEngine = {0x3050F496, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IRecalcHost = {0x3050F497, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IRecalcHostDebug = {0x3050F5F7, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IRecalcProperty = {0x3050F5D6, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IReconcilableObject = {0x99180162, 0xDA16, 0x101A, [0x93, 0x5C, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IReconcileInitiator = {0x99180161, 0xDA16, 0x101A, [0x93, 0x5C, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IRecordInfo = {0x0000002F, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IRedbookDiscMaster = {0xE3BC42CD, 0x4E5C, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID IID_IReferenceClock = {0x56A86897, 0x0AD4, 0x11CE, [0xB0, 0x3A, 0x00, 0x20, 0xAF, 0x0B, 0xA7, 0x70]}; + const IID IID_IRegisterProvider = {0x0C733AB9, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRegisterVirusScanEngine = {0x0825E060, 0xB961, 0x11CF, [0xAA, 0xFA, 0x00, 0xAA, 0x00, 0xB6, 0x01, 0x5C]}; + const IID IID_IReleaseMarshalBuffers = {0xEB0CB9E8, 0x7996, 0x11D2, [0x87, 0x2E, 0x00, 0x00, 0xF8, 0x08, 0x08, 0x59]}; + const IID IID_IRemoteCallBack = {0x8947C648, 0x3833, 0x11D1, [0x86, 0x82, 0x00, 0xC0, 0x4F, 0xBF, 0xE1, 0x71]}; + const IID IID_IRemoteComputer = {0x000214FE, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IRemoteDebugApplication = {0x51973C30, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IRemoteDebugApplicationEvents = {0x51973C33, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IRemoteDebugApplicationEx = {0x51973C01, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IRemoteDebugApplicationThread = {0x51973C37, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_IRemoteDebugApplicationThreadEx = {0xB9B32B0C, 0x9147, 0x11D1, [0x94, 0xEA, 0x00, 0xC0, 0x4F, 0xA3, 0x02, 0xA1]}; + const IID IID_IRemoteDelaydC = {0x394540A0, 0x6FCF, 0x11D0, [0xAC, 0xE0, 0x00, 0x00, 0xF8, 0x01, 0x14, 0xD3]}; + const IID IID_IRemoteESP = {0xE99A04AB, 0xAB95, 0x11D0, [0xBE, 0x96, 0x00, 0xA0, 0xC9, 0x49, 0x89, 0xDE]}; + const IID IID_IRemoteFinder = {0x944AD532, 0xB09D, 0x11CE, [0xB5, 0x9C, 0x00, 0xAA, 0x00, 0x6C, 0xB3, 0x7D]}; + const IID IID_IRemoteStats = {0x944AD531, 0xB09D, 0x11CE, [0xB5, 0x9C, 0x00, 0xAA, 0x00, 0x6C, 0xB3, 0x7D]}; + const IID IID_IRequest = {0x6BC096A7, 0x0CE6, 0x11D1, [0xBA, 0xAE, 0x00, 0xC0, 0x4F, 0xC2, 0xE2, 0x0D]}; + const IID IID_IRequestHandler = {0x6BC096AA, 0x0CE6, 0x11D1, [0xBA, 0xAE, 0x00, 0xC0, 0x4F, 0xC2, 0xE2, 0x0D]}; + const IID IID_IRequestSource = {0x6BC096A9, 0x0CE6, 0x11D1, [0xBA, 0xAE, 0x00, 0xC0, 0x4F, 0xC2, 0xE2, 0x0D]}; + const IID IID_IRequestState = {0x6BC096BA, 0x0CE6, 0x11D1, [0xBA, 0xAE, 0x00, 0xC0, 0x4F, 0xC2, 0xE2, 0x0D]}; + const IID IID_IResolveShellLink = {0x5CD52983, 0x9449, 0x11D2, [0x96, 0x3A, 0x00, 0xC0, 0x4F, 0x79, 0xAD, 0xF0]}; + const IID IID_IRichEditOle = {0x00020D00, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IRichEditOleCallback = {0x00020D03, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IRootStorage = {0x00000012, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IROTData = {0xF29F6BC0, 0x5021, 0x11CE, [0xAA, 0x15, 0x00, 0x00, 0x69, 0x01, 0x29, 0x3F]}; + const IID IID_IRow = {0x0C733AB4, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowChange = {0x0C733AB5, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowInfo = {0x0C733AC1, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowPosition = {0x0C733A94, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowPositionChange = {0x0997A571, 0x126E, 0x11D0, [0x9F, 0x8A, 0x00, 0xA0, 0xC9, 0xA0, 0x63, 0x1E]}; + const IID IID_IRowSchemaChange = {0x0C733AAE, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowset = {0x0C733A7C, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetAsynch = {0x0C733A0F, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetBookmark = {0x0C733AC2, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetChange = {0x0C733A05, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetChapterMember = {0x0C733AA8, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetCopyRows = {0x0C733A6B, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetCurrentIndex = {0x0C733ABD, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetExactScroll = {0x0C733A7F, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetFind = {0x0C733A9D, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetIdentity = {0x0C733A09, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetIndex = {0x0C733A82, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetInfo = {0x0C733A55, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetKeys = {0x0C733A12, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetLocate = {0x0C733A7D, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetNewRowAfter = {0x0C733A71, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetNextRowset = {0x0C733A72, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetNotify = {0x0C733A83, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetQueryStatus = {0xA7AC77ED, 0xF8D7, 0x11CE, [0xA7, 0x98, 0x00, 0x20, 0xF8, 0x00, 0x80, 0x24]}; + const IID IID_IRowsetRefresh = {0x0C733AA9, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetResynch = {0x0C733A84, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetScroll = {0x0C733A7E, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetUpdate = {0x0C733A6D, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetView = {0x0C733A99, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetWatchAll = {0x0C733A73, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetWatchNotify = {0x0C733A44, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetWatchRegion = {0x0C733A45, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRowsetWithParameters = {0x0C733A6E, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IRpcChannel = {0x00000004, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IRpcChannelBuffer = {0xD5F56B60, 0x593B, 0x101A, [0xB5, 0x69, 0x08, 0x00, 0x2B, 0x2D, 0xBF, 0x7A]}; + const IID IID_IRpcChannelBuffer2 = {0x594F31D0, 0x7F19, 0x11D0, [0xB1, 0x94, 0x00, 0xA0, 0xC9, 0x0D, 0xC8, 0xBF]}; + const IID IID_IRpcChannelBuffer3 = {0x25B15600, 0x0115, 0x11D0, [0xBF, 0x0D, 0x00, 0xAA, 0x00, 0xB8, 0xDF, 0xD2]}; + const IID IID_IRpcHelper = {0x00000149, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IRpcOptions = {0x00000144, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IRpcProxy = {0x00000007, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IRpcProxyBuffer = {0xD5F56A34, 0x593B, 0x101A, [0xB5, 0x69, 0x08, 0x00, 0x2B, 0x2D, 0xBF, 0x7A]}; + const IID IID_IRpcStub = {0x00000005, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IRpcStubBuffer = {0xD5F56AFC, 0x593B, 0x101A, [0xB5, 0x69, 0x08, 0x00, 0x2B, 0x2D, 0xBF, 0x7A]}; + const IID IID_IRpcSyntaxNegotiate = {0x58A08519, 0x24C8, 0x4935, [0xB4, 0x82, 0x3F, 0xD8, 0x23, 0x33, 0x3A, 0x4F]}; + const IID IID_IRTC = {0x4811EA40, 0xB582, 0x11CE, [0xB5, 0xAF, 0x00, 0xAA, 0x00, 0x6C, 0xB3, 0x7D]}; + const IID IID_IRTCBuddy = {0xFCB136C8, 0x7B90, 0x4E0C, [0xBE, 0xFE, 0x56, 0xED, 0xF0, 0xBA, 0x6F, 0x1C]}; + const IID IID_IRTCBuddyEvent = {0xF36D755D, 0x17E6, 0x404E, [0x95, 0x4F, 0x0F, 0xC0, 0x75, 0x74, 0xC7, 0x8D]}; + const IID IID_IRTCClient = {0x07829E45, 0x9A34, 0x408E, [0xA0, 0x11, 0xBD, 0xDF, 0x13, 0x48, 0x7C, 0xD1]}; + const IID IID_IRTCClientEvent = {0x2B493B7A, 0x3CBA, 0x4170, [0x9C, 0x8B, 0x76, 0xA9, 0xDA, 0xCD, 0xD6, 0x44]}; + const IID IID_IRTCClientPresence = {0x11C3CBCC, 0x0744, 0x42D1, [0x96, 0x8A, 0x51, 0xAA, 0x1B, 0xB2, 0x74, 0xC6]}; + const IID IID_IRTCClientProvisioning = {0xB9F5CF06, 0x65B9, 0x4A80, [0xA0, 0xE6, 0x73, 0xCA, 0xE3, 0xEF, 0x38, 0x22]}; + const IID IID_IRTCCollection = {0xEC7C8096, 0xB918, 0x4044, [0x94, 0xF1, 0xE4, 0xFB, 0xA0, 0x36, 0x1D, 0x5C]}; + const IID IID_IRTCEnumBuddies = {0xF7296917, 0x5569, 0x4B3B, [0xB3, 0xAF, 0x98, 0xD1, 0x14, 0x4B, 0x2B, 0x87]}; + const IID IID_IRTCEnumParticipants = {0xFCD56F29, 0x4A4F, 0x41B2, [0xBA, 0x5C, 0xF5, 0xBC, 0xCC, 0x06, 0x0B, 0xF6]}; + const IID IID_IRTCEnumProfiles = {0x29B7C41C, 0xED82, 0x4BCA, [0x84, 0xAD, 0x39, 0xD5, 0x10, 0x1B, 0x58, 0xE3]}; + const IID IID_IRTCEnumWatchers = {0xA87D55D7, 0xDB74, 0x4ED1, [0x9C, 0xA4, 0x77, 0xA0, 0xE4, 0x1B, 0x41, 0x3E]}; + const IID IID_IRTCEventNotification = {0x13FA24C7, 0x5748, 0x4B21, [0x91, 0xF5, 0x73, 0x97, 0x60, 0x9C, 0xE7, 0x47]}; + const IID IID_IRTCIntensityEvent = {0x4C23BF51, 0x390C, 0x4992, [0xA4, 0x1D, 0x41, 0xEE, 0xC0, 0x5B, 0x2A, 0x4B]}; + const IID IID_IRTCMediaEvent = {0x099944FB, 0xBCDA, 0x453E, [0x8C, 0x41, 0xE1, 0x3D, 0xA2, 0xAD, 0xF7, 0xF3]}; + const IID IID_IRTCMessagingEvent = {0xD3609541, 0x1B29, 0x4DE5, [0xA4, 0xAD, 0x5A, 0xEB, 0xAF, 0x31, 0x95, 0x12]}; + const IID IID_IRTCParticipant = {0xAE86ADD5, 0x26B1, 0x4414, [0xAF, 0x1D, 0xB9, 0x4C, 0xD9, 0x38, 0xD7, 0x39]}; + const IID IID_IRTCParticipantStateChangeEvent = {0x09BCB597, 0xF0FA, 0x48F9, [0xB4, 0x20, 0x46, 0x8C, 0xEA, 0x7F, 0xDE, 0x04]}; + const IID IID_IRTCPresenceContact = {0x8B22F92C, 0xCD90, 0x42DB, [0xA7, 0x33, 0x21, 0x22, 0x05, 0xC3, 0xE3, 0xDF]}; + const IID IID_IRTCProfile = {0xD07ECA9E, 0x4062, 0x4DD4, [0x9E, 0x7D, 0x72, 0x2A, 0x49, 0xBA, 0x73, 0x03]}; + const IID IID_IRTCProfileEvent = {0xD6D5AB3B, 0x770E, 0x43E8, [0x80, 0x0A, 0x79, 0xB0, 0x62, 0x39, 0x5F, 0xCA]}; + const IID IID_IRTCRegistrationStateChangeEvent = {0x62D0991B, 0x50AB, 0x4F02, [0xB9, 0x48, 0xCA, 0x94, 0xF2, 0x6F, 0x8F, 0x95]}; + const IID IID_IRTCSession = {0x387C8086, 0x99BE, 0x42FB, [0x99, 0x73, 0x7C, 0x0F, 0xC0, 0xCA, 0x9F, 0xA8]}; + const IID IID_IRTCSessionOperationCompleteEven = {0xA6BFF4C0, 0xF7C8, 0x4D3C, [0x9A, 0x41, 0x35, 0x50, 0xF7, 0x8A, 0x95, 0xB0]}; + const IID IID_IRTCSessionStateChangeEvent = {0xB5BAD703, 0x5952, 0x48B3, [0x93, 0x21, 0x7F, 0x45, 0x00, 0x52, 0x15, 0x06]}; + const IID IID_IRTCWatcher = {0xC7CEDAD8, 0x346B, 0x4D1B, [0xAC, 0x02, 0xA2, 0x08, 0x8D, 0xF9, 0xBE, 0x4F]}; + const IID IID_IRTCWatcherEvent = {0xF30D7261, 0x587A, 0x424F, [0x82, 0x2C, 0x31, 0x27, 0x88, 0xF4, 0x35, 0x48]}; + const IID IID_IRunnableObject = {0x00000126, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IRunnableTask = {0x85788D00, 0x6807, 0x11D0, [0xB8, 0x10, 0x00, 0xC0, 0x4F, 0xD7, 0x06, 0xEC]}; + const IID IID_IRunningObjectTable = {0x00000010, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IScheduleGroup = {0xC733E4A6, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID IID_IScopedOperations = {0x0C733AB0, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IScriptEntry = {0x0AEE2A95, 0xBCBB, 0x11D0, [0x8C, 0x72, 0x00, 0xC0, 0x4F, 0xC2, 0xB0, 0x85]}; + const IID IID_IScriptErrorList = {0xF3470F24, 0x15FD, 0x11D2, [0xBB, 0x2E, 0x00, 0x80, 0x5F, 0xF7, 0xEF, 0xCA]}; + const IID IID_IScriptNode = {0x0AEE2A94, 0xBCBB, 0x11D0, [0x8C, 0x72, 0x00, 0xC0, 0x4F, 0xC2, 0xB0, 0x85]}; + const IID IID_IScriptScriptlet = {0x0AEE2A96, 0xBCBB, 0x11D0, [0x8C, 0x72, 0x00, 0xC0, 0x4F, 0xC2, 0xB0, 0x85]}; + const IID IID_IScrollBar = {0x3050F689, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ISdo = {0x56BC53DE, 0x96DB, 0x11D1, [0xBF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]}; + const IID IID_ISdoCollection = {0x56BC53E2, 0x96DB, 0x11D1, [0xBF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]}; + const IID IID_ISdoDictionaryOld = {0xD432E5F4, 0x53D8, 0x11D2, [0x9A, 0x3A, 0x00, 0xC0, 0x4F, 0xB9, 0x98, 0xAC]}; + const IID IID_ISdoMachine = {0x479F6E75, 0x49A2, 0x11D2, [0x8E, 0xCA, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x19]}; + const IID IID_ISdoServiceControl = {0x479F6E74, 0x49A2, 0x11D2, [0x8E, 0xCA, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x19]}; + const IID IID_ISearch = {0xBA9239A4, 0x3DD5, 0x11D2, [0xBF, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x36, 0x61]}; + const IID IID_ISearchAssistantOC = {0x72423E8F, 0x8011, 0x11D2, [0xBE, 0x79, 0x00, 0xA0, 0xC9, 0xA8, 0x3D, 0xA1]}; + const IID IID_ISearchAssistantOC2 = {0x72423E8F, 0x8011, 0x11D2, [0xBE, 0x79, 0x00, 0xA0, 0xC9, 0xA8, 0x3D, 0xA2]}; + const IID IID_ISearchAssistantOC3 = {0x72423E8F, 0x8011, 0x11D2, [0xBE, 0x79, 0x00, 0xA0, 0xC9, 0xA8, 0x3D, 0xA3]}; + const IID IID_ISearchCommandExt = {0x1D2EFD50, 0x75CE, 0x11D1, [0xB7, 0x5A, 0x00, 0xA0, 0xC9, 0x05, 0x64, 0xFE]}; + const IID IID_ISearchContext = {0x09F656A2, 0x41AF, 0x480C, [0x88, 0xF7, 0x16, 0xCC, 0x0D, 0x16, 0x46, 0x15]}; + const IID IID_ISearches = {0x47C922A2, 0x3DD5, 0x11D2, [0xBF, 0x8B, 0x00, 0xC0, 0x4F, 0xB9, 0x36, 0x61]}; + const IID IID_ISearchQueryHits = {0xED8CE7E0, 0x106C, 0x11CE, [0x84, 0xE2, 0x00, 0xAA, 0x00, 0x4B, 0x99, 0x86]}; + const IID IID_ISecondaryControlChannel = {0xA23F9D10, 0x714C, 0x41FE, [0x84, 0x71, 0xFF, 0xB1, 0x9B, 0xC2, 0x84, 0x54]}; + const IID IID_ISecureUrlHost = {0xC81984C4, 0x74C8, 0x11D2, [0xBA, 0xA9, 0x00, 0xC0, 0x4F, 0xC2, 0x04, 0x0E]}; + const IID IID_ISecurityInfo = {0x0C733AA4, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ISegment = {0x3050F683, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ISegmentList = {0x3050F605, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ISegmentListIterator = {0x3050F692, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ISelectionObject2 = {0x3050F7FC, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ISelectionServices = {0x3050F684, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ISelectionServicesListener = {0x3050F699, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ISensLogon = {0xD597BAB3, 0x5B9F, 0x11D1, [0x8D, 0xD2, 0x00, 0xAA, 0x00, 0x4A, 0xBD, 0x5E]}; + const IID IID_ISensLogon2 = {0xD597BAB4, 0x5B9F, 0x11D1, [0x8D, 0xD2, 0x00, 0xAA, 0x00, 0x4A, 0xBD, 0x5E]}; + const IID IID_ISensNetwork = {0xD597BAB1, 0x5B9F, 0x11D1, [0x8D, 0xD2, 0x00, 0xAA, 0x00, 0x4A, 0xBD, 0x5E]}; + const IID IID_ISensOnNow = {0xD597BAB2, 0x5B9F, 0x11D1, [0x8D, 0xD2, 0x00, 0xAA, 0x00, 0x4A, 0xBD, 0x5E]}; + const IID IID_ISequenceNumber = {0x3050F6C1, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ISequentialStream = {0x0C733A30, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IServerSecurity = {0x0000013E, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IServiceProvider = {0x6D5140C1, 0x7436, 0x11CE, [0x80, 0x34, 0x00, 0xAA, 0x00, 0x60, 0x09, 0xFA]}; + const IID IID_ISessionProperties = {0x0C733A85, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ISetNextStatement = {0x51973C03, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_ISharedAccessBeacon = {0xFAEDCF6B, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_ISharedAccessBeaconFinder = {0xFAEDCF67, 0x31FE, 0x11D1, [0xAA, 0xD2, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_IShellApp = {0xA3E14960, 0x935F, 0x11D1, [0xB8, 0xB8, 0x00, 0x60, 0x08, 0x05, 0x93, 0x82]}; + const IID IID_IShellBrowser = {0x000214E2, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellChangeNotify = {0xD82BE2B1, 0x5764, 0x11D0, [0xA9, 0x6E, 0x00, 0xC0, 0x4F, 0xD7, 0x05, 0xA2]}; + const IID IID_IShellCopyHookA = {0x000214EF, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellCopyHookW = {0x000214FC, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellDetails = {0x000214EC, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellDetails3 = {0xD2A105C0, 0x87D5, 0x11D1, [0x83, 0x91, 0x00, 0x00, 0xF8, 0x04, 0x61, 0xCF]}; + const IID IID_IShellDispatch = {0xD8F015C0, 0xC278, 0x11CE, [0xA4, 0x9E, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IShellDispatch2 = {0xA4C6892C, 0x3BA9, 0x11D2, [0x9D, 0xEA, 0x00, 0xC0, 0x4F, 0xB1, 0x61, 0x62]}; + const IID IID_IShellDispatch3 = {0x177160CA, 0xBB5A, 0x411C, [0x84, 0x1D, 0xBD, 0x38, 0xFA, 0xCD, 0xEA, 0xA0]}; + const IID IID_IShellDispatch4 = {0xEFD84B2D, 0x4BCF, 0x4298, [0xBE, 0x25, 0xEB, 0x54, 0x2A, 0x59, 0xFB, 0xDA]}; + const IID IID_IShellExecuteHookA = {0x000214F5, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellExecuteHookW = {0x000214FB, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellExtInit = {0x000214E8, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellFavoritesNameSpace = {0x55136804, 0xB2DE, 0x11D1, [0xB9, 0xF2, 0x00, 0xA0, 0xC9, 0x8B, 0xC5, 0x47]}; + const IID IID_IShellFolder = {0x000214E6, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellFolder2 = {0x93F2F68C, 0x1D1B, 0x11D3, [0xA3, 0x0E, 0x00, 0xC0, 0x4F, 0x79, 0xAB, 0xD1]}; + const IID IID_IShellFolderViewCB = {0x2047E320, 0xF2A9, 0x11CE, [0xAE, 0x65, 0x08, 0x00, 0x2B, 0x2E, 0x12, 0x62]}; + const IID IID_IShellFolderViewDual = {0xE7A1AF80, 0x4D96, 0x11CF, [0x96, 0x0C, 0x00, 0x80, 0xC7, 0xF4, 0xEE, 0x85]}; + const IID IID_IShellFolderViewDual2 = {0x31C147B6, 0x0ADE, 0x4A3C, [0xB5, 0x14, 0xDD, 0xF9, 0x32, 0xEF, 0x6D, 0x17]}; + const IID IID_IShellIcon = {0x000214E5, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellIconOverlay = {0x7D688A70, 0xC613, 0x11D0, [0x99, 0x9B, 0x00, 0xC0, 0x4F, 0xD6, 0x55, 0xE1]}; + const IID IID_IShellIconOverlayIdentifier = {0x0C6C4200, 0xC589, 0x11D0, [0x99, 0x9A, 0x00, 0xC0, 0x4F, 0xD6, 0x55, 0xE1]}; + const IID IID_IShellImageData = {0xBFDEEC12, 0x8040, 0x4403, [0xA5, 0xEA, 0x9E, 0x07, 0xDA, 0xFC, 0xF5, 0x30]}; + const IID IID_IShellImageDataAbort = {0x53FB8E58, 0x50C0, 0x4003, [0xB4, 0xAA, 0x0C, 0x8D, 0xF2, 0x8E, 0x7F, 0x3A]}; + const IID IID_IShellImageDataFactory = {0x9BE8ED5C, 0xEDAB, 0x4D75, [0x90, 0xF3, 0xBD, 0x5B, 0xDB, 0xB2, 0x1C, 0x82]}; + const IID IID_IShellLinkA = {0x000214EE, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellLinkDataList = {0x45E2B4AE, 0xB1C3, 0x11D0, [0xB9, 0x2F, 0x00, 0xA0, 0xC9, 0x03, 0x12, 0xE1]}; + const IID IID_IShellLinkDual = {0x88A05C00, 0xF000, 0x11CE, [0x83, 0x50, 0x44, 0x45, 0x53, 0x54, 0x00, 0x00]}; + const IID IID_IShellLinkDual2 = {0x317EE249, 0xF12E, 0x11D2, [0xB1, 0xE4, 0x00, 0xC0, 0x4F, 0x8E, 0xEB, 0x3E]}; + const IID IID_IShellLinkW = {0x000214F9, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellNameSpace = {0xE572D3C9, 0x37BE, 0x4AE2, [0x82, 0x5D, 0xD5, 0x21, 0x76, 0x3E, 0x31, 0x08]}; + const IID IID_IShellPropSheetExt = {0x000214E9, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellUIHelper = {0x729FE2F8, 0x1EA8, 0x11D1, [0x8F, 0x85, 0x00, 0xC0, 0x4F, 0xC2, 0xFB, 0xE1]}; + const IID IID_IShellView = {0x000214E3, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IShellView2 = {0x88E39E80, 0x3578, 0x11CF, [0xAE, 0x69, 0x08, 0x00, 0x2B, 0x2E, 0x12, 0x62]}; + const IID IID_IShellWindows = {0x85CB6900, 0x4D95, 0x11CF, [0x96, 0x0C, 0x00, 0x80, 0xC7, 0xF4, 0xEE, 0x85]}; + const IID IID_ISimpleCommandCreator = {0x5E341AB7, 0x02D0, 0x11D1, [0x90, 0x0C, 0x00, 0xA0, 0xC9, 0x06, 0x37, 0x96]}; + const IID IID_ISimpleConnectionPoint = {0x51973C3E, 0xCB0C, 0x11D0, [0xB5, 0xC9, 0x00, 0xA0, 0x24, 0x4A, 0x0E, 0x7A]}; + const IID IID_ISimpleFrameSite = {0x742B0E01, 0x14E6, 0x101B, [0x91, 0x4E, 0x00, 0xAA, 0x00, 0x30, 0x0C, 0xAB]}; + const IID IID_ISliderBar = {0x3050F68D, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ISniffStream = {0x4EF17940, 0x30E0, 0x11D0, [0xB7, 0x24, 0x00, 0xAA, 0x00, 0x6C, 0x1A, 0x01]}; + const IID IID_ISOAPRequest = {0xAD194525, 0x6E01, 0x4BCA, [0x92, 0x9C, 0x23, 0xC7, 0x38, 0x33, 0x36, 0xAF]}; + const IID IID_ISoftDistExt = {0xB15B8DC1, 0xC7E1, 0x11D0, [0x86, 0x80, 0x00, 0xAA, 0x00, 0xBD, 0xCB, 0x71]}; + const IID IID_ISourcesRowset = {0x0C733A1E, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ISpecialSystemProperties = {0x000001B9, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ISpecifyPropertyPages = {0xB196B28B, 0xBAB4, 0x101A, [0xB6, 0x9C, 0x00, 0xAA, 0x00, 0x34, 0x1D, 0x07]}; + const IID IID_ISpinButton = {0x3050F68B, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ISQLErrorInfo = {0x0C733A74, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IStandardActivator = {0x000001B8, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IStandardInfo = {0xF1D9C1A5, 0x9589, 0x40DD, [0xB6, 0x3D, 0x9B, 0xB0, 0xB3, 0x8A, 0x10, 0x22]}; + const IID IID_IStaticPortMapping = {0x6F10711F, 0x729B, 0x41E5, [0x93, 0xB8, 0xF2, 0x1D, 0x0F, 0x81, 0x8D, 0xF1]}; + const IID IID_IStaticPortMappingCollection = {0xCD1F3E77, 0x66D6, 0x4664, [0x82, 0xC7, 0x36, 0xDB, 0xB6, 0x41, 0xD0, 0xF1]}; + const IID IID_IStats = {0x944AD530, 0xB09D, 0x11CE, [0xB5, 0x9C, 0x00, 0xAA, 0x00, 0x6C, 0xB3, 0x7D]}; + const IID IID_IStdMarshalInfo = {0x00000018, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IStemmer = {0xEFBAF140, 0x7F42, 0x11CE, [0xBE, 0x57, 0x00, 0xAA, 0x00, 0x51, 0xFE, 0x20]}; + const IID IID_IStemSink = {0xFE77C330, 0x7F42, 0x11CE, [0xBE, 0x57, 0x00, 0xAA, 0x00, 0x51, 0xFE, 0x20]}; + const IID IID_IStorage = {0x0000000B, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IStream = {0x0000000C, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IStub = {0x00000026, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IStubManager = {0x00000006, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ISubDivisionProvider = {0x3050F4D2, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ISubscriptionAgentControl = {0xA89E8FF0, 0x70F4, 0x11D1, [0xBC, 0x7F, 0x00, 0xC0, 0x4F, 0xD9, 0x29, 0xDB]}; + const IID IID_ISubscriptionAgentEvents = {0xA89E8FF1, 0x70F4, 0x11D1, [0xBC, 0x7F, 0x00, 0xC0, 0x4F, 0xD9, 0x29, 0xDB]}; + const IID IID_ISubscriptionAgentShellExt = {0x81B184BA, 0xB302, 0x11D1, [0x85, 0x52, 0x00, 0xC0, 0x4F, 0xA3, 0x5C, 0x89]}; + const IID IID_ISubscriptionItem = {0xA97559F8, 0x6C4A, 0x11D1, [0xA1, 0xE8, 0x00, 0xC0, 0x4F, 0xC2, 0xFB, 0xE1]}; + const IID IID_ISubscriptionMgr = {0x085FB2C0, 0x0DF8, 0x11D1, [0x8F, 0x4B, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x3F]}; + const IID IID_ISubscriptionMgr2 = {0x614BC270, 0xAEDF, 0x11D1, [0xA1, 0xF9, 0x00, 0xC0, 0x4F, 0xC2, 0xFB, 0xE1]}; + const IID IID_ISubscriptionMgrPriv = {0xD66B399E, 0xAF1D, 0x11D1, [0xA1, 0xF9, 0x00, 0xC0, 0x4F, 0xC2, 0xFB, 0xE1]}; + const IID IID_ISubscriptionThrottler = {0x1E9B00E4, 0x9846, 0x11D1, [0xA1, 0xEE, 0x00, 0xC0, 0x4F, 0xC2, 0xFB, 0xE1]}; + const IID IID_ISupportErrorInfo = {0xDF0B3D60, 0x548F, 0x101B, [0x8E, 0x65, 0x08, 0x00, 0x2B, 0x2B, 0xD1, 0x19]}; + const IID IID_ISurrogate = {0x00000022, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ISWbemDateTime = {0x5E97458A, 0xCF77, 0x11D3, [0xB3, 0x8F, 0x00, 0x10, 0x5A, 0x1F, 0x47, 0x3A]}; + const IID IID_ISWbemEventSource = {0x27D54D92, 0x0EBE, 0x11D2, [0x8B, 0x22, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemLastError = {0xD962DB84, 0xD4BB, 0x11D1, [0x8B, 0x09, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemLocator = {0x76A6415B, 0xCB41, 0x11D1, [0x8B, 0x02, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemMethod = {0x422E8E90, 0xD955, 0x11D1, [0x8B, 0x09, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemMethodSet = {0xC93BA292, 0xD955, 0x11D1, [0x8B, 0x09, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemNamedValue = {0x76A64164, 0xCB41, 0x11D1, [0x8B, 0x02, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemNamedValueSet = {0xCF2376EA, 0xCE8C, 0x11D1, [0x8B, 0x05, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemObject = {0x76A6415A, 0xCB41, 0x11D1, [0x8B, 0x02, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemObjectEx = {0x269AD56A, 0x8A67, 0x4129, [0xBC, 0x8C, 0x05, 0x06, 0xDC, 0xFE, 0x98, 0x80]}; + const IID IID_ISWbemObjectPath = {0x5791BC27, 0xCE9C, 0x11D1, [0x97, 0xBF, 0x00, 0x00, 0xF8, 0x1E, 0x84, 0x9C]}; + const IID IID_ISWbemObjectSet = {0x76A6415F, 0xCB41, 0x11D1, [0x8B, 0x02, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemPrivilege = {0x26EE67BD, 0x5804, 0x11D2, [0x8B, 0x4A, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemPrivilegeSet = {0x26EE67BF, 0x5804, 0x11D2, [0x8B, 0x4A, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemProperty = {0x1A388F98, 0xD4BA, 0x11D1, [0x8B, 0x09, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemPropertySet = {0xDEA0A7B2, 0xD4BA, 0x11D1, [0x8B, 0x09, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemQualifier = {0x79B05932, 0xD3B7, 0x11D1, [0x8B, 0x06, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemQualifierSet = {0x9B16ED16, 0xD3DF, 0x11D1, [0x8B, 0x08, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemRefreshableItem = {0x5AD4BF92, 0xDAAB, 0x11D3, [0xB3, 0x8F, 0x00, 0x10, 0x5A, 0x1F, 0x47, 0x3A]}; + const IID IID_ISWbemRefresher = {0x14D8250E, 0xD9C2, 0x11D3, [0xB3, 0x8F, 0x00, 0x10, 0x5A, 0x1F, 0x47, 0x3A]}; + const IID IID_ISWbemSecurity = {0xB54D66E6, 0x2287, 0x11D2, [0x8B, 0x33, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemServices = {0x76A6415C, 0xCB41, 0x11D1, [0x8B, 0x02, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID IID_ISWbemServicesEx = {0xD2F68443, 0x85DC, 0x427E, [0x91, 0xD8, 0x36, 0x65, 0x54, 0xCC, 0x75, 0x4C]}; + const IID IID_ISWbemSink = {0x75718C9F, 0xF029, 0x11D1, [0xA1, 0xAC, 0x00, 0xC0, 0x4F, 0xB6, 0xC2, 0x23]}; + const IID IID_ISynchronize = {0x00000030, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ISynchronizeContainer = {0x00000033, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ISynchronizedCallBack = {0x74C26041, 0x70D1, 0x11D1, [0xB7, 0x5A, 0x00, 0xA0, 0xC9, 0x05, 0x64, 0xFE]}; + const IID IID_ISynchronizeEvent = {0x00000032, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ISynchronizeHandle = {0x00000031, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ISynchronizeMutex = {0x00000025, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ISyncMgrEnumItems = {0x6295DF2A, 0x35EE, 0x11D1, [0x87, 0x07, 0x00, 0xC0, 0x4F, 0xD9, 0x33, 0x27]}; + const IID IID_ISyncMgrRegisterCSC = {0x47681A61, 0xBC74, 0x11D2, [0xB5, 0xC5, 0x00, 0xC0, 0x4F, 0xB9, 0x39, 0x81]}; + const IID IID_ISyncMgrSynchronizeInvoke = {0x6295DF2C, 0x35EE, 0x11D1, [0x87, 0x07, 0x00, 0xC0, 0x4F, 0xD9, 0x33, 0x27]}; + const IID IID_ISyncSchedule = {0xF0E15899, 0xA700, 0x11D1, [0x98, 0x31, 0x00, 0xC0, 0x4F, 0xD9, 0x10, 0xDD]}; + const IID IID_ISyncScheduleMgr = {0xF0E15897, 0xA700, 0x11D1, [0x98, 0x31, 0x00, 0xC0, 0x4F, 0xD9, 0x10, 0xDD]}; + const IID IID_ISyncSchedulep = {0xF0E1589B, 0xA700, 0x11D1, [0x98, 0x31, 0x00, 0xC0, 0x4F, 0xD9, 0x10, 0xDD]}; + const IID IID_ITableCreation = {0x0C733ABC, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ITableDefinition = {0x0C733A86, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ITableDefinitionWithConstraints = {0x0C733AAB, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ITableRename = {0x0C733A77, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ITACDGroup = {0x5AFC3148, 0x4BCC, 0x11D1, [0xBF, 0x80, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITACDGroupEvent = {0x297F3032, 0xBD11, 0x11D1, [0xA0, 0xA7, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITAddress = {0xB1EFC386, 0x9355, 0x11D0, [0x83, 0x5C, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_ITAddress2 = {0xB0AE5D9B, 0xBE51, 0x46C9, [0xB0, 0xF7, 0xDF, 0xA8, 0xA2, 0x2A, 0x8B, 0xC4]}; + const IID IID_ITAddressCapabilities = {0x8DF232F5, 0x821B, 0x11D1, [0xBB, 0x5C, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITAddressDeviceSpecificEvent = {0x3ACB216B, 0x40BD, 0x487A, [0x86, 0x72, 0x5C, 0xE7, 0x7B, 0xD7, 0xE3, 0xA3]}; + const IID IID_ITAddressEvent = {0x831CE2D1, 0x83B5, 0x11D1, [0xBB, 0x5C, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITAddressTranslation = {0x0C4D8F03, 0x8DDB, 0x11D1, [0xA0, 0x9E, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITAddressTranslationInfo = {0xAFC15945, 0x8D40, 0x11D1, [0xA0, 0x9E, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITAgent = {0x5770ECE5, 0x4B27, 0x11D1, [0xBF, 0x80, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITAgentEvent = {0x5AFC314A, 0x4BCC, 0x11D1, [0xBF, 0x80, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITAgentHandler = {0x587E8C22, 0x9802, 0x11D1, [0xA0, 0xA4, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITAgentHandlerEvent = {0x297F3034, 0xBD11, 0x11D1, [0xA0, 0xA7, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITAgentSession = {0x5AFC3147, 0x4BCC, 0x11D1, [0xBF, 0x80, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITAgentSessionEvent = {0x5AFC314B, 0x4BCC, 0x11D1, [0xBF, 0x80, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITAllocatorProperties = {0xC1BC3C90, 0xBCFE, 0x11D1, [0x97, 0x45, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_ITAMMediaFormat = {0x0364EB00, 0x4A77, 0x11D1, [0xA6, 0x71, 0x00, 0x60, 0x97, 0xC9, 0xA2, 0xE8]}; + const IID IID_ITargetContainer = {0x7847EC01, 0x2BEC, 0x11D0, [0x82, 0xB4, 0x00, 0xA0, 0xC9, 0x0C, 0x29, 0xC5]}; + const IID IID_ITargetEmbedding = {0x548793C0, 0x9E74, 0x11CF, [0x96, 0x55, 0x00, 0xA0, 0xC9, 0x03, 0x49, 0x23]}; + const IID IID_ITargetFrame = {0xD5F78C80, 0x5252, 0x11CF, [0x90, 0xFA, 0x00, 0xAA, 0x00, 0x42, 0x10, 0x6E]}; + const IID IID_ITargetFrame2 = {0x86D52E11, 0x94A8, 0x11D0, [0x82, 0xAF, 0x00, 0xC0, 0x4F, 0xD5, 0xAE, 0x38]}; + const IID IID_ITargetFramePriv = {0x9216E421, 0x2BF5, 0x11D0, [0x82, 0xB4, 0x00, 0xA0, 0xC9, 0x0C, 0x29, 0xC5]}; + const IID IID_ITargetNotify = {0x863A99A0, 0x21BC, 0x11D0, [0x82, 0xB4, 0x00, 0xA0, 0xC9, 0x0C, 0x29, 0xC5]}; + const IID IID_ITargetNotify2 = {0x3050F6B1, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ITaskAnalyzeCluster = {0x795737A1, 0xE13A, 0x45EB, [0x8D, 0xFD, 0x81, 0x85, 0xC4, 0xB7, 0xAD, 0x4E]}; + const IID IID_ITaskbarList = {0x56FDF342, 0xFD6D, 0x11D0, [0x95, 0x8A, 0x00, 0x60, 0x97, 0xC9, 0xA0, 0x90]}; + const IID IID_ITaskbarList2 = {0x602D4995, 0xB13A, 0x429B, [0xA6, 0x6E, 0x19, 0x35, 0xE4, 0x4F, 0x43, 0x17]}; + const IID IID_ITaskCommitClusterChanges = {0x1BF12DDE, 0xF8B0, 0x49B1, [0xA4, 0x58, 0x67, 0x47, 0xDB, 0x78, 0x8A, 0x47]}; + const IID IID_ITaskCompareAndPushInformation = {0xD4F1C2AF, 0xB370, 0x49DE, [0x87, 0x68, 0x40, 0x10, 0xB5, 0x68, 0x63, 0x6C]}; + const IID IID_ITaskGatherClusterInfo = {0xE167965C, 0xC5D6, 0x493C, [0xA3, 0x43, 0x4C, 0x10, 0x5C, 0x01, 0xDD, 0xE7]}; + const IID IID_ITaskGatherInformation = {0xB9AAF3F8, 0x238E, 0x4993, [0xBA, 0x31, 0x14, 0x85, 0x98, 0x04, 0xF9, 0x2C]}; + const IID IID_ITaskGatherNodeInfo = {0xF19A2E01, 0x2CB3, 0x47B4, [0x8F, 0x5D, 0xB9, 0x77, 0x17, 0x6B, 0x45, 0xC8]}; + const IID IID_ITaskGetDomains = {0xDFCB4ACD, 0xC4DB, 0x4DB4, [0x8E, 0xBB, 0x1D, 0xD0, 0x7A, 0x9D, 0x5B, 0x82]}; + const IID IID_ITaskGetDomainsCallback = {0x85402E44, 0x6834, 0x41DF, [0x85, 0x90, 0x01, 0x82, 0x7D, 0x12, 0x4E, 0x1B]}; + const IID IID_ITaskLoginDomain = {0x76AD8E51, 0x53C3, 0x4347, [0x89, 0x5D, 0x6C, 0x30, 0xF4, 0x13, 0x93, 0x74]}; + const IID IID_ITaskLoginDomainCallback = {0xEFAF3C43, 0x7A8F, 0x469B, [0xB8, 0xBB, 0xC8, 0x0C, 0x57, 0x47, 0xCE, 0x05]}; + const IID IID_ITaskManager = {0x16116694, 0xDFC5, 0x470B, [0xAC, 0x12, 0x46, 0xFB, 0xB0, 0x1C, 0xEF, 0x10]}; + const IID IID_ITaskPollingCallback = {0x49E92395, 0x66AF, 0x4ADD, [0xA4, 0x1E, 0x43, 0x51, 0x2C, 0xB5, 0x19, 0xB3]}; + const IID IID_ITaskVerifyIPAddress = {0x0C95E1B1, 0x0CFF, 0x4740, [0x8A, 0xBD, 0x69, 0x91, 0x2D, 0x10, 0x5B, 0xD1]}; + const IID IID_ITASRTerminalEvent = {0xEE016A02, 0x4FA9, 0x467C, [0x93, 0x3F, 0x5A, 0x15, 0xB1, 0x23, 0x77, 0xD7]}; + const IID IID_ITAttributeList = {0x5037FB82, 0xCAE9, 0x11D0, [0x8D, 0x58, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_ITAudioDeviceControl = {0x6C0AB6C5, 0x21E3, 0x11D3, [0xA5, 0x77, 0x00, 0xC0, 0x4F, 0x8E, 0xF6, 0xE3]}; + const IID IID_ITAudioSettings = {0x6C0AB6C6, 0x21E3, 0x11D3, [0xA5, 0x77, 0x00, 0xC0, 0x4F, 0x8E, 0xF6, 0xE3]}; + const IID IID_ITAutomatedPhoneControl = {0x1EE1AF0E, 0x6159, 0x4A61, [0xB7, 0x9B, 0x6A, 0x4B, 0xA3, 0xFC, 0x9D, 0xFC]}; + const IID IID_ITBasicAudioTerminal = {0xB1EFC38D, 0x9355, 0x11D0, [0x83, 0x5C, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_ITBasicCallControl = {0xB1EFC389, 0x9355, 0x11D0, [0x83, 0x5C, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_ITBasicCallControl2 = {0x161A4A56, 0x1E99, 0x4B3F, [0xA4, 0x6A, 0x16, 0x8F, 0x38, 0xA5, 0xEE, 0x4C]}; + const IID IID_ITCallHub = {0xA3C1544E, 0x5B92, 0x11D1, [0x8F, 0x4E, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITCallHubEvent = {0xA3C15451, 0x5B92, 0x11D1, [0x8F, 0x4E, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITCallInfo = {0x350F85D1, 0x1227, 0x11D3, [0x83, 0xD4, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITCallInfo2 = {0x94D70CA6, 0x7AB0, 0x4DAA, [0x81, 0xCA, 0xB8, 0xF8, 0x64, 0x3F, 0xAE, 0xC1]}; + const IID IID_ITCallInfoChangeEvent = {0x5D4B65F9, 0xE51C, 0x11D1, [0xA0, 0x2F, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITCallingCard = {0x0C4D8F00, 0x8DDB, 0x11D1, [0xA0, 0x9E, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITCallMediaEvent = {0xFF36B87F, 0xEC3A, 0x11D0, [0x8E, 0xE4, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITCallNotificationEvent = {0x895801DF, 0x3DD6, 0x11D1, [0x8F, 0x30, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITCallQualityControl = {0xFE1D8AE0, 0xEDC4, 0x49B5, [0x8F, 0x8C, 0x4D, 0xE4, 0x0F, 0x9C, 0xDF, 0xAF]}; + const IID IID_ITCallStateEvent = {0x62F47097, 0x95C9, 0x11D0, [0x83, 0x5D, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_ITCollection = {0x5EC5ACF2, 0x9C02, 0x11D0, [0x83, 0x62, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_ITCollection2 = {0xE6DDDDA5, 0xA6D3, 0x48FF, [0x87, 0x37, 0xD3, 0x2F, 0xC4, 0xD9, 0x54, 0x77]}; + const IID IID_ITConferenceBlob = {0xC259D7AA, 0xC8AB, 0x11D0, [0x8D, 0x58, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_ITConnection = {0x8FA381D4, 0xC8C2, 0x11D0, [0x8D, 0x58, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_ITcpipProperties = {0x98133271, 0x4B20, 0x11D1, [0xAB, 0x01, 0x00, 0x80, 0x5F, 0xC1, 0x27, 0x0E]}; + const IID IID_ITCustomTone = {0x357AD764, 0xB3C6, 0x4B2A, [0x8F, 0xA5, 0x07, 0x22, 0x82, 0x7A, 0x92, 0x54]}; + const IID IID_ITDetectTone = {0x961F79BD, 0x3097, 0x49DF, [0xA1, 0xD6, 0x90, 0x9B, 0x77, 0xE8, 0x9C, 0xA0]}; + const IID IID_ITDigitDetectionEvent = {0x80D3BFAC, 0x57D9, 0x11D2, [0xA0, 0x4A, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITDigitGenerationEvent = {0x80D3BFAD, 0x57D9, 0x11D2, [0xA0, 0x4A, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITDigitsGatheredEvent = {0xE52EC4C1, 0xCBA3, 0x441A, [0x9E, 0x6A, 0x93, 0xCB, 0x90, 0x9E, 0x97, 0x24]}; + const IID IID_ITDirectory = {0x34621D6C, 0x6CFF, 0x11D1, [0xAF, 0xF7, 0x00, 0xC0, 0x4F, 0xC3, 0x1F, 0xEE]}; + const IID IID_ITDirectoryObject = {0x34621D6E, 0x6CFF, 0x11D1, [0xAF, 0xF7, 0x00, 0xC0, 0x4F, 0xC3, 0x1F, 0xEE]}; + const IID IID_ITDirectoryObjectConference = {0xF1029E5D, 0xCB5B, 0x11D0, [0x8D, 0x59, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_ITDirectoryObjectUser = {0x34621D6F, 0x6CFF, 0x11D1, [0xAF, 0xF7, 0x00, 0xC0, 0x4F, 0xC3, 0x1F, 0xEE]}; + const IID IID_ITDispatchMapper = {0xE9225295, 0xC759, 0x11D1, [0xA0, 0x2B, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITemplatePrinter = {0x3050F6B4, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ITemplatePrinter2 = {0x3050F83F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ITFileTerminalEvent = {0xE4A7FBAC, 0x8C17, 0x4427, [0x9F, 0x55, 0x9F, 0x58, 0x9A, 0xC8, 0xAF, 0x00]}; + const IID IID_ITFileTrack = {0x31CA6EA9, 0xC08A, 0x4BEA, [0x88, 0x11, 0x8E, 0x9C, 0x1B, 0xA3, 0xEA, 0x3A]}; + const IID IID_ITfLangBarAddIn = {0xC9ADDAC3, 0x15CB, 0x4957, [0xB9, 0x3C, 0xDB, 0x08, 0x73, 0xFF, 0x98, 0xBB]}; + const IID IID_ITFormatControl = {0x6C0AB6C1, 0x21E3, 0x11D3, [0xA5, 0x77, 0x00, 0xC0, 0x4F, 0x8E, 0xF6, 0xE3]}; + const IID IID_ITForwardInformation = {0x449F659E, 0x88A3, 0x11D1, [0xBB, 0x5D, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITForwardInformation2 = {0x5229B4ED, 0xB260, 0x4382, [0x8E, 0x1A, 0x5D, 0xF3, 0xA8, 0xA4, 0xCC, 0xC0]}; + const IID IID_ITfSpeechUIServer = {0x90E9A944, 0x9244, 0x489F, [0xA7, 0x8F, 0xDE, 0x67, 0xAF, 0xC0, 0x13, 0xA7]}; + const IID IID_IThumbnailCapture = {0x4EA39266, 0x7211, 0x409F, [0xB6, 0x22, 0xF6, 0x3D, 0xBD, 0x16, 0xC5, 0x33]}; + const IID IID_IThumbnailExtractor = {0x969DC708, 0x5C76, 0x11D1, [0x8D, 0x86, 0x00, 0x00, 0xF8, 0x04, 0xB0, 0x57]}; + const IID IID_ITILSConfig = {0x34621D72, 0x6CFF, 0x11D1, [0xAF, 0xF7, 0x00, 0xC0, 0x4F, 0xC3, 0x1F, 0xEE]}; + const IID IID_ITIMEActiveElementCollection = {0x403E2540, 0x4520, 0x11D3, [0x93, 0xAB, 0x00, 0xA0, 0xC9, 0x67, 0xA4, 0x38]}; + const IID IID_ITimeAndNoticeControl = {0xBC0BF6AE, 0x8878, 0x11D1, [0x83, 0xE9, 0x00, 0xC0, 0x4F, 0xC2, 0xC6, 0xD4]}; + const IID IID_ITIMEAnimationElement = {0xA74F14B1, 0xB6A2, 0x430A, [0xA5, 0xE8, 0x1F, 0x4E, 0x53, 0xF7, 0x10, 0xFE]}; + const IID IID_ITIMEAnimationElement2 = {0x29CE8661, 0xBD43, 0x421A, [0xB6, 0x16, 0xE9, 0xB3, 0x1F, 0x33, 0xA5, 0x72]}; + const IID IID_ITIMEBodyElement = {0x8C90E348, 0xEC0A, 0x4229, [0x90, 0xB0, 0xE5, 0x7D, 0x2C, 0xA4, 0x5C, 0xCB]}; + const IID IID_ITIMEDMusicPlayerObject = {0x407954F5, 0x2BAB, 0x4CFA, [0x95, 0x4D, 0x24, 0x9F, 0x9F, 0xCE, 0x43, 0xA1]}; + const IID IID_ITIMEDVDPlayerObject = {0x3AF7AB68, 0x4F29, 0x462C, [0xAA, 0x6E, 0x58, 0x72, 0x44, 0x88, 0x99, 0xE3]}; + const IID IID_ITIMEElement = {0x1C2EF64E, 0xF07D, 0x4338, [0x97, 0x71, 0x91, 0x54, 0x49, 0x1C, 0xD8, 0xB9]}; + const IID IID_ITIMEElementCollection = {0x50ABC224, 0x6D53, 0x4F83, [0x91, 0x35, 0x24, 0x40, 0xA4, 0x1B, 0x7B, 0xC8]}; + const IID IID_ITIMEFactory = {0xCD51E446, 0x3006, 0x434F, [0x90, 0xE2, 0xE3, 0x7E, 0x8F, 0xB8, 0xCA, 0x8F]}; + const IID IID_ITIMEMediaElement = {0x47A6972F, 0xAE65, 0x4A6B, [0xAE, 0x63, 0xD0, 0xC1, 0xD5, 0x30, 0x7B, 0x58]}; + const IID IID_ITIMEMediaElement2 = {0x9EE29400, 0x7EE6, 0x453A, [0x85, 0xB3, 0x4E, 0xC2, 0x8E, 0x03, 0x05, 0xB4]}; + const IID IID_ITIMEMediaPlayer = {0xEA4A95BE, 0xACC9, 0x4BF0, [0x85, 0xA4, 0x1B, 0xF3, 0xC5, 0x1E, 0x43, 0x1C]}; + const IID IID_ITIMEMediaPlayerAudio = {0xFFAACFDA, 0xB374, 0x4F22, [0xAC, 0x9A, 0xC5, 0xBB, 0x94, 0x37, 0xCB, 0x56]}; + const IID IID_ITIMEMediaPlayerControl = {0x897A99E7, 0xF386, 0x45C8, [0xB5, 0x1B, 0x3A, 0x25, 0xBB, 0xCB, 0xBA, 0x69]}; + const IID IID_ITIMEMediaPlayerNetwork = {0xB9987FCA, 0x7FBB, 0x4015, [0xBD, 0x3D, 0x74, 0x18, 0x60, 0x55, 0x14, 0xDA]}; + const IID IID_ITIMEMediaPlayerSite = {0xBF0571ED, 0x344F, 0x4F58, [0x82, 0xC7, 0x74, 0x31, 0xED, 0x0F, 0xD8, 0x34]}; + const IID IID_ITIMEPlayItem = {0x2A6096D9, 0x2CE0, 0x47DC, [0xA8, 0x13, 0x90, 0x99, 0xA2, 0x46, 0x63, 0x09]}; + const IID IID_ITIMEPlayItem2 = {0x4262CD38, 0x6BDC, 0x40A4, [0xBC, 0x50, 0x4C, 0xC5, 0x03, 0x66, 0xE7, 0x02]}; + const IID IID_ITIMEPlayList = {0xE9B75B62, 0xDD97, 0x4B19, [0x8F, 0xD9, 0x96, 0x46, 0x29, 0x29, 0x52, 0xE0]}; + const IID IID_ITimer = {0x3050F360, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ITimerService = {0x3050F35F, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ITimerSink = {0x3050F361, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ITIMEState = {0xDD5EC62A, 0x9D77, 0x4573, [0x80, 0xA8, 0x75, 0x85, 0x94, 0xE6, 0x9C, 0xEA]}; + const IID IID_ITIMETransitionElement = {0xF383D66F, 0x5E68, 0x4FC2, [0xB6, 0x41, 0x03, 0x67, 0x2B, 0x54, 0x3A, 0x49]}; + const IID IID_ITLegacyAddressMediaControl = {0xAB493640, 0x4C0B, 0x11D2, [0xA0, 0x46, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITLegacyAddressMediaControl2 = {0xB0EE512B, 0xA531, 0x409E, [0x9D, 0xD9, 0x40, 0x99, 0xFE, 0x86, 0xC7, 0x38]}; + const IID IID_ITLegacyCallMediaControl = {0xD624582F, 0xCC23, 0x4436, [0xB8, 0xA5, 0x47, 0xC6, 0x25, 0xC8, 0x04, 0x5D]}; + const IID IID_ITLegacyCallMediaControl2 = {0x57CA332D, 0x7BC2, 0x44F1, [0xA6, 0x0C, 0x93, 0x6F, 0xE8, 0xD7, 0xCE, 0x73]}; + const IID IID_ITLegacyWaveSupport = {0x207823EA, 0xE252, 0x11D2, [0xB7, 0x7E, 0x00, 0x80, 0xC7, 0x13, 0x53, 0x81]}; + const IID IID_ITLocalParticipant = {0x39CBF055, 0xF77A, 0x11D2, [0xA8, 0x24, 0x00, 0xC0, 0x4F, 0x8E, 0xF6, 0xE3]}; + const IID IID_ITLocationInfo = {0x0C4D8EFF, 0x8DDB, 0x11D1, [0xA0, 0x9E, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITMedia = {0x0CC1F053, 0xCAEB, 0x11D0, [0x8D, 0x58, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_ITMediaCollection = {0x6A8E16A2, 0x0ABC, 0x11D1, [0x97, 0x6D, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_ITMediaControl = {0xC445DDE8, 0x5199, 0x4BC7, [0x98, 0x07, 0x5F, 0xFB, 0x92, 0xE4, 0x2E, 0x09]}; + const IID IID_ITMediaPlayback = {0x627E8AE6, 0xAE4C, 0x4A69, [0xBB, 0x63, 0x2A, 0xD6, 0x25, 0x40, 0x4B, 0x77]}; + const IID IID_ITMediaRecord = {0xF5DD4592, 0x5476, 0x4CC1, [0x9D, 0x4D, 0xFA, 0xD3, 0xEE, 0xFE, 0x7D, 0xB2]}; + const IID IID_ITMediaSupport = {0xB1EFC384, 0x9355, 0x11D0, [0x83, 0x5C, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_ITMSPAddress = {0xEE3BD600, 0x3868, 0x11D2, [0xA0, 0x45, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITMultiTrackTerminal = {0xFE040091, 0xADE8, 0x4072, [0x95, 0xC9, 0xBF, 0x7D, 0xE8, 0xC5, 0x4B, 0x44]}; + const IID IID_ITParticipant = {0x5899B820, 0x5A34, 0x11D2, [0x95, 0xA0, 0x00, 0xA0, 0x24, 0x4D, 0x22, 0x98]}; + const IID IID_ITParticipantControl = {0xD2EE6684, 0x5A34, 0x11D2, [0x95, 0xA0, 0x00, 0xA0, 0x24, 0x4D, 0x22, 0x98]}; + const IID IID_ITParticipantEvent = {0x8BB35070, 0x2DAD, 0x11D3, [0xA5, 0x80, 0x00, 0xC0, 0x4F, 0x8E, 0xF6, 0xE3]}; + const IID IID_ITParticipantSubStreamControl = {0x2C679108, 0x5A35, 0x11D2, [0x95, 0xA0, 0x00, 0xA0, 0x24, 0x4D, 0x22, 0x98]}; + const IID IID_ITPhone = {0x09D48DB4, 0x10CC, 0x4388, [0x9D, 0xE7, 0xA8, 0x46, 0x56, 0x18, 0x97, 0x5A]}; + const IID IID_ITPhoneDeviceSpecificEvent = {0x63FFB2A6, 0x872B, 0x4CD3, [0xA5, 0x01, 0x32, 0x6E, 0x8F, 0xB4, 0x0A, 0xF7]}; + const IID IID_ITPhoneEvent = {0x8F942DD8, 0x64ED, 0x4AAF, [0xA7, 0x7D, 0xB2, 0x3D, 0xB0, 0x83, 0x7E, 0xAD]}; + const IID IID_ITPluggableTerminalClassInfo = {0x41757F4A, 0xCF09, 0x4B34, [0xBC, 0x96, 0x0A, 0x79, 0xD2, 0x39, 0x00, 0x76]}; + const IID IID_ITPluggableTerminalClassRegistrat = {0x924A3723, 0xA00B, 0x4F5F, [0x9F, 0xEE, 0x8E, 0x9A, 0xEB, 0x9E, 0x82, 0xAA]}; + const IID IID_ITPluggableTerminalEventSink = {0x6E0887BE, 0xBA1A, 0x492E, [0xBD, 0x10, 0x40, 0x20, 0xEC, 0x5E, 0x33, 0xE0]}; + const IID IID_ITPluggableTerminalEventSinkRegis = {0xF7115709, 0xA216, 0x4957, [0xA7, 0x59, 0x06, 0x0A, 0xB3, 0x2A, 0x90, 0xD1]}; + const IID IID_ITPluggableTerminalInitializatio = {0xAED6483C, 0x3304, 0x11D2, [0x86, 0xF1, 0x00, 0x60, 0x08, 0xB0, 0xE5, 0xD2]}; + const IID IID_ITPluggableTerminalSuperclassInf = {0x6D54E42C, 0x4625, 0x4359, [0xA6, 0xF7, 0x63, 0x19, 0x99, 0x10, 0x7E, 0x05]}; + const IID IID_ITPluggableTerminalSuperclassRegi = {0x60D3C08A, 0xC13E, 0x4195, [0x9A, 0xB0, 0x8D, 0xE7, 0x68, 0x09, 0x0F, 0x25]}; + const IID IID_ITPrivateEvent = {0x0E269CD0, 0x10D4, 0x4121, [0x9C, 0x22, 0x9C, 0x85, 0xD6, 0x25, 0x65, 0x0D]}; + const IID IID_ITQOSApplicationID = {0xE8C89D27, 0xA3BD, 0x47D5, [0xA6, 0xFC, 0xD2, 0xAE, 0x40, 0xCD, 0xBC, 0x6E]}; + const IID IID_ITQOSEvent = {0xCFA3357C, 0xAD77, 0x11D1, [0xBB, 0x68, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITQueue = {0x5AFC3149, 0x4BCC, 0x11D1, [0xBF, 0x80, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITQueueEvent = {0x297F3033, 0xBD11, 0x11D1, [0xA0, 0xA7, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITrackFile = {0x8790C948, 0xA30B, 0x11D0, [0x8C, 0xAB, 0x00, 0xC0, 0x4F, 0xD9, 0x0F, 0x85]}; + const IID IID_ITransaction = {0x0FB15084, 0xAF41, 0x11CE, [0xBD, 0x2B, 0x20, 0x4C, 0x4F, 0x4F, 0x50, 0x20]}; + const IID IID_ITransaction2 = {0x34021548, 0x0065, 0x11D3, [0xBA, 0xC1, 0x00, 0xC0, 0x4F, 0x79, 0x7B, 0xE2]}; + const IID IID_ITransactionCloner = {0x02656950, 0x2152, 0x11D0, [0x94, 0x4C, 0x00, 0xA0, 0xC9, 0x05, 0x41, 0x6E]}; + const IID IID_ITransactionDispenser = {0x3A6AD9E1, 0x23B9, 0x11CF, [0xAD, 0x60, 0x00, 0xAA, 0x00, 0xA7, 0x4C, 0xCD]}; + const IID IID_ITransactionJoin = {0x0C733A5E, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ITransactionLocal = {0x0C733A5F, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ITransactionObject = {0x0C733A60, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ITransactionOptions = {0x3A6AD9E0, 0x23B9, 0x11CF, [0xAD, 0x60, 0x00, 0xAA, 0x00, 0xA7, 0x4C, 0xCD]}; + const IID IID_ITransactionOutcomeEvents = {0x3A6AD9E2, 0x23B9, 0x11CF, [0xAD, 0x60, 0x00, 0xAA, 0x00, 0xA7, 0x4C, 0xCD]}; + const IID IID_ITransmt = {0xB3C9F150, 0xB593, 0x11CE, [0xB5, 0xB0, 0x00, 0xAA, 0x00, 0x6C, 0xB3, 0x7D]}; + const IID IID_ITravelEntry = {0xF46EDB3B, 0xBC2F, 0x11D0, [0x94, 0x12, 0x00, 0xAA, 0x00, 0xA3, 0xEB, 0xD3]}; + const IID IID_ITravelLog = {0x66A9CB08, 0x4802, 0x11D2, [0xA5, 0x61, 0x00, 0xA0, 0xC9, 0x2D, 0xBF, 0xE8]}; + const IID IID_ITravelLogClient = {0x3050F67A, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ITravelLogClient2 = {0x0AD364CE, 0xADCB, 0x11D3, [0x82, 0x69, 0x00, 0x80, 0x5F, 0xC7, 0x32, 0xC0]}; + const IID IID_ITravelLogEntry = {0x7EBFDD87, 0xAD18, 0x11D3, [0xA4, 0xC5, 0x00, 0xC0, 0x4F, 0x72, 0xD6, 0xB8]}; + const IID IID_ITravelLogEx = {0x3050F679, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_ITravelLogStg = {0x7EBFDD80, 0xAD18, 0x11D3, [0xA4, 0xC5, 0x00, 0xC0, 0x4F, 0x72, 0xD6, 0xB8]}; + const IID IID_ITRendezvous = {0x34621D6B, 0x6CFF, 0x11D1, [0xAF, 0xF7, 0x00, 0xC0, 0x4F, 0xC3, 0x1F, 0xEE]}; + const IID IID_ITRequest = {0xAC48FFDF, 0xF8C4, 0x11D1, [0xA0, 0x30, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITRequestEvent = {0xAC48FFDE, 0xF8C4, 0x11D1, [0xA0, 0x30, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITridentEventSink = {0x1DC9CA50, 0x06EF, 0x11D2, [0x84, 0x15, 0x00, 0x60, 0x08, 0xC3, 0xFB, 0xFC]}; + const IID IID_ITrkForceOwnership = {0xA2531F44, 0xC67D, 0x11D0, [0x8C, 0xB1, 0x00, 0xC0, 0x4F, 0xD9, 0x0F, 0x85]}; + const IID IID_ITrkRestoreNotify = {0xD0056F6B, 0xE2A0, 0x11D0, [0xB1, 0xC2, 0x00, 0xC0, 0x4F, 0xB9, 0x38, 0x6D]}; + const IID IID_ITrkRestoreParser = {0x755939E3, 0xE381, 0x11D0, [0xB1, 0xC5, 0x00, 0xC0, 0x4F, 0xB9, 0x38, 0x6D]}; + const IID IID_ITrusteeAdmin = {0x0C733AA1, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ITrusteeGroupAdmin = {0x0C733AA2, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_ITScriptableAudioFormat = {0xB87658BD, 0x3C59, 0x4F64, [0xBE, 0x74, 0xAE, 0xDE, 0x3E, 0x86, 0xA8, 0x1E]}; + const IID IID_ITSdp = {0x9B2719D8, 0xB696, 0x11D0, [0xA4, 0x89, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_ITStaticAudioTerminal = {0xA86B7871, 0xD14C, 0x48E6, [0x92, 0x2E, 0xA8, 0xD1, 0x5F, 0x98, 0x48, 0x00]}; + const IID IID_ITStream = {0xEE3BD605, 0x3868, 0x11D2, [0xA0, 0x45, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITStreamControl = {0xEE3BD604, 0x3868, 0x11D2, [0xA0, 0x45, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITStreamQualityControl = {0x6C0AB6C2, 0x21E3, 0x11D3, [0xA5, 0x77, 0x00, 0xC0, 0x4F, 0x8E, 0xF6, 0xE3]}; + const IID IID_ITSubStream = {0xEE3BD608, 0x3868, 0x11D2, [0xA0, 0x45, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITSubStreamControl = {0xEE3BD607, 0x3868, 0x11D2, [0xA0, 0x45, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITTAPI = {0xB1EFC382, 0x9355, 0x11D0, [0x83, 0x5C, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_ITTAPI2 = {0x54FBDC8C, 0xD90F, 0x4DAD, [0x96, 0x95, 0xB3, 0x73, 0x09, 0x7F, 0x09, 0x4B]}; + const IID IID_ITTAPICallCenter = {0x5AFC3154, 0x4BCC, 0x11D1, [0xBF, 0x80, 0x00, 0x80, 0x5F, 0xC1, 0x47, 0xD3]}; + const IID IID_ITTAPIEventNotification = {0xEDDB9426, 0x3B91, 0x11D1, [0x8F, 0x30, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITTAPIObjectEvent = {0xF4854D48, 0x937A, 0x11D1, [0xBB, 0x58, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID IID_ITTAPIObjectEvent2 = {0x359DDA6E, 0x68CE, 0x4383, [0xBF, 0x0B, 0x16, 0x91, 0x33, 0xC4, 0x1B, 0x46]}; + const IID IID_ITTerminal = {0xB1EFC38A, 0x9355, 0x11D0, [0x83, 0x5C, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_ITTerminalControl = {0xAED6483B, 0x3304, 0x11D2, [0x86, 0xF1, 0x00, 0x60, 0x08, 0xB0, 0xE5, 0xD2]}; + const IID IID_ITTerminalManager = {0x7170F2DE, 0x9BE3, 0x11D0, [0xA0, 0x09, 0x00, 0xAA, 0x00, 0xB6, 0x05, 0xA4]}; + const IID IID_ITTerminalManager2 = {0xBB33DEC6, 0xB2C7, 0x46E6, [0x9E, 0xD1, 0x49, 0x8B, 0x91, 0xFA, 0x85, 0xAC]}; + const IID IID_ITTerminalSupport = {0xB1EFC385, 0x9355, 0x11D0, [0x83, 0x5C, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID IID_ITTerminalSupport2 = {0xF3EB39BC, 0x1B1F, 0x4E99, [0xA0, 0xC0, 0x56, 0x30, 0x5C, 0x4D, 0xD5, 0x91]}; + const IID IID_ITTime = {0x2652BB78, 0x1516, 0x11D1, [0x97, 0x71, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_ITTimeCollection = {0x0CC1F04F, 0xCAEB, 0x11D0, [0x8D, 0x58, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID IID_ITToneDetectionEvent = {0x407E0FAF, 0xD047, 0x4753, [0xB0, 0xC6, 0x8E, 0x06, 0x03, 0x73, 0xFE, 0xCD]}; + const IID IID_ITToneTerminalEvent = {0xE6F56009, 0x611F, 0x4945, [0xBB, 0xD2, 0x2D, 0x0C, 0xE5, 0x61, 0x20, 0x56]}; + const IID IID_ITTTSTerminalEvent = {0xD964788F, 0x95A5, 0x461D, [0xAB, 0x0C, 0xB9, 0x90, 0x0A, 0x6C, 0x27, 0x13]}; + const IID IID_ITypeChangeEvents = {0x00020410, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ITypeComp = {0x00020403, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ITypeFactory = {0x0000002E, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ITypeInfo = {0x00020401, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ITypeInfo2 = {0x00020412, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ITypeLib = {0x00020402, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ITypeLib2 = {0x00020411, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_ITypeMarshal = {0x0000002D, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IUmiADSIPrivate = {0xCFCECB01, 0x3123, 0x4926, [0xB5, 0xE3, 0x62, 0x78, 0x08, 0x27, 0x26, 0x43]}; + const IID IID_IUniformResourceLocatorA = {0xFBF23B80, 0xE3F0, 0x101B, [0x84, 0x88, 0x00, 0xAA, 0x00, 0x3E, 0x56, 0xF8]}; + const IID IID_IUniformResourceLocatorW = {0xCABB0DA0, 0xDA57, 0x11CF, [0x99, 0x74, 0x00, 0x20, 0xAF, 0xD7, 0x97, 0x62]}; + const IID IID_IUnknown = {0x00000000, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IUnsecuredApartment = {0x1CFABA8C, 0x1523, 0x11D1, [0xAD, 0x79, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID IID_IUPnPDescriptionDocument = {0x11D1C1B2, 0x7DAA, 0x4C9E, [0x95, 0x95, 0x7F, 0x82, 0xED, 0x20, 0x6D, 0x1E]}; + const IID IID_IUPnPDescriptionDocumentCallback = {0x77394C69, 0x5486, 0x40D6, [0x9B, 0xC3, 0x49, 0x91, 0x98, 0x3E, 0x02, 0xDA]}; + const IID IID_IUPnPDevice = {0x3D44D0D1, 0x98C9, 0x4889, [0xAC, 0xD1, 0xF9, 0xD6, 0x74, 0xBF, 0x22, 0x21]}; + const IID IID_IUPnPDeviceControl = {0x204810BA, 0x73B2, 0x11D4, [0xBF, 0x42, 0x00, 0xB0, 0xD0, 0x11, 0x8B, 0x56]}; + const IID IID_IUPnPDeviceDocumentAccess = {0xE7772804, 0x3287, 0x418E, [0x90, 0x72, 0xCF, 0x2B, 0x47, 0x23, 0x89, 0x81]}; + const IID IID_IUPnPDeviceFinder = {0xADDA3D55, 0x6F72, 0x4319, [0xBF, 0xF9, 0x18, 0x60, 0x0A, 0x53, 0x9B, 0x10]}; + const IID IID_IUPnPDeviceFinderAddCallbackWithI = {0x983DFC0B, 0x1796, 0x44DF, [0x89, 0x75, 0xCA, 0x54, 0x5B, 0x62, 0x0E, 0xE5]}; + const IID IID_IUPnPDeviceFinderCallback = {0x415A984A, 0x88B3, 0x49F3, [0x92, 0xAF, 0x05, 0x08, 0xBE, 0xDF, 0x0D, 0x6C]}; + const IID IID_IUPnPDeviceHostICSSupport = {0x3FFC5AE5, 0xA66B, 0x499C, [0xA1, 0x80, 0xC7, 0x39, 0x3D, 0xB6, 0xBA, 0x8D]}; + const IID IID_IUPnPDeviceHostSetup = {0x6BD34909, 0x54E7, 0x4FBF, [0x85, 0x62, 0x7B, 0x89, 0x70, 0x9A, 0x58, 0x9A]}; + const IID IID_IUPnPDeviceProvider = {0x204810B8, 0x73B2, 0x11D4, [0xBF, 0x42, 0x00, 0xB0, 0xD0, 0x11, 0x8B, 0x56]}; + const IID IID_IUPnPDevices = {0xFDBC0C73, 0xBDA3, 0x4C66, [0xAC, 0x4F, 0xF2, 0xD9, 0x6F, 0xDA, 0xD6, 0x8C]}; + const IID IID_IUPnPEventSink = {0x204810B4, 0x73B2, 0x11D4, [0xBF, 0x42, 0x00, 0xB0, 0xD0, 0x11, 0x8B, 0x56]}; + const IID IID_IUPnPEventSource = {0x204810B5, 0x73B2, 0x11D4, [0xBF, 0x42, 0x00, 0xB0, 0xD0, 0x11, 0x8B, 0x56]}; + const IID IID_IUPnPNAT = {0xB171C812, 0xCC76, 0x485A, [0x94, 0xD8, 0xB6, 0xB3, 0xA2, 0x79, 0x4E, 0x99]}; + const IID IID_IUPnPPrivateCallbackHelper = {0x8DCC8327, 0xDBE9, 0x48E6, [0x84, 0x6C, 0x33, 0x72, 0x58, 0x65, 0xD5, 0x0C]}; + const IID IID_IUPnPPrivateDocumentCallbackHelp = {0x19432A8E, 0x4A32, 0x4860, [0xB8, 0xFB, 0x95, 0xB1, 0x11, 0x7C, 0xD4, 0xE5]}; + const IID IID_IUPnPPrivateServiceHelper2 = {0x340F4076, 0x6856, 0x48F9, [0xB3, 0xC4, 0x97, 0xB9, 0x1B, 0x68, 0xD7, 0x7E]}; + const IID IID_IUPnPRegistrar = {0x204810B6, 0x73B2, 0x11D4, [0xBF, 0x42, 0x00, 0xB0, 0xD0, 0x11, 0x8B, 0x56]}; + const IID IID_IUPnPReregistrar = {0x204810B7, 0x73B2, 0x11D4, [0xBF, 0x42, 0x00, 0xB0, 0xD0, 0x11, 0x8B, 0x56]}; + const IID IID_IUPnPService = {0xA295019C, 0xDC65, 0x47DD, [0x90, 0xDC, 0x7F, 0xE9, 0x18, 0xA1, 0xAB, 0x44]}; + const IID IID_IUPnPServiceCallback = {0x31FADCA9, 0xAB73, 0x464B, [0xB6, 0x7D, 0x5C, 0x1D, 0x0F, 0x83, 0xC8, 0xB8]}; + const IID IID_IUPnPServiceCallbackPrivate = {0x24EA2515, 0xF612, 0x4528, [0xBA, 0x82, 0x7B, 0xD3, 0xDB, 0xBA, 0xD3, 0x03]}; + const IID IID_IUPnPServices = {0x3F8C8E9E, 0x9A7A, 0x4DC8, [0xBC, 0x41, 0xFF, 0x31, 0xFA, 0x37, 0x49, 0x56]}; + const IID IID_IUrlHistoryNotify = {0xBC40BEC1, 0xC493, 0x11D0, [0x83, 0x1B, 0x00, 0xC0, 0x4F, 0xD5, 0xAE, 0x38]}; + const IID IID_IUrlHistoryStg = {0x3C374A41, 0xBAE4, 0x11CF, [0xBF, 0x7D, 0x00, 0xAA, 0x00, 0x69, 0x46, 0xEE]}; + const IID IID_IUrlHistoryStg2 = {0xAFA0DC11, 0xC313, 0x11D0, [0x83, 0x1A, 0x00, 0xC0, 0x4F, 0xD5, 0xAE, 0x38]}; + const IID IID_IUrlMon = {0x00000026, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IURLSearchHook = {0xAC60F6A0, 0x0FD9, 0x11D0, [0x99, 0xCB, 0x00, 0xC0, 0x4F, 0xD6, 0x44, 0x97]}; + const IID IID_IURLSearchHook2 = {0x5EE44DA4, 0x6D32, 0x46E3, [0x86, 0xBC, 0x07, 0x54, 0x0D, 0xED, 0xD0, 0xE0]}; + const IID IID_IUrlTrackingStg = {0xF2F8CBB3, 0xB040, 0x11D0, [0xBB, 0x16, 0x00, 0xC0, 0x4F, 0xB6, 0x6F, 0x63]}; + const IID IID_IUserEventTimer = {0x0F504B94, 0x6E42, 0x42E6, [0x99, 0xE0, 0xE2, 0x0F, 0xAF, 0xE5, 0x2A, 0xB4]}; + const IID IID_IUserEventTimerCallback = {0xE9EAD8E6, 0x2A25, 0x410E, [0x9B, 0x58, 0xA9, 0xFB, 0xEF, 0x1D, 0xD1, 0xA2]}; + const IID IID_IUserNotification = {0xBA9711BA, 0x5893, 0x4787, [0xA7, 0xE1, 0x41, 0x27, 0x71, 0x51, 0x55, 0x0B]}; + const IID IID_IUtilityButton = {0x3050F6AF, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID IID_IVariantChangeType = {0xA6EF9862, 0xC720, 0x11D0, [0x93, 0x37, 0x00, 0xA0, 0xC9, 0x0D, 0xCA, 0xA9]}; + const IID IID_IVersionHost = {0x667115AC, 0xDC02, 0x11D1, [0xBA, 0x57, 0x00, 0xC0, 0x4F, 0xC2, 0x04, 0x0E]}; + const IID IID_IVersionVector = {0x4EB01410, 0xDB1A, 0x11D1, [0xBA, 0x53, 0x00, 0xC0, 0x4F, 0xC2, 0x04, 0x0E]}; + const IID IID_IViewChapter = {0x0C733A98, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IViewFilter = {0x0C733A9B, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IViewObject = {0x0000010D, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IViewObject2 = {0x00000127, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IViewObjectEx = {0x3AF24292, 0x0C96, 0x11CE, [0xA0, 0xCF, 0x00, 0xAA, 0x00, 0x60, 0x0A, 0xB8]}; + const IID IID_IViewRowset = {0x0C733A97, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IViewSort = {0x0C733A9A, 0x2A1C, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID IID_IVirusScanEngine = {0x083DB180, 0xB4A8, 0x11CF, [0xAA, 0xFA, 0x00, 0xAA, 0x00, 0xB6, 0x01, 0x5C]}; + const IID IID_IVirusScanner = {0x4589BEE0, 0xB4B1, 0x11CF, [0xAA, 0xFA, 0x00, 0xAA, 0x00, 0xB6, 0x01, 0x5C]}; + const IID IID_IWaitMultiple = {0x0000002B, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IWbemAddressResolution = {0xF7CE2E12, 0x8C90, 0x11D1, [0x9E, 0x7B, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID IID_IWbemBackupRestore = {0xC49E32C7, 0xBC8B, 0x11D2, [0x85, 0xD4, 0x00, 0x10, 0x5A, 0x1F, 0x83, 0x04]}; + const IID IID_IWbemBackupRestoreEx = {0xA359DEC5, 0xE813, 0x4834, [0x8A, 0x2A, 0xBA, 0x7F, 0x1D, 0x77, 0x7D, 0x76]}; + const IID IID_IWbemCallResult = {0x44ACA675, 0xE8FC, 0x11D0, [0xA0, 0x7C, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID IID_IWbemCallStatus = {0x4212DC47, 0x142E, 0x4C6C, [0xBC, 0x49, 0x6C, 0xA2, 0x32, 0xDD, 0x09, 0x59]}; + const IID IID_IWbemClassObject = {0xDC12A681, 0x737F, 0x11CF, [0x88, 0x4D, 0x00, 0xAA, 0x00, 0x4B, 0x2E, 0x24]}; + const IID IID_IWbemClientConnectionTransport = {0xA889C72A, 0xFCC1, 0x4A9E, [0xAF, 0x61, 0xED, 0x07, 0x13, 0x33, 0xFB, 0x5B]}; + const IID IID_IWbemClientTransport = {0xF7CE2E11, 0x8C90, 0x11D1, [0x9E, 0x7B, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID IID_IWbemConfigure = {0x9A368276, 0x26CF, 0x11D0, [0xAD, 0x3C, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID IID_IWbemConfigureRefresher = {0x49353C92, 0x516B, 0x11D1, [0xAE, 0xA6, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID IID_IWbemConnectorLogin = {0xD8EC9CB1, 0xB135, 0x4F10, [0x8B, 0x1B, 0xC7, 0x18, 0x8B, 0xB0, 0xD1, 0x86]}; + const IID IID_IWbemConstructClassObject = {0x9EF76194, 0x70D5, 0x11D1, [0xAD, 0x90, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID IID_IWbemContext = {0x44ACA674, 0xE8FC, 0x11D0, [0xA0, 0x7C, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID IID_IWbemDecoupledBasicEventProvider = {0x86336D20, 0xCA11, 0x4786, [0x9E, 0xF1, 0xBC, 0x8A, 0x94, 0x6B, 0x42, 0xFC]}; + const IID IID_IWbemDecoupledEventSink = {0xCD94EBF2, 0xE622, 0x11D2, [0x9C, 0xB3, 0x00, 0x10, 0x5A, 0x1F, 0x48, 0x01]}; + const IID IID_IWbemDecoupledRegistrar = {0x1005CBCF, 0xE64F, 0x4646, [0xBC, 0xD3, 0x3A, 0x08, 0x9D, 0x8A, 0x84, 0xB4]}; + const IID IID_IWbemEventConsumerProvider = {0xE246107A, 0xB06E, 0x11D0, [0xAD, 0x61, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID IID_IWbemEventConsumerProviderEx = {0x17CF534A, 0xD8A3, 0x4AD0, [0xAC, 0x92, 0x5E, 0x3D, 0x01, 0x71, 0x71, 0x51]}; + const IID IID_IWbemEventProvider = {0xE245105B, 0xB06E, 0x11D0, [0xAD, 0x61, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID IID_IWbemEventProviderQuerySink = {0x580ACAF8, 0xFA1C, 0x11D0, [0xAD, 0x72, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID IID_IWbemEventProviderSecurity = {0x631F7D96, 0xD993, 0x11D2, [0xB3, 0x39, 0x00, 0x10, 0x5A, 0x1F, 0x4A, 0xAF]}; + const IID IID_IWbemEventSink = {0x3AE0080A, 0x7E3A, 0x4366, [0xBF, 0x89, 0x0F, 0xEE, 0xDC, 0x93, 0x16, 0x59]}; + const IID IID_IWbemHiPerfEnum = {0x2705C288, 0x79AE, 0x11D2, [0xB3, 0x48, 0x00, 0x10, 0x5A, 0x1F, 0x81, 0x77]}; + const IID IID_IWbemHiPerfProvider = {0x49353C93, 0x516B, 0x11D1, [0xAE, 0xA6, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID IID_IWbemLevel1Login = {0xF309AD18, 0xD86A, 0x11D0, [0xA0, 0x75, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID IID_IWbemLocator = {0xDC12A687, 0x737F, 0x11CF, [0x88, 0x4D, 0x00, 0xAA, 0x00, 0x4B, 0x2E, 0x24]}; + const IID IID_IWbemObjectAccess = {0x49353C9A, 0x516B, 0x11D1, [0xAE, 0xA6, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID IID_IWbemObjectSink = {0x7C857801, 0x7381, 0x11CF, [0x88, 0x4D, 0x00, 0xAA, 0x00, 0x4B, 0x2E, 0x24]}; + const IID IID_IWbemObjectTextSrc = {0xBFBF883A, 0xCAD7, 0x11D3, [0xA1, 0x1B, 0x00, 0x10, 0x5A, 0x1F, 0x51, 0x5A]}; + const IID IID_IWbemPath = {0x3BC15AF2, 0x736C, 0x477E, [0x9E, 0x51, 0x23, 0x8A, 0xF8, 0x66, 0x7D, 0xCC]}; + const IID IID_IWbemPathKeyList = {0x9AE62877, 0x7544, 0x4BB0, [0xAA, 0x26, 0xA1, 0x38, 0x24, 0x65, 0x9E, 0xD6]}; + const IID IID_IWbemPropertyProvider = {0xCE61E841, 0x65BC, 0x11D0, [0xB6, 0xBD, 0x00, 0xAA, 0x00, 0x32, 0x40, 0xC7]}; + const IID IID_IWbemProviderIdentity = {0x631F7D97, 0xD993, 0x11D2, [0xB3, 0x39, 0x00, 0x10, 0x5A, 0x1F, 0x4A, 0xAF]}; + const IID IID_IWbemProviderInit = {0x1BE41572, 0x91DD, 0x11D1, [0xAE, 0xB2, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID IID_IWbemProviderInitSink = {0x1BE41571, 0x91DD, 0x11D1, [0xAE, 0xB2, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID IID_IWbemQualifierSet = {0xDC12A680, 0x737F, 0x11CF, [0x88, 0x4D, 0x00, 0xAA, 0x00, 0x4B, 0x2E, 0x24]}; + const IID IID_IWbemQuery = {0x81166F58, 0xDD98, 0x11D3, [0xA1, 0x20, 0x00, 0x10, 0x5A, 0x1F, 0x51, 0x5A]}; + const IID IID_IWbemRawSdAccessor = {0xC1E2D759, 0xCABD, 0x11D3, [0xA1, 0x1B, 0x00, 0x10, 0x5A, 0x1F, 0x51, 0x5A]}; + const IID IID_IWbemRefresher = {0x49353C99, 0x516B, 0x11D1, [0xAE, 0xA6, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID IID_IWbemServices = {0x9556DC99, 0x828C, 0x11CF, [0xA3, 0x7E, 0x00, 0xAA, 0x00, 0x32, 0x40, 0xC7]}; + const IID IID_IWbemShutdown = {0xB7B31DF9, 0xD515, 0x11D3, [0xA1, 0x1C, 0x00, 0x10, 0x5A, 0x1F, 0x51, 0x5A]}; + const IID IID_IWbemStatusCodeText = {0xEB87E1BC, 0x3233, 0x11D2, [0xAE, 0xC9, 0x00, 0xC0, 0x4F, 0xB6, 0x88, 0x20]}; + const IID IID_IWbemTransport = {0x553FE584, 0x2156, 0x11D0, [0xB6, 0xAE, 0x00, 0xAA, 0x00, 0x32, 0x40, 0xC7]}; + const IID IID_IWbemUnboundObjectSink = {0xE246107B, 0xB06E, 0x11D0, [0xAD, 0x61, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID IID_IWBScriptControl = {0xA5170870, 0x0CF8, 0x11D1, [0x8B, 0x91, 0x00, 0x80, 0xC7, 0x44, 0xF3, 0x89]}; + const IID IID_IWCContextMenuCallback = {0x97DEDE64, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IWCPropertySheetCallback = {0x97DEDE60, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IWCWizard97Callback = {0x97DEDE67, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IWCWizardCallback = {0x97DEDE62, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IWebBridge = {0xAE24FDAD, 0x03C6, 0x11D1, [0x8B, 0x76, 0x00, 0x80, 0xC7, 0x44, 0xF3, 0x89]}; + const IID IID_IWebBrowser = {0xEAB22AC1, 0x30C1, 0x11CF, [0xA7, 0xEB, 0x00, 0x00, 0xC0, 0x5B, 0xAE, 0x0B]}; + const IID IID_IWebBrowser2 = {0xD30C1661, 0xCDAF, 0x11D0, [0x8A, 0x3E, 0x00, 0xC0, 0x4F, 0xC9, 0xE2, 0x6E]}; + const IID IID_IWebBrowserApp = {0x0002DF05, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID IID_IWebWizardExtension = {0x0E6B3F66, 0x98D1, 0x48C0, [0xA2, 0x22, 0xFB, 0xDE, 0x74, 0xE2, 0xFB, 0xC5]}; + const IID IID_IWebWizardHost = {0x18BCC359, 0x4990, 0x4BFB, [0xB9, 0x51, 0x3C, 0x83, 0x70, 0x2B, 0xE5, 0xF9]}; + const IID IID_IWEExtendContextMenu = {0x97DEDE65, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IWEExtendPropertySheet = {0x97DEDE61, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IWEExtendWizard = {0x97DEDE63, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IWEExtendWizard97 = {0x97DEDE68, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_IWEInvokeCommand = {0x97DEDE66, 0xFC6B, 0x11CF, [0xB5, 0xF5, 0x00, 0xA0, 0xC9, 0x0A, 0xB5, 0x05]}; + const IID IID_Iwfolders = {0xBAE31F98, 0x1B81, 0x11D2, [0xA9, 0x7A, 0x00, 0xC0, 0x4F, 0x8E, 0xCB, 0x02]}; + const IID IID_IWindowForBindingUI = {0x79EAC9D5, 0xBAFA, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IWinInetHttpInfo = {0x79EAC9D8, 0xBAFA, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IWinInetInfo = {0x79EAC9D6, 0xBAFA, 0x11CE, [0x8C, 0x82, 0x00, 0xAA, 0x00, 0x4B, 0xA9, 0x0B]}; + const IID IID_IWizardExtension = {0xC02EA696, 0x86CC, 0x491E, [0x9B, 0x23, 0x74, 0x39, 0x4A, 0x04, 0x44, 0xA8]}; + const IID IID_IWizardSite = {0x88960F5B, 0x422F, 0x4E7B, [0x80, 0x13, 0x73, 0x41, 0x53, 0x81, 0xC3, 0xC3]}; + const IID IID_IWMIExtension = {0xADC1F06E, 0x5C7E, 0x11D2, [0x8B, 0x74, 0x00, 0x10, 0x4B, 0x2A, 0xFB, 0x41]}; + const IID IID_IWordBreaker = {0xD53552C8, 0x77E3, 0x101A, [0xB5, 0x52, 0x08, 0x00, 0x2B, 0x33, 0xB0, 0xE6]}; + const IID IID_IWordSink = {0xCC907054, 0xC058, 0x101A, [0xB5, 0x54, 0x08, 0x00, 0x2B, 0x33, 0xB0, 0xE6]}; + const IID IID_IWrappedProtocol = {0x53C84785, 0x8425, 0x4DC5, [0x97, 0x1B, 0xE5, 0x8D, 0x9C, 0x19, 0xF9, 0xB6]}; + const IID IID_IXMLAttribute = {0xD4D4A0FC, 0x3B73, 0x11D1, [0xB2, 0xB4, 0x00, 0xC0, 0x4F, 0xB9, 0x25, 0x96]}; + const IID IID_IXMLDocument = {0xF52E2B61, 0x18A1, 0x11D1, [0xB1, 0x05, 0x00, 0x80, 0x5F, 0x49, 0x91, 0x6B]}; + const IID IID_IXMLDocument2 = {0x2B8DE2FE, 0x8D2D, 0x11D1, [0xB2, 0xFC, 0x00, 0xC0, 0x4F, 0xD9, 0x15, 0xA9]}; + const IID IID_IXMLDOMAttribute = {0x2933BF85, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMCDATASection = {0x2933BF8A, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMCharacterData = {0x2933BF84, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMComment = {0x2933BF88, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMDocument = {0x2933BF81, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMDocumentFragment = {0x3EFAA413, 0x272F, 0x11D2, [0x83, 0x6F, 0x00, 0x00, 0xF8, 0x7A, 0x77, 0x82]}; + const IID IID_IXMLDOMDocumentType = {0x2933BF8B, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMElement = {0x2933BF86, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMEntity = {0x2933BF8D, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMEntityReference = {0x2933BF8E, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMImplementation = {0x2933BF8F, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMNamedNodeMap = {0x2933BF83, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMNode = {0x2933BF80, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMNodeList = {0x2933BF82, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMNotation = {0x2933BF8C, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMParseError = {0x3EFAA426, 0x272F, 0x11D2, [0x83, 0x6F, 0x00, 0x00, 0xF8, 0x7A, 0x77, 0x82]}; + const IID IID_IXMLDOMProcessingInstruction = {0x2933BF89, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDOMText = {0x2933BF87, 0x7B36, 0x11D2, [0xB2, 0x0E, 0x00, 0xC0, 0x4F, 0x98, 0x3E, 0x60]}; + const IID IID_IXMLDSOControl = {0x310AFA62, 0x0575, 0x11D2, [0x9C, 0xA9, 0x00, 0x60, 0xB0, 0xEC, 0x3D, 0x39]}; + const IID IID_IXMLElement = {0x3F7F31AC, 0xE15F, 0x11D0, [0x9C, 0x25, 0x00, 0xC0, 0x4F, 0xC9, 0x9C, 0x8E]}; + const IID IID_IXMLElement2 = {0x2B8DE2FF, 0x8D2D, 0x11D1, [0xB2, 0xFC, 0x00, 0xC0, 0x4F, 0xD9, 0x15, 0xA9]}; + const IID IID_IXMLElementCollection = {0x65725580, 0x9B5D, 0x11D0, [0x9B, 0xFE, 0x00, 0xC0, 0x4F, 0xC9, 0x9C, 0x8E]}; + const IID IID_IXMLError = {0x948C5AD3, 0xC58D, 0x11D0, [0x9C, 0x0B, 0x00, 0xC0, 0x4F, 0xC9, 0x9C, 0x8E]}; + const IID IID_IXMLGenericParse = {0xE4E23071, 0x4D07, 0x11D2, [0xAE, 0x76, 0x00, 0x80, 0xC7, 0x3B, 0xC1, 0x99]}; + const IID IID_IXMLHttpRequest = {0xED8C108D, 0x4349, 0x11D2, [0x91, 0xA4, 0x00, 0xC0, 0x4F, 0x79, 0x69, 0xE8]}; + const IID IID_IXMLNodeFactory = {0xD242361F, 0x51A0, 0x11D2, [0x9C, 0xAF, 0x00, 0x60, 0xB0, 0xEC, 0x3D, 0x39]}; + const IID IID_IXMLNodeSource = {0xD242361D, 0x51A0, 0x11D2, [0x9C, 0xAF, 0x00, 0x60, 0xB0, 0xEC, 0x3D, 0x39]}; + const IID IID_IXMLParser = {0xD242361E, 0x51A0, 0x11D2, [0x9C, 0xAF, 0x00, 0x60, 0xB0, 0xEC, 0x3D, 0x39]}; + const IID IID_IXTLRuntime = {0x3EFAA425, 0x272F, 0x11D2, [0x83, 0x6F, 0x00, 0x00, 0xF8, 0x7A, 0x77, 0x82]}; + const IID IID_StdOle = {0x00020430, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID KSDATAFORMAT_SUBTYPE_DIRECTMUSIC = {0x1A82F8BC, 0x3F8B, 0x11D2, [0xB7, 0x74, 0x00, 0x60, 0x08, 0x33, 0x16, 0xC1]}; + const IID KSDATAFORMAT_SUBTYPE_MIDI = {0x1D262760, 0xE957, 0x11CF, [0xA5, 0xD6, 0x28, 0xDB, 0x04, 0xC1, 0x00, 0x00]}; + const IID LIBID_Accessibility = {0x1EA4DBF0, 0x3C3B, 0x11CF, [0x81, 0x0C, 0x00, 0xAA, 0x00, 0x38, 0x9B, 0x71]}; + const IID LIBID_ActiveIMM = {0x4955DD30, 0xB159, 0x11D0, [0x8F, 0xCF, 0x00, 0xAA, 0x00, 0x6B, 0xCC, 0x59]}; + const IID LIBID_ADs = {0x97D25DB0, 0x0363, 0x11CF, [0xAB, 0xC4, 0x02, 0x60, 0x8C, 0x9E, 0x75, 0x53]}; + const IID LIBID_ALGLib = {0xB6D1D098, 0xE235, 0x4B99, [0xBA, 0x98, 0x7C, 0x62, 0x4F, 0xD8, 0x75, 0xDB]}; + const IID LIBID_AutoDiscovery = {0x4EAFB888, 0x81CB, 0x4EBA, [0xBA, 0xC9, 0xDA, 0x25, 0x4E, 0x57, 0x21, 0xF1]}; + const IID LIBID_BackgroundCopyManager = {0x1DEEB74F, 0x7915, 0x4560, [0xB5, 0x58, 0x91, 0x8C, 0x83, 0xF1, 0x76, 0xA6]}; + const IID LIBID_BackgroundCopyManager1_5 = {0xEA9319EA, 0xC628, 0x480F, [0x83, 0x31, 0x76, 0x8F, 0xAC, 0x39, 0x7E, 0x4E]}; + const IID LIBID_BackgroundCopyQMgr = {0xF5B26DCB, 0xB37E, 0x4D7C, [0xAE, 0x7A, 0x1C, 0xB3, 0xFB, 0xEB, 0x18, 0x3E]}; + const IID LIBID_CHANNELMGR = {0x4804F2E0, 0xD16E, 0x11D0, [0x80, 0x2B, 0x00, 0xC0, 0x4F, 0xD7, 0x5D, 0x13]}; + const IID LIBID_CLADMWIZLib = {0x24F97140, 0x6689, 0x11D1, [0x9A, 0xA7, 0x00, 0xC0, 0x4F, 0xB9, 0x3A, 0x80]}; + const IID LIBID_ClusCfgWizard = {0x6D01FEDC, 0x8D34, 0x4728, [0xAD, 0x0B, 0xB3, 0xA2, 0x1A, 0x10, 0x3B, 0x42]}; + const IID LIBID_CommonControlObjects = {0xBCADA15B, 0xB428, 0x420C, [0x8D, 0x28, 0x02, 0x35, 0x90, 0x92, 0x4C, 0x9F]}; + const IID LIBID_DirectAnimation = {0xBCBB1F74, 0xE384, 0x11D0, [0x9B, 0x99, 0x00, 0xC0, 0x4F, 0xC2, 0xF5, 0x1D]}; + const IID LIBID_DWbemServices_v3 = {0xCB7CA031, 0xF729, 0x11D0, [0x9E, 0x4D, 0x00, 0xC0, 0x4F, 0xC3, 0x24, 0xA8]}; + const IID LIBID_DXTMSFTLib = {0x5E77EB03, 0x937C, 0x11D1, [0xB0, 0x47, 0x00, 0xAA, 0x00, 0x3B, 0x60, 0x61]}; + const IID LIBID_DXTRANSLib = {0x54314D1D, 0x35FE, 0x11D1, [0x81, 0xA1, 0x00, 0x00, 0xF8, 0x75, 0x57, 0xDB]}; + const IID LIBID_DXTRANSPLib = {0x527A4DA4, 0x7F2C, 0x11D2, [0xB1, 0x2D, 0x00, 0x00, 0xF8, 0x1F, 0x59, 0x95]}; + const IID LIBID_EventQLib = {0xA70080F2, 0x403B, 0x11D1, [0x88, 0x36, 0x00, 0xA0, 0xC9, 0x49, 0xAC, 0x67]}; + const IID LIBID_IASPolicyLib = {0x6BC096A5, 0x0CE6, 0x11D1, [0xBA, 0xAE, 0x00, 0xC0, 0x4F, 0xC2, 0xE2, 0x0D]}; + const IID LIBID_IEXTagLib = {0x7E8BC440, 0xAEFF, 0x11D1, [0x89, 0xC2, 0x00, 0xC0, 0x4F, 0xB6, 0xBF, 0xC4]}; + const IID LIBID_IMAPILib = {0xC49F2184, 0x50A7, 0x11D3, [0x91, 0x44, 0x00, 0x10, 0x4B, 0xA1, 0x1C, 0x5E]}; + const IID LIBID_ImgUtilLib = {0xCF790840, 0x2DC4, 0x11D0, [0xB7, 0x24, 0x00, 0xAA, 0x00, 0x6C, 0x1A, 0x01]}; + const IID LIBID_ITRKADMNLib = {0xA2531F35, 0xC67D, 0x11D0, [0x8C, 0xB1, 0x00, 0xC0, 0x4F, 0xD9, 0x0F, 0x85]}; + const IID LIBID_McastLib = {0x64217CC0, 0xA285, 0x11D1, [0x86, 0x97, 0x00, 0x60, 0x08, 0xB0, 0xE5, 0xD2]}; + const IID LIBID_MSHTML = {0x3050F1C5, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID LIBID_MSHTMLINTERNAL = {0x3050F7E1, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID LIBID_MSTIME = {0x87C96271, 0xADDB, 0x4745, [0xB2, 0xE8, 0xDF, 0x88, 0xA8, 0x47, 0x2F, 0xD1]}; + const IID LIBID_MSXML = {0xD63E0CE2, 0xA0A2, 0x11D0, [0x9C, 0x02, 0x00, 0xC0, 0x4F, 0xC9, 0x9C, 0x8E]}; + const IID LIBID_MultiLanguage = {0x275C23E0, 0x3747, 0x11D0, [0x9F, 0xEA, 0x00, 0xAA, 0x00, 0x3F, 0x86, 0x46]}; + const IID LIBID_NATUPNPLib = {0x1C565858, 0xF302, 0x471E, [0xB4, 0x09, 0xF1, 0x80, 0xAA, 0x4A, 0xBE, 0xC6]}; + const IID LIBID_NETCONLib = {0x43E734CA, 0x043D, 0x4A70, [0x9A, 0x2C, 0xA8, 0xF2, 0x54, 0x06, 0x3D, 0x91]}; + const IID LIBID_PassiveSink = {0xE002EEEF, 0xE6EA, 0x11D2, [0x9C, 0xB3, 0x00, 0x10, 0x5A, 0x1F, 0x48, 0x01]}; + const IID LIBID_ProcessDebugManagerLib = {0x78A51821, 0x51F4, 0x11D0, [0x8F, 0x20, 0x00, 0x80, 0x5F, 0x2C, 0xD0, 0x64]}; + const IID LIBID_RENDLib = {0xF1029E4D, 0xCB5B, 0x11D0, [0x8D, 0x59, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID LIBID_RTCCORELib = {0xCD260094, 0xDE10, 0x4AEE, [0xAC, 0x73, 0xEF, 0x87, 0xF6, 0xE1, 0x26, 0x83]}; + const IID LIBID_SDOIASLib = {0x81DDF732, 0x4AA8, 0x4A35, [0xBD, 0xFF, 0x8B, 0x42, 0xEF, 0xE7, 0xC6, 0x24]}; + const IID LIBID_SDPBLBLib = {0xC259D79A, 0xC8AB, 0x11D0, [0x8D, 0x58, 0x00, 0xC0, 0x4F, 0xD9, 0x1A, 0xC0]}; + const IID LIBID_SensEvents = {0xD597DEED, 0x5B9F, 0x11D1, [0x8D, 0xD2, 0x00, 0xAA, 0x00, 0x4A, 0xBD, 0x5E]}; + const IID LIBID_SHDocVw = {0xEAB22AC0, 0x30C1, 0x11CF, [0xA7, 0xEB, 0x00, 0x00, 0xC0, 0x5B, 0xAE, 0x0B]}; + const IID LIBID_Shell32 = {0x50A7E9B0, 0x70EF, 0x11D1, [0xB7, 0x5A, 0x00, 0xA0, 0xC9, 0x05, 0x64, 0xFE]}; + const IID LIBID_ShellImageData = {0x0B8AFF06, 0x8DF0, 0x4F13, [0x8E, 0x25, 0x25, 0xB2, 0x31, 0x9C, 0x43, 0x6A]}; + const IID LIBID_ShellObjects = {0x50A7E9B1, 0x70EF, 0x11D1, [0xB7, 0x5A, 0x00, 0xA0, 0xC9, 0x05, 0x64, 0xFE]}; + const IID LIBID_SHGINALib = {0x0A055C02, 0xBABE, 0x4480, [0xBB, 0x7B, 0xA8, 0xEC, 0x72, 0x3C, 0xE9, 0xC0]}; + const IID LIBID_SubscriptionMgr = {0xC54FD88A, 0xFFA1, 0x11D0, [0xBC, 0x5E, 0x00, 0xC0, 0x4F, 0xD9, 0x29, 0xDB]}; + const IID LIBID_TAPI3Lib = {0x21D6D480, 0xA88B, 0x11D0, [0x83, 0xDD, 0x00, 0xAA, 0x00, 0x3C, 0xCA, 0xBD]}; + const IID LIBID_TERMMGRLib = {0x28DCD85B, 0xACA4, 0x11D0, [0xA0, 0x28, 0x00, 0xAA, 0x00, 0xB6, 0x05, 0xA4]}; + const IID LIBID_UPnPHostLib = {0x204810B3, 0x73B2, 0x11D4, [0xBF, 0x42, 0x00, 0xB0, 0xD0, 0x11, 0x8B, 0x56]}; + const IID LIBID_UPNPLib = {0xDB3442A7, 0xA2E9, 0x4A59, [0x9C, 0xB5, 0xF5, 0xC1, 0xA5, 0xD9, 0x01, 0xE5]}; + const IID LIBID_VIRUSSCAN = {0x5F47DB70, 0xD9FE, 0x11D0, [0x95, 0x64, 0x00, 0x60, 0x97, 0x97, 0xEA, 0x4F]}; + const IID LIBID_WbemClient_v1 = {0x7EC196FE, 0x7005, 0x11D1, [0xAD, 0x90, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID LIBID_WbemProviders_v1 = {0x092DF710, 0x7010, 0x11D1, [0xAD, 0x90, 0x00, 0xC0, 0x4F, 0xD8, 0xFD, 0xFF]}; + const IID LIBID_WbemScripting = {0x565783C6, 0xCB41, 0x11D1, [0x8B, 0x02, 0x00, 0x60, 0x08, 0x06, 0xD9, 0xB6]}; + const IID LIBID_WbemTransports_v1 = {0x027947F3, 0xD731, 0x11CE, [0xA3, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01]}; + const IID LIBID_WbemUtilities_v1 = {0x226C9290, 0xDD96, 0x11D3, [0xA1, 0x20, 0x00, 0x10, 0x5A, 0x1F, 0x51, 0x5A]}; + const IID LIBID_WebCheck = {0x10BD2E25, 0xF235, 0x11CF, [0xB5, 0xDD, 0x00, 0xA0, 0xC9, 0x03, 0x48, 0xEC]}; + const IID LIBID_WMIEXTENSIONLib = {0xE503D000, 0x5C7F, 0x11D2, [0x8B, 0x74, 0x00, 0x10, 0x4B, 0x2A, 0xFB, 0x41]}; + const IID LIBID_XENROLLLib = {0x43F8F27B, 0x7A20, 0x11D0, [0x8F, 0x06, 0x00, 0xC0, 0x4F, 0xC2, 0x95, 0xE1]}; + const IID LIBID_XMLPSR = {0xD242361C, 0x51A0, 0x11D2, [0x9C, 0xAF, 0x00, 0x60, 0xB0, 0xEC, 0x3D, 0x39]}; + const IID MDGUID_MDX = {0xA07CCCD0, 0x8148, 0x11D0, [0x87, 0xBB, 0x00, 0xC0, 0x4F, 0xC3, 0x39, 0x42]}; + const IID MDSCHEMA_ACTIONS = {0xA07CCD08, 0x8148, 0x11D0, [0x87, 0xBB, 0x00, 0xC0, 0x4F, 0xC3, 0x39, 0x42]}; + const IID MDSCHEMA_COMMANDS = {0xA07CCD09, 0x8148, 0x11D0, [0x87, 0xBB, 0x00, 0xC0, 0x4F, 0xC3, 0x39, 0x42]}; + const IID MDSCHEMA_CUBES = {0xC8B522D8, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID MDSCHEMA_DIMENSIONS = {0xC8B522D9, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID MDSCHEMA_FUNCTIONS = {0xA07CCD07, 0x8148, 0x11D0, [0x87, 0xBB, 0x00, 0xC0, 0x4F, 0xC3, 0x39, 0x42]}; + const IID MDSCHEMA_HIERARCHIES = {0xC8B522DA, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID MDSCHEMA_LEVELS = {0xC8B522DB, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID MDSCHEMA_MEASURES = {0xC8B522DC, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID MDSCHEMA_MEMBERS = {0xC8B522DE, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID MDSCHEMA_PROPERTIES = {0xC8B522DD, 0x5CF3, 0x11CE, [0xAD, 0xE5, 0x00, 0xAA, 0x00, 0x44, 0x77, 0x3D]}; + const IID MDSCHEMA_SETS = {0xA07CCD0B, 0x8148, 0x11D0, [0x87, 0xBB, 0x00, 0xC0, 0x4F, 0xC3, 0x39, 0x42]}; + const IID NAMEDTIMER_DRAW = {0x3050F362, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID NOTFCOOKIE_SCHEDULE_GROUP_DAILY = {0xD34F18B0, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTFCOOKIE_SCHEDULE_GROUP_MANUAL = {0xD34F18B3, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTFCOOKIE_SCHEDULE_GROUP_MONTHLY = {0xD34F18B2, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTFCOOKIE_SCHEDULE_GROUP_WEEKLY = {0xD34F18B1, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_11 = {0xD34F17FB, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_12 = {0xD34F17FC, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_13 = {0xD34F17FD, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_14 = {0xD34F17FE, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_15 = {0xD34F17FF, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_AGENT_INIT = {0x1E4A7390, 0xC70B, 0x11D0, [0x95, 0xF8, 0x00, 0xA0, 0xC9, 0x03, 0x48, 0xEC]}; + const IID NOTIFICATIONTYPE_AGENT_START = {0xD34F17EC, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_ALERT = {0xD34F17E3, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_ANOUNCMENT = {0xD34F17E1, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_BEGIN_REPORT = {0xD34F17EE, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_CONFIG_CHANGED = {0xD34F17F2, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_CONNECT_TO_INTERNET = {0xD34F17F0, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_d = {0xD34F17F8, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_DISCONNECT_FROM_INTE = {0xD34F17F1, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_e = {0xD34F17F9, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_END_REPORT = {0xD34F17EF, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_f = {0xD34F17FA, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_GROUP_DONE = {0xD34F1885, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_GROUP_RESTART = {0xD34F1884, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_GROUP_START = {0xD34F1883, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_i6 = {0xD34F1886, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_i7 = {0xD34F1887, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_i8 = {0xD34F1888, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_i9 = {0xD34F1889, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_iA = {0xD34F188A, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_iB = {0xD34F188B, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_iC = {0xD34F188C, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_iD = {0xD34F188D, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_iE = {0xD34F188E, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_iF = {0xD34F188F, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_INET_IDLE = {0xD34F17E4, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_INET_OFFLINE = {0xD34F17E5, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_INET_ONLINE = {0xD34F17E6, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_ITEM_DONE = {0xD34F1882, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_ITEM_RESTART = {0xD34F1881, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_ITEM_START = {0xD34F1880, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_NULL = {0xD34F17E0, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_PROGRESS_REPORT = {0xD34F17F3, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_0 = {0xD34F1800, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_1 = {0xD34F1801, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_2 = {0xD34F1802, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_3 = {0xD34F1803, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_4 = {0xD34F1804, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_5 = {0xD34F1805, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_6 = {0xD34F1806, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_7 = {0xD34F1807, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_8 = {0xD34F1808, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_9 = {0xD34F1809, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_A = {0xD34F180A, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_B = {0xD34F180B, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_C = {0xD34F180C, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_D = {0xD34F180D, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_E = {0xD34F180E, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_START_F = {0xD34F180F, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_TASK = {0xD34F17E2, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_TASKS_ABORT = {0xD34F17E9, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_TASKS_COMPLETED = {0xD34F17EA, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_TASKS_ERROR = {0xD34F17F7, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_TASKS_PROGRESS = {0xD34F17EB, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_TASKS_RESUME = {0xD34F17E8, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_TASKS_STARTED = {0xD34F17F6, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_TASKS_SUSPEND = {0xD34F17E7, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_USER_IDLE_BEGIN = {0xD34F17F4, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID NOTIFICATIONTYPE_USER_IDLE_END = {0xD34F17F5, 0x576E, 0x11D0, [0xB2, 0x8C, 0x00, 0xC0, 0x4F, 0xD7, 0xCD, 0x22]}; + const IID OLE_DATAPATH_ALLIMAGE = {0x0002DE0E, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_ALLMM = {0x0002DE18, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_ALLTEXT = {0x0002DE1E, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_ANSITEXT = {0x0002DE19, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_AVI = {0x0002DE0F, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_BASICAUDIO = {0x0002DE12, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_BIFF = {0x0002DE21, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_BMP = {0x0002DE01, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_CGM = {0x0002DE0B, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_COMMONIMAGE = {0x0002DE0D, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_DIB = {0x0002DE02, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_DIF = {0x0002DE1F, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_ENHMF = {0x0002DE04, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_EPS = {0x0002DE0C, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_GIF = {0x0002DE05, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_HTML = {0x0002DE1C, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_JPEG = {0x0002DE06, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_MIDI = {0x0002DE13, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_MPEG = {0x0002DE10, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_PALETTE = {0x0002DE22, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_PCX = {0x0002DE09, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_PENDATA = {0x0002DE23, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_PICT = {0x0002DE0A, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_POSTSCRIPT = {0x0002DE1D, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_QUICKTIME = {0x0002DE11, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_RIFF = {0x0002DE15, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_RTF = {0x0002DE1B, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_SOUND = {0x0002DE16, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_SYLK = {0x0002DE20, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_TIFF = {0x0002DE07, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_UNICODE = {0x0002DE1A, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_VIDEO = {0x0002DE17, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_WAV = {0x0002DE14, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_WMF = {0x0002DE03, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLE_DATAPATH_XBM = {0x0002DE08, 0x0000, 0x0000, [0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x46]}; + const IID OLEDB_SVC_DSLPropertyPages = {0x51740C02, 0x7E8E, 0x11D2, [0xA0, 0x2D, 0x00, 0xC0, 0x4F, 0xA3, 0x73, 0x48]}; + const IID PSGUID_QUERY = {0x49691C90, 0x7E17, 0x101A, [0xA9, 0x1C, 0x08, 0x00, 0x2B, 0x2E, 0xCD, 0xA9]}; + const IID RESCLASSTYPE_IPAddress = {0x57A80E0F, 0x6F18, 0x458B, [0xA7, 0x2A, 0xD1, 0x17, 0x0C, 0x47, 0x93, 0x90]}; + const IID RESCLASSTYPE_NetworkName = {0xBBA69EB9, 0xF5D0, 0x487B, [0x92, 0xAE, 0x1B, 0xA1, 0x0F, 0x39, 0x21, 0x58]}; + const IID RESCLASSTYPE_StorageDevice = {0x12453A47, 0x8C5E, 0x4837, [0xBA, 0xC6, 0xB2, 0x54, 0xB8, 0xF2, 0x64, 0xCC]}; + const IID RESTYPE_ClusterIPAddress = {0xE50DF832, 0x477C, 0x440C, [0xB7, 0xA3, 0x38, 0x23, 0xA6, 0xEF, 0x6C, 0xCB]}; + const IID RESTYPE_ClusterNetName = {0xB2897CCF, 0x8D2C, 0x4BC1, [0xB4, 0x96, 0x6E, 0x2B, 0xC7, 0xA0, 0xBB, 0x38]}; + const IID RESTYPE_ClusterQuorumDisk = {0xD9DDFB80, 0x0BDC, 0x40D4, [0xB3, 0x96, 0x1A, 0xFD, 0x77, 0xDD, 0xD1, 0x9C]}; + const IID RESTYPE_GenericScript = {0xF372184D, 0xDFDB, 0x4370, [0xA0, 0x05, 0xE1, 0xEF, 0x30, 0x1B, 0x23, 0xA4]}; + const IID RESTYPE_IPAddress = {0xE61ADE71, 0xC79A, 0x4FDA, [0xB1, 0xDB, 0xA9, 0xB8, 0xD2, 0x0C, 0x8B, 0x14]}; + const IID RESTYPE_LocalQuorum = {0xF004656D, 0x5B48, 0x4580, [0xA1, 0xF4, 0xC3, 0xEC, 0x14, 0x98, 0x3D, 0x1E]}; + const IID RESTYPE_MajorityNodeSet = {0x56BFAE11, 0xD2F7, 0x4F4F, [0x99, 0x52, 0x55, 0xAF, 0x19, 0xBA, 0xC3, 0xE9]}; + const IID RESTYPE_NetworkName = {0xC1D2FE1E, 0xD332, 0x445F, [0x8D, 0xA1, 0x12, 0xE5, 0xE2, 0xD3, 0x7C, 0xBF]}; + const IID RESTYPE_PhysicalDisk = {0xCC558763, 0x3386, 0x42EF, [0xB1, 0x50, 0xBE, 0x79, 0x33, 0x44, 0xD4, 0x5F]}; + const IID SID_CtxQueryAssociations = {0xFAADFC40, 0xB777, 0x4B69, [0xAA, 0x81, 0x77, 0x03, 0x5E, 0xF0, 0xE6, 0xE8]}; + const IID SID_SContainerDispatch = {0xB722BE00, 0x4E68, 0x101B, [0xA2, 0xBC, 0x00, 0xAA, 0x00, 0x40, 0x47, 0x70]}; + const IID SID_SDataPathBrowser = {0xFC4801A5, 0x2BA9, 0x11CF, [0xA2, 0x29, 0x00, 0xAA, 0x00, 0x3D, 0x73, 0x52]}; + const IID SID_SGetViewFromViewDual = {0x889A935D, 0x971E, 0x4B12, [0xB9, 0x0C, 0x24, 0xDF, 0xC9, 0xE1, 0xE5, 0xE8]}; + const IID SID_SHTMLEditServices = {0x3050F7F9, 0x98B5, 0x11CF, [0xBB, 0x82, 0x00, 0xAA, 0x00, 0xBD, 0xCE, 0x0B]}; + const IID SID_STopLevelBrowser = {0x4C96BE40, 0x915C, 0x11CF, [0x99, 0xD3, 0x00, 0xAA, 0x00, 0x4A, 0xE8, 0x37]}; + const IID SID_STopWindow = {0x49E1B500, 0x4636, 0x11D3, [0x97, 0xF7, 0x00, 0xC0, 0x4F, 0x45, 0xD0, 0xB3]}; + const IID SID_SVersionHost = {0x371EA634, 0xDC5C, 0x11D1, [0xBA, 0x57, 0x00, 0xC0, 0x4F, 0xC2, 0x04, 0x0E]}; + const IID TAPIMEDIATYPE_Audio = {0x028ED8C2, 0xDC7A, 0x11D0, [0x8E, 0xD3, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID TAPIMEDIATYPE_DataModem = {0x028ED8C6, 0xDC7A, 0x11D0, [0x8E, 0xD3, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID TAPIMEDIATYPE_G3Fax = {0x028ED8C7, 0xDC7A, 0x11D0, [0x8E, 0xD3, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID TAPIMEDIATYPE_Video = {0x028ED8C4, 0xDC7A, 0x11D0, [0x8E, 0xD3, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID TAPIPROTOCOL_H323 = {0x831CE2D7, 0x83B5, 0x11D1, [0xBB, 0x5C, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID TAPIPROTOCOL_Multicast = {0x831CE2D8, 0x83B5, 0x11D1, [0xBB, 0x5C, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID TAPIPROTOCOL_PSTN = {0x831CE2D6, 0x83B5, 0x11D1, [0xBB, 0x5C, 0x00, 0xC0, 0x4F, 0xB6, 0x80, 0x9F]}; + const IID TASK_AnalyzeCluster = {0x3140B5A6, 0x9AFA, 0x4588, [0x8C, 0xA0, 0x9B, 0xE8, 0xF8, 0xB6, 0x15, 0x06]}; + const IID TASK_CommitClusterChanges = {0x2D03030B, 0xF084, 0x4807, [0xBB, 0xAC, 0x94, 0x26, 0x9E, 0x50, 0xB5, 0x6F]}; + const IID TASKID_Major_Check_Cluster_Feasibili = {0xEBC8AEFF, 0x10C3, 0x4D5B, [0xAC, 0x17, 0xFC, 0x0F, 0x4C, 0x38, 0x71, 0xB7]}; + const IID TASKID_Major_Check_Node_Feasibility = {0xCC5E57B1, 0x4520, 0x4672, [0xB4, 0xBA, 0xA2, 0x88, 0xEC, 0x42, 0x94, 0x6E]}; + const IID TASKID_Major_Checking_For_Existing_Cl = {0xB8453B8F, 0x92FD, 0x4350, [0xA6, 0xD9, 0x55, 0x1F, 0xD0, 0x18, 0xB7, 0x91]}; + const IID TASKID_Major_Client_And_Server_Log = {0xCD36919C, 0x9F31, 0x46B4, [0xA2, 0x9D, 0xAC, 0x87, 0xF4, 0xE6, 0xCC, 0x93]}; + const IID TASKID_Major_Client_Log = {0x64ECA0EA, 0x9CB6, 0x4324, [0x97, 0x02, 0xDF, 0x15, 0xC6, 0x96, 0xC3, 0x0A]}; + const IID TASKID_Major_Configure_Cluster_Servic = {0x7C5F0774, 0x1611, 0x42B5, [0xAF, 0x3C, 0x6E, 0x12, 0x4A, 0xC4, 0xD3, 0x6B]}; + const IID TASKID_Major_Configure_Resource_Type = {0x6D47AF1F, 0x7F17, 0x4B80, [0x8F, 0xAB, 0x3A, 0x2D, 0x19, 0xB1, 0x23, 0x3D]}; + const IID TASKID_Major_Configure_Resources = {0x411BCDEC, 0x69D3, 0x4485, [0x8D, 0x5D, 0xE1, 0x9E, 0xE7, 0x7A, 0x6D, 0xD4]}; + const IID TASKID_Major_Establish_Connection = {0x93C32F99, 0x39CA, 0x4D38, [0x9D, 0x7F, 0x27, 0x07, 0xCA, 0x0E, 0xAF, 0x46]}; + const IID TASKID_Major_Find_Devices = {0x036BF567, 0x2377, 0x4BB3, [0x8A, 0xE1, 0xE4, 0x10, 0x4E, 0x2E, 0xB3, 0xC5]}; + const IID TASKID_Major_Reanalyze = {0xE25968DA, 0x9C7B, 0x42DB, [0xAD, 0xA9, 0xBC, 0x4E, 0x34, 0xF1, 0x7E, 0x6E]}; + const IID TASKID_Major_Server_Log = {0x05AA0768, 0x5F49, 0x49CD, [0xAF, 0xDC, 0x96, 0xF9, 0xD5, 0x18, 0x02, 0xD4]}; + const IID TASKID_Minor_Update_Progress = {0x2362D3DA, 0xA6A4, 0x4551, [0xB8, 0x46, 0x7B, 0xB3, 0xA1, 0x36, 0x5F, 0x56]}; + const IID TID_D3DRMAnimation = {0x3D82AB4F, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_D3DRMAnimationKey = {0x10DD46A8, 0x775B, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMAnimationOptions = {0xE2BF56C0, 0x840F, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMAnimationSet = {0x3D82AB50, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_D3DRMAppData = {0xE5745280, 0xB24F, 0x11CF, [0x9D, 0xD5, 0x00, 0xAA, 0x00, 0xA7, 0x1A, 0x2F]}; + const IID TID_D3DRMBoolean = {0x537DA6A0, 0xCA37, 0x11D0, [0x94, 0x1C, 0x00, 0x80, 0xC8, 0x0C, 0xFA, 0x7B]}; + const IID TID_D3DRMBoolean2d = {0x4885AE63, 0x78E8, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMCamera = {0x3D82AB51, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_D3DRMColorRGB = {0xD3E16E81, 0x7835, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMColorRGBA = {0x35FF44E0, 0x6C7C, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMCoords2d = {0xF6F23F44, 0x7686, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMExternalVisual = {0x98116AA0, 0xBDBA, 0x11D1, [0x82, 0xC0, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x71]}; + const IID TID_D3DRMFloatKeys = {0x10DD46A9, 0x775B, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMFrame = {0x3D82AB46, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_D3DRMFramePosition = {0xE2BF56C1, 0x840F, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMFrameRotation = {0xE2BF56C3, 0x840F, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMFrameTransformMatrix = {0xF6F23F41, 0x7686, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMFrameVelocity = {0xE2BF56C2, 0x840F, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMGuid = {0xA42790E0, 0x7810, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMIndexedColor = {0x1630B820, 0x7842, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMInfo = {0x2B957100, 0x9E9A, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_D3DRMInlineData = {0x3A23EEA0, 0x94B1, 0x11D0, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_D3DRMLight = {0x3D82AB4A, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_D3DRMLightAttenuation = {0xA8A98BA0, 0xC5E5, 0x11CF, [0xB9, 0x41, 0x00, 0x80, 0xC8, 0x0C, 0xFA, 0x7B]}; + const IID TID_D3DRMLightPenumbra = {0xAED22741, 0xB31F, 0x11CF, [0x9D, 0xD5, 0x00, 0xAA, 0x00, 0xA7, 0x1A, 0x2F]}; + const IID TID_D3DRMLightRange = {0xAED22742, 0xB31F, 0x11CF, [0x9D, 0xD5, 0x00, 0xAA, 0x00, 0xA7, 0x1A, 0x2F]}; + const IID TID_D3DRMLightUmbra = {0xAED22740, 0xB31F, 0x11CF, [0x9D, 0xD5, 0x00, 0xAA, 0x00, 0xA7, 0x1A, 0x2F]}; + const IID TID_D3DRMMaterial = {0x3D82AB4D, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_D3DRMMaterialAmbientColor = {0x01411840, 0x7786, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMMaterialArray = {0x35FF44E1, 0x6C7C, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMMaterialDiffuseColor = {0x01411841, 0x7786, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMMaterialEmissiveColor = {0xD3E16E80, 0x7835, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMMaterialPower = {0x01411843, 0x7786, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMMaterialSpecularColor = {0x01411842, 0x7786, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMMaterialWrap = {0x4885AE60, 0x78E8, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMMatrix4x4 = {0xF6F23F45, 0x7686, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMMesh = {0x3D82AB44, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_D3DRMMeshFace = {0x3D82AB5F, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_D3DRMMeshFaceWraps = {0xED1EC5C0, 0xC0A8, 0x11D0, [0x94, 0x1C, 0x00, 0x80, 0xC8, 0x0C, 0xFA, 0x7B]}; + const IID TID_D3DRMMeshMaterialList = {0xF6F23F42, 0x7686, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMMeshNormals = {0xF6F23F43, 0x7686, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMMeshTextureCoords = {0xF6F23F40, 0x7686, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMMeshVertexColors = {0x1630B821, 0x7842, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMProgressiveMesh = {0x8A63C360, 0x997D, 0x11D0, [0x94, 0x1C, 0x00, 0x80, 0xC8, 0x0C, 0xFA, 0x7B]}; + const IID TID_D3DRMPropertyBag = {0x7F0F21E1, 0xBFE1, 0x11D1, [0x82, 0xC0, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x71]}; + const IID TID_D3DRMRightHanded = {0x7F5D5EA0, 0xD53A, 0x11D1, [0x82, 0xC0, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x71]}; + const IID TID_D3DRMStringProperty = {0x7F0F21E0, 0xBFE1, 0x11D1, [0x82, 0xC0, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x71]}; + const IID TID_D3DRMTextureFilename = {0xA42790E1, 0x7810, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMTextureReference = {0xA42790E2, 0x7810, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMTimedFloatKeys = {0xF406B180, 0x7B3B, 0x11CF, [0x8F, 0x52, 0x00, 0x40, 0x33, 0x35, 0x94, 0xA3]}; + const IID TID_D3DRMUrl = {0x3A23EEA1, 0x94B1, 0x11D0, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_D3DRMVector = {0x3D82AB5E, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; + const IID TID_DXFILEHeader = {0x3D82AB43, 0x62DA, 0x11CF, [0xAB, 0x39, 0x00, 0x20, 0xAF, 0x71, 0xE4, 0x33]}; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/vfw.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/vfw.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,2394 @@ +/***********************************************************************\ +* vfw.d * +* * +* Windows API header module * +* written in the D programming language * +* * +* Placed into public domain * +\***********************************************************************/ + +module win32.vfw; +pragma(lib, "vfw32.lib"); + +private import + win32.commdlg, + win32.wingdi, + win32.mmsystem, + win32.unknwn, + win32.w32api, + win32.windef, + win32.winuser; + +extern(Windows) { + DWORD VideoForWindowsVersion(); + LONG InitVFW(); + LONG TermVFW(); +} + +DWORD MKFOURCC(char ch0, char ch1, char ch2, char ch3) { + return (cast(DWORD)ch0) | ((cast(DWORD)ch1) << 8) | ((cast(DWORD)ch2) << 16) | ((cast(DWORD)ch3) << 24); +} + +/** + * COMPMAN - Installable Compression Manager. + */ + +const ICVERSION = 0x0104; + +typedef HANDLE HIC; + +const BI_1632 = 0x32333631; + +template aviTWOCC(char c0, char c1) { + const WORD aviTWOCC = c0 | (c1 << 8); +} + +const ICTYPE_VIDEO = mmioFOURCC!('v', 'i', 'd', 'c'); +const ICTYPE_AUDIO = mmioFOURCC!('a', 'u', 'd', 'c'); + +enum { + ICERR_OK = 0, + ICERR_DONTDRAW = 1, + ICERR_NEWPALETTE = 2, + ICERR_GOTOKEYFRAME = 3, + ICERR_STOPDRAWING = 4, +} + +const ICERR_UNSUPPORTED = -1; +const ICERR_BADFORMAT = -2; +const ICERR_MEMORY = -3; +const ICERR_INTERNAL = -4; +const ICERR_BADFLAGS = -5; +const ICERR_BADPARAM = -6; +const ICERR_BADSIZE = -7; +const ICERR_BADHANDLE = -8; +const ICERR_CANTUPDATE = -9; +const ICERR_ABORT = -10; +const ICERR_ERROR = -100; +const ICERR_BADBITDEPTH = -200; +const ICERR_BADIMAGESIZE = -201; + +const ICERR_CUSTOM = -400; + +enum { + ICMODE_COMPRESS = 1, + ICMODE_DECOMPRESS, + ICMODE_FASTDECOMPRESS, + ICMODE_QUERY, + ICMODE_FASTCOMPRESS, + ICMODE_DRAW = 8, +} + +const ICMODE_INTERNALF_FUNCTION32 = 0x8000; +const ICMODE_INTERNALF_MASK = 0x8000; + +enum { + AVIIF_LIST = 0x00000001, + AVIIF_TWOCC = 0x00000002, + AVIIF_KEYFRAME = 0x00000010, +} + +const ICQUALITY_LOW = 0; +const ICQUALITY_HIGH = 10000; +const ICQUALITY_DEFAULT = -1; + +enum { + ICM_USER = DRV_USER + 0x0000, + ICM_RESERVED_LOW = DRV_USER + 0x1000, + ICM_RESERVED_HIGH = DRV_USER + 0x2000, + ICM_RESERVED = ICM_RESERVED_LOW, +} + +// messages + +enum { + ICM_GETSTATE = ICM_RESERVED + 0, + ICM_SETSTATE = ICM_RESERVED + 1, + ICM_GETINFO = ICM_RESERVED + 2, + ICM_CONFIGURE = ICM_RESERVED + 10, + ICM_ABOUT = ICM_RESERVED + 11, + ICM_GETERRORTEXT = ICM_RESERVED + 12, + ICM_GETFORMATNAME = ICM_RESERVED + 20, + ICM_ENUMFORMATS = ICM_RESERVED + 21, + ICM_GETDEFAULTQUALITY = ICM_RESERVED + 30, + ICM_GETQUALITY = ICM_RESERVED + 31, + ICM_SETQUALITY = ICM_RESERVED + 32, + ICM_SET = ICM_RESERVED + 40, + ICM_GET = ICM_RESERVED + 41, +} + +const ICM_FRAMERATE = mmioFOURCC!('F','r','m','R'); +const ICM_KEYFRAMERATE = mmioFOURCC!('K','e','y','R'); + +// ICM specific messages. + +enum { + ICM_COMPRESS_GET_FORMAT = ICM_USER + 4, + ICM_COMPRESS_GET_SIZE = ICM_USER + 5, + ICM_COMPRESS_QUERY = ICM_USER + 6, + ICM_COMPRESS_BEGIN = ICM_USER + 7, + ICM_COMPRESS = ICM_USER + 8, + ICM_COMPRESS_END = ICM_USER + 9, + ICM_DECOMPRESS_GET_FORMAT = ICM_USER + 10, + ICM_DECOMPRESS_QUERY = ICM_USER + 11, + ICM_DECOMPRESS_BEGIN = ICM_USER + 12, + ICM_DECOMPRESS = ICM_USER + 13, + ICM_DECOMPRESS_END = ICM_USER + 14, + ICM_DECOMPRESS_SET_PALETTE = ICM_USER + 29, + ICM_DECOMPRESS_GET_PALETTE = ICM_USER + 30, + ICM_DRAW_QUERY = ICM_USER + 31, + ICM_DRAW_BEGIN = ICM_USER + 15, + ICM_DRAW_GET_PALETTE = ICM_USER + 16, + ICM_DRAW_UPDATE = ICM_USER + 17, + ICM_DRAW_START = ICM_USER + 18, + ICM_DRAW_STOP = ICM_USER + 19, + ICM_DRAW_BITS = ICM_USER + 20, + ICM_DRAW_END = ICM_USER + 21, + ICM_DRAW_GETTIME = ICM_USER + 32, + ICM_DRAW = ICM_USER + 33, + ICM_DRAW_WINDOW = ICM_USER + 34, + ICM_DRAW_SETTIME = ICM_USER + 35, + ICM_DRAW_REALIZE = ICM_USER + 36, + ICM_DRAW_FLUSH = ICM_USER + 37, + ICM_DRAW_RENDERBUFFER = ICM_USER + 38, + ICM_DRAW_START_PLAY = ICM_USER + 39, + ICM_DRAW_STOP_PLAY = ICM_USER + 40, + ICM_DRAW_SUGGESTFORMAT = ICM_USER + 50, + ICM_DRAW_CHANGEPALETTE = ICM_USER + 51, + ICM_DRAW_IDLE = ICM_USER + 52, + ICM_GETBUFFERSWANTED = ICM_USER + 41, + ICM_GETDEFAULTKEYFRAMERATE = ICM_USER + 42, + ICM_DECOMPRESSEX_BEGIN = ICM_USER + 60, + ICM_DECOMPRESSEX_QUERY = ICM_USER + 61, + ICM_DECOMPRESSEX = ICM_USER + 62, + ICM_DECOMPRESSEX_END = ICM_USER + 63, + ICM_COMPRESS_FRAMES_INFO = ICM_USER + 70, + ICM_COMPRESS_FRAMES = ICM_USER + 71, + ICM_SET_STATUS_PROC = ICM_USER + 72, +} + +struct ICOPEN { + DWORD dwSize; + DWORD fccType; + DWORD fccHandler; + DWORD dwVersion; + DWORD dwFlags; + LRESULT dwError; + LPVOID pV1Reserved; + LPVOID pV2Reserved; + DWORD dnDevNode; +} + +struct ICINFO { + DWORD dwSize; + DWORD fccType; + DWORD fccHandler; + DWORD dwFlags; + DWORD dwVersion; + DWORD dwVersionICM; + WCHAR szName[16]; + WCHAR szDescription[128]; + WCHAR szDriver[128]; +} + +enum { + VIDCF_QUALITY = 0x0001, + VIDCF_CRUNCH = 0x0002, + VIDCF_TEMPORAL = 0x0004, + VIDCF_COMPRESSFRAMES = 0x0008, + VIDCF_DRAW = 0x0010, + VIDCF_FASTTEMPORALC = 0x0020, + VIDCF_FASTTEMPORALD = 0x0080, +} + +const ICCOMPRESS_KEYFRAME = 0x00000001L; + +struct ICCOMPRESS { + DWORD dwFlags; + LPBITMAPINFOHEADER lpbiOutput; + LPVOID lpOutput; + LPBITMAPINFOHEADER lpbiInput; + LPVOID lpInput; + LPDWORD lpckid; + LPDWORD lpdwFlags; + LONG lFrameNum; + DWORD dwFrameSize; + DWORD dwQuality; + LPBITMAPINFOHEADER lpbiPrev; + LPVOID lpPrev; +} + +const ICCOMPRESSFRAMES_PADDING = 0x00000001; + +struct ICCOMPRESSFRAMES { + DWORD dwFlags; + LPBITMAPINFOHEADER lpbiOutput; + LPARAM lOutput; + LPBITMAPINFOHEADER lpbiInput; + LPARAM lInput; + LONG lStartFrame; + LONG lFrameCount; + LONG lQuality; + LONG lDataRate; + LONG lKeyRate; + DWORD dwRate; + DWORD dwScale; DWORD dwOverheadPerFrame; + DWORD dwReserved2; + + LONG function(LPARAM lInput, LONG lFrame, LPVOID lpBits, LONG len) GetData; + LONG function(LPARAM lOutput, LONG lFrame, LPVOID lpBits, LONG len) PutData; +} + +enum { + ICSTATUS_START = 0, + ICSTATUS_STATUS = 1, + ICSTATUS_END = 2, + ICSTATUS_ERROR = 3, + ICSTATUS_YIELD = 4, +} + +struct ICSETSTATUSPROC { + DWORD dwFlags; + LPARAM lParam; + LONG function(LPARAM lParam, UINT message, LONG l) Status; +} + +enum { + ICDECOMPRESS_NOTKEYFRAME = 0x08000000, + ICDECOMPRESS_NULLFRAME = 0x10000000, + ICDECOMPRESS_PREROLL = 0x20000000, + ICDECOMPRESS_UPDATE = 0x40000000, + ICDECOMPRESS_HURRYUP = 0x80000000, +} + +struct ICDECOMPRESS { + DWORD dwFlags; + LPBITMAPINFOHEADER lpbiInput; + LPVOID lpInput; + LPBITMAPINFOHEADER lpbiOutput; + LPVOID lpOutput; + DWORD ckid; +} + +struct ICDECOMPRESSEX { + DWORD dwFlags; + LPBITMAPINFOHEADER lpbiSrc; + LPVOID lpSrc; + LPBITMAPINFOHEADER lpbiDst; + LPVOID lpDst; + int xDst; + int yDst; + int dxDst; + int dyDst; + int xSrc; + int ySrc; + int dxSrc; + int dySrc; +} + +enum { + ICDRAW_QUERY = 0x00000001, + ICDRAW_FULLSCREEN = 0x00000002, + ICDRAW_HDC = 0x00000004, + ICDRAW_ANIMATE = 0x00000008, + ICDRAW_CONTINUE = 0x00000010, + ICDRAW_MEMORYDC = 0x00000020, + ICDRAW_UPDATING = 0x00000040, + ICDRAW_RENDER = 0x00000080, + ICDRAW_BUFFER = 0x00000100, +} + +struct ICDRAWBEGIN { + DWORD dwFlags; + HPALETTE hpal; + HWND hwnd; + HDC hdc; + int xDst; + int yDst; + int dxDst; + int dyDst; + LPBITMAPINFOHEADER lpbi; + int xSrc; + int ySrc; + int dxSrc; + int dySrc; + DWORD dwRate; + DWORD dwScale; +} + +enum { + ICDRAW_NOTKEYFRAME = 0x08000000, + ICDRAW_NULLFRAME = 0x10000000, + ICDRAW_PREROLL = 0x20000000, + ICDRAW_UPDATE = 0x40000000, + ICDRAW_HURRYUP = 0x80000000, +} + +struct ICDRAW { + DWORD dwFlags; + LPVOID lpFormat; + LPVOID lpData; + DWORD cbData; + LONG lTime; +} + +struct ICDRAWSUGGEST { + LPBITMAPINFOHEADER lpbiIn; + LPBITMAPINFOHEADER lpbiSuggest; + int dxSrc; + int dySrc; + int dxDst; + int dyDst; + HIC hicDecompressor; +} + +struct ICPALETTE { + DWORD dwFlags; + int iStart; + int iLen; + LPPALETTEENTRY lppe; +} + + +/** + * ICM function declarations + */ + +extern (Windows) { + BOOL ICInfo(DWORD fccType, DWORD fccHandler, ICINFO *lpicinfo); + BOOL ICInstall(DWORD fccType, DWORD fccHandler, LPARAM lParam, LPSTR szDesc, UINT wFlags); + BOOL ICRemove(DWORD fccType, DWORD fccHandler, UINT wFlags); + LRESULT ICGetInfo(HIC hic, ICINFO *picinfo, DWORD cb); + HIC ICOpen(DWORD fccType, DWORD fccHandler, UINT wMode); + HIC ICOpenFunction(DWORD fccType, DWORD fccHandler, UINT wMode, FARPROC lpfnHandler); + LRESULT ICClose(HIC hic); + LRESULT ICSendMessage(HIC hic, UINT msg, DWORD_PTR dw1, DWORD_PTR dw2); +} + +enum { + ICINSTALL_FUNCTION = 0x0001, + ICINSTALL_DRIVER = 0x0002, + ICINSTALL_HDRV = 0x0004, + ICINSTALL_UNICODE = 0x8000, + ICINSTALL_DRIVERW = 0x8002, +} + +// query macros + +const ICMF_CONFIGURE_QUERY = 0x00000001; +const ICMF_ABOUT_QUERY = 0x00000001; + +DWORD ICQueryAbout(HIC hic) { + return ICSendMessage(hic, ICM_ABOUT, -1, ICMF_ABOUT_QUERY) == ICERR_OK; +} + +DWORD ICAbout(HIC hic, HWND hwnd) { + return ICSendMessage(hic, ICM_ABOUT, cast(UINT)hwnd, 0); +} + +DWORD ICQueryConfigure(HIC hic) { + return (ICSendMessage(hic, ICM_CONFIGURE, -1, ICMF_CONFIGURE_QUERY) == ICERR_OK); +} + +DWORD ICConfigure(HIC hic, HWND hwnd) { + return ICSendMessage(hic, ICM_CONFIGURE, cast(UINT)hwnd, 0); +} + +DWORD ICGetState(HIC hic, LPVOID pv, DWORD_PTR cb) { + return ICSendMessage(hic, ICM_GETSTATE, cast(DWORD)pv, cast(DWORD)cb); +} + +DWORD ICSetState(HIC hic, LPVOID pv, DWORD_PTR cb) { + return ICSendMessage(hic, ICM_SETSTATE, cast(DWORD)pv, cast(DWORD)cb); +} + +DWORD ICGetStateSize(HIC hic) { + return ICGetState(hic, null, 0); +} + +DWORD dwICValue; + +DWORD ICGetDefaultQuality(HIC hic) { + ICSendMessage(hic, ICM_GETDEFAULTQUALITY, cast(DWORD_PTR)&dwICValue, DWORD.sizeof); + return dwICValue; +} + +DWORD ICGetDefaultKeyFrameRate(HIC hic) { + ICSendMessage(hic, ICM_GETDEFAULTKEYFRAMERATE, cast(DWORD_PTR)&dwICValue, DWORD.sizeof); + return dwICValue; +} + +DWORD ICDrawWindow(HIC hic, LPVOID prc) { + return ICSendMessage(hic, ICM_DRAW_WINDOW, cast(DWORD)prc, RECT.sizeof); +} + +extern (Windows) { + DWORD ICCompress(HIC hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiOutput, LPVOID lpData, + LPBITMAPINFOHEADER lpbiInput, LPVOID lpBits, LPDWORD lpckid, LPDWORD lpdwFlags, + LONG lFrameNum, DWORD dwFrameSize, DWORD dwQuality, LPBITMAPINFOHEADER lpbiPrev, LPVOID lpPrev); +} + +LRESULT ICCompressBegin(HIC hic, LPVOID lpbiInput, LPVOID lpbiOutput) { + return ICSendMessage(hic, ICM_COMPRESS_BEGIN, cast(DWORD_PTR)lpbiInput, cast(DWORD_PTR)lpbiOutput); +} +LRESULT ICCompressQuery(HIC hic, LPVOID lpbiInput, LPVOID lpbiOutput) { + return ICSendMessage(hic, ICM_COMPRESS_QUERY, cast(DWORD_PTR)lpbiInput, cast(DWORD_PTR)lpbiOutput); +} +LRESULT ICCompressGetFormat(HIC hic, LPVOID lpbiInput, LPVOID lpbiOutput) { + return ICSendMessage(hic, ICM_COMPRESS_GET_FORMAT, cast(DWORD_PTR)lpbiInput, cast(DWORD_PTR)lpbiOutput); +} +DWORD ICCompressGetFormatSize(HIC hic, LPVOID lpbi) { + return cast(DWORD)ICCompressGetFormat(hic, lpbi, null); +} +DWORD ICCompressGetSize(HIC hic, LPVOID lpbiInput, LPVOID lpbiOutput) { + return cast(DWORD)ICSendMessage(hic, ICM_COMPRESS_GET_SIZE, cast(DWORD_PTR)lpbiInput, cast(DWORD_PTR)lpbiOutput); +} +LRESULT ICCompressEnd(HIC hic) { + return ICSendMessage(hic, ICM_COMPRESS_END, 0, 0); +} + +extern (Windows) { + DWORD ICDecompress(HIC hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiFormat, LPVOID lpData, LPBITMAPINFOHEADER lpbi, LPVOID lpBits); +} + +LRESULT ICDecompressBegin(HIC hic, LPVOID lpbiInput, LPVOID lpbiOutput) { + return ICSendMessage(hic, ICM_DECOMPRESS_BEGIN, cast(DWORD_PTR)lpbiInput, cast(DWORD_PTR)lpbiOutput); +} +LRESULT ICDecompressQuery(HIC hic, LPVOID lpbiInput, LPVOID lpbiOutput) { + return ICSendMessage(hic, ICM_DECOMPRESS_QUERY, cast(DWORD_PTR)lpbiInput, cast(DWORD_PTR)lpbiOutput); +} +LONG ICDecompressGetFormat(HIC hic, LPVOID lpbiInput, LPVOID lpbiOutput) { + return cast(LONG)ICSendMessage(hic, ICM_DECOMPRESS_GET_FORMAT, cast(DWORD_PTR)lpbiInput, cast(DWORD_PTR)lpbiOutput); +} +LONG ICDecompressGetFormatSize(HIC hic, LPVOID lpbi) { + return ICDecompressGetFormat(hic, lpbi, null); +} +LRESULT ICDecompressGetPalette(HIC hic, LPVOID lpbiInput, LPVOID lpbiOutput) { + return ICSendMessage(hic, ICM_DECOMPRESS_GET_PALETTE, cast(DWORD_PTR)lpbiInput, cast(DWORD_PTR)lpbiOutput); +} +LRESULT ICDecompressSetPalette(HIC hic, LPVOID lpbiPalette) { + return ICSendMessage(hic, ICM_DECOMPRESS_SET_PALETTE, cast(DWORD_PTR)lpbiPalette, 0); +} +LRESULT ICDecompressEnd(HIC hic) { + return ICSendMessage(hic, ICM_DECOMPRESS_END, 0, 0); +} + +LRESULT ICDecompressEx(HIC hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiSrc, + LPVOID lpSrc, int xSrc, int ySrc, int dxSrc, int dySrc, LPBITMAPINFOHEADER lpbiDst, + LPVOID lpDst, int xDst, int yDst, int dxDst, int dyDst) { + ICDECOMPRESSEX ic; + + ic.dwFlags = dwFlags; + ic.lpbiSrc = lpbiSrc; + ic.lpSrc = lpSrc; + ic.xSrc = xSrc; + ic.ySrc = ySrc; + ic.dxSrc = dxSrc; + ic.dySrc = dySrc; + ic.lpbiDst = lpbiDst; + ic.lpDst = lpDst; + ic.xDst = xDst; + ic.yDst = yDst; + ic.dxDst = dxDst; + ic.dyDst = dyDst; + + return ICSendMessage(hic, ICM_DECOMPRESSEX, cast(DWORD_PTR)&ic, ic.sizeof); +} + +LRESULT ICDecompressExBegin(HIC hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiSrc, + LPVOID lpSrc, int xSrc, int ySrc, int dxSrc, int dySrc, LPBITMAPINFOHEADER lpbiDst, + LPVOID lpDst, int xDst, int yDst, int dxDst, int dyDst) { + ICDECOMPRESSEX ic; + + ic.dwFlags = dwFlags; + ic.lpbiSrc = lpbiSrc; + ic.lpSrc = lpSrc; + ic.xSrc = xSrc; + ic.ySrc = ySrc; + ic.dxSrc = dxSrc; + ic.dySrc = dySrc; + ic.lpbiDst = lpbiDst; + ic.lpDst = lpDst; + ic.xDst = xDst; + ic.yDst = yDst; + ic.dxDst = dxDst; + ic.dyDst = dyDst; + + return ICSendMessage(hic, ICM_DECOMPRESSEX_BEGIN, cast(DWORD_PTR)&ic, ic.sizeof); +} + +LRESULT ICDecompressExQuery(HIC hic, DWORD dwFlags, LPBITMAPINFOHEADER lpbiSrc, + LPVOID lpSrc, int xSrc, int ySrc, int dxSrc, int dySrc, LPBITMAPINFOHEADER lpbiDst, + LPVOID lpDst, int xDst, int yDst, int dxDst, int dyDst) { + ICDECOMPRESSEX ic; + + ic.dwFlags = dwFlags; + ic.lpbiSrc = lpbiSrc; + ic.lpSrc = lpSrc; + ic.xSrc = xSrc; + ic.ySrc = ySrc; + ic.dxSrc = dxSrc; + ic.dySrc = dySrc; + ic.lpbiDst = lpbiDst; + ic.lpDst = lpDst; + ic.xDst = xDst; + ic.yDst = yDst; + ic.dxDst = dxDst; + ic.dyDst = dyDst; + + return ICSendMessage(hic, ICM_DECOMPRESSEX_QUERY, cast(DWORD_PTR)&ic, ic.sizeof); +} + +LRESULT ICDecompressExEnd(HIC hic) { + return ICSendMessage(hic, ICM_DECOMPRESSEX_END, 0, 0); +} + +extern (Windows) { + DWORD ICDrawBegin(HIC hic, DWORD dwFlags, HPALETTE hpal, HWND hwnd, HDC hdc, + int xDst, int yDst, int dxDst, int dyDst, LPBITMAPINFOHEADER lpbi, + int xSrc, int ySrc, int dxSrc, int dySrc, DWORD dwRate, DWORD dwScale); +} + +extern (Windows) { + DWORD ICDraw(HIC hic, DWORD dwFlags, LPVOID lpFormat, LPVOID lpData, DWORD cbData, LONG lTime); +} + +LRESULT ICDrawSuggestFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, + int dxSrc, int dySrc, int dxDst, int dyDst, HIC hicDecomp) { + ICDRAWSUGGEST ic; + + ic.lpbiIn = lpbiIn; + ic.lpbiSuggest = lpbiOut; + ic.dxSrc = dxSrc; + ic.dySrc = dySrc; + ic.dxDst = dxDst; + ic.dyDst = dyDst; + ic.hicDecompressor = hicDecomp; + + return ICSendMessage(hic, ICM_DRAW_SUGGESTFORMAT, cast(DWORD_PTR)&ic, ic.sizeof); +} + +LRESULT ICDrawQuery(HIC hic, LPVOID lpbiInput) { + return ICSendMessage(hic, ICM_DRAW_QUERY, cast(DWORD_PTR)lpbiInput, 0L); +} +LRESULT ICDrawChangePalette(HIC hic, LPVOID lpbiInput) { + return ICSendMessage(hic, ICM_DRAW_CHANGEPALETTE, cast(DWORD_PTR)lpbiInput, 0L); +} +LRESULT ICGetBuffersWanted(HIC hic, LPVOID lpdwBuffers) { + return ICSendMessage(hic, ICM_GETBUFFERSWANTED, cast(DWORD_PTR)lpdwBuffers, 0); +} +LRESULT ICDrawEnd(HIC hic) { + return ICSendMessage(hic, ICM_DRAW_END, 0, 0); +} +LRESULT ICDrawStart(HIC hic) { + return ICSendMessage(hic, ICM_DRAW_START, 0, 0); +} +LRESULT ICDrawStartPlay(HIC hic, DWORD lFrom, DWORD lTo) { + return ICSendMessage(hic, ICM_DRAW_START_PLAY, cast(DWORD_PTR)lFrom, cast(DWORD_PTR)lTo); +} +LRESULT ICDrawStop(HIC hic) { + return ICSendMessage(hic, ICM_DRAW_STOP, 0, 0); +} +LRESULT ICDrawStopPlay(HIC hic) { + return ICSendMessage(hic, ICM_DRAW_STOP_PLAY, 0, 0); +} +LRESULT ICDrawGetTime(HIC hic, LPVOID lplTime) { + return ICSendMessage(hic, ICM_DRAW_GETTIME, cast(DWORD_PTR)lplTime, 0); +} +LRESULT ICDrawSetTime(HIC hic, DWORD lTime) { + return ICSendMessage(hic, ICM_DRAW_SETTIME, cast(DWORD_PTR)lTime, 0); +} +LRESULT ICDrawRealize(HIC hic, HDC hdc, BOOL fBackground) { + return ICSendMessage(hic, ICM_DRAW_REALIZE, cast(DWORD_PTR)hdc, cast(DWORD_PTR)fBackground); +} +LRESULT ICDrawFlush(HIC hic) { + return ICSendMessage(hic, ICM_DRAW_FLUSH, 0, 0); +} +LRESULT ICDrawRenderBuffer(HIC hic) { + return ICSendMessage(hic, ICM_DRAW_RENDERBUFFER, 0, 0); +} + +LRESULT ICSetStatusProc(HIC hic, DWORD dwFlags, LRESULT lParam, LONG function(LPARAM, UINT, LONG) fpfnStatus) { + ICSETSTATUSPROC ic; + + ic.dwFlags = dwFlags; + ic.lParam = lParam; + ic.Status = fpfnStatus; + + return ICSendMessage(hic, ICM_SET_STATUS_PROC, cast(DWORD_PTR)&ic, ic.sizeof); +} + +HIC ICDecompressOpen(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut) { + return ICLocate(fccType, fccHandler, lpbiIn, lpbiOut, ICMODE_DECOMPRESS); +} + +HIC ICDrawOpen(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn) { + return ICLocate(fccType, fccHandler, lpbiIn, null, ICMODE_DRAW); +} + +extern (Windows) { + HIC ICLocate(DWORD fccType, DWORD fccHandler, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, WORD wFlags); + HIC ICGetDisplayFormat(HIC hic, LPBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut, int BitDepth, int dx, int dy); + HANDLE ICImageCompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn, LPVOID lpBits, LPBITMAPINFO lpbiOut, LONG lQuality, LONG* plSize); + HANDLE ICImageDecompress(HIC hic, UINT uiFlags, LPBITMAPINFO lpbiIn, LPVOID lpBits, LPBITMAPINFO lpbiOut); +} + +struct COMPVARS { + LONG cbSize = this.sizeof; + DWORD dwFlags; + HIC hic; + DWORD fccType; + DWORD fccHandler; + LPBITMAPINFO lpbiIn; + LPBITMAPINFO lpbiOut; + LPVOID lpBitsOut; + LPVOID lpBitsPrev; + LONG lFrame; + LONG lKey; + LONG lDataRate; + LONG lQ; + LONG lKeyCount; + LPVOID lpState; + LONG cbState; +} +alias COMPVARS* PCOMPVARS; + +const ICMF_COMPVARS_VALID = 0x00000001; + +extern (Windows) { + BOOL ICCompressorChoose(HWND hwnd, UINT uiFlags, LPVOID pvIn, LPVOID lpData, PCOMPVARS pc, LPSTR lpszTitle); +} + +enum { + ICMF_CHOOSE_KEYFRAME = 0x0001, + ICMF_CHOOSE_DATARATE = 0x0002, + ICMF_CHOOSE_PREVIEW = 0x0004, + ICMF_CHOOSE_ALLCOMPRESSORS = 0x0008, +} + +extern (Windows) { + BOOL ICSeqCompressFrameStart(PCOMPVARS pc, LPBITMAPINFO lpbiIn); + void ICSeqCompressFrameEnd(PCOMPVARS pc); + LPVOID ICSeqCompressFrame(PCOMPVARS pc, UINT uiFlags, LPVOID lpBits, BOOL* pfKey, LONG* plSize); + void ICCompressorFree(PCOMPVARS pc); +} + +alias HANDLE HDRAWDIB; + +enum { + DDF_0001 = 0x0001, + DDF_UPDATE = 0x0002, + DDF_SAME_HDC = 0x0004, + DDF_SAME_DRAW = 0x0008, + DDF_DONTDRAW = 0x0010, + DDF_ANIMATE = 0x0020, + DDF_BUFFER = 0x0040, + DDF_JUSTDRAWIT = 0x0080, + DDF_FULLSCREEN = 0x0100, + DDF_BACKGROUNDPAL = 0x0200, + DDF_NOTKEYFRAME = 0x0400, + DDF_HURRYUP = 0x0800, + DDF_HALFTONE = 0x1000, + DDF_2000 = 0x2000, + DDF_PREROLL = DDF_DONTDRAW, + DDF_SAME_DIB = DDF_SAME_DRAW, + DDF_SAME_SIZE = DDF_SAME_DRAW, +} + +extern (Windows) { + BOOL DrawDibInit(); + HDRAWDIB DrawDibOpen(); + BOOL DrawDibClose(HDRAWDIB hdd); + LPVOID DrawDibGetBuffer(HDRAWDIB hdd, LPBITMAPINFOHEADER lpbi, DWORD dwSize, DWORD dwFlags); + UINT DrawDibError(HDRAWDIB hdd); + HPALETTE DrawDibGetPalette(HDRAWDIB hdd); + BOOL DrawDibSetPalette(HDRAWDIB hdd, HPALETTE hpal); + BOOL DrawDibChangePalette(HDRAWDIB hdd, int iStart, int iLen, LPPALETTEENTRY lppe); + UINT DrawDibRealize(HDRAWDIB hdd, HDC hdc, BOOL fBackground); + BOOL DrawDibStart(HDRAWDIB hdd, DWORD rate); + BOOL DrawDibStop(HDRAWDIB hdd); + BOOL DrawDibBegin(HDRAWDIB hdd, HDC hdc, int dxDst, int dyDst, LPBITMAPINFOHEADER lpbi, int dxSrc, int dySrc, UINT wFlags); + BOOL DrawDibDraw(HDRAWDIB hdd, HDC hdc, int xDst, int yDst, int dxDst, int dyDst, LPBITMAPINFOHEADER lpbi, + LPVOID lpBits, int xSrc, int ySrc, int dxSrc, int dySrc, UINT wFlags); +} + +BOOL DrawDibUpdate(HDRAWDIB hdd, HDC hdc, int x, int y) { + return DrawDibDraw(hdd, hdc, x, y, 0, 0, null, null, 0, 0, 0, 0, DDF_UPDATE); +} + +extern (Windows) { + BOOL DrawDibEnd(HDRAWDIB hdd); +} + +struct DRAWDIBTIME { + LONG timeCount; + LONG timeDraw; + LONG timeDecompress; + LONG timeDither; + LONG timeStretch; + LONG timeBlt; + LONG timeSetDIBits; +} +alias DRAWDIBTIME* LPDRAWDIBTIME; + +extern (Windows) { + BOOL DrawDibTime(HDRAWDIB hdd, LPDRAWDIBTIME lpddtime); +} + +enum { + PD_CAN_DRAW_DIB = 0x0001, + PD_CAN_STRETCHDIB = 0x0002, + PD_STRETCHDIB_1_1_OK = 0x0004, + PD_STRETCHDIB_1_2_OK = 0x0008, + PD_STRETCHDIB_1_N_OK = 0x0010, +} + +extern (Windows) { + LRESULT DrawDibProfileDisplay(LPBITMAPINFOHEADER lpbi); + void StretchDIB(LPBITMAPINFOHEADER biDst, LPVOID lpDst, int DstX, int DstY, + int DstXE, int DstYE, LPBITMAPINFOHEADER biSrc, LPVOID lpSrc, + int SrcX, int SrcY, int SrcXE, int SrcYE); +} + +alias DWORD FOURCC; + +alias WORD TWOCC; + +const formtypeAVI = mmioFOURCC!('A', 'V', 'I', ' '); +const listtypeAVIHEADER = mmioFOURCC!('h', 'd', 'r', 'l'); +const ckidAVIMAINHDR = mmioFOURCC!('a', 'v', 'i', 'h'); +const listtypeSTREAMHEADER = mmioFOURCC!('s', 't', 'r', 'l'); +const ckidSTREAMHEADER = mmioFOURCC!('s', 't', 'r', 'h'); +const ckidSTREAMFORMAT = mmioFOURCC!('s', 't', 'r', 'f'); +const ckidSTREAMHANDLERDATA = mmioFOURCC!('s', 't', 'r', 'd'); +const ckidSTREAMNAME = mmioFOURCC!('s', 't', 'r', 'n'); +const listtypeAVIMOVIE = mmioFOURCC!('m', 'o', 'v', 'i'); +const listtypeAVIRECORD = mmioFOURCC!('r', 'e', 'c', ' '); +const ckidAVINEWINDEX = mmioFOURCC!('i', 'd', 'x', '1'); +const streamtypeVIDEO = mmioFOURCC!('v', 'i', 'd', 's'); +const streamtypeAUDIO = mmioFOURCC!('a', 'u', 'd', 's'); +const streamtypeMIDI = mmioFOURCC!('m', 'i', 'd', 's'); +const streamtypeTEXT = mmioFOURCC!('t', 'x', 't', 's'); + +const cktypeDIBbits = aviTWOCC!('d', 'b'); +const cktypeDIBcompressed = aviTWOCC!('d', 'c'); +const cktypePALchange = aviTWOCC!('p', 'c'); +const cktypeWAVEbytes = aviTWOCC!('w', 'b'); + +const ckidAVIPADDING = mmioFOURCC!('J', 'U', 'N', 'K'); + +DWORD FromHex(char n) { + return (n >= 'A') ? n + 10 - 'A' : n - '0'; +} + +WORD StreamFromFOURCC(DWORD fcc) { + return cast(WORD)((FromHex(LOBYTE(LOWORD(fcc))) << 4) + (FromHex(HIBYTE(LOWORD(fcc))))); +} + +WORD TWOCCFromFOURCC(DWORD fcc) { + return HIWORD(fcc); +} + +BYTE ToHex(DWORD n) { + return cast(BYTE)((n > 9) ? n - 10 + 'A' : n + '0'); +} + +DWORD MAKEAVICKID(WORD tcc, WORD stream) { + return MAKELONG(cast(WORD)((ToHex(stream & 0x0f) << 8) | (ToHex((stream & 0xf0) >> 4))), tcc); +} + +enum { + AVIF_HASINDEX = 0x00000010, + AVIF_MUSTUSEINDEX = 0x00000020, + AVIF_ISINTERLEAVED = 0x00000100, + AVIF_WASCAPTUREFILE = 0x00010000, + AVIF_COPYRIGHTED = 0x00020000, +} + +const AVI_HEADERSIZE = 2048; + +struct MainAVIHeader { + DWORD dwMicroSecPerFrame; + DWORD dwMaxBytesPerSec; + DWORD dwPaddingGranularity; + DWORD dwFlags; + DWORD dwTotalFrames; + DWORD dwInitialFrames; + DWORD dwStreams; + DWORD dwSuggestedBufferSize; + DWORD dwWidth; + DWORD dwHeight; + DWORD dwReserved[4]; +} + +const AVISF_DISABLED = 0x00000001; + +const AVISF_VIDEO_PALCHANGES = 0x00010000; + +struct AVIStreamHeader { + FOURCC fccType; + FOURCC fccHandler; + DWORD dwFlags; + WORD wPriority; + WORD wLanguage; + DWORD dwInitialFrames; + DWORD dwScale; + DWORD dwRate; + DWORD dwStart; + DWORD dwLength; + DWORD dwSuggestedBufferSize; + DWORD dwQuality; + DWORD dwSampleSize; + RECT rcFrame; +} + +enum { + AVIIF_FIRSTPART = 0x00000020L, + AVIIF_LASTPART = 0x00000040L, + AVIIF_MIDPART = (AVIIF_LASTPART|AVIIF_FIRSTPART), + AVIIF_NOTIME = 0x00000100L, + AVIIF_COMPUSE = 0x0FFF0000L, +} + +struct AVIINDEXENTRY { + DWORD ckid; + DWORD dwFlags; + DWORD dwChunkOffset; + DWORD dwChunkLength; +} + +struct AVIPALCHANGE { + BYTE bFirstEntry; + BYTE bNumEntries; + WORD wFlags; + PALETTEENTRY peNew[]; +} + +const AVIGETFRAMEF_BESTDISPLAYFMT = 1; + +struct AVISTREAMINFOW { + DWORD fccType; + DWORD fccHandler; + DWORD dwFlags; + DWORD dwCaps; + WORD wPriority; + WORD wLanguage; + DWORD dwScale; + DWORD dwRate; + DWORD dwStart; + DWORD dwLength; + DWORD dwInitialFrames; + DWORD dwSuggestedBufferSize; + DWORD dwQuality; + DWORD dwSampleSize; + RECT rcFrame; + DWORD dwEditCount; + DWORD dwFormatChangeCount; + WCHAR szName[64]; +} +alias AVISTREAMINFOW* LPAVISTREAMINFOW; + +struct AVISTREAMINFOA { + DWORD fccType; + DWORD fccHandler; + DWORD dwFlags; + DWORD dwCaps; + WORD wPriority; + WORD wLanguage; + DWORD dwScale; + DWORD dwRate; + DWORD dwStart; + DWORD dwLength; + DWORD dwInitialFrames; + DWORD dwSuggestedBufferSize; + DWORD dwQuality; + DWORD dwSampleSize; + RECT rcFrame; + DWORD dwEditCount; + DWORD dwFormatChangeCount; + char szName[64]; +} +alias AVISTREAMINFOA* LPAVISTREAMINFOA; + +version(Unicode) { + alias AVISTREAMINFOW AVISTREAMINFO; + alias LPAVISTREAMINFOW LPAVISTREAMINFO; +} else { // Unicode + alias AVISTREAMINFOA AVISTREAMINFO; + alias LPAVISTREAMINFOA LPAVISTREAMINFO; +} + +const AVISTREAMINFO_DISABLED = 0x00000001; +const AVISTREAMINFO_FORMATCHANGES = 0x00010000; + +struct AVIFILEINFOW { + DWORD dwMaxBytesPerSec; + DWORD dwFlags; + DWORD dwCaps; + DWORD dwStreams; + DWORD dwSuggestedBufferSize; + DWORD dwWidth; + DWORD dwHeight; + DWORD dwScale; + DWORD dwRate; + DWORD dwLength; + DWORD dwEditCount; + WCHAR szFileType[64]; +} +alias AVIFILEINFOW* LPAVIFILEINFOW; + +struct AVIFILEINFOA { + DWORD dwMaxBytesPerSec; + DWORD dwFlags; + DWORD dwCaps; + DWORD dwStreams; + DWORD dwSuggestedBufferSize; + DWORD dwWidth; + DWORD dwHeight; + DWORD dwScale; + DWORD dwRate; + DWORD dwLength; + DWORD dwEditCount; + char szFileType[64]; +} +alias AVIFILEINFOA* LPAVIFILEINFOA; + +version(Unicode) { + alias AVIFILEINFOW AVIFILEINFO; + alias LPAVIFILEINFOW LPAVIFILEINFO; +} else { // Unicode + alias AVIFILEINFOA AVIFILEINFO; + alias LPAVIFILEINFOA LPAVIFILEINFO; +} + +enum { + AVIFILEINFO_HASINDEX = 0x00000010, + AVIFILEINFO_MUSTUSEINDEX = 0x00000020, + AVIFILEINFO_ISINTERLEAVED = 0x00000100, + AVIFILEINFO_WASCAPTUREFILE = 0x00010000, + AVIFILEINFO_COPYRIGHTED = 0x00020000, +} + +enum { + AVIFILECAPS_CANREAD = 0x00000001, + AVIFILECAPS_CANWRITE = 0x00000002, + AVIFILECAPS_ALLKEYFRAMES = 0x00000010, + AVIFILECAPS_NOCOMPRESSION = 0x00000020, +} + +extern (Windows) { + alias BOOL function(int) AVISAVECALLBACK; +} + +struct AVICOMPRESSOPTIONS { + DWORD fccType; + DWORD fccHandler; + DWORD dwKeyFrameEvery; + DWORD dwQuality; + DWORD dwBytesPerSecond; + DWORD dwFlags; + LPVOID lpFormat; + DWORD cbFormat; + LPVOID lpParms; + DWORD cbParms; + DWORD dwInterleaveEvery; +} +alias AVICOMPRESSOPTIONS* LPAVICOMPRESSOPTIONS; + +enum { + AVICOMPRESSF_INTERLEAVE = 0x00000001, + AVICOMPRESSF_DATARATE = 0x00000002, + AVICOMPRESSF_KEYFRAMES = 0x00000004, + AVICOMPRESSF_VALID = 0x00000008, +} + +/+ TODO: +DECLARE_INTERFACE_(IAVIStream, IUnknown) +{ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + STDMETHOD(Create) (THIS_ LPARAM lParam1, LPARAM lParam2) PURE ; + STDMETHOD(Info) (THIS_ AVISTREAMINFOW FAR * psi, LONG lSize) PURE ; + STDMETHOD_(LONG, FindSample)(THIS_ LONG lPos, LONG lFlags) PURE ; + STDMETHOD(ReadFormat) (THIS_ LONG lPos, + LPVOID lpFormat, LONG FAR *lpcbFormat) PURE ; + STDMETHOD(SetFormat) (THIS_ LONG lPos, + LPVOID lpFormat, LONG cbFormat) PURE ; + STDMETHOD(Read) (THIS_ LONG lStart, LONG lSamples, + LPVOID lpBuffer, LONG cbBuffer, + LONG FAR * plBytes, LONG FAR * plSamples) PURE ; + STDMETHOD(Write) (THIS_ LONG lStart, LONG lSamples, + LPVOID lpBuffer, LONG cbBuffer, + DWORD dwFlags, + LONG FAR *plSampWritten, + LONG FAR *plBytesWritten) PURE ; + STDMETHOD(Delete) (THIS_ LONG lStart, LONG lSamples) PURE; + STDMETHOD(ReadData) (THIS_ DWORD fcc, LPVOID lp, LONG FAR *lpcb) PURE ; + STDMETHOD(WriteData) (THIS_ DWORD fcc, LPVOID lp, LONG cb) PURE ; +#ifdef _WIN32 + STDMETHOD(SetInfo) (THIS_ AVISTREAMINFOW FAR * lpInfo, + LONG cbInfo) PURE; +#else + STDMETHOD(Reserved1) (THIS) PURE; + STDMETHOD(Reserved2) (THIS) PURE; + STDMETHOD(Reserved3) (THIS) PURE; + STDMETHOD(Reserved4) (THIS) PURE; + STDMETHOD(Reserved5) (THIS) PURE; +#endif +}; + +typedef IAVIStream FAR* PAVISTREAM; + +#undef INTERFACE +#define INTERFACE IAVIStreaming + +DECLARE_INTERFACE_(IAVIStreaming, IUnknown) +{ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + STDMETHOD(Begin) (THIS_ + LONG lStart, + LONG lEnd, + LONG lRate) PURE; + STDMETHOD(End) (THIS) PURE; +}; + +typedef IAVIStreaming FAR* PAVISTREAMING; + + +#undef INTERFACE +#define INTERFACE IAVIEditStream + +DECLARE_INTERFACE_(IAVIEditStream, IUnknown) +{ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + STDMETHOD(Cut) (THIS_ LONG FAR *plStart, + LONG FAR *plLength, + PAVISTREAM FAR * ppResult) PURE; + STDMETHOD(Copy) (THIS_ LONG FAR *plStart, + LONG FAR *plLength, + PAVISTREAM FAR * ppResult) PURE; + STDMETHOD(Paste) (THIS_ LONG FAR *plPos, + LONG FAR *plLength, + PAVISTREAM pstream, + LONG lStart, + LONG lEnd) PURE; + STDMETHOD(Clone) (THIS_ PAVISTREAM FAR *ppResult) PURE; + STDMETHOD(SetInfo) (THIS_ AVISTREAMINFOW FAR * lpInfo, + LONG cbInfo) PURE; +}; + +typedef IAVIEditStream FAR* PAVIEDITSTREAM; + +#undef INTERFACE +#define INTERFACE IAVIPersistFile + +DECLARE_INTERFACE_(IAVIPersistFile, IPersistFile) +{ + STDMETHOD(Reserved1)(THIS) PURE; +}; + +typedef IAVIPersistFile FAR* PAVIPERSISTFILE; + +#undef INTERFACE +#define INTERFACE IAVIFile +#define PAVIFILE IAVIFile FAR* + +DECLARE_INTERFACE_(IAVIFile, IUnknown) +{ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + STDMETHOD(Info) (THIS_ + AVIFILEINFOW FAR * pfi, + LONG lSize) PURE; + STDMETHOD(GetStream) (THIS_ + PAVISTREAM FAR * ppStream, + DWORD fccType, + LONG lParam) PURE; + STDMETHOD(CreateStream) (THIS_ + PAVISTREAM FAR * ppStream, + AVISTREAMINFOW FAR * psi) PURE; + STDMETHOD(WriteData) (THIS_ + DWORD ckid, + LPVOID lpData, + LONG cbData) PURE; + STDMETHOD(ReadData) (THIS_ + DWORD ckid, + LPVOID lpData, + LONG FAR *lpcbData) PURE; + STDMETHOD(EndRecord) (THIS) PURE; + STDMETHOD(DeleteStream) (THIS_ + DWORD fccType, + LONG lParam) PURE; +}; + +#undef PAVIFILE +typedef IAVIFile FAR* PAVIFILE; + +#undef INTERFACE +#define INTERFACE IGetFrame +#define PGETFRAME IGetFrame FAR* + +DECLARE_INTERFACE_(IGetFrame, IUnknown) +{ + STDMETHOD(QueryInterface) (THIS_ REFIID riid, LPVOID FAR* ppvObj) PURE; + STDMETHOD_(ULONG,AddRef) (THIS) PURE; + STDMETHOD_(ULONG,Release) (THIS) PURE; + + STDMETHOD_(LPVOID,GetFrame) (THIS_ LONG lPos) PURE; + + STDMETHOD(Begin) (THIS_ LONG lStart, LONG lEnd, LONG lRate) PURE; + STDMETHOD(End) (THIS) PURE; + + STDMETHOD(SetFormat) (THIS_ LPBITMAPINFOHEADER lpbi, LPVOID lpBits, int x, int y, int dx, int dy) PURE; +}; + +#undef PGETFRAME +typedef IGetFrame FAR* PGETFRAME; + +#define DEFINE_AVIGUID(name, l, w1, w2) DEFINE_GUID(name, l, w1, w2, 0xC0,0,0,0,0,0,0,0x46) + +DEFINE_AVIGUID(IID_IAVIFile, 0x00020020, 0, 0); +DEFINE_AVIGUID(IID_IAVIStream, 0x00020021, 0, 0); +DEFINE_AVIGUID(IID_IAVIStreaming, 0x00020022, 0, 0); +DEFINE_AVIGUID(IID_IGetFrame, 0x00020023, 0, 0); +DEFINE_AVIGUID(IID_IAVIEditStream, 0x00020024, 0, 0); +DEFINE_AVIGUID(IID_IAVIPersistFile, 0x00020025, 0, 0); +#ifndef UNICODE +DEFINE_AVIGUID(CLSID_AVISimpleUnMarshal, 0x00020009, 0, 0); +#endif + +DEFINE_AVIGUID(CLSID_AVIFile, 0x00020000, 0, 0); + +#define AVIFILEHANDLER_CANREAD 0x0001 +#define AVIFILEHANDLER_CANWRITE 0x0002 +#define AVIFILEHANDLER_CANACCEPTNONRGB 0x0004 + +STDAPI_(void) AVIFileInit(void); +STDAPI_(void) AVIFileExit(void); + +STDAPI_(ULONG) AVIFileAddRef (PAVIFILE pfile); +STDAPI_(ULONG) AVIFileRelease (PAVIFILE pfile); + +#ifdef _WIN32 +STDAPI AVIFileOpenA (PAVIFILE FAR * ppfile, LPCSTR szFile, + UINT uMode, LPCLSID lpHandler); +STDAPI AVIFileOpenW (PAVIFILE FAR * ppfile, LPCWSTR szFile, + UINT uMode, LPCLSID lpHandler); +#ifdef UNICODE +#define AVIFileOpen AVIFileOpenW +#else +#define AVIFileOpen AVIFileOpenA +#endif +#else +STDAPI AVIFileOpen (PAVIFILE FAR * ppfile, LPCSTR szFile, + UINT uMode, LPCLSID lpHandler); +#define AVIFileOpenW AVIFileOpen +#endif + +#ifdef _WIN32 +STDAPI AVIFileInfoW (PAVIFILE pfile, LPAVIFILEINFOW pfi, LONG lSize); +STDAPI AVIFileInfoA (PAVIFILE pfile, LPAVIFILEINFOA pfi, LONG lSize); +#ifdef UNICODE +#define AVIFileInfo AVIFileInfoW +#else +#define AVIFileInfo AVIFileInfoA +#endif +#else +STDAPI AVIFileInfo (PAVIFILE pfile, LPAVIFILEINFO pfi, LONG lSize); +#define AVIFileInfoW AVIFileInfo +#endif + + +STDAPI AVIFileGetStream (PAVIFILE pfile, PAVISTREAM FAR * ppavi, DWORD fccType, LONG lParam); + + +#ifdef _WIN32 +STDAPI AVIFileCreateStreamW (PAVIFILE pfile, PAVISTREAM FAR *ppavi, AVISTREAMINFOW FAR * psi); +STDAPI AVIFileCreateStreamA (PAVIFILE pfile, PAVISTREAM FAR *ppavi, AVISTREAMINFOA FAR * psi); +#ifdef UNICODE +#define AVIFileCreateStream AVIFileCreateStreamW +#else +#define AVIFileCreateStream AVIFileCreateStreamA +#endif +#else +STDAPI AVIFileCreateStream(PAVIFILE pfile, PAVISTREAM FAR *ppavi, AVISTREAMINFO FAR * psi); +#define AVIFileCreateStreamW AVIFileCreateStream +#endif + +STDAPI AVIFileWriteData (PAVIFILE pfile, + DWORD ckid, + LPVOID lpData, + LONG cbData); +STDAPI AVIFileReadData (PAVIFILE pfile, + DWORD ckid, + LPVOID lpData, + LONG FAR *lpcbData); +STDAPI AVIFileEndRecord (PAVIFILE pfile); + +STDAPI_(ULONG) AVIStreamAddRef (PAVISTREAM pavi); +STDAPI_(ULONG) AVIStreamRelease (PAVISTREAM pavi); + +STDAPI AVIStreamInfoW (PAVISTREAM pavi, LPAVISTREAMINFOW psi, LONG lSize); +STDAPI AVIStreamInfoA (PAVISTREAM pavi, LPAVISTREAMINFOA psi, LONG lSize); +#ifdef UNICODE +#define AVIStreamInfo AVIStreamInfoW +#else +#define AVIStreamInfo AVIStreamInfoA +#endif + +STDAPI_(LONG) AVIStreamFindSample(PAVISTREAM pavi, LONG lPos, LONG lFlags); +STDAPI AVIStreamReadFormat (PAVISTREAM pavi, LONG lPos,LPVOID lpFormat,LONG FAR *lpcbFormat); +STDAPI AVIStreamSetFormat (PAVISTREAM pavi, LONG lPos,LPVOID lpFormat,LONG cbFormat); +STDAPI AVIStreamReadData (PAVISTREAM pavi, DWORD fcc, LPVOID lp, LONG FAR *lpcb); +STDAPI AVIStreamWriteData (PAVISTREAM pavi, DWORD fcc, LPVOID lp, LONG cb); + +STDAPI AVIStreamRead (PAVISTREAM pavi, + LONG lStart, + LONG lSamples, + LPVOID lpBuffer, + LONG cbBuffer, + LONG FAR * plBytes, + LONG FAR * plSamples); +#define AVISTREAMREAD_CONVENIENT (-1L) + +STDAPI AVIStreamWrite (PAVISTREAM pavi, + LONG lStart, LONG lSamples, + LPVOID lpBuffer, LONG cbBuffer, DWORD dwFlags, + LONG FAR *plSampWritten, + LONG FAR *plBytesWritten); + +STDAPI_(LONG) AVIStreamStart (PAVISTREAM pavi); +STDAPI_(LONG) AVIStreamLength (PAVISTREAM pavi); +STDAPI_(LONG) AVIStreamTimeToSample (PAVISTREAM pavi, LONG lTime); +STDAPI_(LONG) AVIStreamSampleToTime (PAVISTREAM pavi, LONG lSample); + + +STDAPI AVIStreamBeginStreaming(PAVISTREAM pavi, LONG lStart, LONG lEnd, LONG lRate); +STDAPI AVIStreamEndStreaming(PAVISTREAM pavi); + +STDAPI_(PGETFRAME) AVIStreamGetFrameOpen(PAVISTREAM pavi, + LPBITMAPINFOHEADER lpbiWanted); +STDAPI_(LPVOID) AVIStreamGetFrame(PGETFRAME pg, LONG lPos); +STDAPI AVIStreamGetFrameClose(PGETFRAME pg); + +STDAPI AVIStreamOpenFromFileA(PAVISTREAM FAR *ppavi, LPCSTR szFile, + DWORD fccType, LONG lParam, + UINT mode, CLSID FAR *pclsidHandler); +STDAPI AVIStreamOpenFromFileW(PAVISTREAM FAR *ppavi, LPCWSTR szFile, + DWORD fccType, LONG lParam, + UINT mode, CLSID FAR *pclsidHandler); +#ifdef UNICODE +#define AVIStreamOpenFromFile AVIStreamOpenFromFileW +#else +#define AVIStreamOpenFromFile AVIStreamOpenFromFileA +#endif + +STDAPI AVIStreamCreate(PAVISTREAM FAR *ppavi, LONG lParam1, LONG lParam2, + CLSID FAR *pclsidHandler); + + + +#define FIND_DIR 0x0000000FL +#define FIND_NEXT 0x00000001L +#define FIND_PREV 0x00000004L +#define FIND_FROM_START 0x00000008L + +#define FIND_TYPE 0x000000F0L +#define FIND_KEY 0x00000010L +#define FIND_ANY 0x00000020L +#define FIND_FORMAT 0x00000040L + +#define FIND_RET 0x0000F000L +#define FIND_POS 0x00000000L +#define FIND_LENGTH 0x00001000L +#define FIND_OFFSET 0x00002000L +#define FIND_SIZE 0x00003000L +#define FIND_INDEX 0x00004000L + +#define AVIStreamFindKeyFrame AVIStreamFindSample +#define FindKeyFrame FindSample + +#define AVIStreamClose AVIStreamRelease +#define AVIFileClose AVIFileRelease +#define AVIStreamInit AVIFileInit +#define AVIStreamExit AVIFileExit + +#define SEARCH_NEAREST FIND_PREV +#define SEARCH_BACKWARD FIND_PREV +#define SEARCH_FORWARD FIND_NEXT +#define SEARCH_KEY FIND_KEY +#define SEARCH_ANY FIND_ANY + +#define AVIStreamSampleToSample(pavi1, pavi2, l) AVIStreamTimeToSample(pavi1,AVIStreamSampleToTime(pavi2, l)) + +#define AVIStreamNextSample(pavi, l) AVIStreamFindSample(pavi,l+1,FIND_NEXT|FIND_ANY) + +#define AVIStreamPrevSample(pavi, l) AVIStreamFindSample(pavi,l-1,FIND_PREV|FIND_ANY) + +#define AVIStreamNearestSample(pavi, l) AVIStreamFindSample(pavi,l,FIND_PREV|FIND_ANY) + +#define AVIStreamNextKeyFrame(pavi,l) AVIStreamFindSample(pavi,l+1,FIND_NEXT|FIND_KEY) + +#define AVIStreamPrevKeyFrame(pavi, l) AVIStreamFindSample(pavi,l-1,FIND_PREV|FIND_KEY) + +#define AVIStreamNearestKeyFrame(pavi, l) AVIStreamFindSample(pavi,l,FIND_PREV|FIND_KEY) + +#define AVIStreamIsKeyFrame(pavi, l) (AVIStreamNearestKeyFrame(pavi,l) == l) + +#define AVIStreamPrevSampleTime(pavi, t) AVIStreamSampleToTime(pavi, AVIStreamPrevSample(pavi,AVIStreamTimeToSample(pavi,t))) + +#define AVIStreamNextSampleTime(pavi, t) AVIStreamSampleToTime(pavi, AVIStreamNextSample(pavi,AVIStreamTimeToSample(pavi,t))) + +#define AVIStreamNearestSampleTime(pavi, t) AVIStreamSampleToTime(pavi, AVIStreamNearestSample(pavi,AVIStreamTimeToSample(pavi,t))) + +#define AVIStreamNextKeyFrameTime(pavi, t) AVIStreamSampleToTime(pavi, AVIStreamNextKeyFrame(pavi,AVIStreamTimeToSample(pavi, t))) + +#define AVIStreamPrevKeyFrameTime(pavi, t) AVIStreamSampleToTime(pavi, AVIStreamPrevKeyFrame(pavi,AVIStreamTimeToSample(pavi, t))) + +#define AVIStreamNearestKeyFrameTime(pavi, t) AVIStreamSampleToTime(pavi, AVIStreamNearestKeyFrame(pavi,AVIStreamTimeToSample(pavi, t))) + +#define AVIStreamStartTime(pavi) AVIStreamSampleToTime(pavi, AVIStreamStart(pavi)) + +#define AVIStreamLengthTime(pavi) AVIStreamSampleToTime(pavi, AVIStreamLength(pavi)) + +#define AVIStreamEnd(pavi) (AVIStreamStart(pavi) + AVIStreamLength(pavi)) + +#define AVIStreamEndTime(pavi) AVIStreamSampleToTime(pavi, AVIStreamEnd(pavi)) + +#define AVIStreamSampleSize(pavi, lPos, plSize) AVIStreamRead(pavi,lPos,1,NULL,0,plSize,NULL) + +#define AVIStreamFormatSize(pavi, lPos, plSize) AVIStreamReadFormat(pavi,lPos,NULL,plSize) + +#define AVIStreamDataSize(pavi, fcc, plSize) AVIStreamReadData(pavi,fcc,NULL,plSize) + +#ifndef comptypeDIB +#define comptypeDIB mmioFOURCC('D', 'I', 'B', ' ') +#endif + +STDAPI AVIMakeCompressedStream( + PAVISTREAM FAR * ppsCompressed, + PAVISTREAM ppsSource, + AVICOMPRESSOPTIONS FAR * lpOptions, + CLSID FAR *pclsidHandler); + +EXTERN_C HRESULT CDECL AVISaveA (LPCSTR szFile, + CLSID FAR *pclsidHandler, + AVISAVECALLBACK lpfnCallback, + int nStreams, + PAVISTREAM pfile, + LPAVICOMPRESSOPTIONS lpOptions, + ...); + +STDAPI AVISaveVA(LPCSTR szFile, + CLSID FAR *pclsidHandler, + AVISAVECALLBACK lpfnCallback, + int nStreams, + PAVISTREAM FAR * ppavi, + LPAVICOMPRESSOPTIONS FAR *plpOptions); +EXTERN_C HRESULT CDECL AVISaveW (LPCWSTR szFile, + CLSID FAR *pclsidHandler, + AVISAVECALLBACK lpfnCallback, + int nStreams, + PAVISTREAM pfile, + LPAVICOMPRESSOPTIONS lpOptions, + ...); + +STDAPI AVISaveVW(LPCWSTR szFile, + CLSID FAR *pclsidHandler, + AVISAVECALLBACK lpfnCallback, + int nStreams, + PAVISTREAM FAR * ppavi, + LPAVICOMPRESSOPTIONS FAR *plpOptions); +#ifdef UNICODE +#define AVISave AVISaveW +#define AVISaveV AVISaveVW +#else +#define AVISave AVISaveA +#define AVISaveV AVISaveVA +#endif + + + +STDAPI_(INT_PTR) AVISaveOptions(HWND hwnd, + UINT uiFlags, + int nStreams, + PAVISTREAM FAR *ppavi, + LPAVICOMPRESSOPTIONS FAR *plpOptions); + +STDAPI AVISaveOptionsFree(int nStreams, + LPAVICOMPRESSOPTIONS FAR *plpOptions); + +STDAPI AVIBuildFilterW(LPWSTR lpszFilter, LONG cbFilter, BOOL fSaving); +STDAPI AVIBuildFilterA(LPSTR lpszFilter, LONG cbFilter, BOOL fSaving); +#ifdef UNICODE +#define AVIBuildFilter AVIBuildFilterW +#else +#define AVIBuildFilter AVIBuildFilterA +#endif +STDAPI AVIMakeFileFromStreams(PAVIFILE FAR * ppfile, + int nStreams, + PAVISTREAM FAR * papStreams); + +STDAPI AVIMakeStreamFromClipboard(UINT cfFormat, HANDLE hGlobal, PAVISTREAM FAR *ppstream); + +STDAPI AVIPutFileOnClipboard(PAVIFILE pf); + +STDAPI AVIGetFromClipboard(PAVIFILE FAR * lppf); + +STDAPI AVIClearClipboard(void); + +STDAPI CreateEditableStream( + PAVISTREAM FAR * ppsEditable, + PAVISTREAM psSource); + +STDAPI EditStreamCut(PAVISTREAM pavi, LONG FAR *plStart, LONG FAR *plLength, PAVISTREAM FAR * ppResult); + +STDAPI EditStreamCopy(PAVISTREAM pavi, LONG FAR *plStart, LONG FAR *plLength, PAVISTREAM FAR * ppResult); + +STDAPI EditStreamPaste(PAVISTREAM pavi, LONG FAR *plPos, LONG FAR *plLength, PAVISTREAM pstream, LONG lStart, LONG lEnd); + +STDAPI EditStreamClone(PAVISTREAM pavi, PAVISTREAM FAR *ppResult); + + +STDAPI EditStreamSetNameA(PAVISTREAM pavi, LPCSTR lpszName); +STDAPI EditStreamSetNameW(PAVISTREAM pavi, LPCWSTR lpszName); +STDAPI EditStreamSetInfoW(PAVISTREAM pavi, LPAVISTREAMINFOW lpInfo, LONG cbInfo); +STDAPI EditStreamSetInfoA(PAVISTREAM pavi, LPAVISTREAMINFOA lpInfo, LONG cbInfo); +#ifdef UNICODE +#define EditStreamSetInfo EditStreamSetInfoW +#define EditStreamSetName EditStreamSetNameW +#else +#define EditStreamSetInfo EditStreamSetInfoA +#define EditStreamSetName EditStreamSetNameA +#endif ++/ +const AVIERR_OK = 0L; + +SCODE MAKE_AVIERR(DWORD error) { + return MAKE_SCODE(SEVERITY_ERROR, FACILITY_ITF, 0x4000 + error); +} + +const AVIERR_UNSUPPORTED = MAKE_AVIERR(101); +const AVIERR_BADFORMAT = MAKE_AVIERR(102); +const AVIERR_MEMORY = MAKE_AVIERR(103); +const AVIERR_INTERNAL = MAKE_AVIERR(104); +const AVIERR_BADFLAGS = MAKE_AVIERR(105); +const AVIERR_BADPARAM = MAKE_AVIERR(106); +const AVIERR_BADSIZE = MAKE_AVIERR(107); +const AVIERR_BADHANDLE = MAKE_AVIERR(108); +const AVIERR_FILEREAD = MAKE_AVIERR(109); +const AVIERR_FILEWRITE = MAKE_AVIERR(110); +const AVIERR_FILEOPEN = MAKE_AVIERR(111); +const AVIERR_COMPRESSOR = MAKE_AVIERR(112); +const AVIERR_NOCOMPRESSOR = MAKE_AVIERR(113); +const AVIERR_READONLY = MAKE_AVIERR(114); +const AVIERR_NODATA = MAKE_AVIERR(115); +const AVIERR_BUFFERTOOSMALL = MAKE_AVIERR(116); +const AVIERR_CANTCOMPRESS = MAKE_AVIERR(117); +const AVIERR_USERABORT = MAKE_AVIERR(198); +const AVIERR_ERROR = MAKE_AVIERR(199); + +const TCHAR[] MCIWND_WINDOW_CLASS = "MCIWndClass"; + +extern (Windows) { + HWND MCIWndCreateA(HWND hwndParent, HINSTANCE hInstance, DWORD dwStyle, LPCSTR szFile); + HWND MCIWndCreateW(HWND hwndParent, HINSTANCE hInstance, DWORD dwStyle, LPCWSTR szFile); +} + +version(Unicode) { + alias MCIWndCreateW MCIWndCreate; +} else { // Unicode + alias MCIWndCreateA MCIWndCreate; +} + +extern(Windows) { + BOOL MCIWndRegisterClass(); +} + +enum { + MCIWNDOPENF_NEW = 0x0001, + MCIWNDF_NOAUTOSIZEWINDOW = 0x0001, + MCIWNDF_NOPLAYBAR = 0x0002, + MCIWNDF_NOAUTOSIZEMOVIE = 0x0004, + MCIWNDF_NOMENU = 0x0008, + MCIWNDF_SHOWNAME = 0x0010, + MCIWNDF_SHOWPOS = 0x0020, + MCIWNDF_SHOWMODE = 0x0040, + MCIWNDF_SHOWALL = 0x0070, + MCIWNDF_NOTIFYMODE = 0x0100, + MCIWNDF_NOTIFYPOS = 0x0200, + MCIWNDF_NOTIFYSIZE = 0x0400, + MCIWNDF_NOTIFYERROR = 0x1000, + MCIWNDF_NOTIFYALL = 0x1F00, + MCIWNDF_NOTIFYANSI = 0x0080, + MCIWNDF_NOTIFYMEDIAA = 0x0880, + MCIWNDF_NOTIFYMEDIAW = 0x0800, +} + +version(Unicode) { + alias MCIWNDF_NOTIFYMEDIAW MCIWNDF_NOTIFYMEDIA; +} else { // Unicode + alias MCIWNDF_NOTIFYMEDIAA MCIWNDF_NOTIFYMEDIA; +} + +enum { + MCIWNDF_RECORD = 0x2000, + MCIWNDF_NOERRORDLG = 0x4000, + MCIWNDF_NOOPEN = 0x8000, +} + +// can macros + +BOOL MCIWndCanPlay(HWND hwnd) + { return cast(BOOL)SendMessage(hwnd, MCIWNDM_CAN_PLAY, 0, 0); } +BOOL MCIWndCanRecord(HWND hwnd) + { return cast(BOOL)SendMessage(hwnd, MCIWNDM_CAN_RECORD, 0, 0); } +BOOL MCIWndCanSave(HWND hwnd) + { return cast(BOOL)SendMessage(hwnd, MCIWNDM_CAN_SAVE, 0, 0); } +BOOL MCIWndCanWindow(HWND hwnd) + { return cast(BOOL)SendMessage(hwnd, MCIWNDM_CAN_WINDOW, 0, 0); } +BOOL MCIWndCanEject(HWND hwnd) + { return cast(BOOL)SendMessage(hwnd, MCIWNDM_CAN_EJECT, 0, 0); } +BOOL MCIWndCanConfig(HWND hwnd) + { return cast(BOOL)SendMessage(hwnd, MCIWNDM_CAN_CONFIG, 0, 0); } +BOOL MCIWndPaletteKick(HWND hwnd) + { return cast(BOOL)SendMessage(hwnd, MCIWNDM_PALETTEKICK, 0, 0); } +LONG MCIWndSave(HWND hwnd, LPVOID szFile) + { return cast(LONG)SendMessage(hwnd, MCI_SAVE, 0, cast(LPARAM)szFile); } +LONG MCIWndSaveDialog(HWND hwnd) + { return MCIWndSave(hwnd, cast(LPVOID)-1); } +LONG MCIWndNew(HWND hwnd, LPVOID lp) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_NEW, 0, cast(LPARAM)lp); } +LONG MCIWndRecord(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCI_RECORD, 0, 0); } +LONG MCIWndOpen(HWND hwnd, LPVOID sz, UINT f) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_OPEN, cast(WPARAM)f, cast(LPARAM)sz); } +LONG MCIWndOpenDialog(HWND hwnd) + { return MCIWndOpen(hwnd, cast(LPVOID)-1, 0); } +LONG MCIWndClose(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCI_CLOSE, 0, 0); } +LONG MCIWndPlay(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCI_PLAY, 0, 0); } +LONG MCIWndStop(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCI_STOP, 0, 0); } +LONG MCIWndPause(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCI_PAUSE, 0, 0); } +LONG MCIWndResume(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCI_RESUME, 0, 0); } +LONG MCIWndSeek(HWND hwnd, LONG lPos) + { return cast(LONG)SendMessage(hwnd, MCI_SEEK, 0, cast(LPARAM)lPos); } +LONG MCIWndHome(HWND hwnd) + { return MCIWndSeek(hwnd, MCIWND_START); } +LONG MCIWndEnd(HWND hwnd) + { return MCIWndSeek(hwnd, MCIWND_END); } +LONG MCIWndEject(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_EJECT, 0, 0); } +LONG MCIWndGetSource(HWND hwnd, LPRECT prc) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_GET_SOURCE, 0, cast(LPARAM)prc); } +LONG MCIWndPutSource(HWND hwnd, LPRECT prc) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_PUT_SOURCE, 0, cast(LPARAM)prc); } +LONG MCIWndGetDest(HWND hwnd, LPRECT prc) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_GET_DEST, 0, cast(LPARAM)prc); } +LONG MCIWndPutDest(HWND hwnd, LPRECT prc) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_PUT_DEST, 0, cast(LPARAM)prc); } +LONG MCIWndPlayReverse(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_PLAYREVERSE, 0, 0); } +LONG MCIWndPlayFrom(HWND hwnd, LONG lPos) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_PLAYFROM, 0, cast(LPARAM)lPos); } +LONG MCIWndPlayTo(HWND hwnd, LONG lPos) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_PLAYTO, 0, cast(LPARAM)lPos); } +LONG MCIWndPlayFromTo(HWND hwnd, LONG lStart, LONG lEnd) + { MCIWndSeek(hwnd, lStart); return MCIWndPlayTo(hwnd, lEnd); } +UINT MCIWndGetDeviceID(HWND hwnd) + { return cast(UINT)SendMessage(hwnd, MCIWNDM_GETDEVICEID, 0, 0); } +UINT MCIWndGetAlias(HWND hwnd) + { return cast(UINT)SendMessage(hwnd, MCIWNDM_GETALIAS, 0, 0); } +LONG MCIWndGetMode(HWND hwnd, LPTSTR lp, UINT len) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_GETMODE, cast(WPARAM)len, cast(LPARAM)lp); } +LONG MCIWndGetPosition(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_GETPOSITION, 0, 0); } +LONG MCIWndGetPositionString(HWND hwnd, LPTSTR lp, UINT len) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_GETPOSITION, cast(WPARAM)len, cast(LPARAM)lp); } +LONG MCIWndGetStart(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_GETSTART, 0, 0); } +LONG MCIWndGetLength(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_GETLENGTH, 0, 0); } +LONG MCIWndGetEnd(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_GETEND, 0, 0); } +LONG MCIWndStep(HWND hwnd, LONG n) + { return cast(LONG)SendMessage(hwnd, MCI_STEP, 0, cast(LPARAM)n); } +void MCIWndDestroy(HWND hwnd) + { SendMessage(hwnd, WM_CLOSE, 0, 0); } +void MCIWndSetZoom(HWND hwnd, UINT iZoom) + { SendMessage(hwnd, MCIWNDM_SETZOOM, 0, cast(LPARAM)iZoom); } +UINT MCIWndGetZoom(HWND hwnd) + { return cast(UINT)SendMessage(hwnd, MCIWNDM_GETZOOM, 0, 0); } +LONG MCIWndSetVolume(HWND hwnd, UINT iVol) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_SETVOLUME, 0, cast(LPARAM)iVol); } +LONG MCIWndGetVolume(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_GETVOLUME, 0, 0); } +LONG MCIWndSetSpeed(HWND hwnd, UINT iSpeed) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_SETSPEED, 0, cast(LPARAM)iSpeed); } +LONG MCIWndGetSpeed(HWND hwnd) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_GETSPEED, 0, 0); } +LONG MCIWndSetTimeFormat(HWND hwnd, LPTSTR lp) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_SETTIMEFORMAT, 0, cast(LPARAM)lp); } +LONG MCIWndUseFrames(HWND hwnd) + { return MCIWndSetTimeFormat(hwnd, (cast(TCHAR[])"frames").ptr); } +LONG MCIWndUseTime(HWND hwnd) + { return MCIWndSetTimeFormat(hwnd, (cast(TCHAR[])"ms").ptr); } +LONG MCIWndGetTimeFormat(HWND hwnd, LPTSTR lp, UINT len) + { return cast(LONG)SendMessage(hwnd, MCIWNDM_GETTIMEFORMAT, cast(WPARAM)len, cast(LPARAM)lp); } +void MCIWndValidateMedia(HWND hwnd) + { SendMessage(hwnd, MCIWNDM_VALIDATEMEDIA, 0, 0); } +void MCIWndSetRepeat(HWND hwnd, BOOL f) + { SendMessage(hwnd, MCIWNDM_SETREPEAT, 0, cast(LPARAM)f); } +BOOL MCIWndGetRepeat(HWND hwnd) + { return cast(BOOL)SendMessage(hwnd, MCIWNDM_GETREPEAT, 0, 0); } +void MCIWndSetActiveTimer(HWND hwnd, UINT active) + { SendMessage(hwnd, MCIWNDM_SETACTIVETIMER, cast(WPARAM)active, 0); } +void MCIWndSetInactiveTimer(HWND hwnd, UINT inactive) + { SendMessage(hwnd, MCIWNDM_SETINACTIVETIMER, cast(WPARAM)inactive, 0); } +void MCIWndSetTimers(HWND hwnd, UINT active, UINT inactive) + { SendMessage(hwnd, MCIWNDM_SETTIMERS, cast(WPARAM)active, cast(LPARAM)inactive); } +UINT MCIWndGetActiveTimer(HWND hwnd) + { return cast(UINT)SendMessage(hwnd, MCIWNDM_GETACTIVETIMER, 0, 0); } +UINT MCIWndGetInactiveTimer(HWND hwnd) + { return cast(UINT)SendMessage(hwnd, MCIWNDM_GETINACTIVETIMER, 0, 0); } +LONG MCIWndRealize(HWND hwnd, BOOL fBkgnd) + { return SendMessage(hwnd, MCIWNDM_REALIZE, cast(WPARAM)fBkgnd, 0); } +LONG MCIWndSendString(HWND hwnd, LPTSTR sz) + { return SendMessage(hwnd, MCIWNDM_SENDSTRING, 0, cast(LPARAM)sz); } +LONG MCIWndReturnString(HWND hwnd, LPVOID lp, UINT len) + { return SendMessage(hwnd, MCIWNDM_RETURNSTRING, cast(WPARAM)len, cast(LPARAM)lp); } +LONG MCIWndGetError(HWND hwnd, LPVOID lp, UINT len) + { return SendMessage(hwnd, MCIWNDM_GETERROR, cast(WPARAM)len, cast(LPARAM)lp); } +HPALETTE MCIWndGetPalette(HWND hwnd) + { return cast(HPALETTE)SendMessage(hwnd, MCIWNDM_GETPALETTE, 0, 0); } +LONG MCIWndSetPalette(HWND hwnd, HPALETTE hpal) + { return SendMessage(hwnd, MCIWNDM_SETPALETTE, cast(WPARAM)hpal, 0); } +LONG MCIWndGetFileName(HWND hwnd, LPVOID lp, UINT len) + { return SendMessage(hwnd, MCIWNDM_GETFILENAME, cast(WPARAM)len, cast(LPARAM)lp); } +LONG MCIWndGetDevice(HWND hwnd, LPVOID lp, UINT len) + { return SendMessage(hwnd, MCIWNDM_GETDEVICE, cast(WPARAM)len, cast(LPARAM)lp); } +UINT MCIWndGetStyles(HWND hwnd) + { return SendMessage(hwnd, MCIWNDM_GETSTYLES, 0, 0); } +LONG MCIWndChangeStyles(HWND hwnd, UINT mask, LONG value) + { return SendMessage(hwnd, MCIWNDM_CHANGESTYLES, cast(WPARAM)mask, cast(LPARAM)value); } +LONG MCIWndOpenInterface(HWND hwnd, LPUNKNOWN pUnk) + { return SendMessage(hwnd, MCIWNDM_OPENINTERFACE, 0, cast(LPARAM)cast(void*)pUnk); } +LONG MCIWndSetOwner(HWND hwnd, HWND hwndP) + { return SendMessage(hwnd, MCIWNDM_SETOWNER, cast(WPARAM)hwndP, 0); } + +enum { + MCIWNDM_GETDEVICEID = WM_USER + 100, + MCIWNDM_SENDSTRINGA = WM_USER + 101, + MCIWNDM_GETPOSITIONA = WM_USER + 102, + MCIWNDM_GETSTART = WM_USER + 103, + MCIWNDM_GETLENGTH = WM_USER + 104, + MCIWNDM_GETEND = WM_USER + 105, + MCIWNDM_GETMODEA = WM_USER + 106, + MCIWNDM_EJECT = WM_USER + 107, + MCIWNDM_SETZOOM = WM_USER + 108, + MCIWNDM_GETZOOM = WM_USER + 109, + MCIWNDM_SETVOLUME = WM_USER + 110, + MCIWNDM_GETVOLUME = WM_USER + 111, + MCIWNDM_SETSPEED = WM_USER + 112, + MCIWNDM_GETSPEED = WM_USER + 113, + MCIWNDM_SETREPEAT = WM_USER + 114, + MCIWNDM_GETREPEAT = WM_USER + 115, + MCIWNDM_REALIZE = WM_USER + 118, + MCIWNDM_SETTIMEFORMATA = WM_USER + 119, + MCIWNDM_GETTIMEFORMATA = WM_USER + 120, + MCIWNDM_VALIDATEMEDIA = WM_USER + 121, + MCIWNDM_PLAYFROM = WM_USER + 122, + MCIWNDM_PLAYTO = WM_USER + 123, + MCIWNDM_GETFILENAMEA = WM_USER + 124, + MCIWNDM_GETDEVICEA = WM_USER + 125, + MCIWNDM_GETPALETTE = WM_USER + 126, + MCIWNDM_SETPALETTE = WM_USER + 127, + MCIWNDM_GETERRORA = WM_USER + 128, + MCIWNDM_SETTIMERS = WM_USER + 129, + MCIWNDM_SETACTIVETIMER = WM_USER + 130, + MCIWNDM_SETINACTIVETIMER = WM_USER + 131, + MCIWNDM_GETACTIVETIMER = WM_USER + 132, + MCIWNDM_GETINACTIVETIMER = WM_USER + 133, + MCIWNDM_NEWA = WM_USER + 134, + MCIWNDM_CHANGESTYLES = WM_USER + 135, + MCIWNDM_GETSTYLES = WM_USER + 136, + MCIWNDM_GETALIAS = WM_USER + 137, + MCIWNDM_RETURNSTRINGA = WM_USER + 138, + MCIWNDM_PLAYREVERSE = WM_USER + 139, + MCIWNDM_GET_SOURCE = WM_USER + 140, + MCIWNDM_PUT_SOURCE = WM_USER + 141, + MCIWNDM_GET_DEST = WM_USER + 142, + MCIWNDM_PUT_DEST = WM_USER + 143, + MCIWNDM_CAN_PLAY = WM_USER + 144, + MCIWNDM_CAN_WINDOW = WM_USER + 145, + MCIWNDM_CAN_RECORD = WM_USER + 146, + MCIWNDM_CAN_SAVE = WM_USER + 147, + MCIWNDM_CAN_EJECT = WM_USER + 148, + MCIWNDM_CAN_CONFIG = WM_USER + 149, + MCIWNDM_PALETTEKICK = WM_USER + 150, + MCIWNDM_OPENINTERFACE = WM_USER + 151, + MCIWNDM_SETOWNER = WM_USER + 152, + MCIWNDM_OPENA = WM_USER + 153, + MCIWNDM_SENDSTRINGW = WM_USER + 201, + MCIWNDM_GETPOSITIONW = WM_USER + 202, + MCIWNDM_GETMODEW = WM_USER + 206, + MCIWNDM_SETTIMEFORMATW = WM_USER + 219, + MCIWNDM_GETTIMEFORMATW = WM_USER + 220, + MCIWNDM_GETFILENAMEW = WM_USER + 224, + MCIWNDM_GETDEVICEW = WM_USER + 225, + MCIWNDM_GETERRORW = WM_USER + 228, + MCIWNDM_NEWW = WM_USER + 234, + MCIWNDM_RETURNSTRINGW = WM_USER + 238, + MCIWNDM_OPENW = WM_USER + 252, +} + +version(Unicode) { + alias MCIWNDM_SENDSTRINGW MCIWNDM_SENDSTRING; + alias MCIWNDM_GETPOSITIONW MCIWNDM_GETPOSITION; + alias MCIWNDM_GETMODEW MCIWNDM_GETMODE; + alias MCIWNDM_SETTIMEFORMATW MCIWNDM_SETTIMEFORMAT; + alias MCIWNDM_GETTIMEFORMATW MCIWNDM_GETTIMEFORMAT; + alias MCIWNDM_GETFILENAMEW MCIWNDM_GETFILENAME; + alias MCIWNDM_GETDEVICEW MCIWNDM_GETDEVICE; + alias MCIWNDM_GETERRORW MCIWNDM_GETERROR; + alias MCIWNDM_NEWW MCIWNDM_NEW; + alias MCIWNDM_RETURNSTRINGW MCIWNDM_RETURNSTRING; + alias MCIWNDM_OPENW MCIWNDM_OPEN; +} else { // Unicode + alias MCIWNDM_SENDSTRINGA MCIWNDM_SENDSTRING; + alias MCIWNDM_GETPOSITIONA MCIWNDM_GETPOSITION; + alias MCIWNDM_GETMODEA MCIWNDM_GETMODE; + alias MCIWNDM_SETTIMEFORMATA MCIWNDM_SETTIMEFORMAT; + alias MCIWNDM_GETTIMEFORMATA MCIWNDM_GETTIMEFORMAT; + alias MCIWNDM_GETFILENAMEA MCIWNDM_GETFILENAME; + alias MCIWNDM_GETDEVICEA MCIWNDM_GETDEVICE; + alias MCIWNDM_GETERRORA MCIWNDM_GETERROR; + alias MCIWNDM_NEWA MCIWNDM_NEW; + alias MCIWNDM_RETURNSTRINGA MCIWNDM_RETURNSTRING; + alias MCIWNDM_OPENA MCIWNDM_OPEN; +} + +enum { + MCIWNDM_NOTIFYMODE = WM_USER + 200, + MCIWNDM_NOTIFYPOS = WM_USER + 201, + MCIWNDM_NOTIFYSIZE = WM_USER + 202, + MCIWNDM_NOTIFYMEDIA = WM_USER + 203, + MCIWNDM_NOTIFYERROR = WM_USER + 205, +} + +const MCIWND_START = -1; +const MCIWND_END = -2; + +enum { + MCI_CLOSE = 0x0804, + MCI_PLAY = 0x0806, + MCI_SEEK = 0x0807, + MCI_STOP = 0x0808, + MCI_PAUSE = 0x0809, + MCI_STEP = 0x080E, + MCI_RECORD = 0x080F, + MCI_SAVE = 0x0813, + MCI_CUT = 0x0851, + MCI_COPY = 0x0852, + MCI_PASTE = 0x0853, + MCI_RESUME = 0x0855, + MCI_DELETE = 0x0856, +} + +enum { + MCI_MODE_NOT_READY = 524, + MCI_MODE_STOP, + MCI_MODE_PLAY, + MCI_MODE_RECORD, + MCI_MODE_SEEK, + MCI_MODE_PAUSE, + MCI_MODE_OPEN, +} + +typedef HANDLE HVIDEO; +alias HVIDEO* LPHVIDEO; + +// Error Return Values + +enum { + DV_ERR_OK = 0, + DV_ERR_BASE = 1, + DV_ERR_NONSPECIFIC = DV_ERR_BASE, + DV_ERR_BADFORMAT = DV_ERR_BASE + 1, + DV_ERR_STILLPLAYING = DV_ERR_BASE + 2, + DV_ERR_UNPREPARED = DV_ERR_BASE + 3, + DV_ERR_SYNC = DV_ERR_BASE + 4, + DV_ERR_TOOMANYCHANNELS = DV_ERR_BASE + 5, + DV_ERR_NOTDETECTED = DV_ERR_BASE + 6, + DV_ERR_BADINSTALL = DV_ERR_BASE + 7, + DV_ERR_CREATEPALETTE = DV_ERR_BASE + 8, + DV_ERR_SIZEFIELD = DV_ERR_BASE + 9, + DV_ERR_PARAM1 = DV_ERR_BASE + 10, + DV_ERR_PARAM2 = DV_ERR_BASE + 11, + DV_ERR_CONFIG1 = DV_ERR_BASE + 12, + DV_ERR_CONFIG2 = DV_ERR_BASE + 13, + DV_ERR_FLAGS = DV_ERR_BASE + 14, + DV_ERR_13 = DV_ERR_BASE + 15, + DV_ERR_NOTSUPPORTED = DV_ERR_BASE + 16, + DV_ERR_NOMEM = DV_ERR_BASE + 17, + DV_ERR_ALLOCATED = DV_ERR_BASE + 18, + DV_ERR_BADDEVICEID = DV_ERR_BASE + 19, + DV_ERR_INVALHANDLE = DV_ERR_BASE + 20, + DV_ERR_BADERRNUM = DV_ERR_BASE + 21, + DV_ERR_NO_BUFFERS = DV_ERR_BASE + 22, + DV_ERR_MEM_CONFLICT = DV_ERR_BASE + 23, + DV_ERR_IO_CONFLICT = DV_ERR_BASE + 24, + DV_ERR_DMA_CONFLICT = DV_ERR_BASE + 25, + DV_ERR_INT_CONFLICT = DV_ERR_BASE + 26, + DV_ERR_PROTECT_ONLY = DV_ERR_BASE + 27, + DV_ERR_LASTERROR = DV_ERR_BASE + 27, + DV_ERR_USER_MSG = DV_ERR_BASE + 1000, +} + +// Callback Messages + +enum { + MM_DRVM_OPEN = 0x3D0, + MM_DRVM_CLOSE, + MM_DRVM_DATA, + MM_DRVM_ERROR, +} + +enum { + DV_VM_OPEN = MM_DRVM_OPEN, + DV_VM_CLOSE = MM_DRVM_CLOSE, + DV_VM_DATA = MM_DRVM_DATA, + DV_VM_ERROR = MM_DRVM_ERROR, +} + +/** + * Structures + */ + +struct VIDEOHDR { + LPBYTE lpData; + DWORD dwBufferLength; + DWORD dwBytesUsed; + DWORD dwTimeCaptured; + DWORD_PTR dwUser; + DWORD dwFlags; + DWORD_PTR dwReserved[4]; +} +alias VIDEOHDR* PVIDEOHDR, LPVIDEOHDR; + +enum { + VHDR_DONE = 0x00000001, + VHDR_PREPARED = 0x00000002, + VHDR_INQUEUE = 0x00000004, + VHDR_KEYFRAME = 0x00000008, + VHDR_VALID = 0x0000000F, +} + +struct CHANNEL_CAPS { + DWORD dwFlags; + DWORD dwSrcRectXMod; + DWORD dwSrcRectYMod; + DWORD dwSrcRectWidthMod; + DWORD dwSrcRectHeightMod; + DWORD dwDstRectXMod; + DWORD dwDstRectYMod; + DWORD dwDstRectWidthMod; + DWORD dwDstRectHeightMod; +} +alias CHANNEL_CAPS* PCHANNEL_CAPS, LPCHANNEL_CAPS; + +enum { + VCAPS_OVERLAY = 0x00000001, + VCAPS_SRC_CAN_CLIP = 0x00000002, + VCAPS_DST_CAN_CLIP = 0x00000004, + VCAPS_CAN_SCALE = 0x00000008, +} + +/** + * API Flags + */ + +enum { + VIDEO_EXTERNALIN = 0x0001, + VIDEO_EXTERNALOUT = 0x0002, + VIDEO_IN = 0x0004, + VIDEO_OUT = 0x0008, + VIDEO_DLG_QUERY = 0x0010, +} + +enum { + VIDEO_CONFIGURE_QUERYSIZE = 0x0001, + VIDEO_CONFIGURE_CURRENT = 0x0010, + VIDEO_CONFIGURE_NOMINAL = 0x0020, + VIDEO_CONFIGURE_MIN = 0x0040, + VIDEO_CONFIGURE_MAX = 0x0080, + VIDEO_CONFIGURE_SET = 0x1000, + VIDEO_CONFIGURE_GET = 0x2000, + VIDEO_CONFIGURE_QUERY = 0x8000, +} + +/** + * CONFIGURE MESSAGES + */ + +enum { + DVM_USER = 0x4000, + DVM_CONFIGURE_START = 0x1000, + DVM_CONFIGURE_END = 0x1FFF, + DVM_PALETTE = DVM_CONFIGURE_START + 1, + DVM_FORMAT = DVM_CONFIGURE_START + 2, + DVM_PALETTERGB555 = DVM_CONFIGURE_START + 3, + DVM_SRC_RECT = DVM_CONFIGURE_START + 4, + DVM_DST_RECT = DVM_CONFIGURE_START + 5, +} + +/** + * AVICap window class + */ + +LRESULT AVICapSM(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { + if (IsWindow(hWnd)) { + return SendMessage(hWnd, msg, wParam, lParam); + } + return 0; +} + +enum { + WM_CAP_START = WM_USER, + WM_CAP_UNICODE_START = WM_USER + 100, + + WM_CAP_GET_CAPSTREAMPTR = WM_CAP_START + 1, + WM_CAP_SET_CALLBACK_ERRORA = WM_CAP_START + 2, + WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3, + + WM_CAP_SET_CALLBACK_ERRORW = WM_CAP_UNICODE_START + 2, + WM_CAP_SET_CALLBACK_STATUSW = WM_CAP_UNICODE_START + 3, +} + +version(Unicode) { + alias WM_CAP_SET_CALLBACK_ERRORW WM_CAP_SET_CALLBACK_ERROR; + alias WM_CAP_SET_CALLBACK_STATUSW WM_CAP_SET_CALLBACK_STATUS; +} else { // Unicode + alias WM_CAP_SET_CALLBACK_ERRORA WM_CAP_SET_CALLBACK_ERROR; + alias WM_CAP_SET_CALLBACK_STATUSA WM_CAP_SET_CALLBACK_STATUS; +} + +enum { + WM_CAP_SET_CALLBACK_YIELD = WM_CAP_START + 4, + WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5, + WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6, + WM_CAP_SET_CALLBACK_WAVESTREAM = WM_CAP_START + 7, + WM_CAP_GET_USER_DATA = WM_CAP_START + 8, + WM_CAP_SET_USER_DATA = WM_CAP_START + 9, + WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10, + WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11, + WM_CAP_DRIVER_GET_NAMEA = WM_CAP_START + 12, + WM_CAP_DRIVER_GET_VERSIONA = WM_CAP_START + 13, + + WM_CAP_DRIVER_GET_NAMEW = WM_CAP_UNICODE_START + 12, + WM_CAP_DRIVER_GET_VERSIONW = WM_CAP_UNICODE_START + 13, +} + +version(Unicode) { + alias WM_CAP_DRIVER_GET_NAMEW WM_CAP_DRIVER_GET_NAME; + alias WM_CAP_DRIVER_GET_VERSIONW WM_CAP_DRIVER_GET_VERSION; +} else { // Unicode + alias WM_CAP_DRIVER_GET_NAMEA WM_CAP_DRIVER_GET_NAME; + alias WM_CAP_DRIVER_GET_VERSIONA WM_CAP_DRIVER_GET_VERSION; +} + +enum { + WM_CAP_DRIVER_GET_CAPS = WM_CAP_START + 14, + WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20, + WM_CAP_FILE_GET_CAPTURE_FILEA = WM_CAP_START + 21, + WM_CAP_FILE_SAVEASA = WM_CAP_START + 23, + WM_CAP_FILE_SAVEDIBA = WM_CAP_START + 25, + + WM_CAP_FILE_SET_CAPTURE_FILEW = WM_CAP_UNICODE_START + 20, + WM_CAP_FILE_GET_CAPTURE_FILEW = WM_CAP_UNICODE_START + 21, + WM_CAP_FILE_SAVEASW = WM_CAP_UNICODE_START + 23, + WM_CAP_FILE_SAVEDIBW = WM_CAP_UNICODE_START + 25, +} + +version(Unicode) { + alias WM_CAP_FILE_SET_CAPTURE_FILEW WM_CAP_FILE_SET_CAPTURE_FILE; + alias WM_CAP_FILE_GET_CAPTURE_FILEW WM_CAP_FILE_GET_CAPTURE_FILE; + alias WM_CAP_FILE_SAVEASW WM_CAP_FILE_SAVEAS; + alias WM_CAP_FILE_SAVEDIBW WM_CAP_FILE_SAVEDIB; +} else { // Unicode + alias WM_CAP_FILE_SET_CAPTURE_FILEA WM_CAP_FILE_SET_CAPTURE_FILE; + alias WM_CAP_FILE_GET_CAPTURE_FILEA WM_CAP_FILE_GET_CAPTURE_FILE; + alias WM_CAP_FILE_SAVEASA WM_CAP_FILE_SAVEAS; + alias WM_CAP_FILE_SAVEDIBA WM_CAP_FILE_SAVEDIB; +} + +enum { + WM_CAP_FILE_ALLOCATE = WM_CAP_START + 22, + WM_CAP_FILE_SET_INFOCHUNK = WM_CAP_START + 24, + WM_CAP_EDIT_COPY = WM_CAP_START + 30, + WM_CAP_SET_AUDIOFORMAT = WM_CAP_START + 35, + WM_CAP_GET_AUDIOFORMAT = WM_CAP_START + 36, + WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41, + WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42, + WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43, + WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44, + WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45, + WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46, + WM_CAP_SET_PREVIEW = WM_CAP_START + 50, + WM_CAP_SET_OVERLAY = WM_CAP_START + 51, + WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52, + WM_CAP_SET_SCALE = WM_CAP_START + 53, + WM_CAP_GET_STATUS = WM_CAP_START + 54, + WM_CAP_SET_SCROLL = WM_CAP_START + 55, + WM_CAP_GRAB_FRAME = WM_CAP_START + 60, + WM_CAP_GRAB_FRAME_NOSTOP = WM_CAP_START + 61, + WM_CAP_SEQUENCE = WM_CAP_START + 62, + WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63, + WM_CAP_SET_SEQUENCE_SETUP = WM_CAP_START + 64, + WM_CAP_GET_SEQUENCE_SETUP = WM_CAP_START + 65, + WM_CAP_SET_MCI_DEVICEA = WM_CAP_START + 66, + WM_CAP_GET_MCI_DEVICEA = WM_CAP_START + 67, + + WM_CAP_SET_MCI_DEVICEW = WM_CAP_UNICODE_START + 66, + WM_CAP_GET_MCI_DEVICEW = WM_CAP_UNICODE_START + 67, +} + +version(Unicode) { + alias WM_CAP_SET_MCI_DEVICEW WM_CAP_SET_MCI_DEVICE; + alias WM_CAP_GET_MCI_DEVICEW WM_CAP_GET_MCI_DEVICE; +} else { // Unicode + alias WM_CAP_SET_MCI_DEVICEA WM_CAP_SET_MCI_DEVICE; + alias WM_CAP_GET_MCI_DEVICEA WM_CAP_GET_MCI_DEVICE; +} + +enum { + WM_CAP_STOP = WM_CAP_START + 68, + WM_CAP_ABORT = WM_CAP_START + 69, + WM_CAP_SINGLE_FRAME_OPEN = WM_CAP_START + 70, + WM_CAP_SINGLE_FRAME_CLOSE = WM_CAP_START + 71, + WM_CAP_SINGLE_FRAME = WM_CAP_START + 72, + WM_CAP_PAL_OPENA = WM_CAP_START + 80, + WM_CAP_PAL_SAVEA = WM_CAP_START + 81, + + WM_CAP_PAL_OPENW = WM_CAP_UNICODE_START + 80, + WM_CAP_PAL_SAVEW = WM_CAP_UNICODE_START + 81, +} + +version(Unicode) { + alias WM_CAP_PAL_OPENW WM_CAP_PAL_OPEN; + alias WM_CAP_PAL_SAVEW WM_CAP_PAL_SAVE; +} else { // Unicode + alias WM_CAP_PAL_OPENA WM_CAP_PAL_OPEN; + alias WM_CAP_PAL_SAVEA WM_CAP_PAL_SAVE; +} + +enum { + WM_CAP_PAL_PASTE = WM_CAP_START + 82, + WM_CAP_PAL_AUTOCREATE = WM_CAP_START + 83, + WM_CAP_PAL_MANUALCREATE = WM_CAP_START + 84, + WM_CAP_SET_CALLBACK_CAPCONTROL = WM_CAP_START + 85, + WM_CAP_UNICODE_END = WM_CAP_PAL_SAVEW, + WM_CAP_END = WM_CAP_UNICODE_END, +} + +/** + * message wrapper + */ + +BOOL capSetCallbackOnError(HWND hWnd, LPVOID fpProc) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_CALLBACK_ERROR, 0, cast(LPARAM)fpProc); } +BOOL capSetCallbackOnStatus(HWND hWnd, LPVOID fpProc) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_CALLBACK_STATUS, 0, cast(LPARAM)fpProc); } +BOOL capSetCallbackOnYield(HWND hWnd, LPVOID fpProc) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_CALLBACK_YIELD, 0, cast(LPARAM)fpProc); } +BOOL capSetCallbackOnFrame(HWND hWnd, LPVOID fpProc) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_CALLBACK_FRAME, 0, cast(LPARAM)fpProc); } +BOOL capSetCallbackOnVideoStream(HWND hWnd, LPVOID fpProc) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, cast(LPARAM)fpProc); } +BOOL capSetCallbackOnWaveStream(HWND hWnd, LPVOID fpProc) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_CALLBACK_WAVESTREAM, 0, cast(LPARAM)fpProc); } +BOOL capSetCallbackOnCapControl(HWND hWnd, LPVOID fpProc) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_CALLBACK_CAPCONTROL, 0, cast(LPARAM)fpProc); } + +BOOL capSetUserData(HWND hWnd, LPARAM lUser) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_USER_DATA, 0, lUser); } +BOOL capGetUserData(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_GET_USER_DATA, 0, 0); } + +BOOL capDriverConnect(HWND hWnd, WPARAM i) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_DRIVER_CONNECT, i, 0); } +BOOL capDriverDisconnect(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_DRIVER_DISCONNECT, 0, 0); } +BOOL capDriverGetName(HWND hWnd, LPTSTR szName, WPARAM wSize) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_DRIVER_GET_NAME, wSize, cast(LPARAM)szName); } +BOOL capDriverGetVersion(HWND hWnd, LPTSTR szVer, WPARAM wSize) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_DRIVER_GET_VERSION, wSize, cast(LPARAM)szVer); } +BOOL capDriverGetCaps(HWND hWnd, LPCAPDRIVERCAPS s, WPARAM wSize) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_DRIVER_GET_CAPS, wSize, cast(LPARAM)s); } + +BOOL capFileSetCaptureFile(HWND hWnd, LPTSTR szName) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_FILE_SET_CAPTURE_FILE, 0, cast(LPARAM)szName); } +BOOL capFileGetCaptureFile(HWND hWnd, LPTSTR szName, WPARAM wSize) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_FILE_GET_CAPTURE_FILE, wSize, cast(LPARAM)szName); } +BOOL capFileAlloc(HWND hWnd, WPARAM wSize) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_FILE_ALLOCATE, wSize, 0); } +BOOL capFileSaveAs(HWND hWnd, LPTSTR szName) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_FILE_SAVEAS, 0, cast(LPARAM)szName); } +BOOL capFileSetInfoChunk(HWND hWnd, LPCAPINFOCHUNK lpInfoChunk) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_FILE_SET_INFOCHUNK, 0, cast(LPARAM)lpInfoChunk); } +BOOL capFileSaveDIB(HWND hWnd, LPTSTR szName) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_FILE_SAVEDIB, 0, cast(LPARAM)szName); } + +BOOL capEditCopy(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_EDIT_COPY, 0, 0); } + +BOOL capSetAudioFormat(HWND hWnd, LPWAVEFORMATEX s, WPARAM wSize) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_AUDIOFORMAT, wSize, cast(LPARAM)s); } +DWORD capGetAudioFormat(HWND hWnd, LPWAVEFORMATEX s, WPARAM wSize) { return cast(DWORD)AVICapSM(hWnd, WM_CAP_GET_AUDIOFORMAT, wSize, cast(LPARAM)s); } +DWORD capGetAudioFormatSize(HWND hWnd) { return cast(DWORD)AVICapSM(hWnd, WM_CAP_GET_AUDIOFORMAT, 0, 0); } + +BOOL capDlgVideoFormat(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_DLG_VIDEOFORMAT, 0, 0); } +BOOL capDlgVideoSource(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_DLG_VIDEOSOURCE, 0, 0); } +BOOL capDlgVideoDisplay(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_DLG_VIDEODISPLAY, 0, 0); } +BOOL capDlgVideoCompression(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0); } + +DWORD capGetVideoFormat(HWND hWnd, void* s, WPARAM wSize) { return cast(DWORD)AVICapSM(hWnd, WM_CAP_GET_VIDEOFORMAT, wSize, cast(LPARAM)s); } +DWORD capGetVideoFormatSize(HWND hWnd) { return cast(DWORD)AVICapSM(hWnd, WM_CAP_GET_VIDEOFORMAT, 0, 0); } +BOOL capSetVideoFormat(HWND hWnd, void* s, WPARAM wSize) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_VIDEOFORMAT, wSize, cast(LPARAM)s); } + +BOOL capPreview(HWND hWnd, BOOL f) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_PREVIEW, cast(WPARAM)f, 0); } +BOOL capPreviewRate(HWND hWnd, WPARAM wMS) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_PREVIEWRATE, wMS, 0); } +BOOL capOverlay(HWND hWnd, BOOL f) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_OVERLAY, cast(WPARAM)f, 0); } +BOOL capPreviewScale(HWND hWnd, BOOL f) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_SCALE, cast(WPARAM)f, 0); } +BOOL capGetStatus(HWND hWnd, LPCAPSTATUS s, WPARAM wSize) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_GET_STATUS, wSize, cast(LPARAM)s); } +BOOL capSetScrollPos(HWND hWnd, LPPOINT lpP) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_SCROLL, 0, cast(LPARAM)lpP); } + +BOOL capGrabFrame(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_GRAB_FRAME, 0, 0); } +BOOL capGrabFrameNoStop(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_GRAB_FRAME_NOSTOP, 0, 0); } + +BOOL capCaptureSequence(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SEQUENCE, 0, 0); } +BOOL capCaptureSequenceNoFile(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SEQUENCE_NOFILE, 0, 0); } +BOOL capCaptureStop(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_STOP, 0, 0); } +BOOL capCaptureAbort(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_ABORT, 0, 0); } + +BOOL capCaptureSingleFrameOpen(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SINGLE_FRAME_OPEN, 0, 0); } +BOOL capCaptureSingleFrameClose(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SINGLE_FRAME_CLOSE, 0, 0); } +BOOL capCaptureSingleFrame(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SINGLE_FRAME, 0, 0); } + +BOOL capCaptureGetSetup(HWND hWnd, LPCAPTUREPARMS s, WPARAM wSize) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_GET_SEQUENCE_SETUP, wSize, cast(LPARAM)s); } +BOOL capCaptureSetSetup(HWND hWnd, LPCAPTUREPARMS s, WPARAM wSize) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_SEQUENCE_SETUP, wSize, cast(LPARAM)s); } + +BOOL capSetMCIDeviceName(HWND hWnd, LPTSTR szName) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_SET_MCI_DEVICE, 0, cast(LPARAM)szName); } +BOOL capGetMCIDeviceName(HWND hWnd, LPTSTR szName, WPARAM wSize) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_GET_MCI_DEVICE, wSize, cast(LPARAM)szName); } + +BOOL capPaletteOpen(HWND hWnd, LPTSTR szName) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_PAL_OPEN, 0, cast(LPARAM)szName); } +BOOL capPaletteSave(HWND hWnd, LPTSTR szName) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_PAL_SAVE, 0, cast(LPARAM)szName); } +BOOL capPalettePaste(HWND hWnd) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_PAL_PASTE, 0, 0); } +BOOL capPaletteAuto(HWND hWnd, WPARAM iFrames, LPARAM iColors) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_PAL_AUTOCREATE, iFrames, iColors); } +BOOL capPaletteManual(HWND hWnd, WPARAM fGrab, LPARAM iColors) { return cast(BOOL)AVICapSM(hWnd, WM_CAP_PAL_MANUALCREATE, fGrab, iColors); } + +/** + * structs + */ + +struct CAPDRIVERCAPS { + UINT wDeviceIndex; + BOOL fHasOverlay; + BOOL fHasDlgVideoSource; + BOOL fHasDlgVideoFormat; + BOOL fHasDlgVideoDisplay; + BOOL fCaptureInitialized; + BOOL fDriverSuppliesPalettes; + HANDLE hVideoIn; + HANDLE hVideoOut; + HANDLE hVideoExtIn; + HANDLE hVideoExtOut; +} +alias CAPDRIVERCAPS* PCAPDRIVERCAPS, LPCAPDRIVERCAPS; + +struct CAPSTATUS { + UINT uiImageWidth; + UINT uiImageHeight; + BOOL fLiveWindow; + BOOL fOverlayWindow; + BOOL fScale; + POINT ptScroll; + BOOL fUsingDefaultPalette; + BOOL fAudioHardware; + BOOL fCapFileExists; + DWORD dwCurrentVideoFrame; + DWORD dwCurrentVideoFramesDropped; + DWORD dwCurrentWaveSamples; + DWORD dwCurrentTimeElapsedMS; + HPALETTE hPalCurrent; + BOOL fCapturingNow; + DWORD dwReturn; + UINT wNumVideoAllocated; + UINT wNumAudioAllocated; +} +alias CAPSTATUS* PCAPSTATUS, LPCAPSTATUS; + +struct CAPTUREPARMS { + DWORD dwRequestMicroSecPerFrame; + BOOL fMakeUserHitOKToCapture; + UINT wPercentDropForError; + BOOL fYield; + DWORD dwIndexSize; + UINT wChunkGranularity; + BOOL fUsingDOSMemory; + UINT wNumVideoRequested; + BOOL fCaptureAudio; + UINT wNumAudioRequested; + UINT vKeyAbort; + BOOL fAbortLeftMouse; + BOOL fAbortRightMouse; + BOOL fLimitEnabled; + UINT wTimeLimit; + BOOL fMCIControl; + BOOL fStepMCIDevice; + DWORD dwMCIStartTime; + DWORD dwMCIStopTime; + BOOL fStepCaptureAt2x; + UINT wStepCaptureAverageFrames; + DWORD dwAudioBufferSize; + BOOL fDisableWriteCache; + UINT AVStreamMaster; +} +alias CAPTUREPARMS* PCAPTUREPARMS, LPCAPTUREPARMS; + +const AVSTREAMMASTER_AUDIO = 0; +const AVSTREAMMASTER_NONE = 1; + +struct CAPINFOCHUNK { + FOURCC fccInfoID; + LPVOID lpData; + LONG cbData; +} +alias CAPINFOCHUNK* PCAPINFOCHUNK, LPCAPINFOCHUNK; + +// Callback Definitions + +extern (Windows) { + alias LRESULT function(HWND hWnd) CAPYIELDCALLBACK; + alias LRESULT function(HWND hWnd, int nID, LPCWSTR lpsz) CAPSTATUSCALLBACKW; + alias LRESULT function(HWND hWnd, int nID, LPCWSTR lpsz) CAPERRORCALLBACKW; + alias LRESULT function(HWND hWnd, int nID, LPCSTR lpsz) CAPSTATUSCALLBACKA; + alias LRESULT function(HWND hWnd, int nID, LPCSTR lpsz) CAPERRORCALLBACKA; +} + +version(Unicode) { + alias CAPSTATUSCALLBACKW CAPSTATUSCALLBACK; + alias CAPERRORCALLBACKW CAPERRORCALLBACK; +} else { // Unicode + alias CAPSTATUSCALLBACKA CAPSTATUSCALLBACK; + alias CAPERRORCALLBACKA CAPERRORCALLBACK; +} + +extern (Windows) { + alias LRESULT function(HWND hWnd, LPVIDEOHDR lpVHdr) CAPVIDEOCALLBACK; + alias LRESULT function(HWND hWnd, LPWAVEHDR lpWHdr) CAPWAVECALLBACK; + alias LRESULT function(HWND hWnd, int nState) CAPCONTROLCALLBACK; +} + +// CapControlCallback states +const CONTROLCALLBACK_PREROLL = 1; +const CONTROLCALLBACK_CAPTURING = 2; + +extern (Windows) { + HWND capCreateCaptureWindowA(LPCSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hwndParent, int nID); + BOOL capGetDriverDescriptionA(UINT wDriverIndex, LPSTR lpszName, int cbName, LPSTR lpszVer, int cbVer); + HWND capCreateCaptureWindowW(LPCWSTR lpszWindowName, DWORD dwStyle, int x, int y, int nWidth, int nHeight, HWND hwndParent, int nID); + BOOL capGetDriverDescriptionW(UINT wDriverIndex, LPWSTR lpszName, int cbName, LPWSTR lpszVer, int cbVer); +} + +version(Unicode) { + alias capCreateCaptureWindowW capCreateCaptureWindow; + alias capGetDriverDescriptionW capGetDriverDescription; +} else { // Unicode + alias capCreateCaptureWindowA capCreateCaptureWindow; + alias capGetDriverDescriptionA capGetDriverDescription; +} + +// New Information chunk IDs +const infotypeDIGITIZATION_TIME = mmioFOURCC!('I', 'D', 'I', 'T'); +const infotypeSMPTE_TIME = mmioFOURCC!('I', 'S', 'M', 'P'); + +// status and error callbacks +enum { + IDS_CAP_BEGIN = 300, + IDS_CAP_END = 301, + + IDS_CAP_INFO = 401, + IDS_CAP_OUTOFMEM = 402, + IDS_CAP_FILEEXISTS = 403, + IDS_CAP_ERRORPALOPEN = 404, + IDS_CAP_ERRORPALSAVE = 405, + IDS_CAP_ERRORDIBSAVE = 406, + IDS_CAP_DEFAVIEXT = 407, + IDS_CAP_DEFPALEXT = 408, + IDS_CAP_CANTOPEN = 409, + IDS_CAP_SEQ_MSGSTART = 410, + IDS_CAP_SEQ_MSGSTOP = 411, + + IDS_CAP_VIDEDITERR = 412, + IDS_CAP_READONLYFILE = 413, + IDS_CAP_WRITEERROR = 414, + IDS_CAP_NODISKSPACE = 415, + IDS_CAP_SETFILESIZE = 416, + IDS_CAP_SAVEASPERCENT = 417, + + IDS_CAP_DRIVER_ERROR = 418, + + IDS_CAP_WAVE_OPEN_ERROR = 419, + IDS_CAP_WAVE_ALLOC_ERROR = 420, + IDS_CAP_WAVE_PREPARE_ERROR = 421, + IDS_CAP_WAVE_ADD_ERROR = 422, + IDS_CAP_WAVE_SIZE_ERROR = 423, + + IDS_CAP_VIDEO_OPEN_ERROR = 424, + IDS_CAP_VIDEO_ALLOC_ERROR = 425, + IDS_CAP_VIDEO_PREPARE_ERROR = 426, + IDS_CAP_VIDEO_ADD_ERROR = 427, + IDS_CAP_VIDEO_SIZE_ERROR = 428, + + IDS_CAP_FILE_OPEN_ERROR = 429, + IDS_CAP_FILE_WRITE_ERROR = 430, + IDS_CAP_RECORDING_ERROR = 431, + IDS_CAP_RECORDING_ERROR2 = 432, + IDS_CAP_AVI_INIT_ERROR = 433, + IDS_CAP_NO_FRAME_CAP_ERROR = 434, + IDS_CAP_NO_PALETTE_WARN = 435, + IDS_CAP_MCI_CONTROL_ERROR = 436, + IDS_CAP_MCI_CANT_STEP_ERROR = 437, + IDS_CAP_NO_AUDIO_CAP_ERROR = 438, + IDS_CAP_AVI_DRAWDIB_ERROR = 439, + IDS_CAP_COMPRESSOR_ERROR = 440, + IDS_CAP_AUDIO_DROP_ERROR = 441, + IDS_CAP_AUDIO_DROP_COMPERROR = 442, + + IDS_CAP_STAT_LIVE_MODE = 500, + IDS_CAP_STAT_OVERLAY_MODE = 501, + IDS_CAP_STAT_CAP_INIT = 502, + IDS_CAP_STAT_CAP_FINI = 503, + IDS_CAP_STAT_PALETTE_BUILD = 504, + IDS_CAP_STAT_OPTPAL_BUILD = 505, + IDS_CAP_STAT_I_FRAMES = 506, + IDS_CAP_STAT_L_FRAMES = 507, + IDS_CAP_STAT_CAP_L_FRAMES = 508, + IDS_CAP_STAT_CAP_AUDIO = 509, + IDS_CAP_STAT_VIDEOCURRENT = 510, + IDS_CAP_STAT_VIDEOAUDIO = 511, + IDS_CAP_STAT_VIDEOONLY = 512, + IDS_CAP_STAT_FRAMESDROPPED = 513, +} + +/** + * FilePreview dialog. + */ + +extern (Windows) { + BOOL GetOpenFileNamePreviewA(LPOPENFILENAMEA lpofn); + BOOL GetSaveFileNamePreviewA(LPOPENFILENAMEA lpofn); + BOOL GetOpenFileNamePreviewW(LPOPENFILENAMEW lpofn); + BOOL GetSaveFileNamePreviewW(LPOPENFILENAMEW lpofn); +} + +version(Unicode) { + alias GetOpenFileNamePreviewW GetOpenFileNamePreview; + alias GetSaveFileNamePreviewW GetSaveFileNamePreview; +} else { // Unicode + alias GetOpenFileNamePreviewA GetOpenFileNamePreview; + alias GetSaveFileNamePreviewA GetSaveFileNamePreview; +} \ No newline at end of file diff -r 586e4a649642 -r 4a9dcbd9e54f win32/w32api.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/w32api.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,106 @@ +/***********************************************************************\ +* w32api.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.12 * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.w32api; + +const __W32API_VERSION = 3.12; +const __W32API_MAJOR_VERSION = 3; +const __W32API_MINOR_VERSION = 12; + +/* These version identifiers are used to specify the minimum version of + * Windows that an application will support. + * + * The programmer should set two version identifiers: one for the + * minimum Windows NT version and one for the minimum Windows 9x + * version. If no Windows NT version is specified, Windows NT 4 is + * assumed. If no Windows 9x version is specified, Windows 95 is + * assumed, unless WindowsNTonly, WindowsXP, Windows2003 or WindowsVista + * is specified, implying that the application supports only the NT line of + * versions. + */ + +/* For Windows XP and later, assume no Windows 9x support. + * API features new to Windows Vista are not yet included in this + * translation or in MinGW, but this is here ready to start adding them. + */ +version (WindowsVista) { + const uint + _WIN32_WINNT = 0x600, + _WIN32_WINDOWS = uint.max; + +} else version (Windows2003) { + const uint + _WIN32_WINNT = 0x502, + _WIN32_WINDOWS = uint.max; + +} else version (WindowsXP) { + const uint + _WIN32_WINNT = 0x501, + _WIN32_WINDOWS = uint.max; + +} else { + /* for earlier Windows versions, separate version identifiers into + * the NT and 9x lines + */ + version (Windows2000) { + const uint _WIN32_WINNT = 0x500; + } else { + const uint _WIN32_WINNT = 0x400; + } + + version (WindowsNTonly) { + const uint _WIN32_WINDOWS = uint.max; + } else version (WindowsME) { + const uint _WIN32_WINDOWS = 0x500; + } else version (Windows98) { + const uint _WIN32_WINDOWS = 0x410; + } else { + const uint _WIN32_WINDOWS = 0x400; + } +} + +// Just a bit of syntactic sugar for the static ifs +const uint WINVER = _WIN32_WINDOWS < _WIN32_WINNT ? + _WIN32_WINDOWS : _WIN32_WINNT; +const bool _WIN32_WINNT_ONLY = _WIN32_WINDOWS == uint.max; + +version (IE7) { + const uint _WIN32_IE = 0x700; +} else version (IE602) { + const uint _WIN32_IE = 0x603; +} else version (IE601) { + const uint _WIN32_IE = 0x601; +} else version (IE6) { + const uint _WIN32_IE = 0x600; +} else version (IE56) { + const uint _WIN32_IE = 0x560; +} else version (IE501) { + const uint _WIN32_IE = 0x501; +} else version (IE5) { + const uint _WIN32_IE = 0x500; +} else version (IE401) { + const uint _WIN32_IE = 0x401; +} else version (IE4) { + const uint _WIN32_IE = 0x400; +} else version (IE3) { + const uint _WIN32_IE = 0x300; +} else static if (WINVER >= 0x410) { + const uint _WIN32_IE = 0x400; +} else { + const uint _WIN32_IE = 0; +} + +debug (WindowsUnitTest) { + unittest { + printf("Windows NT version: %03x\n", _WIN32_WINNT); + printf("Windows 9x version: %03x\n", _WIN32_WINDOWS); + printf("IE version: %03x\n", _WIN32_IE); + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winbase.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winbase.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,2817 @@ +/***********************************************************************\ +* winbase.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winbase; +pragma(lib, "kernel32.lib"); + +/** +Translation Notes: +The following macros are obsolete, and have no effect. + +LockSegment(w), MakeProcInstance(p, i), UnlockResource(h), UnlockSegment(w) +FreeModule(m), FreeProcInstance(p), GetFreeSpace(w), DefineHandleTable(w) +SetSwapAreaSize(w), LimitEmsPages(n), Yield() + +// The following Win16 functions are obselete in Win32. + + int _hread(HFILE, LPVOID, int); + int _hwrite(HFILE, LPCSTR, int); + HFILE _lclose(HFILE); + HFILE _lcreat(LPCSTR, int); + LONG _llseek(HFILE, LONG, int); + HFILE _lopen(LPCSTR, int); + UINT _lread(HFILE, LPVOID, UINT); + UINT _lwrite(HFILE, LPCSTR, UINT); + SIZE_T GlobalCompact(DWORD); + VOID GlobalFix(HGLOBAL); +* MSDN contradicts itself on GlobalFlags: +* "This function is provided only for compatibility with 16-bit versions of Windows." +* but also requires Windows 2000 or above + UINT GlobalFlags(HGLOBAL); + VOID GlobalUnfix(HGLOBAL); + BOOL GlobalUnWire(HGLOBAL); + PVOID GlobalWire(HGLOBAL); + SIZE_T LocalCompact(UINT); + UINT LocalFlags(HLOCAL); + SIZE_T LocalShrink(HLOCAL, UINT); + +// These are not required for DMD. + +//FIXME: +// #ifndef UNDER_CE + int WinMain(HINSTANCE, HINSTANCE, LPSTR, int); +#else + int WinMain(HINSTANCE, HINSTANCE, LPWSTR, int); +#endif +int wWinMain(HINSTANCE, HINSTANCE, LPWSTR, int); + +*/ + +import win32.windef, win32.winver; +private import win32.basetyps, win32.w32api, win32.winnt; + +// FIXME: +alias void va_list; + + +/+ +//-------------------------------------- +// These functions are problematic + +version(UseNtoSKernel) {}else { + /* CAREFUL: These are exported from ntoskrnl.exe and declared in winddk.h + as __fastcall functions, but are exported from kernel32.dll as __stdcall */ + static if (_WIN32_WINNT >= 0x0501) { + VOID InitializeSListHead(PSLIST_HEADER); + } + LONG InterlockedCompareExchange(LPLONG, LONG, LONG); + // PVOID WINAPI InterlockedCompareExchangePointer(PVOID*, PVOID, PVOID); + (PVOID)InterlockedCompareExchange((LPLONG)(d) (PVOID)InterlockedCompareExchange((LPLONG)(d), (LONG)(e), (LONG)(c)) + LONG InterlockedDecrement(LPLONG); + LONG InterlockedExchange(LPLONG, LONG); + // PVOID WINAPI InterlockedExchangePointer(PVOID*, PVOID); + (PVOID)InterlockedExchange((LPLONG)((PVOID)InterlockedExchange((LPLONG)(t), (LONG)(v)) + LONG InterlockedExchangeAdd(LPLONG, LONG); + + static if (_WIN32_WINNT >= 0x0501) { + PSLIST_ENTRY InterlockedFlushSList(PSLIST_HEADER); + } + LONG InterlockedIncrement(LPLONG); + static if (_WIN32_WINNT >= 0x0501) { + PSLIST_ENTRY InterlockedPopEntrySList(PSLIST_HEADER); + PSLIST_ENTRY InterlockedPushEntrySList(PSLIST_HEADER, PSLIST_ENTRY); + } +} // #endif // __USE_NTOSKRNL__ +//-------------------------------------- ++/ + +// COMMPROP structure, used by GetCommProperties() +// ----------------------------------------------- + +// Communications provider type +enum : DWORD { + PST_UNSPECIFIED, + PST_RS232, + PST_PARALLELPORT, + PST_RS422, + PST_RS423, + PST_RS449, + PST_MODEM, // = 6 + PST_FAX = 0x0021, + PST_SCANNER = 0x0022, + PST_NETWORK_BRIDGE = 0x0100, + PST_LAT = 0x0101, + PST_TCPIP_TELNET = 0x0102, + PST_X25 = 0x0103 +} + +// Max baud rate +enum : DWORD { + BAUD_075 = 0x00000001, + BAUD_110 = 0x00000002, + BAUD_134_5 = 0x00000004, + BAUD_150 = 0x00000008, + BAUD_300 = 0x00000010, + BAUD_600 = 0x00000020, + BAUD_1200 = 0x00000040, + BAUD_1800 = 0x00000080, + BAUD_2400 = 0x00000100, + BAUD_4800 = 0x00000200, + BAUD_7200 = 0x00000400, + BAUD_9600 = 0x00000800, + BAUD_14400 = 0x00001000, + BAUD_19200 = 0x00002000, + BAUD_38400 = 0x00004000, + BAUD_56K = 0x00008000, + BAUD_128K = 0x00010000, + BAUD_115200 = 0x00020000, + BAUD_57600 = 0x00040000, + BAUD_USER = 0x10000000 +} + +// Comm capabilities +enum : DWORD { + PCF_DTRDSR = 0x0001, + PCF_RTSCTS = 0x0002, + PCF_RLSD = 0x0004, + PCF_PARITY_CHECK = 0x0008, + PCF_XONXOFF = 0x0010, + PCF_SETXCHAR = 0x0020, + PCF_TOTALTIMEOUTS = 0x0040, + PCF_INTTIMEOUTS = 0x0080, + PCF_SPECIALCHARS = 0x0100, + PCF_16BITMODE = 0x0200 +} + +enum : DWORD { + SP_PARITY = 1, + SP_BAUD = 2, + SP_DATABITS = 4, + SP_STOPBITS = 8, + SP_HANDSHAKING = 16, + SP_PARITY_CHECK = 32, + SP_RLSD = 64 +} + +enum : DWORD { + DATABITS_5 = 1, + DATABITS_6 = 2, + DATABITS_7 = 4, + DATABITS_8 = 8, + DATABITS_16 = 16, + DATABITS_16X = 32 +} + +enum : WORD { + STOPBITS_10 = 0x0001, + STOPBITS_15 = 0x0002, + STOPBITS_20 = 0x0004, + PARITY_NONE = 0x0100, + PARITY_ODD = 0x0200, + PARITY_EVEN = 0x0400, + PARITY_MARK = 0x0800, + PARITY_SPACE = 0x1000 +} + +// used by dwServiceMask +const SP_SERIALCOMM = 1; + +struct COMMPROP { + WORD wPacketLength; + WORD wPacketVersion; + DWORD dwServiceMask; + DWORD dwReserved1; + DWORD dwMaxTxQueue; + DWORD dwMaxRxQueue; + DWORD dwMaxBaud; + DWORD dwProvSubType; + DWORD dwProvCapabilities; + DWORD dwSettableParams; + DWORD dwSettableBaud; + WORD wSettableData; + WORD wSettableStopParity; + DWORD dwCurrentTxQueue; + DWORD dwCurrentRxQueue; + DWORD dwProvSpec1; + DWORD dwProvSpec2; + WCHAR _wcProvChar; + + WCHAR* wcProvChar() { return &_wcProvChar; } +} +alias COMMPROP* LPCOMMPROP; + +// ---------- + +// for DEBUG_EVENT +enum : DWORD { + EXCEPTION_DEBUG_EVENT = 1, + CREATE_THREAD_DEBUG_EVENT, + CREATE_PROCESS_DEBUG_EVENT, + EXIT_THREAD_DEBUG_EVENT, + EXIT_PROCESS_DEBUG_EVENT, + LOAD_DLL_DEBUG_EVENT, + UNLOAD_DLL_DEBUG_EVENT, + OUTPUT_DEBUG_STRING_EVENT, + RIP_EVENT +} + +const HFILE HFILE_ERROR = cast(HFILE) (-1); + +// for SetFilePointer() +enum : DWORD { + FILE_BEGIN = 0, + FILE_CURRENT = 1, + FILE_END = 2 +} +const DWORD INVALID_SET_FILE_POINTER = -1; + + +// for OpenFile() +deprecated enum : UINT { + OF_READ = 0, + OF_WRITE = 0x0001, + OF_READWRITE = 0x0002, + OF_SHARE_COMPAT = 0, + OF_SHARE_EXCLUSIVE = 0x0010, + OF_SHARE_DENY_WRITE = 0x0020, + OF_SHARE_DENY_READ = 0x0030, + OF_SHARE_DENY_NONE = 0x0040, + OF_PARSE = 0x0100, + OF_DELETE = 0x0200, + OF_VERIFY = 0x0400, + OF_CANCEL = 0x0800, + OF_CREATE = 0x1000, + OF_PROMPT = 0x2000, + OF_EXIST = 0x4000, + OF_REOPEN = 0x8000 +} + +enum : DWORD { + NMPWAIT_NOWAIT = 1, + NMPWAIT_WAIT_FOREVER = -1, + NMPWAIT_USE_DEFAULT_WAIT = 0 +} + +// for ClearCommError() +const DWORD + CE_RXOVER = 0x0001, + CE_OVERRUN = 0x0002, + CE_RXPARITY = 0x0004, + CE_FRAME = 0x0008, + CE_BREAK = 0x0010, + CE_TXFULL = 0x0100, + CE_PTO = 0x0200, + CE_IOE = 0x0400, + CE_DNS = 0x0800, + CE_OOP = 0x1000, + CE_MODE = 0x8000; + +// for CopyProgressRoutine callback. +enum : DWORD { + PROGRESS_CONTINUE = 0, + PROGRESS_CANCEL = 1, + PROGRESS_STOP = 2, + PROGRESS_QUIET = 3 +} + +enum : DWORD { + CALLBACK_CHUNK_FINISHED = 0, + CALLBACK_STREAM_SWITCH = 1 +} + +// CopyFileEx() +enum : DWORD { + COPY_FILE_FAIL_IF_EXISTS = 1, + COPY_FILE_RESTARTABLE = 2 +} + +enum : DWORD { + FILE_MAP_COPY = 1, + FILE_MAP_WRITE = 2, + FILE_MAP_READ = 4, + FILE_MAP_ALL_ACCESS = 0x000F001F +} + +enum : DWORD { + MUTEX_ALL_ACCESS = 0x001f0001, + MUTEX_MODIFY_STATE = 0x00000001, + SEMAPHORE_ALL_ACCESS = 0x001f0003, + SEMAPHORE_MODIFY_STATE = 0x00000002, + EVENT_ALL_ACCESS = 0x001f0003, + EVENT_MODIFY_STATE = 0x00000002 +} + +// CreateNamedPipe() +enum : DWORD { + PIPE_ACCESS_INBOUND = 1, + PIPE_ACCESS_OUTBOUND = 2, + PIPE_ACCESS_DUPLEX = 3 +} + +const DWORD + PIPE_TYPE_BYTE = 0, + PIPE_TYPE_MESSAGE = 4, + PIPE_READMODE_BYTE = 0, + PIPE_READMODE_MESSAGE = 2, + PIPE_WAIT = 0, + PIPE_NOWAIT = 1; + +// GetNamedPipeInfo() +const DWORD + PIPE_CLIENT_END = 0, + PIPE_SERVER_END = 1; + +const DWORD PIPE_UNLIMITED_INSTANCES = 255; + +// dwCreationFlags for CreateProcess() and CreateProcessAsUser() +enum : DWORD { + DEBUG_PROCESS = 0x00000001, + DEBUG_ONLY_THIS_PROCESS = 0x00000002, + CREATE_SUSPENDED = 0x00000004, + DETACHED_PROCESS = 0x00000008, + CREATE_NEW_CONSOLE = 0x00000010, + NORMAL_PRIORITY_CLASS = 0x00000020, + IDLE_PRIORITY_CLASS = 0x00000040, + HIGH_PRIORITY_CLASS = 0x00000080, + REALTIME_PRIORITY_CLASS = 0x00000100, + CREATE_NEW_PROCESS_GROUP = 0x00000200, + CREATE_UNICODE_ENVIRONMENT = 0x00000400, + CREATE_SEPARATE_WOW_VDM = 0x00000800, + CREATE_SHARED_WOW_VDM = 0x00001000, + CREATE_FORCEDOS = 0x00002000, + BELOW_NORMAL_PRIORITY_CLASS = 0x00004000, + ABOVE_NORMAL_PRIORITY_CLASS = 0x00008000, + CREATE_BREAKAWAY_FROM_JOB = 0x01000000, + CREATE_WITH_USERPROFILE = 0x02000000, + CREATE_DEFAULT_ERROR_MODE = 0x04000000, + CREATE_NO_WINDOW = 0x08000000, + PROFILE_USER = 0x10000000, + PROFILE_KERNEL = 0x20000000, + PROFILE_SERVER = 0x40000000 +} + +const DWORD CONSOLE_TEXTMODE_BUFFER = 1; + +// CreateFile() +enum : DWORD { + CREATE_NEW = 1, + CREATE_ALWAYS, + OPEN_EXISTING, + OPEN_ALWAYS, + TRUNCATE_EXISTING +} + +// CreateFile() +const DWORD + FILE_FLAG_WRITE_THROUGH = 0x80000000, + FILE_FLAG_OVERLAPPED = 0x40000000, + FILE_FLAG_NO_BUFFERING = 0x20000000, + FILE_FLAG_RANDOM_ACCESS = 0x10000000, + FILE_FLAG_SEQUENTIAL_SCAN = 0x08000000, + FILE_FLAG_DELETE_ON_CLOSE = 0x04000000, + FILE_FLAG_BACKUP_SEMANTICS = 0x02000000, + FILE_FLAG_POSIX_SEMANTICS = 0x01000000, + FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000, + FILE_FLAG_OPEN_NO_RECALL = 0x00100000; + +static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + const DWORD FILE_FLAG_FIRST_PIPE_INSTANCE = 0x00080000; +} + +// for CreateFile() +const DWORD + SECURITY_ANONYMOUS = SECURITY_IMPERSONATION_LEVEL.SecurityAnonymous<<16, + SECURITY_IDENTIFICATION = SECURITY_IMPERSONATION_LEVEL.SecurityIdentification<<16, + SECURITY_IMPERSONATION = SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation<<16, + SECURITY_DELEGATION = SECURITY_IMPERSONATION_LEVEL.SecurityDelegation<<16, + SECURITY_CONTEXT_TRACKING = 0x00040000, + SECURITY_EFFECTIVE_ONLY = 0x00080000, + SECURITY_SQOS_PRESENT = 0x00100000, + SECURITY_VALID_SQOS_FLAGS = 0x001F0000; + + +// Thread exit code +const DWORD STILL_ACTIVE = 0x103; + +/* ??? The only documentation of this seems to be about Windows CE and to + * state what _doesn't_ support it. + */ +const DWORD FIND_FIRST_EX_CASE_SENSITIVE = 1; + +// GetBinaryType() +enum : DWORD { + SCS_32BIT_BINARY = 0, + SCS_DOS_BINARY, + SCS_WOW_BINARY, + SCS_PIF_BINARY, + SCS_POSIX_BINARY, + SCS_OS216_BINARY +} + +const size_t + MAX_COMPUTERNAME_LENGTH = 15, + HW_PROFILE_GUIDLEN = 39, + MAX_PROFILE_LEN = 80; + +// HW_PROFILE_INFO +const DWORD + DOCKINFO_UNDOCKED = 1, + DOCKINFO_DOCKED = 2, + DOCKINFO_USER_SUPPLIED = 4, + DOCKINFO_USER_UNDOCKED = DOCKINFO_USER_SUPPLIED | DOCKINFO_UNDOCKED, + DOCKINFO_USER_DOCKED = DOCKINFO_USER_SUPPLIED | DOCKINFO_DOCKED; + +// DriveType(), RealDriveType() +enum : int { + DRIVE_UNKNOWN = 0, + DRIVE_NO_ROOT_DIR, + DRIVE_REMOVABLE, + DRIVE_FIXED, + DRIVE_REMOTE, + DRIVE_CDROM, + DRIVE_RAMDISK +} + +// GetFileType() +enum : DWORD { + FILE_TYPE_UNKNOWN = 0, + FILE_TYPE_DISK, + FILE_TYPE_CHAR, + FILE_TYPE_PIPE, + FILE_TYPE_REMOTE = 0x8000 +} + +// Get/SetHandleInformation() +const DWORD + HANDLE_FLAG_INHERIT = 0x01, + HANDLE_FLAG_PROTECT_FROM_CLOSE = 0x02; + +enum : DWORD { + STD_INPUT_HANDLE = 0xFFFFFFF6, + STD_OUTPUT_HANDLE = 0xFFFFFFF5, + STD_ERROR_HANDLE = 0xFFFFFFF4 +} + +const HANDLE INVALID_HANDLE_VALUE = cast(HANDLE) (-1); + +enum : DWORD { + GET_TAPE_MEDIA_INFORMATION = 0, + GET_TAPE_DRIVE_INFORMATION = 1 +} + +enum : DWORD { + SET_TAPE_MEDIA_INFORMATION = 0, + SET_TAPE_DRIVE_INFORMATION = 1 +} + +// SetThreadPriority()/GetThreadPriority() +enum : int { + THREAD_PRIORITY_IDLE = -15, + THREAD_PRIORITY_LOWEST = -2, + THREAD_PRIORITY_BELOW_NORMAL = -1, + THREAD_PRIORITY_NORMAL = 0, + THREAD_PRIORITY_ABOVE_NORMAL = 1, + THREAD_PRIORITY_HIGHEST = 2, + THREAD_PRIORITY_TIME_CRITICAL = 15, + THREAD_PRIORITY_ERROR_RETURN = 2147483647 +} + +enum : DWORD { + TIME_ZONE_ID_UNKNOWN, + TIME_ZONE_ID_STANDARD, + TIME_ZONE_ID_DAYLIGHT, + TIME_ZONE_ID_INVALID = 0xFFFFFFFF +} + +const DWORD + FS_CASE_SENSITIVE = 1, + FS_CASE_IS_PRESERVED = 2, + FS_UNICODE_STORED_ON_DISK = 4, + FS_PERSISTENT_ACLS = 8, + FS_FILE_COMPRESSION = 16, + FS_VOL_IS_COMPRESSED = 32768; + +// Flags for GlobalAlloc +const UINT + GMEM_FIXED = 0, + GMEM_MOVEABLE = 0x0002, + GMEM_ZEROINIT = 0x0040, + GPTR = 0x0040, + GHND = 0x0042, + GMEM_MODIFY = 0x0080, // used only for GlobalRealloc + GMEM_VALID_FLAGS = 0x7F72; + +/+ // Obselete flags (Win16 only) + GMEM_NOCOMPACT=16; + GMEM_NODISCARD=32; + GMEM_DISCARDABLE=256; + GMEM_NOT_BANKED=4096; + GMEM_LOWER=4096; + GMEM_SHARE=8192; + GMEM_DDESHARE=8192; + + GMEM_LOCKCOUNT=255; + +// for GlobalFlags() + GMEM_DISCARDED = 16384; + GMEM_INVALID_HANDLE = 32768; + + GMEM_NOTIFY = 16384; ++/ + +const UINT + LMEM_FIXED = 0, + LMEM_MOVEABLE = 0x0002, + LMEM_NONZEROLPTR = 0, + NONZEROLPTR = 0, + LMEM_NONZEROLHND = 0x0002, + NONZEROLHND = 0x0002, + LMEM_DISCARDABLE = 0x0F00, + LMEM_NOCOMPACT = 0x0010, + LMEM_NODISCARD = 0x0020, + LMEM_ZEROINIT = 0x0040, + LPTR = 0x0040, + LHND = 0x0042, + LMEM_MODIFY = 0x0080, + LMEM_LOCKCOUNT = 0x00FF, + LMEM_DISCARDED = 0x4000, + LMEM_INVALID_HANDLE = 0x8000; + + + +// used in EXCEPTION_RECORD +enum : DWORD { + STATUS_WAIT_0 = 0, + STATUS_ABANDONED_WAIT_0 = 0x00000080, + STATUS_USER_APC = 0x000000C0, + STATUS_TIMEOUT = 0x00000102, + STATUS_PENDING = 0x00000103, + + STATUS_SEGMENT_NOTIFICATION = 0x40000005, + STATUS_GUARD_PAGE_VIOLATION = 0x80000001, + STATUS_DATATYPE_MISALIGNMENT = 0x80000002, + STATUS_BREAKPOINT = 0x80000003, + STATUS_SINGLE_STEP = 0x80000004, + + STATUS_ACCESS_VIOLATION = 0xC0000005, + STATUS_IN_PAGE_ERROR = 0xC0000006, + STATUS_INVALID_HANDLE = 0xC0000008, + + STATUS_NO_MEMORY = 0xC0000017, + STATUS_ILLEGAL_INSTRUCTION = 0xC000001D, + STATUS_NONCONTINUABLE_EXCEPTION = 0xC0000025, + STATUS_INVALID_DISPOSITION = 0xC0000026, + STATUS_ARRAY_BOUNDS_EXCEEDED = 0xC000008C, + STATUS_FLOAT_DENORMAL_OPERAND = 0xC000008D, + STATUS_FLOAT_DIVIDE_BY_ZERO = 0xC000008E, + STATUS_FLOAT_INEXACT_RESULT = 0xC000008F, + STATUS_FLOAT_INVALID_OPERATION = 0xC0000090, + STATUS_FLOAT_OVERFLOW = 0xC0000091, + STATUS_FLOAT_STACK_CHECK = 0xC0000092, + STATUS_FLOAT_UNDERFLOW = 0xC0000093, + STATUS_INTEGER_DIVIDE_BY_ZERO = 0xC0000094, + STATUS_INTEGER_OVERFLOW = 0xC0000095, + STATUS_PRIVILEGED_INSTRUCTION = 0xC0000096, + STATUS_STACK_OVERFLOW = 0xC00000FD, + STATUS_CONTROL_C_EXIT = 0xC000013A, + STATUS_DLL_INIT_FAILED = 0xC0000142, + STATUS_DLL_INIT_FAILED_LOGOFF = 0xC000026B, + + CONTROL_C_EXIT = STATUS_CONTROL_C_EXIT, + + EXCEPTION_ACCESS_VIOLATION = STATUS_ACCESS_VIOLATION, + EXCEPTION_DATATYPE_MISALIGNMENT = STATUS_DATATYPE_MISALIGNMENT, + EXCEPTION_BREAKPOINT = STATUS_BREAKPOINT, + EXCEPTION_SINGLE_STEP = STATUS_SINGLE_STEP, + EXCEPTION_ARRAY_BOUNDS_EXCEEDED = STATUS_ARRAY_BOUNDS_EXCEEDED, + EXCEPTION_FLT_DENORMAL_OPERAND = STATUS_FLOAT_DENORMAL_OPERAND, + EXCEPTION_FLT_DIVIDE_BY_ZERO = STATUS_FLOAT_DIVIDE_BY_ZERO, + EXCEPTION_FLT_INEXACT_RESULT = STATUS_FLOAT_INEXACT_RESULT, + EXCEPTION_FLT_INVALID_OPERATION = STATUS_FLOAT_INVALID_OPERATION, + EXCEPTION_FLT_OVERFLOW = STATUS_FLOAT_OVERFLOW, + EXCEPTION_FLT_STACK_CHECK = STATUS_FLOAT_STACK_CHECK, + EXCEPTION_FLT_UNDERFLOW = STATUS_FLOAT_UNDERFLOW, + EXCEPTION_INT_DIVIDE_BY_ZERO = STATUS_INTEGER_DIVIDE_BY_ZERO, + EXCEPTION_INT_OVERFLOW = STATUS_INTEGER_OVERFLOW, + EXCEPTION_PRIV_INSTRUCTION = STATUS_PRIVILEGED_INSTRUCTION, + EXCEPTION_IN_PAGE_ERROR = STATUS_IN_PAGE_ERROR, + EXCEPTION_ILLEGAL_INSTRUCTION = STATUS_ILLEGAL_INSTRUCTION, + EXCEPTION_NONCONTINUABLE_EXCEPTION = STATUS_NONCONTINUABLE_EXCEPTION, + EXCEPTION_STACK_OVERFLOW = STATUS_STACK_OVERFLOW, + EXCEPTION_INVALID_DISPOSITION = STATUS_INVALID_DISPOSITION, + EXCEPTION_GUARD_PAGE = STATUS_GUARD_PAGE_VIOLATION, + EXCEPTION_INVALID_HANDLE = STATUS_INVALID_HANDLE +} + +// for PROCESS_HEAP_ENTRY +const WORD + PROCESS_HEAP_REGION = 1, + PROCESS_HEAP_UNCOMMITTED_RANGE = 2, + PROCESS_HEAP_ENTRY_BUSY = 4, + PROCESS_HEAP_ENTRY_MOVEABLE = 16, + PROCESS_HEAP_ENTRY_DDESHARE = 32; + +// for LoadLibraryEx() +const DWORD + DONT_RESOLVE_DLL_REFERENCES = 0x01, // not for WinME and earlier + LOAD_LIBRARY_AS_DATAFILE = 0x02, + LOAD_WITH_ALTERED_SEARCH_PATH = 0x08, + LOAD_IGNORE_CODE_AUTHZ_LEVEL = 0x10; // only for XP and later + +// for LockFile() +const DWORD + LOCKFILE_FAIL_IMMEDIATELY = 1, + LOCKFILE_EXCLUSIVE_LOCK = 2; + +const MAXIMUM_WAIT_OBJECTS = 64; +const MAXIMUM_SUSPEND_COUNT = 0x7F; + +const WAIT_OBJECT_0 = 0; +const WAIT_ABANDONED_0 = 128; + +//const WAIT_TIMEOUT=258; // also in winerror.h + +enum : DWORD { + WAIT_IO_COMPLETION = 0x000000C0, + WAIT_ABANDONED = 0x00000080, + WAIT_FAILED = 0xFFFFFFFF +} + +// PurgeComm() +const DWORD + PURGE_TXABORT = 1, + PURGE_RXABORT = 2, + PURGE_TXCLEAR = 4, + PURGE_RXCLEAR = 8; + +// ReadEventLog() +const DWORD + EVENTLOG_SEQUENTIAL_READ = 1, + EVENTLOG_SEEK_READ = 2, + EVENTLOG_FORWARDS_READ = 4, + EVENTLOG_BACKWARDS_READ = 8; + +// ReportEvent() +enum : WORD { + EVENTLOG_SUCCESS = 0, + EVENTLOG_ERROR_TYPE = 1, + EVENTLOG_WARNING_TYPE = 2, + EVENTLOG_INFORMATION_TYPE = 4, + EVENTLOG_AUDIT_SUCCESS = 8, + EVENTLOG_AUDIT_FAILURE = 16 +} + +// FormatMessage() +const DWORD + FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x0100, + FORMAT_MESSAGE_IGNORE_INSERTS = 0x0200, + FORMAT_MESSAGE_FROM_STRING = 0x0400, + FORMAT_MESSAGE_FROM_HMODULE = 0x0800, + FORMAT_MESSAGE_FROM_SYSTEM = 0x1000, + FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x2000; + +const DWORD FORMAT_MESSAGE_MAX_WIDTH_MASK = 255; + +// also in ddk/ntapi.h +// To restore default error mode, call SetErrorMode(0) +enum { + SEM_FAILCRITICALERRORS = 0x0001, + SEM_NOGPFAULTERRORBOX = 0x0002, + SEM_NOALIGNMENTFAULTEXCEPT = 0x0004, + SEM_NOOPENFILEERRORBOX = 0x8000 +} +// end ntapi.h + +enum { + SLE_ERROR = 1, + SLE_MINORERROR, + SLE_WARNING +} + +const SHUTDOWN_NORETRY = 1; + +// Return type for exception filters. +enum : LONG { + EXCEPTION_EXECUTE_HANDLER = 1, + EXCEPTION_CONTINUE_EXECUTION = -1, + EXCEPTION_CONTINUE_SEARCH = 0 +} + +enum : ATOM { + MAXINTATOM = 0xC000, + INVALID_ATOM = 0 +} + +const IGNORE = 0; +const INFINITE = 0xFFFFFFFF; + +// EscapeCommFunction() +enum { + SETXOFF = 1, + SETXON, + SETRTS, + CLRRTS, + SETDTR, + CLRDTR, // = 6 + SETBREAK = 8, + CLRBREAK = 9 +} + + +// for SetCommMask() +const DWORD + EV_RXCHAR = 0x0001, + EV_RXFLAG = 0x0002, + EV_TXEMPTY = 0x0004, + EV_CTS = 0x0008, + EV_DSR = 0x0010, + EV_RLSD = 0x0020, + EV_BREAK = 0x0040, + EV_ERR = 0x0080, + EV_RING = 0x0100, + EV_PERR = 0x0200, + EV_RX80FULL = 0x0400, + EV_EVENT1 = 0x0800, + EV_EVENT2 = 0x1000; + +// GetCommModemStatus() +const DWORD + MS_CTS_ON = 0x0010, + MS_DSR_ON = 0x0020, + MS_RING_ON = 0x0040, + MS_RLSD_ON = 0x0080; + + +// DCB +enum : BYTE { + NOPARITY = 0, + ODDPARITY, + EVENPARITY, + MARKPARITY, + SPACEPARITY +} +// DCB +enum : BYTE { + ONESTOPBIT = 0, + ONE5STOPBITS, + TWOSTOPBITS +} +// DCB +enum : DWORD { + CBR_110 = 110, + CBR_300 = 300, + CBR_600 = 600, + CBR_1200 = 1200, + CBR_2400 = 2400, + CBR_4800 = 4800, + CBR_9600 = 9600, + CBR_14400 = 14400, + CBR_19200 = 19200, + CBR_38400 = 38400, + CBR_56000 = 56000, + CBR_57600 = 57600, + CBR_115200 = 115200, + CBR_128000 = 128000, + CBR_256000 = 256000 +} +// DCB, 2-bit bitfield +enum { + DTR_CONTROL_DISABLE = 0, + DTR_CONTROL_ENABLE, + DTR_CONTROL_HANDSHAKE +} + +// DCB, 2-bit bitfield +enum { + RTS_CONTROL_DISABLE = 0, + RTS_CONTROL_ENABLE, + RTS_CONTROL_HANDSHAKE, + RTS_CONTROL_TOGGLE, +} + +// WIN32_STREAM_ID +enum : DWORD { + BACKUP_INVALID = 0, + BACKUP_DATA, + BACKUP_EA_DATA, + BACKUP_SECURITY_DATA, + BACKUP_ALTERNATE_DATA, + BACKUP_LINK, + BACKUP_PROPERTY_DATA, + BACKUP_OBJECT_ID, + BACKUP_REPARSE_DATA, + BACKUP_SPARSE_BLOCK +} + +// WIN32_STREAM_ID +enum : DWORD { + STREAM_NORMAL_ATTRIBUTE = 0, + STREAM_MODIFIED_WHEN_READ = 1, + STREAM_CONTAINS_SECURITY = 2, + STREAM_CONTAINS_PROPERTIES = 4 +} + +// STARTUPINFO +const DWORD + STARTF_USESHOWWINDOW = 0x0001, + STARTF_USESIZE = 0x0002, + STARTF_USEPOSITION = 0x0004, + STARTF_USECOUNTCHARS = 0x0008, + STARTF_USEFILLATTRIBUTE = 0x0010, + STARTF_RUNFULLSCREEN = 0x0020, + STARTF_FORCEONFEEDBACK = 0x0040, + STARTF_FORCEOFFFEEDBACK = 0x0080, + STARTF_USESTDHANDLES = 0x0100, + STARTF_USEHOTKEY = 0x0200; + +// ??? +enum { + TC_NORMAL = 0, + TC_HARDERR = 1, + TC_GP_TRAP = 2, + TC_SIGNAL = 3 +} + +/+ These seem to be Windows CE-specific +enum { + AC_LINE_OFFLINE = 0, + AC_LINE_ONLINE = 1, + AC_LINE_BACKUP_POWER = 2, + AC_LINE_UNKNOWN = 255 +} + +enum { + BATTERY_FLAG_HIGH = 1, + BATTERY_FLAG_LOW = 2, + BATTERY_FLAG_CRITICAL = 4, + BATTERY_FLAG_CHARGING = 8, + BATTERY_FLAG_NO_BATTERY = 128, + BATTERY_FLAG_UNKNOWN = 255, + BATTERY_PERCENTAGE_UNKNOWN = 255, + BATTERY_LIFE_UNKNOWN = 0xFFFFFFFF +} ++/ + +// ??? +const HINSTANCE_ERROR = 32; + +// returned from GetFileSize() +const DWORD INVALID_FILE_SIZE = 0xFFFFFFFF; + +const DWORD TLS_OUT_OF_INDEXES = 0xFFFFFFFF; + +// GetWriteWatch() +const DWORD WRITE_WATCH_FLAG_RESET = 1; + +static if (_WIN32_WINNT_ONLY) { + // for LogonUser() + enum : DWORD { + LOGON32_LOGON_INTERACTIVE = 2, + LOGON32_LOGON_NETWORK = 3, + LOGON32_LOGON_BATCH = 4, + LOGON32_LOGON_SERVICE = 5, + LOGON32_LOGON_UNLOCK = 7 + } + + // for LogonUser() + enum : DWORD { + LOGON32_PROVIDER_DEFAULT, + LOGON32_PROVIDER_WINNT35, + LOGON32_PROVIDER_WINNT40, + LOGON32_PROVIDER_WINNT50 + } + + // for MoveFileEx() + const DWORD + MOVEFILE_REPLACE_EXISTING = 1, + MOVEFILE_COPY_ALLOWED = 2, + MOVEFILE_DELAY_UNTIL_REBOOT = 4, + MOVEFILE_WRITE_THROUGH = 8; + + // DefineDosDevice() + const DWORD + DDD_RAW_TARGET_PATH = 1, + DDD_REMOVE_DEFINITION = 2, + DDD_EXACT_MATCH_ON_REMOVE = 4; + + static if (_WIN32_WINNT >= 0x500) { + enum : DWORD { + LOGON32_LOGON_NETWORK_CLEARTEXT = 8, + LOGON32_LOGON_NEW_CREDENTIALS = 9 + } + + // ReplaceFile() + const DWORD + REPLACEFILE_WRITE_THROUGH = 1, + REPLACEFILE_IGNORE_MERGE_ERRORS = 2; + } + + static if (_WIN32_WINNT >= 0x501) { + const DWORD + GET_MODULE_HANDLE_EX_FLAG_PIN = 1, + GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT = 2, + GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS = 4; + + // for ACTCTX + const DWORD + ACTCTX_FLAG_PROCESSOR_ARCHITECTURE_VALID = 0x01, + ACTCTX_FLAG_LANGID_VALID = 0x02, + ACTCTX_FLAG_ASSEMBLY_DIRECTORY_VALID = 0x04, + ACTCTX_FLAG_RESOURCE_NAME_VALID = 0x08, + ACTCTX_FLAG_SET_PROCESS_DEFAULT = 0x10, + ACTCTX_FLAG_APPLICATION_NAME_VALID = 0x20, + ACTCTX_FLAG_HMODULE_VALID = 0x80; + + // DeactivateActCtx() + const DWORD DEACTIVATE_ACTCTX_FLAG_FORCE_EARLY_DEACTIVATION = 1; + // FindActCtxSectionString() + const DWORD FIND_ACTCTX_SECTION_KEY_RETURN_HACTCTX = 1; + // QueryActCtxW() + const DWORD + QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX = 0x04, + QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE = 0x08, + QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS = 0x10; + + enum { + LOGON_WITH_PROFILE = 1, + LOGON_NETCREDENTIALS_ONLY + } + } +} + +// ---- + +struct FILETIME { + DWORD dwLowDateTime; + DWORD dwHighDateTime; +} +alias FILETIME* PFILETIME, LPFILETIME; + +struct BY_HANDLE_FILE_INFORMATION { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD dwVolumeSerialNumber; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + DWORD nNumberOfLinks; + DWORD nFileIndexHigh; + DWORD nFileIndexLow; +} +alias BY_HANDLE_FILE_INFORMATION* LPBY_HANDLE_FILE_INFORMATION; + +struct DCB { + DWORD DCBlength = DCB.sizeof; + DWORD BaudRate; +/+ + DWORD fBinary:1; // Binary Mode (skip EOF check) + DWORD fParity:1; // Enable parity checking + DWORD fOutxCtsFlow:1; // CTS handshaking on output + DWORD fOutxDsrFlow:1; // DSR handshaking on output + DWORD fDtrControl:2; // DTR Flow control + DWORD fDsrSensitivity:1; // DSR Sensitivity + DWORD fTXContinueOnXoff:1; // Continue TX when Xoff sent + DWORD fOutX:1; // Enable output X-ON/X-OFF + DWORD fInX:1; // Enable input X-ON/X-OFF + DWORD fErrorChar:1; // Enable Err Replacement + DWORD fNull:1; // Enable Null stripping + DWORD fRtsControl:2; // Rts Flow control + DWORD fAbortOnError:1; // Abort all reads and writes on Error + DWORD fDummy2:17; // Reserved ++/ + uint _bf; + bool fBinary(bool f) { _bf = (_bf & ~0x0001) | f; return f; } + bool fParity(bool f) { _bf = (_bf & ~0x0002) | (f<<1); return f; } + bool fOutxCtsFlow(bool f) { _bf = (_bf & ~0x0004) | (f<<2); return f; } + bool fOutxDsrFlow(bool f) { _bf = (_bf & ~0x0008) | (f<<3); return f; } + byte fDtrControl(byte x) { _bf = (_bf & ~0x0030) | (x<<4); return cast(byte)(x & 3); } + bool fDsrSensitivity(bool f) { _bf = (_bf & ~0x0040) | (f<<6); return f; } + bool fTXContinueOnXoff(bool f) { _bf = (_bf & ~0x0080) | (f<<7); return f; } + bool fOutX(bool f) { _bf = (_bf & ~0x0100) | (f<<8); return f; } + bool fInX(bool f) { _bf = (_bf & ~0x0200) | (f<<9); return f; } + bool fErrorChar(bool f) { _bf = (_bf & ~0x0400) | (f<<10); return f; } + bool fNull(bool f) { _bf = (_bf & ~0x0800) | (f<<11); return f; } + byte fRtsControl(byte x) { _bf = (_bf & ~0x3000) | (x<<12); return cast(byte)(x & 3); } + bool fAbortOnError(bool f) { _bf = (_bf & ~0x4000) | (f<<14); return f; } + + bool fBinary() { return cast(bool) (_bf & 1); } + bool fParity() { return cast(bool) (_bf & 2); } + bool fOutxCtsFlow() { return cast(bool) (_bf & 4); } + bool fOutxDsrFlow() { return cast(bool) (_bf & 8); } + byte fDtrControl() { return cast(byte) ((_bf & (32+16))>>4); } + bool fDsrSensitivity() { return cast(bool) (_bf & 64); } + bool fTXContinueOnXoff() { return cast(bool) (_bf & 128); } + bool fOutX() { return cast(bool) (_bf & 256); } + bool fInX() { return cast(bool) (_bf & 512); } + bool fErrorChar() { return cast(bool) (_bf & 1024); } + bool fNull() { return cast(bool) (_bf & 2048); } + byte fRtsControl() { return cast(byte) ((_bf & (4096+8192))>>12); } + bool fAbortOnError() { return cast(bool) (_bf & 16384); } + + WORD wReserved; + WORD XonLim; + WORD XoffLim; + BYTE ByteSize; + BYTE Parity; + BYTE StopBits; + char XonChar; + char XoffChar; + char ErrorChar; + char EofChar; + char EvtChar; + WORD wReserved1; +} +alias DCB* LPDCB; + +struct COMMCONFIG { + DWORD dwSize = COMMCONFIG.sizeof; + WORD wVersion; + WORD wReserved; + DCB dcb; + DWORD dwProviderSubType; + DWORD dwProviderOffset; + DWORD dwProviderSize; + WCHAR _wcProviderData; + + WCHAR* wcProviderData() { return &_wcProviderData; } +} +alias COMMCONFIG* LPCOMMCONFIG; + +struct COMMTIMEOUTS { + DWORD ReadIntervalTimeout; + DWORD ReadTotalTimeoutMultiplier; + DWORD ReadTotalTimeoutConstant; + DWORD WriteTotalTimeoutMultiplier; + DWORD WriteTotalTimeoutConstant; +} +alias COMMTIMEOUTS* LPCOMMTIMEOUTS; + +struct COMSTAT { +/+ + DWORD fCtsHold:1; + DWORD fDsrHold:1; + DWORD fRlsdHold:1; + DWORD fXoffHold:1; + DWORD fXoffSent:1; + DWORD fEof:1; + DWORD fTxim:1; + DWORD fReserved:25; ++/ + DWORD _bf; + bool fCtsHold(bool f) { _bf = (_bf & ~1) | f; return f; } + bool fDsrHold(bool f) { _bf = (_bf & ~2) | (f<<1); return f; } + bool fRlsdHold(bool f) { _bf = (_bf & ~4) | (f<<2); return f; } + bool fXoffHold(bool f) { _bf = (_bf & ~8) | (f<<3); return f; } + bool fXoffSent(bool f) { _bf = (_bf & ~16) | (f<<4); return f; } + bool fEof(bool f) { _bf = (_bf & ~32) | (f<<5); return f; } + bool fTxim(bool f) { _bf = (_bf & ~64) | (f<<6); return f; } + + bool fCtsHold() { return cast(bool) (_bf & 1); } + bool fDsrHold() { return cast(bool) (_bf & 2); } + bool fRlsdHold() { return cast(bool) (_bf & 4); } + bool fXoffHold() { return cast(bool) (_bf & 8); } + bool fXoffSent() { return cast(bool) (_bf & 16); } + bool fEof() { return cast(bool) (_bf & 32); } + bool fTxim() { return cast(bool) (_bf & 64); } + + DWORD cbInQue; + DWORD cbOutQue; +} +alias COMSTAT* LPCOMSTAT; + +struct CREATE_PROCESS_DEBUG_INFO { + HANDLE hFile; + HANDLE hProcess; + HANDLE hThread; + LPVOID lpBaseOfImage; + DWORD dwDebugInfoFileOffset; + DWORD nDebugInfoSize; + LPVOID lpThreadLocalBase; + LPTHREAD_START_ROUTINE lpStartAddress; + LPVOID lpImageName; + WORD fUnicode; +} +alias CREATE_PROCESS_DEBUG_INFO* LPCREATE_PROCESS_DEBUG_INFO; + +struct CREATE_THREAD_DEBUG_INFO { + HANDLE hThread; + LPVOID lpThreadLocalBase; + LPTHREAD_START_ROUTINE lpStartAddress; +} +alias CREATE_THREAD_DEBUG_INFO* LPCREATE_THREAD_DEBUG_INFO; + +struct EXCEPTION_DEBUG_INFO { + EXCEPTION_RECORD ExceptionRecord; + DWORD dwFirstChance; +} +alias EXCEPTION_DEBUG_INFO* LPEXCEPTION_DEBUG_INFO; + +struct EXIT_THREAD_DEBUG_INFO { + DWORD dwExitCode; +} +alias EXIT_THREAD_DEBUG_INFO* LPEXIT_THREAD_DEBUG_INFO; + +struct EXIT_PROCESS_DEBUG_INFO { + DWORD dwExitCode; +} +alias EXIT_PROCESS_DEBUG_INFO* LPEXIT_PROCESS_DEBUG_INFO; + +struct LOAD_DLL_DEBUG_INFO { + HANDLE hFile; + LPVOID lpBaseOfDll; + DWORD dwDebugInfoFileOffset; + DWORD nDebugInfoSize; + LPVOID lpImageName; + WORD fUnicode; +} +alias LOAD_DLL_DEBUG_INFO* LPLOAD_DLL_DEBUG_INFO; + +struct UNLOAD_DLL_DEBUG_INFO { + LPVOID lpBaseOfDll; +} +alias UNLOAD_DLL_DEBUG_INFO* LPUNLOAD_DLL_DEBUG_INFO; + +struct OUTPUT_DEBUG_STRING_INFO { + LPSTR lpDebugStringData; + WORD fUnicode; + WORD nDebugStringLength; +} +alias OUTPUT_DEBUG_STRING_INFO* LPOUTPUT_DEBUG_STRING_INFO; + +struct RIP_INFO { + DWORD dwError; + DWORD dwType; +} +alias RIP_INFO* LPRIP_INFO; + +struct DEBUG_EVENT { + DWORD dwDebugEventCode; + DWORD dwProcessId; + DWORD dwThreadId; + union { + EXCEPTION_DEBUG_INFO Exception; + CREATE_THREAD_DEBUG_INFO CreateThread; + CREATE_PROCESS_DEBUG_INFO CreateProcessInfo; + EXIT_THREAD_DEBUG_INFO ExitThread; + EXIT_PROCESS_DEBUG_INFO ExitProcess; + LOAD_DLL_DEBUG_INFO LoadDll; + UNLOAD_DLL_DEBUG_INFO UnloadDll; + OUTPUT_DEBUG_STRING_INFO DebugString; + RIP_INFO RipInfo; + } +} +alias DEBUG_EVENT* LPDEBUG_EVENT; + +struct OVERLAPPED { + ULONG_PTR Internal; + ULONG_PTR InternalHigh; + union { + struct { + DWORD Offset; + DWORD OffsetHigh; + } + PVOID Pointer; + } + HANDLE hEvent; +} +alias OVERLAPPED* POVERLAPPED, LPOVERLAPPED; + +struct STARTUPINFOA { + DWORD cb = STARTUPINFOA.sizeof; + LPSTR lpReserved; + LPSTR lpDesktop; + LPSTR lpTitle; + DWORD dwX; + DWORD dwY; + DWORD dwXSize; + DWORD dwYSize; + DWORD dwXCountChars; + DWORD dwYCountChars; + DWORD dwFillAttribute; + DWORD dwFlags; + WORD wShowWindow; + WORD cbReserved2; + PBYTE lpReserved2; + HANDLE hStdInput; + HANDLE hStdOutput; + HANDLE hStdError; +} +alias STARTUPINFOA* LPSTARTUPINFOA; + +struct STARTUPINFOW { + DWORD cb = STARTUPINFOW.sizeof; + LPWSTR lpReserved; + LPWSTR lpDesktop; + LPWSTR lpTitle; + DWORD dwX; + DWORD dwY; + DWORD dwXSize; + DWORD dwYSize; + DWORD dwXCountChars; + DWORD dwYCountChars; + DWORD dwFillAttribute; + DWORD dwFlags; + WORD wShowWindow; + WORD cbReserved2; + PBYTE lpReserved2; + HANDLE hStdInput; + HANDLE hStdOutput; + HANDLE hStdError; +} +alias STARTUPINFOW* LPSTARTUPINFOW; + +struct PROCESS_INFORMATION { + HANDLE hProcess; + HANDLE hThread; + DWORD dwProcessId; + DWORD dwThreadId; +} +alias PROCESS_INFORMATION* PPROCESS_INFORMATION, LPPROCESS_INFORMATION; + +struct CRITICAL_SECTION_DEBUG { + WORD Type; + WORD CreatorBackTraceIndex; + CRITICAL_SECTION* CriticalSection; + LIST_ENTRY ProcessLocksList; + DWORD EntryCount; + DWORD ContentionCount; + DWORD[2] Spare; +} +alias CRITICAL_SECTION_DEBUG* PCRITICAL_SECTION_DEBUG; + +struct CRITICAL_SECTION { + PCRITICAL_SECTION_DEBUG DebugInfo; + LONG LockCount; + LONG RecursionCount; + HANDLE OwningThread; + HANDLE LockSemaphore; + DWORD SpinCount; +} +alias CRITICAL_SECTION* PCRITICAL_SECTION, LPCRITICAL_SECTION; + +struct SYSTEMTIME { + WORD wYear; + WORD wMonth; + WORD wDayOfWeek; + WORD wDay; + WORD wHour; + WORD wMinute; + WORD wSecond; + WORD wMilliseconds; +} +alias SYSTEMTIME* LPSYSTEMTIME; + +static if (_WIN32_WINDOWS >= 0x410) { + struct WIN32_FILE_ATTRIBUTE_DATA { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; + } + alias WIN32_FILE_ATTRIBUTE_DATA* LPWIN32_FILE_ATTRIBUTE_DATA; +} + +struct WIN32_FIND_DATAA { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; +// #ifdef _WIN32_WCE +// DWORD dwOID; +// #else + DWORD dwReserved0; + DWORD dwReserved1; +// #endif + CHAR[MAX_PATH] cFileName; +// #ifndef _WIN32_WCE + CHAR[14] cAlternateFileName; +// #endif +} +alias WIN32_FIND_DATAA* PWIN32_FIND_DATAA, LPWIN32_FIND_DATAA; + +struct WIN32_FIND_DATAW { + DWORD dwFileAttributes; + FILETIME ftCreationTime; + FILETIME ftLastAccessTime; + FILETIME ftLastWriteTime; + DWORD nFileSizeHigh; + DWORD nFileSizeLow; +// #ifdef _WIN32_WCE +// DWORD dwOID; +// #else + DWORD dwReserved0; + DWORD dwReserved1; +// #endif + WCHAR[MAX_PATH] cFileName; +// #ifndef _WIN32_WCE + WCHAR[14] cAlternateFileName; +// #endif +} +alias WIN32_FIND_DATAW* PWIN32_FIND_DATAW, LPWIN32_FIND_DATAW; + +static if (_WIN32_WINNT_ONLY) { + struct WIN32_STREAM_ID { + DWORD dwStreamId; + DWORD dwStreamAttributes; + LARGE_INTEGER Size; + DWORD dwStreamNameSize; + WCHAR _cStreamName; + + WCHAR* cStreamName() { return &_cStreamName; } + } + alias WIN32_STREAM_ID* LPWIN32_STREAM_ID; + + enum FINDEX_INFO_LEVELS { + FindExInfoStandard, + FindExInfoMaxInfoLevel + } + + enum FINDEX_SEARCH_OPS { + FindExSearchNameMatch, + FindExSearchLimitToDirectories, + FindExSearchLimitToDevices, + FindExSearchMaxSearchOp + } + + enum ACL_INFORMATION_CLASS { + AclRevisionInformation = 1, + AclSizeInformation + } + + struct HW_PROFILE_INFOA { + DWORD dwDockInfo; + CHAR[HW_PROFILE_GUIDLEN] szHwProfileGuid; + CHAR[MAX_PROFILE_LEN] szHwProfileName; + } + alias HW_PROFILE_INFOA* LPHW_PROFILE_INFOA; + + struct HW_PROFILE_INFOW { + DWORD dwDockInfo; + WCHAR[HW_PROFILE_GUIDLEN] szHwProfileGuid; + WCHAR[MAX_PROFILE_LEN] szHwProfileName; + } + alias HW_PROFILE_INFOW* LPHW_PROFILE_INFOW; +} + +/* ??? MSDN documents this only for Windows CE/Mobile, but it's used by + * GetFileAttributesEx, which is in desktop Windows. + */ +enum GET_FILEEX_INFO_LEVELS { + GetFileExInfoStandard, + GetFileExMaxInfoLevel +} + +struct SYSTEM_INFO { + union { + DWORD dwOemId; + struct { + WORD wProcessorArchitecture; + WORD wReserved; + } + } + DWORD dwPageSize; + PVOID lpMinimumApplicationAddress; + PVOID lpMaximumApplicationAddress; + DWORD dwActiveProcessorMask; + DWORD dwNumberOfProcessors; + DWORD dwProcessorType; + DWORD dwAllocationGranularity; + WORD wProcessorLevel; + WORD wProcessorRevision; +} +alias SYSTEM_INFO* LPSYSTEM_INFO; + +static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + struct SYSTEM_POWER_STATUS { + BYTE ACLineStatus; + BYTE BatteryFlag; + BYTE BatteryLifePercent; + BYTE Reserved1; + DWORD BatteryLifeTime; + DWORD BatteryFullLifeTime; + } + alias SYSTEM_POWER_STATUS* LPSYSTEM_POWER_STATUS; +} + +struct TIME_ZONE_INFORMATION { + LONG Bias; + WCHAR[32] StandardName; + SYSTEMTIME StandardDate; + LONG StandardBias; + WCHAR[32] DaylightName; + SYSTEMTIME DaylightDate; + LONG DaylightBias; +} +alias TIME_ZONE_INFORMATION* LPTIME_ZONE_INFORMATION; + +// MSDN documents this, possibly erroneously, as Win2000+. +struct MEMORYSTATUS { + DWORD dwLength; + DWORD dwMemoryLoad; + DWORD dwTotalPhys; + DWORD dwAvailPhys; + DWORD dwTotalPageFile; + DWORD dwAvailPageFile; + DWORD dwTotalVirtual; + DWORD dwAvailVirtual; +} +alias MEMORYSTATUS* LPMEMORYSTATUS; + +static if (_WIN32_WINNT >= 0x500) { + struct MEMORYSTATUSEX { + DWORD dwLength; + DWORD dwMemoryLoad; + DWORDLONG ullTotalPhys; + DWORDLONG ullAvailPhys; + DWORDLONG ullTotalPageFile; + DWORDLONG ullAvailPageFile; + DWORDLONG ullTotalVirtual; + DWORDLONG ullAvailVirtual; + DWORDLONG ullAvailExtendedVirtual; + } + alias MEMORYSTATUSEX* LPMEMORYSTATUSEX; +} + +struct LDT_ENTRY { + WORD LimitLow; + WORD BaseLow; + struct { + BYTE BaseMid; + BYTE Flags1; + BYTE Flags2; + BYTE BaseHi; + + byte Type(byte f) { Flags1 = cast(BYTE) ((Flags1 & 0xE0) | f); return cast(byte)(f & 0x1F); } + byte Dpl(byte f) { Flags1 = cast(BYTE) ((Flags1 & 0x9F) | (f<<5)); return cast(byte)(f & 3); } + bool Pres(bool f) { Flags1 = cast(BYTE) ((Flags1 & 0x7F) | (f<<7)); return f; } + + byte LimitHi(byte f) { Flags2 = cast(BYTE) ((Flags2 & 0xF0) | (f&0x0F)); return cast(byte)(f & 0x0F); } + bool Sys(bool f) { Flags2 = cast(BYTE) ((Flags2 & 0xEF) | (f<<4)); return f; } + // Next bit is reserved + bool Default_Big(bool f) { Flags2 = cast(BYTE) ((Flags2 & 0xBF) | (f<<6)); return f; } + bool Granularity(bool f) { Flags2 = cast(BYTE) ((Flags2 & 0x7F) | (f<<7)); return f; } + + byte Type() { return cast(byte) (Flags1 & 0x1F); } + byte Dpl() { return cast(byte) ((Flags1 & 0x60)>>5); } + bool Pres() { return cast(bool) (Flags1 & 0x80); } + + byte LimitHi() { return cast(byte) (Flags2 & 0x0F); } + bool Sys() { return cast(bool) (Flags2 & 0x10); } + bool Default_Big() { return cast(bool) (Flags2 & 0x40); } + bool Granularity() { return cast(bool) (Flags2 & 0x80); } + } +/+ + union HighWord { + struct Bytes { + BYTE BaseMid; + BYTE Flags1; + BYTE Flags2; + BYTE BaseHi; + } + struct Bits { + DWORD BaseMid:8; + DWORD Type:5; + DWORD Dpl:2; + DWORD Pres:1; + DWORD LimitHi:4; + DWORD Sys:1; + DWORD Reserved_0:1; + DWORD Default_Big:1; + DWORD Granularity:1; + DWORD BaseHi:8; + } + } ++/ +} +alias LDT_ENTRY* PLDT_ENTRY, LPLDT_ENTRY; + +/* As with the other memory management functions and structures, MSDN's + * Windows version info shall be taken with a cup of salt. + */ +struct PROCESS_HEAP_ENTRY { + PVOID lpData; + DWORD cbData; + BYTE cbOverhead; + BYTE iRegionIndex; + WORD wFlags; + union { + struct Block { + HANDLE hMem; + DWORD[3] dwReserved; + } + struct Region { + DWORD dwCommittedSize; + DWORD dwUnCommittedSize; + LPVOID lpFirstBlock; + LPVOID lpLastBlock; + } + } +} +alias PROCESS_HEAP_ENTRY* LPPROCESS_HEAP_ENTRY; + +struct OFSTRUCT { + BYTE cBytes = OFSTRUCT.sizeof; + BYTE fFixedDisk; + WORD nErrCode; + WORD Reserved1; + WORD Reserved2; + CHAR[128] szPathName; // const OFS_MAXPATHNAME = 128; +} +alias OFSTRUCT* LPOFSTRUCT, POFSTRUCT; + +/* ??? MSDN documents this only for Windows CE, but it's used by + * ImageGetCertificateData, which is in desktop Windows. + */ +struct WIN_CERTIFICATE { + DWORD dwLength; + WORD wRevision; + WORD wCertificateType; + BYTE _bCertificate; + + BYTE* bCertificate() { return &_bCertificate; } +} +alias WIN_CERTIFICATE* LPWIN_CERTIFICATE; + +static if (_WIN32_WINNT >= 0x500) { + enum COMPUTER_NAME_FORMAT { + ComputerNameNetBIOS, + ComputerNameDnsHostname, + ComputerNameDnsDomain, + ComputerNameDnsFullyQualified, + ComputerNamePhysicalNetBIOS, + ComputerNamePhysicalDnsHostname, + ComputerNamePhysicalDnsDomain, + ComputerNamePhysicalDnsFullyQualified, + ComputerNameMax + } +} + +static if (_WIN32_WINNT >= 0x501) { + struct ACTCTXA { + ULONG cbSize = this.sizeof; + DWORD dwFlags; + LPCSTR lpSource; + USHORT wProcessorArchitecture; + LANGID wLangId; + LPCSTR lpAssemblyDirectory; + LPCSTR lpResourceName; + LPCSTR lpApplicationName; + HMODULE hModule; + } + alias ACTCTXA* PACTCTXA, PCACTCTXA; + + struct ACTCTXW { + ULONG cbSize = this.sizeof; + DWORD dwFlags; + LPCWSTR lpSource; + USHORT wProcessorArchitecture; + LANGID wLangId; + LPCWSTR lpAssemblyDirectory; + LPCWSTR lpResourceName; + LPCWSTR lpApplicationName; + HMODULE hModule; + } + alias ACTCTXW* PACTCTXW, PCACTCTXW; + + struct ACTCTX_SECTION_KEYED_DATA { + ULONG cbSize = this.sizeof; + ULONG ulDataFormatVersion; + PVOID lpData; + ULONG ulLength; + PVOID lpSectionGlobalData; + ULONG ulSectionGlobalDataLength; + PVOID lpSectionBase; + ULONG ulSectionTotalLength; + HANDLE hActCtx; + HANDLE ulAssemblyRosterIndex; + } + alias ACTCTX_SECTION_KEYED_DATA* PACTCTX_SECTION_KEYED_DATA, PCACTCTX_SECTION_KEYED_DATA; + + enum MEMORY_RESOURCE_NOTIFICATION_TYPE { + LowMemoryResourceNotification, + HighMemoryResourceNotification + } + +} // (_WIN32_WINNT >= 0x0501) + +static if (WINVER >= 0x410) { + /* apparently used only by SetThreadExecutionState (Win2000+) + * and DDK functions (version compatibility not established) + */ + alias DWORD EXECUTION_STATE; +} + +// Callbacks +extern (Windows) { + alias DWORD function(LPVOID) LPTHREAD_START_ROUTINE; + alias DWORD function(LARGE_INTEGER, LARGE_INTEGER, LARGE_INTEGER, LARGE_INTEGER, + DWORD, DWORD, HANDLE, HANDLE, LPVOID) LPPROGRESS_ROUTINE; + alias void function(PVOID) LPFIBER_START_ROUTINE; + + alias BOOL function(HMODULE, LPCSTR, LPCSTR, WORD, LONG) ENUMRESLANGPROCA; + alias BOOL function(HMODULE, LPCWSTR, LPCWSTR, WORD, LONG) ENUMRESLANGPROCW; + alias BOOL function(HMODULE, LPCSTR, LPSTR, LONG) ENUMRESNAMEPROCA; + alias BOOL function(HMODULE, LPCWSTR, LPWSTR, LONG) ENUMRESNAMEPROCW; + alias BOOL function(HMODULE, LPSTR, LONG) ENUMRESTYPEPROCA; + alias BOOL function(HMODULE, LPWSTR, LONG) ENUMRESTYPEPROCW; + alias void function(DWORD, DWORD, LPOVERLAPPED) LPOVERLAPPED_COMPLETION_ROUTINE; + alias LONG function(LPEXCEPTION_POINTERS) PTOP_LEVEL_EXCEPTION_FILTER; + alias PTOP_LEVEL_EXCEPTION_FILTER LPTOP_LEVEL_EXCEPTION_FILTER; + + alias void function(ULONG_PTR) PAPCFUNC; + alias void function(PVOID, DWORD, DWORD) PTIMERAPCROUTINE; + + static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + alias void function(PVOID, BOOLEAN) WAITORTIMERCALLBACK; + } +} + +LPTSTR MAKEINTATOM(short i) { + return cast(LPTSTR) i; +} + +extern (Windows) { + ATOM AddAtomA(LPCSTR); + ATOM AddAtomW(LPCWSTR); + BOOL AreFileApisANSI(); + BOOL Beep(DWORD, DWORD); + HANDLE BeginUpdateResourceA(LPCSTR, BOOL); + HANDLE BeginUpdateResourceW(LPCWSTR, BOOL); + BOOL BuildCommDCBA(LPCSTR, LPDCB); + BOOL BuildCommDCBW(LPCWSTR, LPDCB); + BOOL BuildCommDCBAndTimeoutsA(LPCSTR, LPDCB, LPCOMMTIMEOUTS); + BOOL BuildCommDCBAndTimeoutsW(LPCWSTR, LPDCB, LPCOMMTIMEOUTS); + BOOL CallNamedPipeA(LPCSTR, PVOID, DWORD, PVOID, DWORD, PDWORD, DWORD); + BOOL CallNamedPipeW(LPCWSTR, PVOID, DWORD, PVOID, DWORD, PDWORD, DWORD); + BOOL CancelDeviceWakeupRequest(HANDLE); + BOOL CheckTokenMembership(HANDLE, PSID, PBOOL); + BOOL ClearCommBreak(HANDLE); + BOOL ClearCommError(HANDLE, PDWORD, LPCOMSTAT); + BOOL CloseHandle(HANDLE); + BOOL CommConfigDialogA(LPCSTR, HWND, LPCOMMCONFIG); + BOOL CommConfigDialogW(LPCWSTR, HWND, LPCOMMCONFIG); + LONG CompareFileTime(FILETIME*, FILETIME*); + BOOL ContinueDebugEvent(DWORD, DWORD, DWORD); + BOOL CopyFileA(LPCSTR, LPCSTR, BOOL); + BOOL CopyFileW(LPCWSTR, LPCWSTR, BOOL); + BOOL CopyFileExA(LPCSTR, LPCSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD); + BOOL CopyFileExW(LPCWSTR, LPCWSTR, LPPROGRESS_ROUTINE, LPVOID, LPBOOL, DWORD); + + /+ FIXME + alias memmove RtlMoveMemory; + alias memcpy RtlCopyMemory; + + void RtlFillMemory(PVOID dest, SIZE_T len, BYTE fill) { + memset(dest, fill, len); + } + + void RtlZeroMemory(PVOID dest, SIZE_T len) { + RtlFillMemory(dest, len , 0); + } + + alias RtlMoveMemory MoveMemory; + alias RtlCopyMemory CopyMemory; + alias RtlFillMemory FillMemory; + alias RtlZeroMemory ZeroMemory; + +/ + BOOL CreateDirectoryA(LPCSTR, LPSECURITY_ATTRIBUTES); + BOOL CreateDirectoryW(LPCWSTR, LPSECURITY_ATTRIBUTES); + BOOL CreateDirectoryExA(LPCSTR, LPCSTR, LPSECURITY_ATTRIBUTES); + BOOL CreateDirectoryExW(LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES); + HANDLE CreateEventA(LPSECURITY_ATTRIBUTES, BOOL, BOOL, LPCSTR); + HANDLE CreateEventW(LPSECURITY_ATTRIBUTES, BOOL, BOOL, LPCWSTR); + HANDLE CreateFileA(LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); + HANDLE CreateFileW(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); + HANDLE CreateIoCompletionPort(HANDLE, HANDLE, ULONG_PTR, DWORD); + HANDLE CreateMailslotA(LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES); + HANDLE CreateMailslotW(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES); + HANDLE CreateMutexA(LPSECURITY_ATTRIBUTES, BOOL, LPCSTR); + HANDLE CreateMutexW(LPSECURITY_ATTRIBUTES, BOOL, LPCWSTR); + BOOL CreatePipe(PHANDLE, PHANDLE, LPSECURITY_ATTRIBUTES, DWORD); + BOOL CreateProcessA(LPCSTR, LPSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, PVOID, LPCSTR, LPSTARTUPINFOA, LPPROCESS_INFORMATION); + BOOL CreateProcessW(LPCWSTR, LPWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, PVOID, LPCWSTR, LPSTARTUPINFOW, LPPROCESS_INFORMATION); + HANDLE CreateSemaphoreA(LPSECURITY_ATTRIBUTES, LONG, LONG, LPCSTR); + HANDLE CreateSemaphoreW(LPSECURITY_ATTRIBUTES, LONG, LONG, LPCWSTR); + HANDLE CreateThread(LPSECURITY_ATTRIBUTES, DWORD, LPTHREAD_START_ROUTINE, PVOID, DWORD, PDWORD); + BOOL DebugActiveProcess(DWORD); + void DebugBreak(); + ATOM DeleteAtom(ATOM); + void DeleteCriticalSection(PCRITICAL_SECTION); + BOOL DeleteFileA(LPCSTR); + BOOL DeleteFileW(LPCWSTR); + BOOL DisableThreadLibraryCalls(HMODULE); + BOOL DosDateTimeToFileTime(WORD, WORD, LPFILETIME); + BOOL DuplicateHandle(HANDLE, HANDLE, HANDLE, PHANDLE, DWORD, BOOL, DWORD); + BOOL EndUpdateResourceA(HANDLE, BOOL); + BOOL EndUpdateResourceW(HANDLE, BOOL); + void EnterCriticalSection(LPCRITICAL_SECTION); + BOOL EnumResourceLanguagesA(HMODULE, LPCSTR, LPCSTR, ENUMRESLANGPROC, LONG_PTR); + BOOL EnumResourceLanguagesW(HMODULE, LPCWSTR, LPCWSTR, ENUMRESLANGPROC, LONG_PTR); + BOOL EnumResourceNamesA(HMODULE, LPCSTR, ENUMRESNAMEPROC, LONG_PTR); + BOOL EnumResourceNamesW(HMODULE, LPCWSTR, ENUMRESNAMEPROC, LONG_PTR); + BOOL EnumResourceTypesA(HMODULE, ENUMRESTYPEPROC, LONG_PTR); + BOOL EnumResourceTypesW(HMODULE, ENUMRESTYPEPROC, LONG_PTR); + BOOL EscapeCommFunction(HANDLE, DWORD); + void ExitProcess(UINT); // Never returns + void ExitThread(DWORD); // Never returns + DWORD ExpandEnvironmentStringsA(LPCSTR, LPSTR, DWORD); + DWORD ExpandEnvironmentStringsW(LPCWSTR, LPWSTR, DWORD); + void FatalAppExitA(UINT, LPCSTR); + void FatalAppExitW(UINT, LPCWSTR); + void FatalExit(int); + BOOL FileTimeToDosDateTime(FILETIME* , LPWORD, LPWORD); + BOOL FileTimeToLocalFileTime(FILETIME* , LPFILETIME); + BOOL FileTimeToSystemTime(FILETIME* , LPSYSTEMTIME); + ATOM FindAtomA(LPCSTR); + ATOM FindAtomW(LPCWSTR); + BOOL FindClose(HANDLE); + BOOL FindCloseChangeNotification(HANDLE); + HANDLE FindFirstChangeNotificationA(LPCSTR, BOOL, DWORD); + HANDLE FindFirstChangeNotificationW(LPCWSTR, BOOL, DWORD); + HANDLE FindFirstFileA(LPCSTR, LPWIN32_FIND_DATAA); + HANDLE FindFirstFileW(LPCWSTR, LPWIN32_FIND_DATAW); + BOOL FindNextChangeNotification(HANDLE); + BOOL FindNextFileA(HANDLE, LPWIN32_FIND_DATAA); + BOOL FindNextFileW(HANDLE, LPWIN32_FIND_DATAW); + HRSRC FindResourceA(HMODULE, LPCSTR, LPCSTR); + HRSRC FindResourceW(HINSTANCE, LPCWSTR, LPCWSTR); + HRSRC FindResourceExA(HINSTANCE, LPCSTR, LPCSTR, WORD); + HRSRC FindResourceExW(HINSTANCE, LPCWSTR, LPCWSTR, WORD); + BOOL FlushFileBuffers(HANDLE); + BOOL FlushInstructionCache(HANDLE, PCVOID, DWORD); + DWORD FormatMessageA(DWORD, PCVOID, DWORD, DWORD, LPSTR, DWORD, va_list*); + DWORD FormatMessageW(DWORD, PCVOID, DWORD, DWORD, LPWSTR, DWORD, va_list*); + BOOL FreeEnvironmentStringsA(LPSTR); + BOOL FreeEnvironmentStringsW(LPWSTR); + BOOL FreeLibrary(HMODULE); + void FreeLibraryAndExitThread(HMODULE, DWORD); // never returns + BOOL FreeResource(HGLOBAL); + UINT GetAtomNameA(ATOM, LPSTR, int); + UINT GetAtomNameW(ATOM, LPWSTR, int); + LPSTR GetCommandLineA(); + LPWSTR GetCommandLineW(); + BOOL GetCommConfig(HANDLE, LPCOMMCONFIG, PDWORD); + BOOL GetCommMask(HANDLE, PDWORD); + BOOL GetCommModemStatus(HANDLE, PDWORD); + BOOL GetCommProperties(HANDLE, LPCOMMPROP); + BOOL GetCommState(HANDLE, LPDCB); + BOOL GetCommTimeouts(HANDLE, LPCOMMTIMEOUTS); + BOOL GetComputerNameA(LPSTR, PDWORD); + BOOL GetComputerNameW(LPWSTR, PDWORD); + DWORD GetCurrentDirectoryA(DWORD, LPSTR); + DWORD GetCurrentDirectoryW(DWORD, LPWSTR); + HANDLE GetCurrentProcess(); + DWORD GetCurrentProcessId(); + HANDLE GetCurrentThread(); +/* In MinGW: +#ifdef _WIN32_WCE +extern DWORD GetCurrentThreadId(void); +#else +WINBASEAPI DWORD WINAPI GetCurrentThreadId(void); +#endif +*/ + DWORD GetCurrentThreadId(); + + alias GetTickCount GetCurrentTime; + + BOOL GetDefaultCommConfigA(LPCSTR, LPCOMMCONFIG, PDWORD); + BOOL GetDefaultCommConfigW(LPCWSTR, LPCOMMCONFIG, PDWORD); + BOOL GetDiskFreeSpaceA(LPCSTR, PDWORD, PDWORD, PDWORD, PDWORD); + BOOL GetDiskFreeSpaceW(LPCWSTR, PDWORD, PDWORD, PDWORD, PDWORD); + BOOL GetDiskFreeSpaceExA(LPCSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER); + BOOL GetDiskFreeSpaceExW(LPCWSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER); + UINT GetDriveTypeA(LPCSTR); + UINT GetDriveTypeW(LPCWSTR); + LPSTR GetEnvironmentStrings(); // ??? + LPSTR GetEnvironmentStringsA(); + LPWSTR GetEnvironmentStringsW(); + DWORD GetEnvironmentVariableA(LPCSTR, LPSTR, DWORD); + DWORD GetEnvironmentVariableW(LPCWSTR, LPWSTR, DWORD); + BOOL GetExitCodeProcess(HANDLE, PDWORD); + BOOL GetExitCodeThread(HANDLE, PDWORD); + DWORD GetFileAttributesA(LPCSTR); + DWORD GetFileAttributesW(LPCWSTR); + BOOL GetFileInformationByHandle(HANDLE, LPBY_HANDLE_FILE_INFORMATION); + DWORD GetFileSize(HANDLE, PDWORD); + BOOL GetFileTime(HANDLE, LPFILETIME, LPFILETIME, LPFILETIME); + DWORD GetFileType(HANDLE); + DWORD GetFullPathNameA(LPCSTR, DWORD, LPSTR, LPSTR*); + DWORD GetFullPathNameW(LPCWSTR, DWORD, LPWSTR, LPWSTR*); + DWORD GetLastError(); + void GetLocalTime(LPSYSTEMTIME); + DWORD GetLogicalDrives(); + DWORD GetLogicalDriveStringsA(DWORD, LPSTR); + DWORD GetLogicalDriveStringsW(DWORD, LPWSTR); + BOOL GetMailslotInfo(HANDLE, PDWORD, PDWORD, PDWORD, PDWORD); + DWORD GetModuleFileNameA(HINSTANCE, LPSTR, DWORD); + DWORD GetModuleFileNameW(HINSTANCE, LPWSTR, DWORD); + HMODULE GetModuleHandleA(LPCSTR); + HMODULE GetModuleHandleW(LPCWSTR); + BOOL GetNamedPipeHandleStateA(HANDLE, PDWORD, PDWORD, PDWORD, PDWORD, LPSTR, DWORD); + BOOL GetNamedPipeHandleStateW(HANDLE, PDWORD, PDWORD, PDWORD, PDWORD, LPWSTR, DWORD); + BOOL GetNamedPipeInfo(HANDLE, PDWORD, PDWORD, PDWORD, PDWORD); + BOOL GetOverlappedResult(HANDLE, LPOVERLAPPED, PDWORD, BOOL); + DWORD GetPriorityClass(HANDLE); + UINT GetPrivateProfileIntA(LPCSTR, LPCSTR, INT, LPCSTR); + UINT GetPrivateProfileIntW(LPCWSTR, LPCWSTR, INT, LPCWSTR); + DWORD GetPrivateProfileSectionA(LPCSTR, LPSTR, DWORD, LPCSTR); + DWORD GetPrivateProfileSectionW(LPCWSTR, LPWSTR, DWORD, LPCWSTR); + DWORD GetPrivateProfileSectionNamesA(LPSTR, DWORD, LPCSTR); + DWORD GetPrivateProfileSectionNamesW(LPWSTR, DWORD, LPCWSTR); + DWORD GetPrivateProfileStringA(LPCSTR, LPCSTR, LPCSTR, LPSTR, DWORD, LPCSTR); + DWORD GetPrivateProfileStringW(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, DWORD, LPCWSTR); + BOOL GetPrivateProfileStructA(LPCSTR, LPCSTR, LPVOID, UINT, LPCSTR); + BOOL GetPrivateProfileStructW(LPCWSTR, LPCWSTR, LPVOID, UINT, LPCWSTR); + FARPROC GetProcAddress(HINSTANCE, LPCSTR); + BOOL GetProcessAffinityMask(HANDLE, PDWORD, PDWORD); + DWORD GetProcessVersion(DWORD); + UINT GetProfileIntA(LPCSTR, LPCSTR, INT); + UINT GetProfileIntW(LPCWSTR, LPCWSTR, INT); + DWORD GetProfileSectionA(LPCSTR, LPSTR, DWORD); + DWORD GetProfileSectionW(LPCWSTR, LPWSTR, DWORD); + DWORD GetProfileStringA(LPCSTR, LPCSTR, LPCSTR, LPSTR, DWORD); + DWORD GetProfileStringW(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, DWORD); + DWORD GetShortPathNameA(LPCSTR, LPSTR, DWORD); + DWORD GetShortPathNameW(LPCWSTR, LPWSTR, DWORD); + VOID GetStartupInfoA(LPSTARTUPINFOA); + VOID GetStartupInfoW(LPSTARTUPINFOW); + HANDLE GetStdHandle(DWORD); + UINT GetSystemDirectoryA(LPSTR, UINT); + UINT GetSystemDirectoryW(LPWSTR, UINT); + VOID GetSystemInfo(LPSYSTEM_INFO); + VOID GetSystemTime(LPSYSTEMTIME); + BOOL GetSystemTimeAdjustment(PDWORD, PDWORD, PBOOL); + void GetSystemTimeAsFileTime(LPFILETIME); + UINT GetTempFileNameA(LPCSTR, LPCSTR, UINT, LPSTR); + UINT GetTempFileNameW(LPCWSTR, LPCWSTR, UINT, LPWSTR); + DWORD GetTempPathA(DWORD, LPSTR); + DWORD GetTempPathW(DWORD, LPWSTR); + BOOL GetThreadContext(HANDLE, LPCONTEXT); + int GetThreadPriority(HANDLE); + BOOL GetThreadSelectorEntry(HANDLE, DWORD, LPLDT_ENTRY); + DWORD GetTickCount(); + DWORD GetTimeZoneInformation(LPTIME_ZONE_INFORMATION); + BOOL GetUserNameA (LPSTR, PDWORD); + BOOL GetUserNameW(LPWSTR, PDWORD); + DWORD GetVersion(); + BOOL GetVersionExA(LPOSVERSIONINFOA); + BOOL GetVersionExW(LPOSVERSIONINFOW); + BOOL GetVolumeInformationA(LPCSTR, LPSTR, DWORD, PDWORD, PDWORD, PDWORD, LPSTR, DWORD); + BOOL GetVolumeInformationW(LPCWSTR, LPWSTR, DWORD, PDWORD, PDWORD, PDWORD, LPWSTR, DWORD); + UINT GetWindowsDirectoryA(LPSTR, UINT); + UINT GetWindowsDirectoryW(LPWSTR, UINT); + DWORD GetWindowThreadProcessId(HWND, PDWORD); + ATOM GlobalAddAtomA(LPCSTR); + ATOM GlobalAddAtomW(LPCWSTR); + ATOM GlobalDeleteAtom(ATOM); + ATOM GlobalFindAtomA(LPCSTR); + ATOM GlobalFindAtomW(LPCWSTR); + UINT GlobalGetAtomNameA(ATOM, LPSTR, int); + UINT GlobalGetAtomNameW(ATOM, LPWSTR, int); + + bool HasOverlappedIoCompleted(LPOVERLAPPED lpOverlapped) { + return lpOverlapped.Internal != STATUS_PENDING; + } + + BOOL InitAtomTable(DWORD); + VOID InitializeCriticalSection(LPCRITICAL_SECTION); + /* ??? The next two are allegedly obsolete and "supported only for + * backward compatibility with the 16-bit Windows API". Yet the + * replacements IsBadReadPtr and IsBadWritePtr are apparently Win2000+ + * only. Where's the mistake? + */ + BOOL IsBadHugeReadPtr(PCVOID, UINT); + BOOL IsBadHugeWritePtr(PVOID, UINT); + BOOL IsBadReadPtr(PCVOID, UINT); + BOOL IsBadStringPtrA(LPCSTR, UINT); + BOOL IsBadStringPtrW(LPCWSTR, UINT); + BOOL IsBadWritePtr(PVOID, UINT); + void LeaveCriticalSection(LPCRITICAL_SECTION); + HINSTANCE LoadLibraryA(LPCSTR); + HINSTANCE LoadLibraryW(LPCWSTR); + HINSTANCE LoadLibraryExA(LPCSTR, HANDLE, DWORD); + HINSTANCE LoadLibraryExW(LPCWSTR, HANDLE, DWORD); + DWORD LoadModule(LPCSTR, PVOID); + HGLOBAL LoadResource(HINSTANCE, HRSRC); + BOOL LocalFileTimeToFileTime(FILETIME* , LPFILETIME); + BOOL LockFile(HANDLE, DWORD, DWORD, DWORD, DWORD); + PVOID LockResource(HGLOBAL); + + LPSTR lstrcatA(LPSTR, LPCSTR); + LPWSTR lstrcatW(LPWSTR, LPCWSTR); + int lstrcmpA(LPCSTR, LPCSTR); + int lstrcmpiA(LPCSTR, LPCSTR); + int lstrcmpiW(LPCWSTR, LPCWSTR); + int lstrcmpW(LPCWSTR, LPCWSTR); + LPSTR lstrcpyA(LPSTR, LPCSTR); + LPSTR lstrcpynA(LPSTR, LPCSTR, int); + LPWSTR lstrcpynW(LPWSTR, LPCWSTR, int); + LPWSTR lstrcpyW(LPWSTR, LPCWSTR); + int lstrlenA(LPCSTR); + int lstrlenW(LPCWSTR); + + BOOL MoveFileA(LPCSTR, LPCSTR); + BOOL MoveFileW(LPCWSTR, LPCWSTR); + int MulDiv(int, int, int); + HANDLE OpenEventA(DWORD, BOOL, LPCSTR); + HANDLE OpenEventW(DWORD, BOOL, LPCWSTR); + deprecated HFILE OpenFile(LPCSTR, LPOFSTRUCT, UINT); + HANDLE OpenMutexA(DWORD, BOOL, LPCSTR); + HANDLE OpenMutexW(DWORD, BOOL, LPCWSTR); + HANDLE OpenProcess(DWORD, BOOL, DWORD); + HANDLE OpenSemaphoreA(DWORD, BOOL, LPCSTR); + HANDLE OpenSemaphoreW(DWORD, BOOL, LPCWSTR); + void OutputDebugStringA(LPCSTR); + void OutputDebugStringW(LPCWSTR); + BOOL PeekNamedPipe(HANDLE, PVOID, DWORD, PDWORD, PDWORD, PDWORD); + BOOL PulseEvent(HANDLE); + BOOL PurgeComm(HANDLE, DWORD); + BOOL QueryPerformanceCounter(PLARGE_INTEGER); + BOOL QueryPerformanceFrequency(PLARGE_INTEGER); + DWORD QueueUserAPC(PAPCFUNC, HANDLE, ULONG_PTR); + void RaiseException(DWORD, DWORD, DWORD, DWORD*); + BOOL ReadFile(HANDLE, PVOID, DWORD, PDWORD, LPOVERLAPPED); + BOOL ReadFileEx(HANDLE, PVOID, DWORD, LPOVERLAPPED, LPOVERLAPPED_COMPLETION_ROUTINE); + BOOL ReadProcessMemory(HANDLE, PCVOID, PVOID, DWORD, PDWORD); + BOOL ReleaseMutex(HANDLE); + BOOL ReleaseSemaphore(HANDLE, LONG, LPLONG); + BOOL RemoveDirectoryA(LPCSTR); + BOOL RemoveDirectoryW(LPCWSTR); +/* In MinGW: +#ifdef _WIN32_WCE +extern BOOL ResetEvent(HANDLE); +#else +WINBASEAPI BOOL WINAPI ResetEvent(HANDLE); +#endif +*/ + BOOL ResetEvent(HANDLE); + DWORD ResumeThread(HANDLE); + DWORD SearchPathA(LPCSTR, LPCSTR, LPCSTR, DWORD, LPSTR, LPSTR*); + DWORD SearchPathW(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPWSTR, LPWSTR*); + BOOL SetCommBreak(HANDLE); + BOOL SetCommConfig(HANDLE, LPCOMMCONFIG, DWORD); + BOOL SetCommMask(HANDLE, DWORD); + BOOL SetCommState(HANDLE, LPDCB); + BOOL SetCommTimeouts(HANDLE, LPCOMMTIMEOUTS); + BOOL SetComputerNameA(LPCSTR); + BOOL SetComputerNameW(LPCWSTR); + BOOL SetCurrentDirectoryA(LPCSTR); + BOOL SetCurrentDirectoryW(LPCWSTR); + BOOL SetDefaultCommConfigA(LPCSTR, LPCOMMCONFIG, DWORD); + BOOL SetDefaultCommConfigW(LPCWSTR, LPCOMMCONFIG, DWORD); + BOOL SetEndOfFile(HANDLE); + BOOL SetEnvironmentVariableA(LPCSTR, LPCSTR); + BOOL SetEnvironmentVariableW(LPCWSTR, LPCWSTR); + UINT SetErrorMode(UINT); +/* In MinGW: +#ifdef _WIN32_WCE +extern BOOL SetEvent(HANDLE); +#else +WINBASEAPI BOOL WINAPI SetEvent(HANDLE); +#endif +*/ + BOOL SetEvent(HANDLE); + VOID SetFileApisToANSI(); + VOID SetFileApisToOEM(); + BOOL SetFileAttributesA(LPCSTR, DWORD); + BOOL SetFileAttributesW(LPCWSTR, DWORD); + DWORD SetFilePointer(HANDLE, LONG, PLONG, DWORD); + BOOL SetFileTime(HANDLE, FILETIME*, FILETIME*, FILETIME*); + deprecated UINT SetHandleCount(UINT); + void SetLastError(DWORD); + void SetLastErrorEx(DWORD, DWORD); + BOOL SetLocalTime(SYSTEMTIME*); + BOOL SetMailslotInfo(HANDLE, DWORD); + BOOL SetNamedPipeHandleState(HANDLE, PDWORD, PDWORD, PDWORD); + BOOL SetPriorityClass(HANDLE, DWORD); + BOOL SetStdHandle(DWORD, HANDLE); + BOOL SetSystemTime(SYSTEMTIME*); + DWORD SetThreadAffinityMask(HANDLE, DWORD); + BOOL SetThreadContext(HANDLE, CONTEXT*); + BOOL SetThreadPriority(HANDLE, int); + BOOL SetTimeZoneInformation(TIME_ZONE_INFORMATION*); + LPTOP_LEVEL_EXCEPTION_FILTER SetUnhandledExceptionFilter(LPTOP_LEVEL_EXCEPTION_FILTER); + BOOL SetupComm(HANDLE, DWORD, DWORD); + BOOL SetVolumeLabelA(LPCSTR, LPCSTR); + BOOL SetVolumeLabelW(LPCWSTR, LPCWSTR); + + DWORD SizeofResource(HINSTANCE, HRSRC); + void Sleep(DWORD); + DWORD SleepEx(DWORD, BOOL); + DWORD SuspendThread(HANDLE); + BOOL SystemTimeToFileTime(SYSTEMTIME*, LPFILETIME); + BOOL TerminateProcess(HANDLE, UINT); + BOOL TerminateThread(HANDLE, DWORD); + DWORD TlsAlloc(); + BOOL TlsFree(DWORD); + PVOID TlsGetValue(DWORD); + BOOL TlsSetValue(DWORD, PVOID); + BOOL TransactNamedPipe(HANDLE, PVOID, DWORD, PVOID, DWORD, PDWORD, LPOVERLAPPED); + BOOL TransmitCommChar(HANDLE, char); + LONG UnhandledExceptionFilter(LPEXCEPTION_POINTERS); + BOOL UnlockFile(HANDLE, DWORD, DWORD, DWORD, DWORD); + BOOL WaitCommEvent(HANDLE, PDWORD, LPOVERLAPPED); + BOOL WaitForDebugEvent(LPDEBUG_EVENT, DWORD); + DWORD WaitForMultipleObjects(DWORD, HANDLE*, BOOL, DWORD); + DWORD WaitForMultipleObjectsEx(DWORD, HANDLE*, BOOL, DWORD, BOOL); + DWORD WaitForSingleObject(HANDLE, DWORD); + DWORD WaitForSingleObjectEx(HANDLE, DWORD, BOOL); + BOOL WaitNamedPipeA(LPCSTR, DWORD); + BOOL WaitNamedPipeW(LPCWSTR, DWORD); + // undocumented on MSDN + BOOL WinLoadTrustProvider(GUID*); + BOOL WriteFile(HANDLE, PCVOID, DWORD, PDWORD, LPOVERLAPPED); + BOOL WriteFileEx(HANDLE, PCVOID, DWORD, LPOVERLAPPED, LPOVERLAPPED_COMPLETION_ROUTINE); + BOOL WritePrivateProfileSectionA(LPCSTR, LPCSTR, LPCSTR); + BOOL WritePrivateProfileSectionW(LPCWSTR, LPCWSTR, LPCWSTR); + BOOL WritePrivateProfileStringA(LPCSTR, LPCSTR, LPCSTR, LPCSTR); + BOOL WritePrivateProfileStringW(LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR); + BOOL WritePrivateProfileStructA(LPCSTR, LPCSTR, LPVOID, UINT, LPCSTR); + BOOL WritePrivateProfileStructW(LPCWSTR, LPCWSTR, LPVOID, UINT, LPCWSTR); + BOOL WriteProcessMemory(HANDLE, LPVOID, LPCVOID, SIZE_T, SIZE_T*); + BOOL WriteProfileSectionA(LPCSTR, LPCSTR); + BOOL WriteProfileSectionW(LPCWSTR, LPCWSTR); + BOOL WriteProfileStringA(LPCSTR, LPCSTR, LPCSTR); + BOOL WriteProfileStringW(LPCWSTR, LPCWSTR, LPCWSTR); + + /* Memory allocation functions. + * MSDN documents these erroneously as Win2000+; thus it is uncertain what + * version compatibility they really have. + */ + HGLOBAL GlobalAlloc(UINT, DWORD); + HGLOBAL GlobalDiscard(HGLOBAL); + HGLOBAL GlobalFree(HGLOBAL); + HGLOBAL GlobalHandle(PCVOID); + LPVOID GlobalLock(HGLOBAL); + VOID GlobalMemoryStatus(LPMEMORYSTATUS); + HGLOBAL GlobalReAlloc(HGLOBAL, DWORD, UINT); + DWORD GlobalSize(HGLOBAL); + BOOL GlobalUnlock(HGLOBAL); + PVOID HeapAlloc(HANDLE, DWORD, DWORD); + SIZE_T HeapCompact(HANDLE, DWORD); + HANDLE HeapCreate(DWORD, DWORD, DWORD); + BOOL HeapDestroy(HANDLE); + BOOL HeapFree(HANDLE, DWORD, PVOID); + BOOL HeapLock(HANDLE); + PVOID HeapReAlloc(HANDLE, DWORD, PVOID, DWORD); + DWORD HeapSize(HANDLE, DWORD, PCVOID); + BOOL HeapUnlock(HANDLE); + BOOL HeapValidate(HANDLE, DWORD, PCVOID); + BOOL HeapWalk(HANDLE, LPPROCESS_HEAP_ENTRY); + HLOCAL LocalAlloc(UINT, SIZE_T); + HLOCAL LocalDiscard(HLOCAL); + HLOCAL LocalFree(HLOCAL); + HLOCAL LocalHandle(LPCVOID); + PVOID LocalLock(HLOCAL); + HLOCAL LocalReAlloc(HLOCAL, SIZE_T, UINT); + UINT LocalSize(HLOCAL); + BOOL LocalUnlock(HLOCAL); + PVOID VirtualAlloc(PVOID, DWORD, DWORD, DWORD); + PVOID VirtualAllocEx(HANDLE, PVOID, DWORD, DWORD, DWORD); + BOOL VirtualFree(PVOID, DWORD, DWORD); + BOOL VirtualFreeEx(HANDLE, PVOID, DWORD, DWORD); + BOOL VirtualLock(PVOID, DWORD); + BOOL VirtualProtect(PVOID, DWORD, DWORD, PDWORD); + BOOL VirtualProtectEx(HANDLE, PVOID, DWORD, DWORD, PDWORD); + DWORD VirtualQuery(LPCVOID, PMEMORY_BASIC_INFORMATION, DWORD); + DWORD VirtualQueryEx(HANDLE, LPCVOID, PMEMORY_BASIC_INFORMATION, DWORD); + BOOL VirtualUnlock(PVOID, DWORD); + + static if (_WIN32_WINDOWS >= 0x600) { + BOOL CancelIoEx(HANDLE, LPOVERLAPPED); + } + + static if (_WIN32_WINDOWS >= 0x410) { + BOOL CancelIo(HANDLE); + BOOL CancelWaitableTimer(HANDLE); + PVOID ConvertThreadToFiber(PVOID); + LPVOID CreateFiber(SIZE_T, LPFIBER_START_ROUTINE, LPVOID); + HANDLE CreateWaitableTimerA(LPSECURITY_ATTRIBUTES, BOOL, LPCSTR); + HANDLE CreateWaitableTimerW(LPSECURITY_ATTRIBUTES, BOOL, LPCWSTR); + void DeleteFiber(PVOID); + BOOL GetFileAttributesExA(LPCSTR, GET_FILEEX_INFO_LEVELS, PVOID); + BOOL GetFileAttributesExW(LPCWSTR, GET_FILEEX_INFO_LEVELS, PVOID); + DWORD GetLongPathNameA(LPCSTR, LPSTR, DWORD); + DWORD GetLongPathNameW(LPCWSTR, LPWSTR, DWORD); + BOOL InitializeCriticalSectionAndSpinCount(LPCRITICAL_SECTION, DWORD); + BOOL IsDebuggerPresent(); + HANDLE OpenWaitableTimerA(DWORD, BOOL, LPCSTR); + HANDLE OpenWaitableTimerW(DWORD, BOOL, LPCWSTR); + DWORD QueryDosDeviceA(LPCSTR, LPSTR, DWORD); + DWORD QueryDosDeviceW(LPCWSTR, LPWSTR, DWORD); + BOOL SetWaitableTimer(HANDLE, LARGE_INTEGER*, LONG, PTIMERAPCROUTINE, PVOID, BOOL); + void SwitchToFiber(PVOID); + } + + static if (WINVER >= 0x500) { + HANDLE OpenThread(DWORD, BOOL, DWORD); + } + + static if (_WIN32_WINNT_ONLY) { + BOOL AccessCheck(PSECURITY_DESCRIPTOR, HANDLE, DWORD, PGENERIC_MAPPING, PPRIVILEGE_SET, PDWORD, PDWORD, PBOOL); + BOOL AccessCheckAndAuditAlarmA(LPCSTR, LPVOID, LPSTR, LPSTR, PSECURITY_DESCRIPTOR, DWORD, PGENERIC_MAPPING, BOOL, PDWORD, PBOOL, PBOOL); + BOOL AccessCheckAndAuditAlarmW(LPCWSTR, LPVOID, LPWSTR, LPWSTR, PSECURITY_DESCRIPTOR, DWORD, PGENERIC_MAPPING, BOOL, PDWORD, PBOOL, PBOOL); + BOOL AddAccessAllowedAce(PACL, DWORD, DWORD, PSID); + BOOL AddAccessDeniedAce(PACL, DWORD, DWORD, PSID); + BOOL AddAce(PACL, DWORD, DWORD, PVOID, DWORD); + BOOL AddAuditAccessAce(PACL, DWORD, DWORD, PSID, BOOL, BOOL); + BOOL AdjustTokenGroups(HANDLE, BOOL, PTOKEN_GROUPS, DWORD, PTOKEN_GROUPS, PDWORD); + BOOL AdjustTokenPrivileges(HANDLE, BOOL, PTOKEN_PRIVILEGES, DWORD, PTOKEN_PRIVILEGES, PDWORD); + BOOL AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY, BYTE, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, PSID*); + BOOL AllocateLocallyUniqueId(PLUID); + BOOL AreAllAccessesGranted(DWORD, DWORD); + BOOL AreAnyAccessesGranted(DWORD, DWORD); + BOOL BackupEventLogA(HANDLE, LPCSTR); + BOOL BackupEventLogW(HANDLE, LPCWSTR); + BOOL BackupRead(HANDLE, LPBYTE, DWORD, LPDWORD, BOOL, BOOL, LPVOID*); + BOOL BackupSeek(HANDLE, DWORD, DWORD, LPDWORD, LPDWORD, LPVOID*); + BOOL BackupWrite(HANDLE, LPBYTE, DWORD, LPDWORD, BOOL, BOOL, LPVOID*); + BOOL ClearEventLogA(HANDLE, LPCSTR); + BOOL ClearEventLogW(HANDLE, LPCWSTR); + BOOL CloseEventLog(HANDLE); + BOOL ConnectNamedPipe(HANDLE, LPOVERLAPPED); + BOOL CopySid(DWORD, PSID, PSID); + HANDLE CreateNamedPipeA(LPCSTR, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPSECURITY_ATTRIBUTES); + HANDLE CreateNamedPipeW(LPCWSTR, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPSECURITY_ATTRIBUTES); + BOOL CreatePrivateObjectSecurity(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR*, BOOL, HANDLE, PGENERIC_MAPPING); + BOOL CreateProcessAsUserA(HANDLE, LPCSTR, LPSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, PVOID, LPCSTR, LPSTARTUPINFOA, LPPROCESS_INFORMATION); + BOOL CreateProcessAsUserW(HANDLE, LPCWSTR, LPWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, BOOL, DWORD, PVOID, LPCWSTR, LPSTARTUPINFOW, LPPROCESS_INFORMATION); + HANDLE CreateRemoteThread(HANDLE, LPSECURITY_ATTRIBUTES, DWORD, LPTHREAD_START_ROUTINE, LPVOID, DWORD, LPDWORD); + DWORD CreateTapePartition(HANDLE, DWORD, DWORD, DWORD); + BOOL DefineDosDeviceA(DWORD, LPCSTR, LPCSTR); + BOOL DefineDosDeviceW(DWORD, LPCWSTR, LPCWSTR); + BOOL DeleteAce(PACL, DWORD); + BOOL DeregisterEventSource(HANDLE); + BOOL DestroyPrivateObjectSecurity(PSECURITY_DESCRIPTOR*); + BOOL DeviceIoControl(HANDLE, DWORD, PVOID, DWORD, PVOID, DWORD, PDWORD, POVERLAPPED); + BOOL DisconnectNamedPipe(HANDLE); + BOOL DuplicateToken(HANDLE, SECURITY_IMPERSONATION_LEVEL, PHANDLE); + BOOL DuplicateTokenEx(HANDLE, DWORD, LPSECURITY_ATTRIBUTES, SECURITY_IMPERSONATION_LEVEL, TOKEN_TYPE, PHANDLE); + BOOL EqualPrefixSid(PSID, PSID); + BOOL EqualSid(PSID, PSID); + DWORD EraseTape(HANDLE, DWORD, BOOL); + HANDLE FindFirstFileExA(LPCSTR, FINDEX_INFO_LEVELS, PVOID, FINDEX_SEARCH_OPS, PVOID, DWORD); + HANDLE FindFirstFileExW(LPCWSTR, FINDEX_INFO_LEVELS, PVOID, FINDEX_SEARCH_OPS, PVOID, DWORD); + BOOL FindFirstFreeAce(PACL, PVOID*); + PVOID FreeSid(PSID); + BOOL GetAce(PACL, DWORD, LPVOID*); + BOOL GetAclInformation(PACL, PVOID, DWORD, ACL_INFORMATION_CLASS); + BOOL GetBinaryTypeA(LPCSTR, PDWORD); + BOOL GetBinaryTypeW(LPCWSTR, PDWORD); + DWORD GetCompressedFileSizeA(LPCSTR, PDWORD); + DWORD GetCompressedFileSizeW(LPCWSTR, PDWORD); + BOOL GetCurrentHwProfileA(LPHW_PROFILE_INFOA); + BOOL GetCurrentHwProfileW(LPHW_PROFILE_INFOW); + BOOL GetFileSecurityA(LPCSTR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, PDWORD); + BOOL GetFileSecurityW(LPCWSTR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, PDWORD); + BOOL GetHandleInformation(HANDLE, PDWORD); + BOOL GetKernelObjectSecurity(HANDLE, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, PDWORD); + DWORD GetLengthSid(PSID); + BOOL GetNumberOfEventLogRecords(HANDLE, PDWORD); + BOOL GetOldestEventLogRecord(HANDLE, PDWORD); + BOOL GetPrivateObjectSecurity(PSECURITY_DESCRIPTOR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, PDWORD); + BOOL GetProcessPriorityBoost(HANDLE, PBOOL); + BOOL GetProcessShutdownParameters(PDWORD, PDWORD); + BOOL GetProcessTimes(HANDLE, LPFILETIME, LPFILETIME, LPFILETIME, LPFILETIME); + HWINSTA GetProcessWindowStation(); + BOOL GetProcessWorkingSetSize(HANDLE, PSIZE_T, PSIZE_T); + BOOL GetQueuedCompletionStatus(HANDLE, PDWORD, PULONG_PTR, LPOVERLAPPED*, DWORD); + BOOL GetSecurityDescriptorControl(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL, PDWORD); + BOOL GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR, LPBOOL, PACL*, LPBOOL); + BOOL GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR, PSID*, LPBOOL); + DWORD GetSecurityDescriptorLength(PSECURITY_DESCRIPTOR); + BOOL GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR, PSID*, LPBOOL); + BOOL GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR, LPBOOL, PACL*, LPBOOL); + PSID_IDENTIFIER_AUTHORITY GetSidIdentifierAuthority(PSID); + DWORD GetSidLengthRequired(UCHAR); + PDWORD GetSidSubAuthority(PSID, DWORD); + PUCHAR GetSidSubAuthorityCount(PSID); + DWORD GetTapeParameters(HANDLE, DWORD, PDWORD, PVOID); + DWORD GetTapePosition(HANDLE, DWORD, PDWORD, PDWORD, PDWORD); + DWORD GetTapeStatus(HANDLE); + BOOL GetThreadPriorityBoost(HANDLE, PBOOL); + BOOL GetThreadTimes(HANDLE, LPFILETIME, LPFILETIME, LPFILETIME, LPFILETIME); + BOOL GetTokenInformation(HANDLE, TOKEN_INFORMATION_CLASS, PVOID, DWORD, PDWORD); + BOOL ImpersonateLoggedOnUser(HANDLE); + BOOL ImpersonateNamedPipeClient(HANDLE); + BOOL ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL); + BOOL InitializeAcl(PACL, DWORD, DWORD); + DWORD SetCriticalSectionSpinCount(LPCRITICAL_SECTION, DWORD); + BOOL InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR, DWORD); + BOOL InitializeSid(PSID, PSID_IDENTIFIER_AUTHORITY, BYTE); + BOOL IsProcessorFeaturePresent(DWORD); + BOOL IsTextUnicode(PCVOID, int, LPINT); + BOOL IsValidAcl(PACL); + BOOL IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR); + BOOL IsValidSid(PSID); + BOOL LockFileEx(HANDLE, DWORD, DWORD, DWORD, DWORD, LPOVERLAPPED); + BOOL LogonUserA(LPSTR, LPSTR, LPSTR, DWORD, DWORD, PHANDLE); + BOOL LogonUserW(LPWSTR, LPWSTR, LPWSTR, DWORD, DWORD, PHANDLE); + BOOL LookupAccountNameA(LPCSTR, LPCSTR, PSID, PDWORD, LPSTR, PDWORD, PSID_NAME_USE); + BOOL LookupAccountNameW(LPCWSTR, LPCWSTR, PSID, PDWORD, LPWSTR, PDWORD, PSID_NAME_USE); + BOOL LookupAccountSidA(LPCSTR, PSID, LPSTR, PDWORD, LPSTR, PDWORD, PSID_NAME_USE); + BOOL LookupAccountSidW(LPCWSTR, PSID, LPWSTR, PDWORD, LPWSTR, PDWORD, PSID_NAME_USE); + BOOL LookupPrivilegeDisplayNameA(LPCSTR, LPCSTR, LPSTR, PDWORD, PDWORD); + BOOL LookupPrivilegeDisplayNameW(LPCWSTR, LPCWSTR, LPWSTR, PDWORD, PDWORD); + BOOL LookupPrivilegeNameA(LPCSTR, PLUID, LPSTR, PDWORD); + BOOL LookupPrivilegeNameW(LPCWSTR, PLUID, LPWSTR, PDWORD); + BOOL LookupPrivilegeValueA(LPCSTR, LPCSTR, PLUID); + BOOL LookupPrivilegeValueW(LPCWSTR, LPCWSTR, PLUID); + BOOL MakeAbsoluteSD(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR, PDWORD, PACL, PDWORD, PACL, PDWORD, PSID, PDWORD, PSID, PDWORD); + BOOL MakeSelfRelativeSD(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR, PDWORD); + VOID MapGenericMask(PDWORD, PGENERIC_MAPPING); + BOOL MoveFileExA(LPCSTR, LPCSTR, DWORD); + BOOL MoveFileExW(LPCWSTR, LPCWSTR, DWORD); + BOOL NotifyChangeEventLog(HANDLE, HANDLE); + BOOL ObjectCloseAuditAlarmA(LPCSTR, PVOID, BOOL); + BOOL ObjectCloseAuditAlarmW(LPCWSTR, PVOID, BOOL); + BOOL ObjectDeleteAuditAlarmA(LPCSTR, PVOID, BOOL); + BOOL ObjectDeleteAuditAlarmW(LPCWSTR, PVOID, BOOL); + BOOL ObjectOpenAuditAlarmA(LPCSTR, PVOID, LPSTR, LPSTR, PSECURITY_DESCRIPTOR, HANDLE, DWORD, DWORD, PPRIVILEGE_SET, BOOL, BOOL, PBOOL); + BOOL ObjectOpenAuditAlarmW(LPCWSTR, PVOID, LPWSTR, LPWSTR, PSECURITY_DESCRIPTOR, HANDLE, DWORD, DWORD, PPRIVILEGE_SET, BOOL, BOOL, PBOOL); + BOOL ObjectPrivilegeAuditAlarmA(LPCSTR, PVOID, HANDLE, DWORD, PPRIVILEGE_SET, BOOL); + BOOL ObjectPrivilegeAuditAlarmW(LPCWSTR, PVOID, HANDLE, DWORD, PPRIVILEGE_SET, BOOL); + HANDLE OpenBackupEventLogA(LPCSTR, LPCSTR); + HANDLE OpenBackupEventLogW(LPCWSTR, LPCWSTR); + HANDLE OpenEventLogA(LPCSTR, LPCSTR); + HANDLE OpenEventLogW(LPCWSTR, LPCWSTR); + BOOL OpenProcessToken(HANDLE, DWORD, PHANDLE); + BOOL OpenThreadToken(HANDLE, DWORD, BOOL, PHANDLE); + BOOL PostQueuedCompletionStatus(HANDLE, DWORD, ULONG_PTR, LPOVERLAPPED); + DWORD PrepareTape(HANDLE, DWORD, BOOL); + BOOL PrivilegeCheck(HANDLE, PPRIVILEGE_SET, PBOOL); + BOOL PrivilegedServiceAuditAlarmA(LPCSTR, LPCSTR, HANDLE, PPRIVILEGE_SET, BOOL); + BOOL PrivilegedServiceAuditAlarmW(LPCWSTR, LPCWSTR, HANDLE, PPRIVILEGE_SET, BOOL); + BOOL ReadDirectoryChangesW(HANDLE, PVOID, DWORD, BOOL, DWORD, PDWORD, LPOVERLAPPED, LPOVERLAPPED_COMPLETION_ROUTINE); + BOOL ReadEventLogA(HANDLE, DWORD, DWORD, PVOID, DWORD, DWORD*, DWORD*); + BOOL ReadEventLogW(HANDLE, DWORD, DWORD, PVOID, DWORD, DWORD*, DWORD*); + BOOL ReadFileScatter(HANDLE, FILE_SEGMENT_ELEMENT*, DWORD, LPDWORD, LPOVERLAPPED); + HANDLE RegisterEventSourceA (LPCSTR, LPCSTR); + HANDLE RegisterEventSourceW(LPCWSTR, LPCWSTR); + BOOL ReportEventA(HANDLE, WORD, WORD, DWORD, PSID, WORD, DWORD, LPCSTR*, PVOID); + BOOL ReportEventW(HANDLE, WORD, WORD, DWORD, PSID, WORD, DWORD, LPCWSTR*, PVOID); + BOOL RevertToSelf(); + BOOL SetAclInformation(PACL, PVOID, DWORD, ACL_INFORMATION_CLASS); + BOOL SetFileSecurityA(LPCSTR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR); + BOOL SetFileSecurityW(LPCWSTR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR); + BOOL SetHandleInformation(HANDLE, DWORD, DWORD); + BOOL SetKernelObjectSecurity(HANDLE, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR); + BOOL SetPrivateObjectSecurity(SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR* , PGENERIC_MAPPING, HANDLE); + BOOL SetProcessAffinityMask(HANDLE, DWORD); + BOOL SetProcessPriorityBoost(HANDLE, BOOL); + BOOL SetProcessShutdownParameters(DWORD, DWORD); + BOOL SetProcessWorkingSetSize(HANDLE, SIZE_T, SIZE_T); + BOOL SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR, BOOL, PACL, BOOL); + BOOL SetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR, PSID, BOOL); + BOOL SetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR, PSID, BOOL); + BOOL SetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR, BOOL, PACL, BOOL); + BOOL SetSystemTimeAdjustment(DWORD, BOOL); + DWORD SetTapeParameters(HANDLE, DWORD, PVOID); + DWORD SetTapePosition(HANDLE, DWORD, DWORD, DWORD, DWORD, BOOL); + BOOL SetThreadPriorityBoost(HANDLE, BOOL); + BOOL SetThreadToken(PHANDLE, HANDLE); + BOOL SetTokenInformation(HANDLE, TOKEN_INFORMATION_CLASS, PVOID, DWORD); + DWORD SignalObjectAndWait(HANDLE, HANDLE, DWORD, BOOL); + BOOL SwitchToThread(); + BOOL SystemTimeToTzSpecificLocalTime(LPTIME_ZONE_INFORMATION, LPSYSTEMTIME, LPSYSTEMTIME); + BOOL TryEnterCriticalSection(LPCRITICAL_SECTION); + BOOL UnlockFileEx(HANDLE, DWORD, DWORD, DWORD, LPOVERLAPPED); + BOOL UpdateResourceA(HANDLE, LPCSTR, LPCSTR, WORD, PVOID, DWORD); + BOOL UpdateResourceW(HANDLE, LPCWSTR, LPCWSTR, WORD, PVOID, DWORD); + BOOL WriteFileGather(HANDLE, FILE_SEGMENT_ELEMENT*, DWORD, LPDWORD, LPOVERLAPPED); + DWORD WriteTapemark(HANDLE, DWORD, DWORD, BOOL); + + static if (_WIN32_WINNT >= 0x500) { + BOOL AddAccessAllowedAceEx(PACL, DWORD, DWORD, DWORD, PSID); + BOOL AddAccessDeniedAceEx(PACL, DWORD, DWORD, DWORD, PSID); + PVOID AddVectoredExceptionHandler(ULONG, PVECTORED_EXCEPTION_HANDLER); + BOOL AllocateUserPhysicalPages(HANDLE, PULONG_PTR, PULONG_PTR); + BOOL AssignProcessToJobObject(HANDLE, HANDLE); + BOOL ChangeTimerQueueTimer(HANDLE,HANDLE,ULONG,ULONG); + LPVOID CreateFiberEx(SIZE_T, SIZE_T, DWORD, LPFIBER_START_ROUTINE, LPVOID); + HANDLE CreateFileMappingA(HANDLE, LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCSTR); + HANDLE CreateFileMappingW(HANDLE, LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCWSTR); + BOOL CreateHardLinkA(LPCSTR, LPCSTR, LPSECURITY_ATTRIBUTES); + BOOL CreateHardLinkW(LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES); + HANDLE CreateJobObjectA(LPSECURITY_ATTRIBUTES, LPCSTR); + HANDLE CreateJobObjectW(LPSECURITY_ATTRIBUTES, LPCWSTR); + BOOL CreateProcessWithLogonW(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPCWSTR, LPWSTR, DWORD, LPVOID, LPCWSTR, LPSTARTUPINFOW, LPPROCESS_INFORMATION); + HANDLE CreateTimerQueue(); + BOOL CreateTimerQueueTimer(PHANDLE, HANDLE, WAITORTIMERCALLBACK, PVOID, DWORD, DWORD, ULONG); + BOOL DeleteTimerQueue(HANDLE); + BOOL DeleteTimerQueueEx(HANDLE, HANDLE); + BOOL DeleteTimerQueueTimer(HANDLE, HANDLE, HANDLE); + BOOL DeleteVolumeMountPointA(LPCSTR); + BOOL DeleteVolumeMountPointW(LPCWSTR); + BOOL DnsHostnameToComputerNameA(LPCSTR, LPSTR, LPDWORD); + BOOL DnsHostnameToComputerNameW(LPCWSTR, LPWSTR, LPDWORD); + BOOL EncryptFileA(LPCSTR); + BOOL EncryptFileW(LPCWSTR); + BOOL FileEncryptionStatusA(LPCSTR, LPDWORD); + BOOL FileEncryptionStatusW(LPCWSTR, LPDWORD); + HANDLE FindFirstVolumeA(LPCSTR, DWORD); + HANDLE FindFirstVolumeMountPointA(LPSTR, LPSTR, DWORD); + HANDLE FindFirstVolumeMountPointW(LPWSTR, LPWSTR, DWORD); + HANDLE FindFirstVolumeW(LPCWSTR, DWORD); + BOOL FindNextVolumeA(HANDLE, LPCSTR, DWORD); + BOOL FindNextVolumeW(HANDLE, LPWSTR, DWORD); + BOOL FindNextVolumeMountPointA(HANDLE, LPSTR, DWORD); + BOOL FindNextVolumeMountPointW(HANDLE, LPWSTR, DWORD); + BOOL FindVolumeClose(HANDLE); + BOOL FindVolumeMountPointClose(HANDLE); + BOOL FlushViewOfFile(PCVOID, DWORD); + BOOL FreeUserPhysicalPages(HANDLE, PULONG_PTR, PULONG_PTR); + BOOL GetComputerNameExA(COMPUTER_NAME_FORMAT, LPSTR, LPDWORD); + BOOL GetComputerNameExW(COMPUTER_NAME_FORMAT, LPWSTR, LPDWORD); + BOOL GetFileSizeEx(HANDLE, PLARGE_INTEGER); + BOOL GetModuleHandleExA(DWORD, LPCSTR, HMODULE*); + BOOL GetModuleHandleExW(DWORD, LPCWSTR, HMODULE*); + HANDLE GetProcessHeap(); + DWORD GetProcessHeaps(DWORD, PHANDLE); + BOOL GetProcessIoCounters(HANDLE, PIO_COUNTERS); + BOOL GetSystemPowerStatus(LPSYSTEM_POWER_STATUS); + UINT GetSystemWindowsDirectoryA(LPSTR, UINT); + UINT GetSystemWindowsDirectoryW(LPWSTR, UINT); + BOOL GetVolumeNameForVolumeMountPointA(LPCSTR, LPSTR, DWORD); + BOOL GetVolumeNameForVolumeMountPointW(LPCWSTR, LPWSTR, DWORD); + BOOL GetVolumePathNameA(LPCSTR, LPSTR, DWORD); + BOOL GetVolumePathNameW(LPCWSTR, LPWSTR, DWORD); + BOOL GlobalMemoryStatusEx(LPMEMORYSTATUSEX); + BOOL IsBadCodePtr(FARPROC); + BOOL IsSystemResumeAutomatic(); + BOOL MapUserPhysicalPages(PVOID, ULONG_PTR, PULONG_PTR); + BOOL MapUserPhysicalPagesScatter(PVOID*, ULONG_PTR, PULONG_PTR); + PVOID MapViewOfFile(HANDLE, DWORD, DWORD, DWORD, DWORD); + PVOID MapViewOfFileEx(HANDLE, DWORD, DWORD, DWORD, DWORD, PVOID); + HANDLE OpenFileMappingA(DWORD, BOOL, LPCSTR); + HANDLE OpenFileMappingW(DWORD, BOOL, LPCWSTR); + BOOL ProcessIdToSessionId(DWORD, DWORD*); + BOOL QueryInformationJobObject(HANDLE, JOBOBJECTINFOCLASS, LPVOID, DWORD, LPDWORD); + ULONG RemoveVectoredExceptionHandler(PVOID); + BOOL ReplaceFileA(LPCSTR, LPCSTR, LPCSTR, DWORD, LPVOID, LPVOID); + BOOL ReplaceFileW(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPVOID, LPVOID); + BOOL SetComputerNameExA(COMPUTER_NAME_FORMAT, LPCSTR); + BOOL SetComputerNameExW(COMPUTER_NAME_FORMAT, LPCWSTR); + BOOL SetFilePointerEx(HANDLE, LARGE_INTEGER, PLARGE_INTEGER, DWORD); + BOOL SetInformationJobObject(HANDLE, JOBOBJECTINFOCLASS, LPVOID, DWORD); + BOOL SetSecurityDescriptorControl(PSECURITY_DESCRIPTOR, SECURITY_DESCRIPTOR_CONTROL, SECURITY_DESCRIPTOR_CONTROL); + BOOL SetSystemPowerState(BOOL, BOOL); + EXECUTION_STATE SetThreadExecutionState(EXECUTION_STATE); + DWORD SetThreadIdealProcessor(HANDLE, DWORD); + BOOL SetVolumeMountPointA(LPCSTR, LPCSTR); + BOOL SetVolumeMountPointW(LPCWSTR, LPCWSTR); + BOOL TerminateJobObject(HANDLE, UINT); + BOOL UnmapViewOfFile(PVOID); + BOOL UnregisterWait(HANDLE); + BOOL UnregisterWaitEx(HANDLE, HANDLE); + BOOL VerifyVersionInfoA(LPOSVERSIONINFOEXA, DWORD, DWORDLONG); + BOOL VerifyVersionInfoW(LPOSVERSIONINFOEXW, DWORD, DWORDLONG); + } + + static if (_WIN32_WINNT >= 0x501) { + BOOL ActivateActCtx(HANDLE, ULONG_PTR*); + void AddRefActCtx(HANDLE); + BOOL CheckNameLegalDOS8Dot3A(LPCSTR, LPSTR, DWORD, PBOOL, PBOOL); + BOOL CheckNameLegalDOS8Dot3W(LPCWSTR, LPSTR, DWORD, PBOOL, PBOOL); + BOOL CheckRemoteDebuggerPresent(HANDLE, PBOOL); + BOOL ConvertFiberToThread(); + HANDLE CreateActCtxA(PCACTCTXA); + HANDLE CreateActCtxW(PCACTCTXW); + HANDLE CreateMemoryResourceNotification(MEMORY_RESOURCE_NOTIFICATION_TYPE); + BOOL DeactivateActCtx(DWORD, ULONG_PTR); + BOOL DebugActiveProcessStop(DWORD); + BOOL DebugBreakProcess(HANDLE); + BOOL DebugSetProcessKillOnExit(BOOL); + BOOL FindActCtxSectionGuid(DWORD, GUID*, ULONG, GUID*, + PACTCTX_SECTION_KEYED_DATA); + BOOL FindActCtxSectionStringA(DWORD, GUID*, ULONG, LPCSTR, + PACTCTX_SECTION_KEYED_DATA); + BOOL FindActCtxSectionStringW(DWORD, GUID*, ULONG, LPCWSTR, + PACTCTX_SECTION_KEYED_DATA); + BOOL GetCurrentActCtx(HANDLE*); + VOID GetNativeSystemInfo(LPSYSTEM_INFO); + BOOL GetProcessHandleCount(HANDLE, PDWORD); + BOOL GetSystemRegistryQuota(PDWORD, PDWORD); + BOOL GetSystemTimes(LPFILETIME, LPFILETIME, LPFILETIME); + UINT GetSystemWow64DirectoryA(LPSTR, UINT); + UINT GetSystemWow64DirectoryW(LPWSTR, UINT); + BOOL GetThreadIOPendingFlag(HANDLE, PBOOL); + BOOL GetVolumePathNamesForVolumeNameA(LPCSTR, LPSTR, DWORD, PDWORD); + BOOL GetVolumePathNamesForVolumeNameW(LPCWSTR, LPWSTR, DWORD, PDWORD); + UINT GetWriteWatch(DWORD, PVOID, SIZE_T, PVOID*, PULONG_PTR, PULONG); + BOOL HeapQueryInformation(HANDLE, HEAP_INFORMATION_CLASS, PVOID, SIZE_T, PSIZE_T); + BOOL HeapSetInformation(HANDLE, HEAP_INFORMATION_CLASS, PVOID, SIZE_T); + BOOL IsProcessInJob(HANDLE, HANDLE, PBOOL); + BOOL IsWow64Process(HANDLE, PBOOL); + BOOL QueryActCtxW(DWORD, HANDLE, PVOID, ULONG, PVOID, SIZE_T, SIZE_T*); + BOOL QueryMemoryResourceNotification(HANDLE, PBOOL); + void ReleaseActCtx(HANDLE); + UINT ResetWriteWatch(LPVOID, SIZE_T); + BOOL SetFileShortNameA(HANDLE, LPCSTR); + BOOL SetFileShortNameW(HANDLE, LPCWSTR); + BOOL SetFileValidData(HANDLE, LONGLONG); + BOOL ZombifyActCtx(HANDLE); + } + + static if (_WIN32_WINNT >= 0x502) { + DWORD GetFirmwareEnvironmentVariableA(LPCSTR, LPCSTR, PVOID, DWORD); + DWORD GetFirmwareEnvironmentVariableW(LPCWSTR, LPCWSTR, PVOID, DWORD); + DWORD GetDllDirectoryA(DWORD, LPSTR); + DWORD GetDllDirectoryW(DWORD, LPWSTR); + DWORD GetProcessId(HANDLE); + HANDLE ReOpenFile(HANDLE, DWORD, DWORD, DWORD); + BOOL SetDllDirectoryA(LPCSTR); + BOOL SetDllDirectoryW(LPCWSTR); + BOOL SetFirmwareEnvironmentVariableA(LPCSTR, LPCSTR, PVOID, DWORD); + BOOL SetFirmwareEnvironmentVariableW(LPCWSTR, LPCWSTR, PVOID, DWORD); + } + } + + // ??? + static if (_WIN32_WINNT >= 0x510) { + VOID RestoreLastError(DWORD); + } +} + + +version (Unicode) { + alias STARTUPINFOW STARTUPINFO; + alias WIN32_FIND_DATAW WIN32_FIND_DATA; + alias ENUMRESLANGPROCW ENUMRESLANGPROC; + alias ENUMRESNAMEPROCW ENUMRESNAMEPROC; + alias ENUMRESTYPEPROCW ENUMRESTYPEPROC; + alias AddAtomW AddAtom; + alias BeginUpdateResourceW BeginUpdateResource; + alias BuildCommDCBW BuildCommDCB; + alias BuildCommDCBAndTimeoutsW BuildCommDCBAndTimeouts; + alias CallNamedPipeW CallNamedPipe; + alias CommConfigDialogW CommConfigDialog; + alias CopyFileW CopyFile; + alias CopyFileExW CopyFileEx; + alias CreateDirectoryW CreateDirectory; + alias CreateDirectoryExW CreateDirectoryEx; + alias CreateEventW CreateEvent; + alias CreateFileW CreateFile; + alias CreateMailslotW CreateMailslot; + alias CreateMutexW CreateMutex; + alias CreateProcessW CreateProcess; + alias CreateSemaphoreW CreateSemaphore; + alias DeleteFileW DeleteFile; + alias EndUpdateResourceW EndUpdateResource; + alias EnumResourceLanguagesW EnumResourceLanguages; + alias EnumResourceNamesW EnumResourceNames; + alias EnumResourceTypesW EnumResourceTypes; + alias ExpandEnvironmentStringsW ExpandEnvironmentStrings; + alias FatalAppExitW FatalAppExit; + alias FindAtomW FindAtom; + alias FindFirstChangeNotificationW FindFirstChangeNotification; + alias FindFirstFileW FindFirstFile; + alias FindNextFileW FindNextFile; + alias FindResourceW FindResource; + alias FindResourceExW FindResourceEx; + alias FormatMessageW FormatMessage; + alias FreeEnvironmentStringsW FreeEnvironmentStrings; + alias GetAtomNameW GetAtomName; + alias GetCommandLineW GetCommandLine; + alias GetComputerNameW GetComputerName; + alias GetCurrentDirectoryW GetCurrentDirectory; + alias GetDefaultCommConfigW GetDefaultCommConfig; + alias GetDiskFreeSpaceW GetDiskFreeSpace; + alias GetDiskFreeSpaceExW GetDiskFreeSpaceEx; + alias GetDriveTypeW GetDriveType; + alias GetEnvironmentStringsW GetEnvironmentStrings; + alias GetEnvironmentVariableW GetEnvironmentVariable; + alias GetFileAttributesW GetFileAttributes; + alias GetFullPathNameW GetFullPathName; + alias GetLogicalDriveStringsW GetLogicalDriveStrings; + alias GetModuleFileNameW GetModuleFileName; + alias GetModuleHandleW GetModuleHandle; + alias GetNamedPipeHandleStateW GetNamedPipeHandleState; + alias GetPrivateProfileIntW GetPrivateProfileInt; + alias GetPrivateProfileSectionW GetPrivateProfileSection; + alias GetPrivateProfileSectionNamesW GetPrivateProfileSectionNames; + alias GetPrivateProfileStringW GetPrivateProfileString; + alias GetPrivateProfileStructW GetPrivateProfileStruct; + alias GetProfileIntW GetProfileInt; + alias GetProfileSectionW GetProfileSection; + alias GetProfileStringW GetProfileString; + alias GetShortPathNameW GetShortPathName; + alias GetStartupInfoW GetStartupInfo; + alias GetSystemDirectoryW GetSystemDirectory; + alias GetTempFileNameW GetTempFileName; + alias GetTempPathW GetTempPath; + alias GetUserNameW GetUserName; + alias GetVersionExW GetVersionEx; + alias GetVolumeInformationW GetVolumeInformation; + alias GetWindowsDirectoryW GetWindowsDirectory; + alias GlobalAddAtomW GlobalAddAtom; + alias GlobalFindAtomW GlobalFindAtom; + alias GlobalGetAtomNameW GlobalGetAtomName; + alias IsBadStringPtrW IsBadStringPtr; + alias LoadLibraryW LoadLibrary; + alias LoadLibraryExW LoadLibraryEx; + alias lstrcatW lstrcat; + alias lstrcmpW lstrcmp; + alias lstrcmpiW lstrcmpi; + alias lstrcpyW lstrcpy; + alias lstrcpynW lstrcpyn; + alias lstrlenW lstrlen; + alias MoveFileW MoveFile; + alias OpenEventW OpenEvent; + alias OpenMutexW OpenMutex; + alias OpenSemaphoreW OpenSemaphore; + alias OutputDebugStringW OutputDebugString; + alias RemoveDirectoryW RemoveDirectory; + alias SearchPathW SearchPath; + alias SetComputerNameW SetComputerName; + alias SetCurrentDirectoryW SetCurrentDirectory; + alias SetDefaultCommConfigW SetDefaultCommConfig; + alias SetEnvironmentVariableW SetEnvironmentVariable; + alias SetFileAttributesW SetFileAttributes; + alias SetVolumeLabelW SetVolumeLabel; + alias WaitNamedPipeW WaitNamedPipe; + alias WritePrivateProfileSectionW WritePrivateProfileSection; + alias WritePrivateProfileStringW WritePrivateProfileString; + alias WritePrivateProfileStructW WritePrivateProfileStruct; + alias WriteProfileSectionW WriteProfileSection; + alias WriteProfileStringW WriteProfileString; + + static if (_WIN32_WINDOWS >= 0x410) { + alias CreateWaitableTimerW CreateWaitableTimer; + alias GetFileAttributesExW GetFileAttributesEx; + alias GetLongPathNameW GetLongPathName; + alias QueryDosDeviceW QueryDosDevice; + } + + static if (_WIN32_WINNT_ONLY) { + alias HW_PROFILE_INFOW HW_PROFILE_INFO; + alias AccessCheckAndAuditAlarmW AccessCheckAndAuditAlarm; + alias BackupEventLogW BackupEventLog; + alias ClearEventLogW ClearEventLog; + alias CreateNamedPipeW CreateNamedPipe; + alias CreateProcessAsUserW CreateProcessAsUser; + alias DefineDosDeviceW DefineDosDevice; + alias FindFirstFileExW FindFirstFileEx; + alias GetBinaryTypeW GetBinaryType; + alias GetCompressedFileSizeW GetCompressedFileSize; + alias GetFileSecurityW GetFileSecurity; + alias LogonUserW LogonUser; + alias LookupAccountNameW LookupAccountName; + alias LookupAccountSidW LookupAccountSid; + alias LookupPrivilegeDisplayNameW LookupPrivilegeDisplayName; + alias LookupPrivilegeNameW LookupPrivilegeName; + alias LookupPrivilegeValueW LookupPrivilegeValue; + alias MoveFileExW MoveFileEx; + alias ObjectCloseAuditAlarmW ObjectCloseAuditAlarm; + alias ObjectDeleteAuditAlarmW ObjectDeleteAuditAlarm; + alias ObjectOpenAuditAlarmW ObjectOpenAuditAlarm; + alias ObjectPrivilegeAuditAlarmW ObjectPrivilegeAuditAlarm; + alias OpenBackupEventLogW OpenBackupEventLog; + alias OpenEventLogW OpenEventLog; + alias PrivilegedServiceAuditAlarmW PrivilegedServiceAuditAlarm; + alias ReadEventLogW ReadEventLog; + alias RegisterEventSourceW RegisterEventSource; + alias ReportEventW ReportEvent; + alias SetFileSecurityW SetFileSecurity; + alias UpdateResourceW UpdateResource; + + static if (_WIN32_WINNT >= 0x500) { + alias CreateFileMappingW CreateFileMapping; + alias CreateHardLinkW CreateHardLink; + alias CreateJobObjectW CreateJobObject; + alias DeleteVolumeMountPointW DeleteVolumeMountPoint; + alias DnsHostnameToComputerNameW DnsHostnameToComputerName; + alias EncryptFileW EncryptFile; + alias FileEncryptionStatusW FileEncryptionStatus; + alias FindFirstVolumeW FindFirstVolume; + alias FindFirstVolumeMountPointW FindFirstVolumeMountPoint; + alias FindNextVolumeW FindNextVolume; + alias FindNextVolumeMountPointW FindNextVolumeMountPoint; + alias GetModuleHandleExW GetModuleHandleEx; + alias GetSystemWindowsDirectoryW GetSystemWindowsDirectory; + alias GetVolumeNameForVolumeMountPointW GetVolumeNameForVolumeMountPoint; + alias GetVolumePathNameW GetVolumePathName; + alias OpenFileMappingW OpenFileMapping; + alias ReplaceFileW ReplaceFile; + alias SetVolumeMountPointW SetVolumeMountPoint; + alias VerifyVersionInfoW VerifyVersionInfo; + } + + static if (_WIN32_WINNT >= 0x501) { + alias ACTCTXW ACTCTX; + alias CheckNameLegalDOS8Dot3W CheckNameLegalDOS8Dot3; + alias CreateActCtxW CreateActCtx; + alias FindActCtxSectionStringW FindActCtxSectionString; + alias GetSystemWow64DirectoryW GetSystemWow64Directory; + alias GetVolumePathNamesForVolumeNameW GetVolumePathNamesForVolumeName; + alias SetFileShortNameW SetFileShortName; + } + + static if (_WIN32_WINNT >= 0x502) { + alias SetFirmwareEnvironmentVariableW SetFirmwareEnvironmentVariable; + alias SetDllDirectoryW SetDllDirectory; + alias GetDllDirectoryW GetDllDirectory; + } + } + +} else { + alias STARTUPINFOA STARTUPINFO; + alias WIN32_FIND_DATAA WIN32_FIND_DATA; + alias ENUMRESLANGPROCW ENUMRESLANGPROC; + alias ENUMRESNAMEPROCW ENUMRESNAMEPROC; + alias ENUMRESTYPEPROCW ENUMRESTYPEPROC; + alias AddAtomA AddAtom; + alias BeginUpdateResourceA BeginUpdateResource; + alias BuildCommDCBA BuildCommDCB; + alias BuildCommDCBAndTimeoutsA BuildCommDCBAndTimeouts; + alias CallNamedPipeA CallNamedPipe; + alias CommConfigDialogA CommConfigDialog; + alias CopyFileA CopyFile; + alias CopyFileExA CopyFileEx; + alias CreateDirectoryA CreateDirectory; + alias CreateDirectoryExA CreateDirectoryEx; + alias CreateEventA CreateEvent; + alias CreateFileA CreateFile; + alias CreateMailslotA CreateMailslot; + alias CreateMutexA CreateMutex; + alias CreateProcessA CreateProcess; + alias CreateSemaphoreA CreateSemaphore; + alias DeleteFileA DeleteFile; + alias EndUpdateResourceA EndUpdateResource; + alias EnumResourceLanguagesA EnumResourceLanguages; + alias EnumResourceNamesA EnumResourceNames; + alias EnumResourceTypesA EnumResourceTypes; + alias ExpandEnvironmentStringsA ExpandEnvironmentStrings; + alias FatalAppExitA FatalAppExit; + alias FindAtomA FindAtom; + alias FindFirstChangeNotificationA FindFirstChangeNotification; + alias FindFirstFileA FindFirstFile; + alias FindNextFileA FindNextFile; + alias FindResourceA FindResource; + alias FindResourceExA FindResourceEx; + alias FormatMessageA FormatMessage; + alias FreeEnvironmentStringsA FreeEnvironmentStrings; + alias GetAtomNameA GetAtomName; + alias GetCommandLineA GetCommandLine; + alias GetComputerNameA GetComputerName; + alias GetCurrentDirectoryA GetCurrentDirectory; + alias GetDefaultCommConfigA GetDefaultCommConfig; + alias GetDiskFreeSpaceA GetDiskFreeSpace; + alias GetDiskFreeSpaceExA GetDiskFreeSpaceEx; + alias GetDriveTypeA GetDriveType; + alias GetEnvironmentVariableA GetEnvironmentVariable; + alias GetFileAttributesA GetFileAttributes; + alias GetFullPathNameA GetFullPathName; + alias GetLogicalDriveStringsA GetLogicalDriveStrings; + alias GetNamedPipeHandleStateA GetNamedPipeHandleState; + alias GetModuleHandleA GetModuleHandle; + alias GetModuleFileNameA GetModuleFileName; + alias GetPrivateProfileIntA GetPrivateProfileInt; + alias GetPrivateProfileSectionA GetPrivateProfileSection; + alias GetPrivateProfileSectionNamesA GetPrivateProfileSectionNames; + alias GetPrivateProfileStringA GetPrivateProfileString; + alias GetPrivateProfileStructA GetPrivateProfileStruct; + alias GetProfileIntA GetProfileInt; + alias GetProfileSectionA GetProfileSection; + alias GetProfileStringA GetProfileString; + alias GetShortPathNameA GetShortPathName; + alias GetStartupInfoA GetStartupInfo; + alias GetSystemDirectoryA GetSystemDirectory; + alias GetTempFileNameA GetTempFileName; + alias GetTempPathA GetTempPath; + alias GetUserNameA GetUserName; + alias GetVersionExA GetVersionEx; + alias GetVolumeInformationA GetVolumeInformation; + alias GetWindowsDirectoryA GetWindowsDirectory; + alias GlobalAddAtomA GlobalAddAtom; + alias GlobalFindAtomA GlobalFindAtom; + alias GlobalGetAtomNameA GlobalGetAtomName; + alias IsBadStringPtrA IsBadStringPtr; + alias LoadLibraryA LoadLibrary; + alias LoadLibraryExA LoadLibraryEx; + alias lstrcatA lstrcat; + alias lstrcmpA lstrcmp; + alias lstrcmpiA lstrcmpi; + alias lstrcpyA lstrcpy; + alias lstrcpynA lstrcpyn; + alias lstrlenA lstrlen; + alias MoveFileA MoveFile; + alias OpenEventA OpenEvent; + alias OpenMutexA OpenMutex; + alias OpenSemaphoreA OpenSemaphore; + alias OutputDebugStringA OutputDebugString; + alias RemoveDirectoryA RemoveDirectory; + alias SearchPathA SearchPath; + alias SetComputerNameA SetComputerName; + alias SetCurrentDirectoryA SetCurrentDirectory; + alias SetDefaultCommConfigA SetDefaultCommConfig; + alias SetEnvironmentVariableA SetEnvironmentVariable; + alias SetFileAttributesA SetFileAttributes; + alias SetVolumeLabelA SetVolumeLabel; + alias WaitNamedPipeA WaitNamedPipe; + alias WritePrivateProfileSectionA WritePrivateProfileSection; + alias WritePrivateProfileStringA WritePrivateProfileString; + alias WritePrivateProfileStructA WritePrivateProfileStruct; + alias WriteProfileSectionA WriteProfileSection; + alias WriteProfileStringA WriteProfileString; + + static if (_WIN32_WINDOWS >= 0x410) { + alias CreateWaitableTimerA CreateWaitableTimer; + alias GetFileAttributesExA GetFileAttributesEx; + alias GetLongPathNameA GetLongPathName; + alias QueryDosDeviceA QueryDosDevice; + } + + static if (_WIN32_WINNT_ONLY) { + alias HW_PROFILE_INFOA HW_PROFILE_INFO; + alias AccessCheckAndAuditAlarmA AccessCheckAndAuditAlarm; + alias BackupEventLogA BackupEventLog; + alias ClearEventLogA ClearEventLog; + alias CreateNamedPipeA CreateNamedPipe; + alias CreateProcessAsUserA CreateProcessAsUser; + alias DefineDosDeviceA DefineDosDevice; + alias FindFirstFileExA FindFirstFileEx; + alias GetBinaryTypeA GetBinaryType; + alias GetCompressedFileSizeA GetCompressedFileSize; + alias GetFileSecurityA GetFileSecurity; + alias LogonUserA LogonUser; + alias LookupAccountNameA LookupAccountName; + alias LookupAccountSidA LookupAccountSid; + alias LookupPrivilegeDisplayNameA LookupPrivilegeDisplayName; + alias LookupPrivilegeNameA LookupPrivilegeName; + alias LookupPrivilegeValueA LookupPrivilegeValue; + alias MoveFileExA MoveFileEx; + alias ObjectCloseAuditAlarmA ObjectCloseAuditAlarm; + alias ObjectDeleteAuditAlarmA ObjectDeleteAuditAlarm; + alias ObjectOpenAuditAlarmA ObjectOpenAuditAlarm; + alias ObjectPrivilegeAuditAlarmA ObjectPrivilegeAuditAlarm; + alias OpenBackupEventLogA OpenBackupEventLog; + alias OpenEventLogA OpenEventLog; + alias PrivilegedServiceAuditAlarmA PrivilegedServiceAuditAlarm; + alias ReadEventLogA ReadEventLog; + alias RegisterEventSourceA RegisterEventSource; + alias ReportEventA ReportEvent; + alias SetFileSecurityA SetFileSecurity; + alias UpdateResourceA UpdateResource; + + static if (_WIN32_WINNT >= 0x500) { + alias CreateFileMappingA CreateFileMapping; + alias CreateHardLinkA CreateHardLink; + alias CreateJobObjectA CreateJobObject; + alias DeleteVolumeMountPointA DeleteVolumeMountPoint; + alias DnsHostnameToComputerNameA DnsHostnameToComputerName; + alias EncryptFileA EncryptFile; + alias FileEncryptionStatusA FileEncryptionStatus; + alias FindFirstVolumeA FindFirstVolume; + alias FindFirstVolumeMountPointA FindFirstVolumeMountPoint; + alias FindNextVolumeA FindNextVolume; + alias FindNextVolumeMountPointA FindNextVolumeMountPoint; + alias GetModuleHandleExA GetModuleHandleEx; + alias GetSystemWindowsDirectoryA GetSystemWindowsDirectory; + alias GetVolumeNameForVolumeMountPointA GetVolumeNameForVolumeMountPoint; + alias GetVolumePathNameA GetVolumePathName; + alias OpenFileMappingA OpenFileMapping; + alias ReplaceFileA ReplaceFile; + alias SetVolumeMountPointA SetVolumeMountPoint; + alias VerifyVersionInfoA VerifyVersionInfo; + } + + static if (_WIN32_WINNT >= 0x501) { + alias ACTCTXA ACTCTX; + alias CheckNameLegalDOS8Dot3A CheckNameLegalDOS8Dot3; + alias CreateActCtxA CreateActCtx; + alias FindActCtxSectionStringA FindActCtxSectionString; + alias GetSystemWow64DirectoryA GetSystemWow64Directory; + alias GetVolumePathNamesForVolumeNameA GetVolumePathNamesForVolumeName; + alias SetFileShortNameA SetFileShortName; + } + + static if (_WIN32_WINNT >= 0x502) { + alias GetDllDirectoryA GetDllDirectory; + alias SetDllDirectoryA SetDllDirectory; + alias SetFirmwareEnvironmentVariableA SetFirmwareEnvironmentVariable; + } + } +} + +alias STARTUPINFO* LPSTARTUPINFO; +alias WIN32_FIND_DATA* LPWIN32_FIND_DATA; + +static if (_WIN32_WINNT_ONLY) { + alias HW_PROFILE_INFO* LPHW_PROFILE_INFO; + + static if (_WIN32_WINNT >= 0x501) { + alias ACTCTX* PACTCTX, PCACTCTX; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winber.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winber.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,68 @@ +/***********************************************************************\ +* winber.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winber; + +/* Comment from MinGW + winber.h - Header file for the Windows LDAP Basic Encoding Rules API + + Written by Filip Navara + + References: + The C LDAP Application Program Interface + http://www.watersprings.org/pub/id/draft-ietf-ldapext-ldap-c-api-05.txt + + Lightweight Directory Access Protocol Reference + http://msdn.microsoft.com/library/en-us/netdir/ldap/ldap_reference.asp + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + */ + +/* Opaque structure + * http://msdn.microsoft.com/library/en-us/ldap/ldap/berelement.asp + */ +struct BerElement; + +alias int ber_int_t, ber_slen_t; +alias uint ber_uint_t, ber_len_t, ber_tag_t; + +align(4): +struct BerValue { + ber_len_t bv_len; + char* bv_val; +} +alias BerValue LDAP_BERVAL, BERVAL; +alias BerValue* PLDAP_BERVAL, PBERVAL; + +const ber_tag_t + LBER_ERROR = -1, + LBER_DEFAULT = -1, + LBER_USE_DER = 1; + +/* FIXME: In MinGW, these are WINBERAPI == DECLSPEC_IMPORT. Linkage + * attribute? + */ +extern (C) { + BerElement* ber_init(BerValue*); + int ber_printf(BerElement*, char*, ...); + int ber_flatten(BerElement*, BerValue**); + ber_tag_t ber_scanf(BerElement*, char*, ...); + ber_tag_t ber_peek_tag(BerElement*, ber_len_t*); + ber_tag_t ber_skip_tag(BerElement*, ber_len_t*); + ber_tag_t ber_first_element(BerElement*, ber_len_t*, char**); + ber_tag_t ber_next_element(BerElement*, ber_len_t*, char*); + void ber_bvfree(BerValue*); + void ber_bvecfree(BerValue**); + void ber_free(BerElement*, int); + BerValue* ber_bvdup(BerValue*); + BerElement* ber_alloc_t(int); +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/wincon.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/wincon.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,277 @@ +/***********************************************************************\ +* wincon.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.wincon; +pragma(lib, "kernel32.lib"); + +private import win32.w32api, win32.windef; + +// FIXME: clean up Windows version support + +enum { + FOREGROUND_BLUE = 1, + FOREGROUND_GREEN = 2, + FOREGROUND_RED = 4, + FOREGROUND_INTENSITY = 8, + BACKGROUND_BLUE = 16, + BACKGROUND_GREEN = 32, + BACKGROUND_RED = 64, + BACKGROUND_INTENSITY = 128 +} + +static if (_WIN32_WINNT >= 0x0501) { + enum { + CONSOLE_FULLSCREEN_MODE = 1, + CONSOLE_WINDOWED_MODE = 0 + } +} + +enum { + CTRL_C_EVENT = 0, + CTRL_BREAK_EVENT = 1, + CTRL_CLOSE_EVENT = 2, + CTRL_LOGOFF_EVENT = 5, + CTRL_SHUTDOWN_EVENT = 6 +} + +enum { + ENABLE_PROCESSED_INPUT = 1, + ENABLE_LINE_INPUT = 2, + ENABLE_ECHO_INPUT = 4, + ENABLE_WINDOW_INPUT = 8, + ENABLE_MOUSE_INPUT = 16 +} + +enum { + ENABLE_PROCESSED_OUTPUT = 1, + ENABLE_WRAP_AT_EOL_OUTPUT = 2 +} + +enum { + KEY_EVENT = 1, + MOUSE_EVENT = 2, + WINDOW_BUFFER_SIZE_EVENT = 4, + MENU_EVENT = 8, + FOCUS_EVENT = 16 +} +enum { + RIGHT_ALT_PRESSED = 1, + LEFT_ALT_PRESSED = 2, + RIGHT_CTRL_PRESSED = 4, + LEFT_CTRL_PRESSED = 8, + SHIFT_PRESSED = 16, + NUMLOCK_ON = 32, + SCROLLLOCK_ON = 64, + CAPSLOCK_ON = 128, + ENHANCED_KEY = 256 +} +enum { + FROM_LEFT_1ST_BUTTON_PRESSED = 1, + RIGHTMOST_BUTTON_PRESSED = 2, + FROM_LEFT_2ND_BUTTON_PRESSED = 4, + FROM_LEFT_3RD_BUTTON_PRESSED = 8, + FROM_LEFT_4TH_BUTTON_PRESSED = 16 +} + +enum { + MOUSE_MOVED = 1, + DOUBLE_CLICK = 2, + MOUSE_WHEELED = 4 +} + +struct CHAR_INFO { + union _Char { + WCHAR UnicodeChar; + CHAR AsciiChar; + } + _Char Char; + WORD Attributes; +} +alias CHAR_INFO* PCHAR_INFO; + +struct SMALL_RECT { + SHORT Left; + SHORT Top; + SHORT Right; + SHORT Bottom; +} +alias SMALL_RECT* PSMALL_RECT; + +struct CONSOLE_CURSOR_INFO { + DWORD dwSize; + BOOL bVisible; +} +alias CONSOLE_CURSOR_INFO* PCONSOLE_CURSOR_INFO; + +struct COORD { + SHORT X; + SHORT Y; +} +alias COORD* PCOORD; + +struct CONSOLE_FONT_INFO { + DWORD nFont; + COORD dwFontSize; +} +alias CONSOLE_FONT_INFO* PCONSOLE_FONT_INFO; + +struct CONSOLE_SCREEN_BUFFER_INFO { + COORD dwSize; + COORD dwCursorPosition; + WORD wAttributes; + SMALL_RECT srWindow; + COORD dwMaximumWindowSize; +} +alias CONSOLE_SCREEN_BUFFER_INFO* PCONSOLE_SCREEN_BUFFER_INFO; + +alias BOOL function(DWORD) PHANDLER_ROUTINE; + +struct KEY_EVENT_RECORD { + BOOL bKeyDown; + WORD wRepeatCount; + WORD wVirtualKeyCode; + WORD wVirtualScanCode; + union _uChar { + WCHAR UnicodeChar; + CHAR AsciiChar; + } + _uChar uChar; + DWORD dwControlKeyState; +} + +struct MOUSE_EVENT_RECORD { + COORD dwMousePosition; + DWORD dwButtonState; + DWORD dwControlKeyState; + DWORD dwEventFlags; +} + +struct WINDOW_BUFFER_SIZE_RECORD { + COORD dwSize; +} + +struct MENU_EVENT_RECORD { + UINT dwCommandId; +} +alias MENU_EVENT_RECORD* PMENU_EVENT_RECORD; + +struct FOCUS_EVENT_RECORD { + BOOL bSetFocus; +} + +struct INPUT_RECORD { + WORD EventType; + union _Event { + KEY_EVENT_RECORD KeyEvent; + MOUSE_EVENT_RECORD MouseEvent; + WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent; + MENU_EVENT_RECORD MenuEvent; + FOCUS_EVENT_RECORD FocusEvent; + } + _Event Event; +} +alias INPUT_RECORD* PINPUT_RECORD; + +extern (Windows): + +BOOL AllocConsole(); +HANDLE CreateConsoleScreenBuffer(DWORD, DWORD, SECURITY_ATTRIBUTES*, DWORD, LPVOID); +BOOL FillConsoleOutputAttribute(HANDLE, WORD, DWORD, COORD, PDWORD); +BOOL FillConsoleOutputCharacterA(HANDLE, CHAR, DWORD, COORD, PDWORD); +BOOL FillConsoleOutputCharacterW(HANDLE, WCHAR, DWORD, COORD, PDWORD); +BOOL FlushConsoleInputBuffer(HANDLE); +BOOL FreeConsole(); +BOOL GenerateConsoleCtrlEvent(DWORD, DWORD); +UINT GetConsoleCP(); +BOOL GetConsoleCursorInfo(HANDLE, PCONSOLE_CURSOR_INFO); +BOOL GetConsoleMode(HANDLE,PDWORD); +UINT GetConsoleOutputCP(); +BOOL GetConsoleScreenBufferInfo(HANDLE, PCONSOLE_SCREEN_BUFFER_INFO); +DWORD GetConsoleTitleA(LPSTR, DWORD); +DWORD GetConsoleTitleW(LPWSTR, DWORD); +COORD GetLargestConsoleWindowSize(HANDLE); +BOOL GetNumberOfConsoleInputEvents(HANDLE, PDWORD); +BOOL GetNumberOfConsoleMouseButtons(PDWORD); +BOOL PeekConsoleInputA(HANDLE, PINPUT_RECORD, DWORD, PDWORD); +BOOL PeekConsoleInputW(HANDLE, PINPUT_RECORD, DWORD, PDWORD); +BOOL ReadConsoleA(HANDLE, PVOID, DWORD, PDWORD, PVOID); +BOOL ReadConsoleW(HANDLE, PVOID, DWORD, PDWORD, PVOID); +BOOL ReadConsoleInputA(HANDLE, PINPUT_RECORD, DWORD, PDWORD); +BOOL ReadConsoleInputW(HANDLE, PINPUT_RECORD, DWORD, PDWORD); +BOOL ReadConsoleOutputAttribute(HANDLE, LPWORD, DWORD, COORD, LPDWORD); +BOOL ReadConsoleOutputCharacterA(HANDLE, LPSTR, DWORD, COORD, PDWORD); +BOOL ReadConsoleOutputCharacterW(HANDLE, LPWSTR, DWORD, COORD, PDWORD); +BOOL ReadConsoleOutputA(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT); +BOOL ReadConsoleOutputW(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT); +BOOL ScrollConsoleScreenBufferA(HANDLE, SMALL_RECT*, SMALL_RECT*, COORD, CHAR_INFO*); +BOOL ScrollConsoleScreenBufferW(HANDLE, SMALL_RECT*, SMALL_RECT*, COORD, CHAR_INFO*); +BOOL SetConsoleActiveScreenBuffer(HANDLE); +BOOL SetConsoleCP(UINT); +BOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE, BOOL); +BOOL SetConsoleCursorInfo(HANDLE, CONSOLE_CURSOR_INFO*); +BOOL SetConsoleCursorPosition(HANDLE, COORD); + + +static if (_WIN32_WINNT >= 0x0500) { +BOOL GetConsoleDisplayMode(LPDWORD); +HWND GetConsoleWindow(); +} + +static if (_WIN32_WINNT >= 0x0501) { +BOOL AttachConsole(DWORD); +BOOL SetConsoleDisplayMode(HANDLE, DWORD, PCOORD); +const DWORD ATTACH_PARENT_PROCESS = cast(DWORD)-1; +} + +BOOL SetConsoleMode(HANDLE, DWORD); +BOOL SetConsoleOutputCP(UINT); +BOOL SetConsoleScreenBufferSize(HANDLE, COORD); +BOOL SetConsoleTextAttribute(HANDLE, WORD); +BOOL SetConsoleTitleA(LPCSTR); +BOOL SetConsoleTitleW(LPCWSTR); +BOOL SetConsoleWindowInfo(HANDLE, BOOL, SMALL_RECT*); +BOOL WriteConsoleA(HANDLE, PCVOID, DWORD, PDWORD, PVOID); +BOOL WriteConsoleW(HANDLE, PCVOID, DWORD, PDWORD, PVOID); +BOOL WriteConsoleInputA(HANDLE, INPUT_RECORD*, DWORD, PDWORD); +BOOL WriteConsoleInputW(HANDLE, INPUT_RECORD*, DWORD, PDWORD); +BOOL WriteConsoleOutputA(HANDLE, CHAR_INFO*, COORD, COORD, PSMALL_RECT); +BOOL WriteConsoleOutputW(HANDLE, CHAR_INFO*, COORD, COORD, PSMALL_RECT); +BOOL WriteConsoleOutputAttribute(HANDLE, WORD*, DWORD, COORD, PDWORD); +BOOL WriteConsoleOutputCharacterA(HANDLE, LPCSTR, DWORD, COORD, PDWORD); +BOOL WriteConsoleOutputCharacterW(HANDLE, LPCWSTR, DWORD, COORD, PDWORD); + +version (Unicode) { + alias FillConsoleOutputCharacterW FillConsoleOutputCharacter; + alias GetConsoleTitleW GetConsoleTitle; + alias PeekConsoleInputW PeekConsoleInput; + alias ReadConsoleW ReadConsole; + alias ReadConsoleInputW ReadConsoleInput; + alias ReadConsoleOutputW ReadConsoleOutput; + alias ReadConsoleOutputCharacterW ReadConsoleOutputCharacter; + alias ScrollConsoleScreenBufferW ScrollConsoleScreenBuffer; + alias SetConsoleTitleW SetConsoleTitle; + alias WriteConsoleW WriteConsole; + alias WriteConsoleInputW WriteConsoleInput; + alias WriteConsoleOutputW WriteConsoleOutput; + alias WriteConsoleOutputCharacterW WriteConsoleOutputCharacter; +} else { + alias FillConsoleOutputCharacterA FillConsoleOutputCharacter; + alias GetConsoleTitleA GetConsoleTitle; + alias PeekConsoleInputA PeekConsoleInput; + alias ReadConsoleA ReadConsole; + alias ReadConsoleInputA ReadConsoleInput; + alias ReadConsoleOutputA ReadConsoleOutput; + alias ReadConsoleOutputCharacterA ReadConsoleOutputCharacter; + alias ScrollConsoleScreenBufferA ScrollConsoleScreenBuffer; + alias SetConsoleTitleA SetConsoleTitle; + alias WriteConsoleA WriteConsole; + alias WriteConsoleInputA WriteConsoleInput; + alias WriteConsoleOutputA WriteConsoleOutput; + alias WriteConsoleOutputCharacterA WriteConsoleOutputCharacter; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/wincrypt.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/wincrypt.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,786 @@ +/***********************************************************************\ +* wincrypt.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.wincrypt; + +private import win32.w32api, win32.winbase, win32.windef; + +/* FIXME: + * Types of some constants + * Types of macros + * Inits of various "size" and "version" members + * Why are some #ifdefs commented out? + */ + +const TCHAR[] + MS_DEF_PROV = "Microsoft Base Cryptographic Provider v1.0", + MS_ENHANCED_PROV = "Microsoft Enhanced Cryptographic Provider v1.0", + MS_STRONG_PROV = "Microsoft Strong Cryptographic Provider", + MS_DEF_RSA_SIG_PROV = "Microsoft RSA Signature Cryptographic Provider", + MS_DEF_RSA_SCHANNEL_PROV = "Microsoft RSA SChannel Cryptographic Provider", + MS_DEF_DSS_PROV = "Microsoft Base DSS Cryptographic Provider", + MS_DEF_DSS_DH_PROV + = "Microsoft Base DSS and Diffie-Hellman Cryptographic Provider", + MS_ENH_DSS_DH_PROV + = "Microsoft Enhanced DSS and Diffie-Hellman Cryptographic Provider", + MS_DEF_DH_SCHANNEL_PROV = "Microsoft DH SChannel Cryptographic Provider", + MS_SCARD_PROV = "Microsoft Base Smart Card Crypto Provider"; + +static if (WINVER > 0x501) { + const TCHAR[] MS_ENH_RSA_AES_PROV + = "Microsoft Enhanced RSA and AES Cryptographic Provider"; +} else static if (WINVER == 0x501) { + const TCHAR[] MS_ENH_RSA_AES_PROV + = "Microsoft Enhanced RSA and AES Cryptographic Provider (Prototype)"; +} + +ALG_ID GET_ALG_CLASS(ALG_ID x) { return x & 0xE000; } +ALG_ID GET_ALG_TYPE (ALG_ID x) { return x & 0x1E00; } +ALG_ID GET_ALG_SID (ALG_ID x) { return x & 0x01FF; } + +enum : ALG_ID { + ALG_CLASS_ANY = 0, + ALG_CLASS_SIGNATURE = 0x2000, + ALG_CLASS_MSG_ENCRYPT = 0x4000, + ALG_CLASS_DATA_ENCRYPT = 0x6000, + ALG_CLASS_HASH = 0x8000, + ALG_CLASS_KEY_EXCHANGE = 0xA000, + ALG_CLASS_ALL = 0xE000 +} + +enum : ALG_ID { + ALG_TYPE_ANY = 0, + ALG_TYPE_DSS = 0x0200, + ALG_TYPE_RSA = 0x0400, + ALG_TYPE_BLOCK = 0x0600, + ALG_TYPE_STREAM = 0x0800, + ALG_TYPE_DH = 0x0A00, + ALG_TYPE_SECURECHANNEL = 0x0C00 +} + +enum : ALG_ID { + ALG_SID_ANY = 0, + ALG_SID_RSA_ANY = 0, + ALG_SID_RSA_PKCS, + ALG_SID_RSA_MSATWORK, + ALG_SID_RSA_ENTRUST, + ALG_SID_RSA_PGP, // = 4 + ALG_SID_DSS_ANY = 0, + ALG_SID_DSS_PKCS, + ALG_SID_DSS_DMS, // = 2 + ALG_SID_DES = 1, + ALG_SID_3DES = 3, + ALG_SID_DESX, + ALG_SID_IDEA, + ALG_SID_CAST, + ALG_SID_SAFERSK64, + ALG_SID_SAFERSK128, + ALG_SID_3DES_112, + ALG_SID_SKIPJACK, + ALG_SID_TEK, + ALG_SID_CYLINK_MEK, + ALG_SID_RC5, // = 13 + ALG_SID_RC2 = 2, + ALG_SID_RC4 = 1, + ALG_SID_SEAL = 2, + ALG_SID_MD2 = 1, + ALG_SID_MD4, + ALG_SID_MD5, + ALG_SID_SHA, + ALG_SID_MAC, + ALG_SID_RIPEMD, + ALG_SID_RIPEMD160, + ALG_SID_SSL3SHAMD5, + ALG_SID_HMAC, + ALG_SID_TLS1PRF, // = 10 + ALG_SID_AES_128 = 14, + ALG_SID_AES_192, + ALG_SID_AES_256, + ALG_SID_AES, // = 17 + ALG_SID_EXAMPLE = 80 +} + +enum : ALG_ID { + CALG_MD2 = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD2, + CALG_MD4 = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD4, + CALG_MD5 = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MD5, + CALG_SHA = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_SHA, + CALG_SHA1 = CALG_SHA, + CALG_MAC = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_MAC, + CALG_3DES = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | 3, + CALG_CYLINK_MEK = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | 12, + CALG_SKIPJACK = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | 10, + CALG_KEA_KEYX = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_STREAM | ALG_TYPE_DSS | 4, + CALG_RSA_SIGN = ALG_CLASS_SIGNATURE | ALG_TYPE_RSA | ALG_SID_RSA_ANY, + CALG_DSS_SIGN = ALG_CLASS_SIGNATURE | ALG_TYPE_DSS | ALG_SID_DSS_ANY, + CALG_RSA_KEYX = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_RSA | ALG_SID_RSA_ANY, + CALG_DES = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DES, + CALG_RC2 = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_RC2, + CALG_RC4 = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_RC4, + CALG_SEAL = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_STREAM | ALG_SID_SEAL, + CALG_DH_EPHEM = ALG_CLASS_KEY_EXCHANGE | ALG_TYPE_STREAM | ALG_TYPE_DSS + | ALG_SID_DSS_DMS, + CALG_DESX = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_DESX, +// is undefined ALG_CLASS_DHASH in MinGW - presuming typo + CALG_TLS1PRF = ALG_CLASS_HASH | ALG_TYPE_ANY | ALG_SID_TLS1PRF, + CALG_AES_128 = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_128, + CALG_AES_192 = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_192, + CALG_AES_256 = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES_256, + CALG_AES = ALG_CLASS_DATA_ENCRYPT | ALG_TYPE_BLOCK | ALG_SID_AES, +} + +/+ +#define CRYPT_VERIFYCONTEXT 0xF0000000 +#define CRYPT_NEWKEYSET 8 +#define CRYPT_DELETEKEYSET 16 +#define CRYPT_MACHINE_KEYSET 32 +#define CRYPT_SILENT 64 +#define CRYPT_EXPORTABLE 1 +#define CRYPT_USER_PROTECTED 2 +#define CRYPT_CREATE_SALT 4 +#define CRYPT_UPDATE_KEY 8 +#define SIMPLEBLOB 1 +#define PUBLICKEYBLOB 6 +#define PRIVATEKEYBLOB 7 +#define PLAINTEXTKEYBLOB 8 +#define OPAQUEKEYBLOB 9 +#define PUBLICKEYBLOBEX 10 +#define SYMMETRICWRAPKEYBLOB 11 +#define AT_KEYEXCHANGE 1 +#define AT_SIGNATURE 2 +#define CRYPT_USERDATA 1 +#define PKCS5_PADDING 1 +#define CRYPT_MODE_CBC 1 +#define CRYPT_MODE_ECB 2 +#define CRYPT_MODE_OFB 3 +#define CRYPT_MODE_CFB 4 +#define CRYPT_MODE_CTS 5 +#define CRYPT_MODE_CBCI 6 +#define CRYPT_MODE_CFBP 7 +#define CRYPT_MODE_OFBP 8 +#define CRYPT_MODE_CBCOFM 9 +#define CRYPT_MODE_CBCOFMI 10 +#define CRYPT_ENCRYPT 1 +#define CRYPT_DECRYPT 2 +#define CRYPT_EXPORT 4 +#define CRYPT_READ 8 +#define CRYPT_WRITE 16 +#define CRYPT_MAC 32 +#define HP_ALGID 1 +#define HP_HASHVAL 2 +#define HP_HASHSIZE 4 +#define HP_HMAC_INFO 5 +#define CRYPT_FAILED FALSE +#define CRYPT_SUCCEED TRUE +#define RCRYPT_SUCCEEDED(r) ((r)==CRYPT_SUCCEED) +#define RCRYPT_FAILED(r) ((r)==CRYPT_FAILED) +#define PP_ENUMALGS 1 +#define PP_ENUMCONTAINERS 2 +#define PP_IMPTYPE 3 +#define PP_NAME 4 +#define PP_VERSION 5 +#define PP_CONTAINER 6 +#define PP_CHANGE_PASSWORD 7 +#define PP_KEYSET_SEC_DESCR 8 +#define PP_CERTCHAIN 9 +#define PP_KEY_TYPE_SUBTYPE 10 +#define PP_PROVTYPE 16 +#define PP_KEYSTORAGE 17 +#define PP_APPLI_CERT 18 +#define PP_SYM_KEYSIZE 19 +#define PP_SESSION_KEYSIZE 20 +#define PP_UI_PROMPT 21 +#define PP_ENUMALGS_EX 22 +#define PP_ENUMMANDROOTS 25 +#define PP_ENUMELECTROOTS 26 +#define PP_KEYSET_TYPE 27 +#define PP_ADMIN_PIN 31 +#define PP_KEYEXCHANGE_PIN 32 +#define PP_SIGNATURE_PIN 33 +#define PP_SIG_KEYSIZE_INC 34 +#define PP_KEYX_KEYSIZE_INC 35 +#define PP_UNIQUE_CONTAINER 36 +#define PP_SGC_INFO 37 +#define PP_USE_HARDWARE_RNG 38 +#define PP_KEYSPEC 39 +#define PP_ENUMEX_SIGNING_PROT 40 +#define CRYPT_FIRST 1 +#define CRYPT_NEXT 2 +#define CRYPT_IMPL_HARDWARE 1 +#define CRYPT_IMPL_SOFTWARE 2 +#define CRYPT_IMPL_MIXED 3 +#define CRYPT_IMPL_UNKNOWN 4 +#define PROV_RSA_FULL 1 +#define PROV_RSA_SIG 2 +#define PROV_DSS 3 +#define PROV_FORTEZZA 4 +#define PROV_MS_MAIL 5 +#define PROV_SSL 6 +#define PROV_STT_MER 7 +#define PROV_STT_ACQ 8 +#define PROV_STT_BRND 9 +#define PROV_STT_ROOT 10 +#define PROV_STT_ISS 11 +#define PROV_RSA_SCHANNEL 12 +#define PROV_DSS_DH 13 +#define PROV_EC_ECDSA_SIG 14 +#define PROV_EC_ECNRA_SIG 15 +#define PROV_EC_ECDSA_FULL 16 +#define PROV_EC_ECNRA_FULL 17 +#define PROV_DH_SCHANNEL 18 +#define PROV_SPYRUS_LYNKS 20 +#define PROV_RNG 21 +#define PROV_INTEL_SEC 22 +#define PROV_RSA_AES 24 +#define MAXUIDLEN 64 +#define CUR_BLOB_VERSION 2 +#define X509_ASN_ENCODING 1 +#define PKCS_7_ASN_ENCODING 65536 +#define CERT_V1 0 +#define CERT_V2 1 +#define CERT_V3 2 +#define CERT_E_CHAINING (-2146762486) +#define CERT_E_CN_NO_MATCH (-2146762481) +#define CERT_E_EXPIRED (-2146762495) +#define CERT_E_PURPOSE (-2146762490) +#define CERT_E_REVOCATION_FAILURE (-2146762482) +#define CERT_E_REVOKED (-2146762484) +#define CERT_E_ROLE (-2146762493) +#define CERT_E_UNTRUSTEDROOT (-2146762487) +#define CERT_E_UNTRUSTEDTESTROOT (-2146762483) +#define CERT_E_VALIDITYPERIODNESTING (-2146762494) +#define CERT_E_WRONG_USAGE (-2146762480) +#define CERT_E_PATHLENCONST (-2146762492) +#define CERT_E_CRITICAL (-2146762491) +#define CERT_E_ISSUERCHAINING (-2146762489) +#define CERT_E_MALFORMED (-2146762488) +#define CRYPT_E_REVOCATION_OFFLINE (-2146885613) +#define CRYPT_E_REVOKED (-2146885616) +#define TRUST_E_BASIC_CONSTRAINTS (-2146869223) +#define TRUST_E_CERT_SIGNATURE (-2146869244) +#define TRUST_E_FAIL (-2146762485) +#define CERT_TRUST_NO_ERROR 0 +#define CERT_TRUST_IS_NOT_TIME_VALID 1 +#define CERT_TRUST_IS_NOT_TIME_NESTED 2 +#define CERT_TRUST_IS_REVOKED 4 +#define CERT_TRUST_IS_NOT_SIGNATURE_VALID 8 +#define CERT_TRUST_IS_NOT_VALID_FOR_USAGE 16 +#define CERT_TRUST_IS_UNTRUSTED_ROOT 32 +#define CERT_TRUST_REVOCATION_STATUS_UNKNOWN 64 +#define CERT_TRUST_IS_CYCLIC 128 +#define CERT_TRUST_IS_PARTIAL_CHAIN 65536 +#define CERT_TRUST_CTL_IS_NOT_TIME_VALID 131072 +#define CERT_TRUST_CTL_IS_NOT_SIGNATURE_VALID 262144 +#define CERT_TRUST_CTL_IS_NOT_VALID_FOR_USAGE 524288 +#define CERT_TRUST_HAS_EXACT_MATCH_ISSUER 1 +#define CERT_TRUST_HAS_KEY_MATCH_ISSUER 2 +#define CERT_TRUST_HAS_NAME_MATCH_ISSUER 4 +#define CERT_TRUST_IS_SELF_SIGNED 8 +#define CERT_TRUST_IS_COMPLEX_CHAIN 65536 +#define CERT_CHAIN_POLICY_BASE ((LPCSTR) 1) +#define CERT_CHAIN_POLICY_AUTHENTICODE ((LPCSTR) 2) +#define CERT_CHAIN_POLICY_AUTHENTICODE_TS ((LPCSTR) 3) +#define CERT_CHAIN_POLICY_SSL ((LPCSTR) 4) +#define CERT_CHAIN_POLICY_BASIC_CONSTRAINTS ((LPCSTR) 5) +#define CERT_CHAIN_POLICY_NT_AUTH ((LPCSTR) 6) +#define USAGE_MATCH_TYPE_AND 0 +#define USAGE_MATCH_TYPE_OR 1 +#define CERT_SIMPLE_NAME_STR 1 +#define CERT_OID_NAME_STR 2 +#define CERT_X500_NAME_STR 3 +#define CERT_NAME_STR_SEMICOLON_FLAG 1073741824 +#define CERT_NAME_STR_CRLF_FLAG 134217728 +#define CERT_NAME_STR_NO_PLUS_FLAG 536870912 +#define CERT_NAME_STR_NO_QUOTING_FLAG 268435456 +#define CERT_NAME_STR_REVERSE_FLAG 33554432 +#define CERT_NAME_STR_ENABLE_T61_UNICODE_FLAG 131072 +#define CERT_FIND_ANY 0 +#define CERT_FIND_CERT_ID 1048576 +#define CERT_FIND_CTL_USAGE 655360 +#define CERT_FIND_ENHKEY_USAGE 655360 +#define CERT_FIND_EXISTING 851968 +#define CERT_FIND_HASH 65536 +#define CERT_FIND_ISSUER_ATTR 196612 +#define CERT_FIND_ISSUER_NAME 131076 +#define CERT_FIND_ISSUER_OF 786432 +#define CERT_FIND_KEY_IDENTIFIER 983040 +#define CERT_FIND_KEY_SPEC 589824 +#define CERT_FIND_MD5_HASH 262144 +#define CERT_FIND_PROPERTY 327680 +#define CERT_FIND_PUBLIC_KEY 393216 +#define CERT_FIND_SHA1_HASH 65536 +#define CERT_FIND_SIGNATURE_HASH 917504 +#define CERT_FIND_SUBJECT_ATTR 196615 +#define CERT_FIND_SUBJECT_CERT 720896 +#define CERT_FIND_SUBJECT_NAME 131079 +#define CERT_FIND_SUBJECT_STR_A 458759 +#define CERT_FIND_SUBJECT_STR_W 524295 +#define CERT_FIND_ISSUER_STR_A 458756 +#define CERT_FIND_ISSUER_STR_W 524292 +#define CERT_FIND_OR_ENHKEY_USAGE_FLAG 16 +#define CERT_FIND_OPTIONAL_ENHKEY_USAGE_FLAG 1 +#define CERT_FIND_NO_ENHKEY_USAGE_FLAG 8 +#define CERT_FIND_VALID_ENHKEY_USAGE_FLAG 32 +#define CERT_FIND_EXT_ONLY_ENHKEY_USAGE_FLAG 2 +#define CERT_CASE_INSENSITIVE_IS_RDN_ATTRS_FLAG 2 +#define CERT_UNICODE_IS_RDN_ATTRS_FLAG 1 +#define CERT_CHAIN_FIND_BY_ISSUER 1 +#define CERT_CHAIN_FIND_BY_ISSUER_COMPARE_KEY_FLAG 1 +#define CERT_CHAIN_FIND_BY_ISSUER_COMPLEX_CHAIN_FLAG 2 +#define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_FLAG 32768 +#define CERT_CHAIN_FIND_BY_ISSUER_CACHE_ONLY_URL_FLAG 4 +#define CERT_CHAIN_FIND_BY_ISSUER_LOCAL_MACHINE_FLAG 8 +#define CERT_CHAIN_FIND_BY_ISSUER_NO_KEY_FLAG 16384 +#define CERT_STORE_PROV_SYSTEM 10 +#define CERT_SYSTEM_STORE_LOCAL_MACHINE 131072 +#define szOID_PKIX_KP_SERVER_AUTH "4235600" +#define szOID_SERVER_GATED_CRYPTO "4235658" +#define szOID_SGC_NETSCAPE "2.16.840.1.113730.4.1" +#define szOID_PKIX_KP_CLIENT_AUTH "1.3.6.1.5.5.7.3.2" +#define CRYPT_NOHASHOID 0x00000001 +#define CRYPT_NO_SALT 0x10 +#define CRYPT_PREGEN 0x40 +#define CRYPT_RECIPIENT 0x10 +#define CRYPT_INITIATOR 0x40 +#define CRYPT_ONLINE 0x80 +#define CRYPT_SF 0x100 +#define CRYPT_CREATE_IV 0x200 +#define CRYPT_KEK 0x400 +#define CRYPT_DATA_KEY 0x800 +#define CRYPT_VOLATILE 0x1000 +#define CRYPT_SGCKEY 0x2000 +#define KP_IV 0x00000001 +#define KP_SALT 0x00000002 +#define KP_PADDING 0x00000003 +#define KP_MODE 0x00000004 +#define KP_MODE_BITS 0x00000005 +#define KP_PERMISSIONS 0x00000006 +#define KP_ALGID 0x00000007 +#define KP_BLOCKLEN 0x00000008 +#define KP_KEYLEN 0x00000009 +#define KP_SALT_EX 0x0000000a +#define KP_P 0x0000000b +#define KP_G 0x0000000c +#define KP_Q 0x0000000d +#define KP_X 0x0000000e +#define KP_Y 0x0000000f +#define KP_RA 0x00000010 +#define KP_RB 0x00000011 +#define KP_INFO 0x00000012 +#define KP_EFFECTIVE_KEYLEN 0x00000013 +#define KP_SCHANNEL_ALG 0x00000014 +#define KP_PUB_PARAMS 0x00000027 +#define CRYPT_FLAG_PCT1 0x0001 +#define CRYPT_FLAG_SSL2 0x0002 +#define CRYPT_FLAG_SSL3 0x0004 +#define CRYPT_FLAG_TLS1 0x0008 +#define CRYPT_FLAG_IPSEC 0x0010 +#define CRYPT_FLAG_SIGNING 0x0020 +#define SCHANNEL_MAC_KEY 0x00000000 +#define SCHANNEL_ENC_KEY 0x00000001 +#define INTERNATIONAL_USAGE 0x00000001 ++/ + +alias UINT ALG_ID; +alias ULONG HCRYPTPROV, HCRYPTKEY, HCRYPTHASH; +alias PVOID HCERTSTORE, HCRYPTMSG, HCERTCHAINENGINE; + +struct VTableProvStruc { + FARPROC FuncVerifyImage; +} +alias VTableProvStruc* PVTableProvStruc; + +struct _CRYPTOAPI_BLOB { + DWORD cbData; + BYTE* pbData; +} +alias _CRYPTOAPI_BLOB CRYPT_INTEGER_BLOB, CRYPT_UINT_BLOB, + CRYPT_OBJID_BLOB, CERT_NAME_BLOB, CERT_RDN_VALUE_BLOB, CERT_BLOB, + CRL_BLOB, DATA_BLOB, CRYPT_DATA_BLOB, CRYPT_HASH_BLOB, + CRYPT_DIGEST_BLOB, CRYPT_DER_BLOB, CRYPT_ATTR_BLOB; +alias _CRYPTOAPI_BLOB* PCRYPT_INTEGER_BLOB, PCRYPT_UINT_BLOB, + PCRYPT_OBJID_BLOB, PCERT_NAME_BLOB, PCERT_RDN_VALUE_BLOB, PCERT_BLOB, + PCRL_BLOB, PDATA_BLOB, PCRYPT_DATA_BLOB, PCRYPT_HASH_BLOB, + PCRYPT_DIGEST_BLOB, PCRYPT_DER_BLOB, PCRYPT_ATTR_BLOB; + +// not described in SDK; has the same layout as HTTPSPolicyCallbackData +struct SSL_EXTRA_CERT_CHAIN_POLICY_PARA { + DWORD cbStruct; + DWORD dwAuthType; + DWORD fdwChecks; + LPWSTR pwszServerName; +} +alias SSL_EXTRA_CERT_CHAIN_POLICY_PARA HTTPSPolicyCallbackData; +alias SSL_EXTRA_CERT_CHAIN_POLICY_PARA* PSSL_EXTRA_CERT_CHAIN_POLICY_PARA, + PHTTPSPolicyCallbackData; + +/* #if (_WIN32_WINNT>=0x500) */ +struct CERT_CHAIN_POLICY_PARA { + DWORD cbSize = CERT_CHAIN_POLICY_PARA.sizeof; + DWORD dwFlags; + void* pvExtraPolicyPara; +} +alias CERT_CHAIN_POLICY_PARA* PCERT_CHAIN_POLICY_PARA; + +struct CERT_CHAIN_POLICY_STATUS { + DWORD cbSize = CERT_CHAIN_POLICY_STATUS.sizeof; + DWORD dwError; + LONG lChainIndex; + LONG lElementIndex; + void* pvExtraPolicyStatus; +} +alias CERT_CHAIN_POLICY_STATUS* PCERT_CHAIN_POLICY_STATUS; +/* #endif */ + +struct CRYPT_ALGORITHM_IDENTIFIER { + LPSTR pszObjId; + CRYPT_OBJID_BLOB Parameters; +} +alias CRYPT_ALGORITHM_IDENTIFIER* PCRYPT_ALGORITHM_IDENTIFIER; + +struct CRYPT_BIT_BLOB { + DWORD cbData; + BYTE* pbData; + DWORD cUnusedBits; +} +alias CRYPT_BIT_BLOB* PCRYPT_BIT_BLOB; + +struct CERT_PUBLIC_KEY_INFO { + CRYPT_ALGORITHM_IDENTIFIER Algorithm; + CRYPT_BIT_BLOB PublicKey; +} +alias CERT_PUBLIC_KEY_INFO* PCERT_PUBLIC_KEY_INFO; + +struct CERT_EXTENSION { + LPSTR pszObjId; + BOOL fCritical; + CRYPT_OBJID_BLOB Value; +} +alias CERT_EXTENSION* PCERT_EXTENSION; + +struct CERT_INFO { + DWORD dwVersion; + CRYPT_INTEGER_BLOB SerialNumber; + CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm; + CERT_NAME_BLOB Issuer; + FILETIME NotBefore; + FILETIME NotAfter; + CERT_NAME_BLOB Subject; + CERT_PUBLIC_KEY_INFO SubjectPublicKeyInfo; + CRYPT_BIT_BLOB IssuerUniqueId; + CRYPT_BIT_BLOB SubjectUniqueId; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} +alias CERT_INFO* PCERT_INFO; + +struct CERT_CONTEXT { + DWORD dwCertEncodingType; + BYTE* pbCertEncoded; + DWORD cbCertEncoded; + PCERT_INFO pCertInfo; + HCERTSTORE hCertStore; +} +alias CERT_CONTEXT* PCERT_CONTEXT, PCCERT_CONTEXT; + +struct CTL_USAGE { + DWORD cUsageIdentifier; + LPSTR* rgpszUsageIdentifier; +} +alias CTL_USAGE CERT_ENHKEY_USAGE; +alias CTL_USAGE* PCTRL_USAGE, PCERT_ENHKEY_USAGE; + +struct CERT_USAGE_MATCH { + DWORD dwType; + CERT_ENHKEY_USAGE Usage; +} +alias CERT_USAGE_MATCH* PCERT_USAGE_MATCH; +/* #if (_WIN32_WINNT>=0x500) */ + +struct CERT_CHAIN_PARA { + DWORD cbSize = CERT_CHAIN_PARA.sizeof; + CERT_USAGE_MATCH RequestedUsage; +//#if CERT_CHAIN_PARA_HAS_EXTRA_FIELDS + CERT_USAGE_MATCH RequestedIssuancePolicy; + DWORD dwUrlRetrievalTimeout; + BOOL fCheckRevocationFreshnessTime; + DWORD dwRevocationFreshnessTime; +//#endif +} +alias CERT_CHAIN_PARA* PCERT_CHAIN_PARA; + +extern (Windows) alias BOOL function(PCCERT_CONTEXT, void*) + PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK; + +struct CERT_CHAIN_FIND_BY_ISSUER_PARA { + DWORD cbSize = CERT_CHAIN_FIND_BY_ISSUER_PARA.sizeof; + LPCSTR pszUsageIdentifier; + DWORD dwKeySpec; + DWORD dwAcquirePrivateKeyFlags; + DWORD cIssuer; + CERT_NAME_BLOB* rgIssuer; + PFN_CERT_CHAIN_FIND_BY_ISSUER_CALLBACK pfnFIndCallback; + void* pvFindArg; + DWORD* pdwIssuerChainIndex; + DWORD* pdwIssuerElementIndex; +} +alias CERT_CHAIN_FIND_BY_ISSUER_PARA* PCERT_CHAIN_FIND_BY_ISSUER_PARA; +/* #endif */ + +struct CERT_TRUST_STATUS { + DWORD dwErrorStatus; + DWORD dwInfoStatus; +} +alias CERT_TRUST_STATUS* PCERT_TRUST_STATUS; + +struct CRL_ENTRY { + CRYPT_INTEGER_BLOB SerialNumber; + FILETIME RevocationDate; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} +alias CRL_ENTRY* PCRL_ENTRY; + +struct CRL_INFO { + DWORD dwVersion; + CRYPT_ALGORITHM_IDENTIFIER SignatureAlgorithm; + CERT_NAME_BLOB Issuer; + FILETIME ThisUpdate; + FILETIME NextUpdate; + DWORD cCRLEntry; + PCRL_ENTRY rgCRLEntry; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} +alias CRL_INFO* PCRL_INFO; + +struct CRL_CONTEXT { + DWORD dwCertEncodingType; + BYTE* pbCrlEncoded; + DWORD cbCrlEncoded; + PCRL_INFO pCrlInfo; + HCERTSTORE hCertStore; +} +alias CRL_CONTEXT* PCRL_CONTEXT, PCCRL_CONTEXT; + +struct CERT_REVOCATION_CRL_INFO { + DWORD cbSize = CERT_REVOCATION_CRL_INFO.sizeof; + PCCRL_CONTEXT pBaseCRLContext; + PCCRL_CONTEXT pDeltaCRLContext; + PCRL_ENTRY pCrlEntry; + BOOL fDeltaCrlEntry; +} +alias CERT_REVOCATION_CRL_INFO* PCERT_REVOCATION_CRL_INFO; + +struct CERT_REVOCATION_INFO { + DWORD cbSize = CERT_REVOCATION_INFO.sizeof; + DWORD dwRevocationResult; + LPCSTR pszRevocationOid; + LPVOID pvOidSpecificInfo; + BOOL fHasFreshnessTime; + DWORD dwFreshnessTime; + PCERT_REVOCATION_CRL_INFO pCrlInfo; +} +alias CERT_REVOCATION_INFO* PCERT_REVOCATION_INFO; + +/* #if (_WIN32_WINNT>=0x500) */ +struct CERT_CHAIN_ELEMENT { + DWORD cbSize = CERT_CHAIN_ELEMENT.sizeof; + PCCERT_CONTEXT pCertContext; + CERT_TRUST_STATUS TrustStatus; + PCERT_REVOCATION_INFO pRevocationInfo; + PCERT_ENHKEY_USAGE pIssuanceUsage; + PCERT_ENHKEY_USAGE pApplicationUsage; +} +alias CERT_CHAIN_ELEMENT* PCERT_CHAIN_ELEMENT; +/* #endif */ + +struct CRYPT_ATTRIBUTE { + LPSTR pszObjId; + DWORD cValue; + PCRYPT_ATTR_BLOB rgValue; +} +alias CRYPT_ATTRIBUTE* PCRYPT_ATTRIBUTE; + +struct CTL_ENTRY { + CRYPT_DATA_BLOB SubjectIdentifier; + DWORD cAttribute; + PCRYPT_ATTRIBUTE rgAttribute; +} +alias CTL_ENTRY* PCTL_ENTRY; + +struct CTL_INFO { + DWORD dwVersion; + CTL_USAGE SubjectUsage; + CRYPT_DATA_BLOB ListIdentifier; + CRYPT_INTEGER_BLOB SequenceNumber; + FILETIME ThisUpdate; + FILETIME NextUpdate; + CRYPT_ALGORITHM_IDENTIFIER SubjectAlgorithm; + DWORD cCTLEntry; + PCTL_ENTRY rgCTLEntry; + DWORD cExtension; + PCERT_EXTENSION rgExtension; +} +alias CTL_INFO* PCTL_INFO; + +struct CTL_CONTEXT { + DWORD dwMsgAndCertEncodingType; + BYTE* pbCtlEncoded; + DWORD cbCtlEncoded; + PCTL_INFO pCtlInfo; + HCERTSTORE hCertStore; + HCRYPTMSG hCryptMsg; + BYTE* pbCtlContent; + DWORD cbCtlContent; +} +alias CTL_CONTEXT* PCTL_CONTEXT, PCCTL_CONTEXT; + +struct CERT_TRUST_LIST_INFO { + DWORD cbSize = CERT_TRUST_LIST_INFO.sizeof; + PCTL_ENTRY pCtlEntry; + PCCTL_CONTEXT pCtlContext; +} +alias CERT_TRUST_LIST_INFO* PCERT_TRUST_LIST_INFO; + +struct CERT_SIMPLE_CHAIN { + DWORD cbSize = CERT_SIMPLE_CHAIN.sizeof; + CERT_TRUST_STATUS TrustStatus; + DWORD cElement; + PCERT_CHAIN_ELEMENT* rgpElement; + PCERT_TRUST_LIST_INFO pTrustListInfo; + BOOL fHasRevocationFreshnessTime; + DWORD dwRevocationFreshnessTime; +} +alias CERT_SIMPLE_CHAIN* PCERT_SIMPLE_CHAIN, PCCERT_CHAIN_CONTEXT; + +/* #if (_WIN32_WINNT>=0x500) */ +struct CERT_CHAIN_CONTEXT { + DWORD cbSize = CERT_CHAIN_CONTEXT.sizeof; + CERT_TRUST_STATUS TrustStatus; + DWORD cChain; + PCERT_SIMPLE_CHAIN* rgpChain; + DWORD cLowerQualityChainContext; + PCCERT_CHAIN_CONTEXT* rgpLowerQualityChainContext; + BOOL fHasRevocationFreshnessTime; + DWORD dwRevocationFreshnessTime; +} +alias CERT_CHAIN_CONTEXT* PCERT_CHAIN_CONTEXT; +/* #endif */ + +struct PROV_ENUMALGS { + ALG_ID aiAlgid; + DWORD dwBitLen; + DWORD dwNameLen; + CHAR[20] szName; +} + +struct PUBLICKEYSTRUC { + BYTE bType; + BYTE bVersion; + WORD reserved; + ALG_ID aiKeyAlg; +} +alias PUBLICKEYSTRUC BLOBHEADER; + +struct RSAPUBKEY { + DWORD magic; + DWORD bitlen; + DWORD pubexp; +} + +struct HMAC_INFO { + ALG_ID HashAlgid; + BYTE* pbInnerString; + DWORD cbInnerString; + BYTE* pbOuterString; + DWORD cbOuterString; +} +alias HMAC_INFO* PHMAC_INFO; + +extern (Windows) { + BOOL CertCloseStore(HCERTSTORE, DWORD); + BOOL CertGetCertificateChain(HCERTCHAINENGINE, PCCERT_CONTEXT, LPFILETIME, + HCERTSTORE, PCERT_CHAIN_PARA, DWORD, LPVOID, PCCERT_CHAIN_CONTEXT*); + BOOL CertVerifyCertificateChainPolicy(LPCSTR, PCCERT_CHAIN_CONTEXT, + PCERT_CHAIN_POLICY_PARA, PCERT_CHAIN_POLICY_STATUS); + void CertFreeCertificateChain(PCCERT_CHAIN_CONTEXT); + DWORD CertNameToStrA(DWORD, PCERT_NAME_BLOB, DWORD, LPSTR, DWORD); + DWORD CertNameToStrW(DWORD, PCERT_NAME_BLOB, DWORD, LPWSTR, DWORD); + HCERTSTORE CertOpenSystemStoreA(HCRYPTPROV, LPCSTR); + HCERTSTORE CertOpenSystemStoreW(HCRYPTPROV, LPCWSTR); + HCERTSTORE CertOpenStore(LPCSTR, DWORD, HCRYPTPROV, DWORD, void*); + PCCERT_CONTEXT CertFindCertificateInStore(HCERTSTORE, DWORD, DWORD, DWORD, + void*, PCCERT_CONTEXT); + BOOL CertFreeCertificateContext(PCCERT_CONTEXT); + PCCERT_CONTEXT CertGetIssuerCertificateFromStore(HCERTSTORE, + PCCERT_CONTEXT, PCCERT_CONTEXT, DWORD*); + PCCERT_CHAIN_CONTEXT CertFindChainInStore(HCERTSTORE, DWORD, DWORD, DWORD, + void*, PCCERT_CHAIN_CONTEXT); + + BOOL CryptAcquireContextA(HCRYPTPROV*, LPCSTR, LPCSTR, DWORD, DWORD); + BOOL CryptAcquireContextW(HCRYPTPROV*, LPCWSTR, LPCWSTR, DWORD, DWORD); + BOOL CryptContextAddRef(HCRYPTPROV, DWORD*, DWORD); + BOOL CryptReleaseContext(HCRYPTPROV, DWORD); + BOOL CryptGenKey(HCRYPTPROV, ALG_ID, DWORD, HCRYPTKEY*); + BOOL CryptDeriveKey(HCRYPTPROV, ALG_ID, HCRYPTHASH, DWORD, HCRYPTKEY*); + BOOL CryptDestroyKey(HCRYPTKEY); + static if (WINVER >= 0x0500) { + BOOL CryptDuplicateHash(HCRYPTHASH, DWORD*, DWORD, HCRYPTHASH*); + BOOL CryptDuplicateKey(HCRYPTKEY, DWORD*, DWORD, HCRYPTKEY*); + } + BOOL CryptSetKeyParam(HCRYPTKEY, DWORD, PBYTE, DWORD); + BOOL CryptGetKeyParam(HCRYPTKEY, DWORD, PBYTE, PDWORD, DWORD); + BOOL CryptSetHashParam(HCRYPTHASH, DWORD, PBYTE, DWORD); + BOOL CryptGetHashParam(HCRYPTHASH, DWORD, PBYTE, PDWORD, DWORD); + BOOL CryptSetProvParam(HCRYPTPROV, DWORD, PBYTE, DWORD); + BOOL CryptGetProvParam(HCRYPTPROV, DWORD, PBYTE, PDWORD, DWORD); + BOOL CryptGenRandom(HCRYPTPROV, DWORD, PBYTE); + BOOL CryptGetUserKey(HCRYPTPROV, DWORD, HCRYPTKEY*); + BOOL CryptExportKey(HCRYPTKEY, HCRYPTKEY, DWORD, DWORD, PBYTE, PDWORD); + BOOL CryptImportKey(HCRYPTPROV, PBYTE, DWORD, HCRYPTKEY, DWORD, + HCRYPTKEY*); + BOOL CryptEncrypt(HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, PBYTE, PDWORD, + DWORD); + BOOL CryptDecrypt(HCRYPTKEY, HCRYPTHASH, BOOL, DWORD, PBYTE, PDWORD); + BOOL CryptCreateHash(HCRYPTPROV, ALG_ID, HCRYPTKEY, DWORD, HCRYPTHASH*); + BOOL CryptHashData(HCRYPTHASH, PBYTE, DWORD, DWORD); + BOOL CryptHashSessionKey(HCRYPTHASH, HCRYPTKEY, DWORD); + BOOL CryptGetHashValue(HCRYPTHASH, DWORD, PBYTE, PDWORD); + BOOL CryptDestroyHash(HCRYPTHASH); + BOOL CryptSignHashA(HCRYPTHASH, DWORD, LPCSTR, DWORD, PBYTE, PDWORD); + BOOL CryptSignHashW(HCRYPTHASH, DWORD, LPCWSTR, DWORD, PBYTE, PDWORD); + BOOL CryptVerifySignatureA(HCRYPTHASH, PBYTE, DWORD, HCRYPTKEY, LPCSTR, + DWORD); + BOOL CryptVerifySignatureW(HCRYPTHASH, PBYTE, DWORD, HCRYPTKEY, LPCWSTR, + DWORD); + BOOL CryptSetProviderA(LPCSTR, DWORD); + BOOL CryptSetProviderW(LPCWSTR, DWORD); +} + +version (Unicode) { + alias CertNameToStrW CertNameToStr; + alias CryptAcquireContextW CryptAcquireContext; + alias CryptSignHashW CryptSignHash; + alias CryptVerifySignatureW CryptVerifySignature; + alias CryptSetProviderW CryptSetProvider; + alias CertOpenSystemStoreW CertOpenSystemStore; + /+alias CERT_FIND_SUBJECT_STR_W CERT_FIND_SUBJECT_STR; + alias CERT_FIND_ISSUER_STR_W CERT_FIND_ISSUER_STR;+/ +} else { + alias CertNameToStrA CertNameToStr; + alias CryptAcquireContextA CryptAcquireContext; + alias CryptSignHashA CryptSignHash; + alias CryptVerifySignatureA CryptVerifySignature; + alias CryptSetProviderA CryptSetProvider; + alias CertOpenSystemStoreA CertOpenSystemStore; + /+alias CERT_FIND_SUBJECT_STR_A CERT_FIND_SUBJECT_STR; + alias CERT_FIND_ISSUER_STR_A CERT_FIND_ISSUER_STR;+/ +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/windef.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/windef.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,114 @@ +/***********************************************************************\ +* windef.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.windef; + +public import win32.winnt; +private import win32.w32api; + +const size_t MAX_PATH = 260; + +ushort MAKEWORD(ubyte a, ubyte b) { + return cast(ushort) ((b << 8) | a); +} + +uint MAKELONG(ushort a, ushort b) { + return cast(uint) ((b << 16) | a); +} + +ushort LOWORD(uint l) { + return cast(ushort) l; +} + +ushort HIWORD(uint l) { + return cast(ushort) (l >>> 16); +} + +ubyte LOBYTE(ushort w) { + return cast(ubyte) w; +} + +ubyte HIBYTE(ushort w) { + return cast(ubyte) (w >>> 8); +} + +template max(T) { + T max(T a, T b) { + return a > b ? a : b; + } +} + +template min(T) { + T min(T a, T b) { + return a < b ? a : b; + } +} + +const void* NULL = null; +alias ubyte BYTE; +alias ubyte* PBYTE, LPBYTE; +alias ushort USHORT, WORD, ATOM; +alias ushort* PUSHORT, PWORD, LPWORD; +alias uint ULONG, DWORD, UINT, COLORREF; +alias uint* PULONG, PDWORD, LPDWORD, PUINT, LPUINT; +alias int WINBOOL, BOOL, INT, LONG, HFILE, HRESULT; +alias int* PWINBOOL, LPWINBOOL, PBOOL, LPBOOL, PINT, LPINT, LPLONG; +alias float FLOAT; +alias float* PFLOAT; +alias void* PCVOID, LPCVOID; + +alias UINT_PTR WPARAM; +alias LONG_PTR LPARAM, LRESULT; + +alias HANDLE HGLOBAL, HLOCAL, GLOBALHANDLE, LOCALHANDLE, HGDIOBJ, HACCEL, + HBITMAP, HBRUSH, HCOLORSPACE, HDC, HGLRC, HDESK, HENHMETAFILE, HFONT, + HICON, HINSTANCE, HKEY, HMENU, HMETAFILE, HMODULE, HMONITOR, HPALETTE, HPEN, + HRGN, HRSRC, HSTR, HTASK, HWND, HWINSTA, HKL, HCURSOR; +alias HANDLE* PHKEY; + +static if (WINVER >= 0x500) { + alias HANDLE HTERMINAL, HWINEVENTHOOK; +} + +alias extern (Windows) int function() FARPROC, NEARPROC, PROC; + +struct RECT { + LONG left; + LONG top; + LONG right; + LONG bottom; +} +alias RECT RECTL; +alias RECT* PRECT, LPRECT, LPCRECT, PRECTL, LPRECTL, LPCRECTL; + +struct POINT { + LONG x; + LONG y; +} +alias POINT POINTL; +alias POINT* PPOINT, LPPOINT, PPOINTL, LPPOINTL; + +struct SIZE { + LONG cx; + LONG cy; +} +alias SIZE SIZEL; +alias SIZE* PSIZE, LPSIZE, PSIZEL, LPSIZEL; + +struct POINTS { + SHORT x; + SHORT y; +} +alias POINTS* PPOINTS, LPPOINTS; + +enum : BOOL { + FALSE = 0, + TRUE = 1 +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/windows.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/windows.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,77 @@ +/***********************************************************************\ +* windows.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.10 * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.windows; + +/* + windows.h - main header file for the Win32 API + + Written by Anders Norlander + + This file is part of a free library for the Win32 API. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + +*/ + +public import win32.w32api; +public import win32.core; + +// We can't use static if for imports, build gets confused. +version (WindowsVista) { + public import win32.winsvc; +} else version (Windows2003) { + public import win32.winsvc; +} else version (WindowsXP) { + public import win32.winsvc; +} else version (WindowsNTonly) { + public import win32.winsvc; +} + +public import win32.cderr; +public import win32.dde; +public import win32.ddeml; +public import win32.dlgs; +public import win32.imm; +public import win32.lzexpand; +public import win32.mmsystem; +public import win32.nb30; + + + +public import win32.rpc; +public import win32.shellapi; +public import win32.winperf; +public import win32.commdlg; +public import win32.winspool; +public import win32.ole2; + +// Select correct version of winsock. Importing the incorrect +// module will cause a static assert to prevent problems later on. +version (Win32_Winsock1) { + public import win32.winsock; +} else { + public import win32.winsock2; + public import win32.ws2tcpip; +} + +/+ +#if (_WIN32_WINNT >= 0x0400) +#include +/* + * MS likes to include mswsock.h here as well, + * but that can cause undefined symbols if + * winsock2.h is included before windows.h + */ +#else +#include +#endif /* (_WIN32_WINNT >= 0x0400) */ ++/ diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winerror.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winerror.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,2310 @@ +/***********************************************************************\ +* winerror.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winerror; + +/* Comments from the Mingw header: + * WAIT_TIMEOUT is also defined in winbase.h + */ + +private import win32.windef; + +alias int SCODE; // was in win32.wtypes. + +enum : uint { + ERROR_SUCCESS = 0, + NO_ERROR = 0, + ERROR_INVALID_FUNCTION, + ERROR_FILE_NOT_FOUND, + ERROR_PATH_NOT_FOUND, + ERROR_TOO_MANY_OPEN_FILES, + ERROR_ACCESS_DENIED, + ERROR_INVALID_HANDLE, + ERROR_ARENA_TRASHED, + ERROR_NOT_ENOUGH_MEMORY, + ERROR_INVALID_BLOCK, + ERROR_BAD_ENVIRONMENT, + ERROR_BAD_FORMAT, + ERROR_INVALID_ACCESS, + ERROR_INVALID_DATA, + ERROR_OUTOFMEMORY, + ERROR_INVALID_DRIVE, + ERROR_CURRENT_DIRECTORY, + ERROR_NOT_SAME_DEVICE, + ERROR_NO_MORE_FILES, + ERROR_WRITE_PROTECT, + ERROR_BAD_UNIT, + ERROR_NOT_READY, + ERROR_BAD_COMMAND, + ERROR_CRC, + ERROR_BAD_LENGTH, + ERROR_SEEK, + ERROR_NOT_DOS_DISK, + ERROR_SECTOR_NOT_FOUND, + ERROR_OUT_OF_PAPER, + ERROR_WRITE_FAULT, + ERROR_READ_FAULT, + ERROR_GEN_FAILURE, + ERROR_SHARING_VIOLATION, + ERROR_LOCK_VIOLATION, + ERROR_WRONG_DISK, // = 34 + ERROR_SHARING_BUFFER_EXCEEDED = 36, + ERROR_HANDLE_EOF = 38, + ERROR_HANDLE_DISK_FULL, // = 39 + ERROR_NOT_SUPPORTED = 50, + ERROR_REM_NOT_LIST, + ERROR_DUP_NAME, + ERROR_BAD_NETPATH, + ERROR_NETWORK_BUSY, + ERROR_DEV_NOT_EXIST, + ERROR_TOO_MANY_CMDS, + ERROR_ADAP_HDW_ERR, + ERROR_BAD_NET_RESP, + ERROR_UNEXP_NET_ERR, + ERROR_BAD_REM_ADAP, + ERROR_PRINTQ_FULL, + ERROR_NO_SPOOL_SPACE, + ERROR_PRINT_CANCELLED, + ERROR_NETNAME_DELETED, + ERROR_NETWORK_ACCESS_DENIED, + ERROR_BAD_DEV_TYPE, + ERROR_BAD_NET_NAME, + ERROR_TOO_MANY_NAMES, + ERROR_TOO_MANY_SESS, + ERROR_SHARING_PAUSED, + ERROR_REQ_NOT_ACCEP, + ERROR_REDIR_PAUSED, // = 72 + ERROR_FILE_EXISTS = 80, + ERROR_CANNOT_MAKE = 82, + ERROR_FAIL_I24, + ERROR_OUT_OF_STRUCTURES, + ERROR_ALREADY_ASSIGNED, + ERROR_INVALID_PASSWORD, + ERROR_INVALID_PARAMETER, + ERROR_NET_WRITE_FAULT, + ERROR_NO_PROC_SLOTS, // = 89 + ERROR_TOO_MANY_SEMAPHORES = 100, + ERROR_EXCL_SEM_ALREADY_OWNED, + ERROR_SEM_IS_SET, + ERROR_TOO_MANY_SEM_REQUESTS, + ERROR_INVALID_AT_INTERRUPT_TIME, + ERROR_SEM_OWNER_DIED, + ERROR_SEM_USER_LIMIT, + ERROR_DISK_CHANGE, + ERROR_DRIVE_LOCKED, + ERROR_BROKEN_PIPE, + ERROR_OPEN_FAILED, + ERROR_BUFFER_OVERFLOW, + ERROR_DISK_FULL, + ERROR_NO_MORE_SEARCH_HANDLES, + ERROR_INVALID_TARGET_HANDLE, // = 114 + ERROR_INVALID_CATEGORY = 117, + ERROR_INVALID_VERIFY_SWITCH, + ERROR_BAD_DRIVER_LEVEL, + ERROR_CALL_NOT_IMPLEMENTED, + ERROR_SEM_TIMEOUT, + ERROR_INSUFFICIENT_BUFFER, + ERROR_INVALID_NAME, + ERROR_INVALID_LEVEL, + ERROR_NO_VOLUME_LABEL, + ERROR_MOD_NOT_FOUND, + ERROR_PROC_NOT_FOUND, + ERROR_WAIT_NO_CHILDREN, + ERROR_CHILD_NOT_COMPLETE, + ERROR_DIRECT_ACCESS_HANDLE, + ERROR_NEGATIVE_SEEK, + ERROR_SEEK_ON_DEVICE, + ERROR_IS_JOIN_TARGET, + ERROR_IS_JOINED, + ERROR_IS_SUBSTED, + ERROR_NOT_JOINED, + ERROR_NOT_SUBSTED, + ERROR_JOIN_TO_JOIN, + ERROR_SUBST_TO_SUBST, + ERROR_JOIN_TO_SUBST, + ERROR_SUBST_TO_JOIN, + ERROR_BUSY_DRIVE, + ERROR_SAME_DRIVE, + ERROR_DIR_NOT_ROOT, + ERROR_DIR_NOT_EMPTY, + ERROR_IS_SUBST_PATH, + ERROR_IS_JOIN_PATH, + ERROR_PATH_BUSY, + ERROR_IS_SUBST_TARGET, + ERROR_SYSTEM_TRACE, + ERROR_INVALID_EVENT_COUNT, + ERROR_TOO_MANY_MUXWAITERS, + ERROR_INVALID_LIST_FORMAT, + ERROR_LABEL_TOO_LONG, + ERROR_TOO_MANY_TCBS, + ERROR_SIGNAL_REFUSED, + ERROR_DISCARDED, + ERROR_NOT_LOCKED, + ERROR_BAD_THREADID_ADDR, + ERROR_BAD_ARGUMENTS, + ERROR_BAD_PATHNAME, + ERROR_SIGNAL_PENDING, // = 162 + ERROR_MAX_THRDS_REACHED = 164, + ERROR_LOCK_FAILED = 167, + ERROR_BUSY = 170, + ERROR_CANCEL_VIOLATION = 173, + ERROR_ATOMIC_LOCKS_NOT_SUPPORTED, // = 174 + ERROR_INVALID_SEGMENT_NUMBER = 180, + ERROR_INVALID_ORDINAL = 182, + ERROR_ALREADY_EXISTS, // = 183 + ERROR_INVALID_FLAG_NUMBER = 186, + ERROR_SEM_NOT_FOUND, + ERROR_INVALID_STARTING_CODESEG, + ERROR_INVALID_STACKSEG, + ERROR_INVALID_MODULETYPE, + ERROR_INVALID_EXE_SIGNATURE, + ERROR_EXE_MARKED_INVALID, + ERROR_BAD_EXE_FORMAT, + ERROR_ITERATED_DATA_EXCEEDS_64k, + ERROR_INVALID_MINALLOCSIZE, + ERROR_DYNLINK_FROM_INVALID_RING, + ERROR_IOPL_NOT_ENABLED, + ERROR_INVALID_SEGDPL, + ERROR_AUTODATASEG_EXCEEDS_64k, + ERROR_RING2SEG_MUST_BE_MOVABLE, + ERROR_RELOC_CHAIN_XEEDS_SEGLIM, + ERROR_INFLOOP_IN_RELOC_CHAIN, + ERROR_ENVVAR_NOT_FOUND, // = 203 + ERROR_NO_SIGNAL_SENT = 205, + ERROR_FILENAME_EXCED_RANGE, + ERROR_RING2_STACK_IN_USE, + ERROR_META_EXPANSION_TOO_LONG, + ERROR_INVALID_SIGNAL_NUMBER, + ERROR_THREAD_1_INACTIVE, // = 210 + ERROR_LOCKED = 212, + ERROR_TOO_MANY_MODULES = 214, + ERROR_NESTING_NOT_ALLOWED, + ERROR_EXE_MACHINE_TYPE_MISMATCH, + ERROR_EXE_CANNOT_MODIFY_SIGNED_BINARY, + ERROR_EXE_CANNOT_MODIFY_STRONG_SIGNED_BINARY, // = 218 + ERROR_BAD_PIPE = 230, + ERROR_PIPE_BUSY, + ERROR_NO_DATA, + ERROR_PIPE_NOT_CONNECTED, + ERROR_MORE_DATA, // = 234 + ERROR_VC_DISCONNECTED = 240, + ERROR_INVALID_EA_NAME = 254, + ERROR_EA_LIST_INCONSISTENT, // = 255 + WAIT_TIMEOUT = 258, + ERROR_NO_MORE_ITEMS, // = 259 + ERROR_CANNOT_COPY = 266, + ERROR_DIRECTORY, // = 267 + ERROR_EAS_DIDNT_FIT = 275, + ERROR_EA_FILE_CORRUPT, + ERROR_EA_TABLE_FULL, + ERROR_INVALID_EA_HANDLE, // = 278 + ERROR_EAS_NOT_SUPPORTED = 282, + ERROR_NOT_OWNER = 288, + ERROR_TOO_MANY_POSTS = 298, + ERROR_PARTIAL_COPY, + ERROR_OPLOCK_NOT_GRANTED, + ERROR_INVALID_OPLOCK_PROTOCOL, + ERROR_DISK_TOO_FRAGMENTED, + ERROR_DELETE_PENDING, // = 303 + ERROR_MR_MID_NOT_FOUND = 317, + ERROR_SCOPE_NOT_FOUND, // = 318 + ERROR_INVALID_ADDRESS = 487, + ERROR_ARITHMETIC_OVERFLOW = 534, + ERROR_PIPE_CONNECTED, + ERROR_PIPE_LISTENING, // = 536 + ERROR_EA_ACCESS_DENIED = 994, + ERROR_OPERATION_ABORTED, + ERROR_IO_INCOMPLETE, + ERROR_IO_PENDING, + ERROR_NOACCESS, + ERROR_SWAPERROR, // = 999 + ERROR_STACK_OVERFLOW = 1001, + ERROR_INVALID_MESSAGE, + ERROR_CAN_NOT_COMPLETE, + ERROR_INVALID_FLAGS, + ERROR_UNRECOGNIZED_VOLUME, + ERROR_FILE_INVALID, + ERROR_FULLSCREEN_MODE, + ERROR_NO_TOKEN, + ERROR_BADDB, + ERROR_BADKEY, + ERROR_CANTOPEN, + ERROR_CANTREAD, + ERROR_CANTWRITE, + ERROR_REGISTRY_RECOVERED, + ERROR_REGISTRY_CORRUPT, + ERROR_REGISTRY_IO_FAILED, + ERROR_NOT_REGISTRY_FILE, + ERROR_KEY_DELETED, + ERROR_NO_LOG_SPACE, + ERROR_KEY_HAS_CHILDREN, + ERROR_CHILD_MUST_BE_VOLATILE, + ERROR_NOTIFY_ENUM_DIR, // = 1022 + ERROR_DEPENDENT_SERVICES_RUNNING = 1051, + ERROR_INVALID_SERVICE_CONTROL, + ERROR_SERVICE_REQUEST_TIMEOUT, + ERROR_SERVICE_NO_THREAD, + ERROR_SERVICE_DATABASE_LOCKED, + ERROR_SERVICE_ALREADY_RUNNING, + ERROR_INVALID_SERVICE_ACCOUNT, + ERROR_SERVICE_DISABLED, + ERROR_CIRCULAR_DEPENDENCY, + ERROR_SERVICE_DOES_NOT_EXIST, + ERROR_SERVICE_CANNOT_ACCEPT_CTRL, + ERROR_SERVICE_NOT_ACTIVE, + ERROR_FAILED_SERVICE_CONTROLLER_CONNECT, + ERROR_EXCEPTION_IN_SERVICE, + ERROR_DATABASE_DOES_NOT_EXIST, + ERROR_SERVICE_SPECIFIC_ERROR, + ERROR_PROCESS_ABORTED, + ERROR_SERVICE_DEPENDENCY_FAIL, + ERROR_SERVICE_LOGON_FAILED, + ERROR_SERVICE_START_HANG, + ERROR_INVALID_SERVICE_LOCK, + ERROR_SERVICE_MARKED_FOR_DELETE, + ERROR_SERVICE_EXISTS, + ERROR_ALREADY_RUNNING_LKG, + ERROR_SERVICE_DEPENDENCY_DELETED, + ERROR_BOOT_ALREADY_ACCEPTED, + ERROR_SERVICE_NEVER_STARTED, + ERROR_DUPLICATE_SERVICE_NAME, + ERROR_DIFFERENT_SERVICE_ACCOUNT, + ERROR_CANNOT_DETECT_DRIVER_FAILURE, + ERROR_CANNOT_DETECT_PROCESS_ABORT, + ERROR_NO_RECOVERY_PROGRAM, + ERROR_SERVICE_NOT_IN_EXE, + ERROR_NOT_SAFEBOOT_SERVICE, // = 1084 + ERROR_END_OF_MEDIA = 1100, + ERROR_FILEMARK_DETECTED, + ERROR_BEGINNING_OF_MEDIA, + ERROR_SETMARK_DETECTED, + ERROR_NO_DATA_DETECTED, + ERROR_PARTITION_FAILURE, + ERROR_INVALID_BLOCK_LENGTH, + ERROR_DEVICE_NOT_PARTITIONED, + ERROR_UNABLE_TO_LOCK_MEDIA, + ERROR_UNABLE_TO_UNLOAD_MEDIA, + ERROR_MEDIA_CHANGED, + ERROR_BUS_RESET, + ERROR_NO_MEDIA_IN_DRIVE, + ERROR_NO_UNICODE_TRANSLATION, + ERROR_DLL_INIT_FAILED, + ERROR_SHUTDOWN_IN_PROGRESS, + ERROR_NO_SHUTDOWN_IN_PROGRESS, + ERROR_IO_DEVICE, + ERROR_SERIAL_NO_DEVICE, + ERROR_IRQ_BUSY, + ERROR_MORE_WRITES, + ERROR_COUNTER_TIMEOUT, + ERROR_FLOPPY_ID_MARK_NOT_FOUND, + ERROR_FLOPPY_WRONG_CYLINDER, + ERROR_FLOPPY_UNKNOWN_ERROR, + ERROR_FLOPPY_BAD_REGISTERS, + ERROR_DISK_RECALIBRATE_FAILED, + ERROR_DISK_OPERATION_FAILED, + ERROR_DISK_RESET_FAILED, + ERROR_EOM_OVERFLOW, + ERROR_NOT_ENOUGH_SERVER_MEMORY, + ERROR_POSSIBLE_DEADLOCK, + ERROR_MAPPED_ALIGNMENT, // = 1132 + ERROR_SET_POWER_STATE_VETOED = 1140, + ERROR_SET_POWER_STATE_FAILED, + ERROR_TOO_MANY_LINKS, // = 1142 + ERROR_OLD_WIN_VERSION = 1150, + ERROR_APP_WRONG_OS, + ERROR_SINGLE_INSTANCE_APP, + ERROR_RMODE_APP, + ERROR_INVALID_DLL, + ERROR_NO_ASSOCIATION, + ERROR_DDE_FAIL, + ERROR_DLL_NOT_FOUND, + ERROR_NO_MORE_USER_HANDLES, + ERROR_MESSAGE_SYNC_ONLY, + ERROR_SOURCE_ELEMENT_EMPTY, + ERROR_DESTINATION_ELEMENT_FULL, + ERROR_ILLEGAL_ELEMENT_ADDRESS, + ERROR_MAGAZINE_NOT_PRESENT, + ERROR_DEVICE_REINITIALIZATION_NEEDED, + ERROR_DEVICE_REQUIRES_CLEANING, + ERROR_DEVICE_DOOR_OPEN, + ERROR_DEVICE_NOT_CONNECTED, + ERROR_NOT_FOUND, + ERROR_NO_MATCH, + ERROR_SET_NOT_FOUND, + ERROR_POINT_NOT_FOUND, + ERROR_NO_TRACKING_SERVICE, + ERROR_NO_VOLUME_ID, // = 1173 + ERROR_UNABLE_TO_REMOVE_REPLACED = 1175, + ERROR_UNABLE_TO_MOVE_REPLACEMENT, + ERROR_UNABLE_TO_MOVE_REPLACEMENT_2, + ERROR_JOURNAL_DELETE_IN_PROGRESS, + ERROR_JOURNAL_NOT_ACTIVE, + ERROR_POTENTIAL_FILE_FOUND, + ERROR_JOURNAL_ENTRY_DELETED, // = 1181 + ERROR_BAD_DEVICE = 1200, + ERROR_CONNECTION_UNAVAIL, + ERROR_DEVICE_ALREADY_REMEMBERED, + ERROR_NO_NET_OR_BAD_PATH, + ERROR_BAD_PROVIDER, + ERROR_CANNOT_OPEN_PROFILE, + ERROR_BAD_PROFILE, + ERROR_NOT_CONTAINER, + ERROR_EXTENDED_ERROR, + ERROR_INVALID_GROUPNAME, + ERROR_INVALID_COMPUTERNAME, + ERROR_INVALID_EVENTNAME, + ERROR_INVALID_DOMAINNAME, + ERROR_INVALID_SERVICENAME, + ERROR_INVALID_NETNAME, + ERROR_INVALID_SHARENAME, + ERROR_INVALID_PASSWORDNAME, + ERROR_INVALID_MESSAGENAME, + ERROR_INVALID_MESSAGEDEST, + ERROR_SESSION_CREDENTIAL_CONFLICT, + ERROR_REMOTE_SESSION_LIMIT_EXCEEDED, + ERROR_DUP_DOMAINNAME, + ERROR_NO_NETWORK, + ERROR_CANCELLED, + ERROR_USER_MAPPED_FILE, + ERROR_CONNECTION_REFUSED, + ERROR_GRACEFUL_DISCONNECT, + ERROR_ADDRESS_ALREADY_ASSOCIATED, + ERROR_ADDRESS_NOT_ASSOCIATED, + ERROR_CONNECTION_INVALID, + ERROR_CONNECTION_ACTIVE, + ERROR_NETWORK_UNREACHABLE, + ERROR_HOST_UNREACHABLE, + ERROR_PROTOCOL_UNREACHABLE, + ERROR_PORT_UNREACHABLE, + ERROR_REQUEST_ABORTED, + ERROR_CONNECTION_ABORTED, + ERROR_RETRY, + ERROR_CONNECTION_COUNT_LIMIT, + ERROR_LOGIN_TIME_RESTRICTION, + ERROR_LOGIN_WKSTA_RESTRICTION, + ERROR_INCORRECT_ADDRESS, + ERROR_ALREADY_REGISTERED, + ERROR_SERVICE_NOT_FOUND, + ERROR_NOT_AUTHENTICATED, + ERROR_NOT_LOGGED_ON, + ERROR_CONTINUE, + ERROR_ALREADY_INITIALIZED, + ERROR_NO_MORE_DEVICES, + ERROR_NO_SUCH_SITE, + ERROR_DOMAIN_CONTROLLER_EXISTS, + ERROR_ONLY_IF_CONNECTED, + ERROR_OVERRIDE_NOCHANGES, + ERROR_BAD_USER_PROFILE, + ERROR_NOT_SUPPORTED_ON_SBS, + ERROR_SERVER_SHUTDOWN_IN_PROGRESS, + ERROR_HOST_DOWN, + ERROR_NON_ACCOUNT_SID, + ERROR_NON_DOMAIN_SID, + ERROR_APPHELP_BLOCK, + ERROR_ACCESS_DISABLED_BY_POLICY, + ERROR_REG_NAT_CONSUMPTION, + ERROR_CSCSHARE_OFFLINE, + ERROR_PKINIT_FAILURE, + ERROR_SMARTCARD_SUBSYSTEM_FAILURE, + ERROR_DOWNGRADE_DETECTED, + SEC_E_SMARTCARD_CERT_REVOKED, + SEC_E_ISSUING_CA_UNTRUSTED, + SEC_E_REVOCATION_OFFLINE_C, + SEC_E_PKINIT_CLIENT_FAILUR, + SEC_E_SMARTCARD_CERT_EXPIRED, + ERROR_MACHINE_LOCKED, // = 1271 + ERROR_CALLBACK_SUPPLIED_INVALID_DATA = 1273, + ERROR_SYNC_FOREGROUND_REFRESH_REQUIRED, + ERROR_DRIVER_BLOCKED, + ERROR_INVALID_IMPORT_OF_NON_DLL, + ERROR_ACCESS_DISABLED_WEBBLADE, + ERROR_ACCESS_DISABLED_WEBBLADE_TAMPER, + ERROR_RECOVERY_FAILURE, + ERROR_ALREADY_FIBER, + ERROR_ALREADY_THREAD, + ERROR_STACK_BUFFER_OVERRUN, + ERROR_PARAMETER_QUOTA_EXCEEDED, + ERROR_DEBUGGER_INACTIVE, // = 1284 + ERROR_NOT_ALL_ASSIGNED = 1300, + ERROR_SOME_NOT_MAPPED, + ERROR_NO_QUOTAS_FOR_ACCOUNT, + ERROR_LOCAL_USER_SESSION_KEY, + ERROR_NULL_LM_PASSWORD, + ERROR_UNKNOWN_REVISION, + ERROR_REVISION_MISMATCH, + ERROR_INVALID_OWNER, + ERROR_INVALID_PRIMARY_GROUP, + ERROR_NO_IMPERSONATION_TOKEN, + ERROR_CANT_DISABLE_MANDATORY, + ERROR_NO_LOGON_SERVERS, + ERROR_NO_SUCH_LOGON_SESSION, + ERROR_NO_SUCH_PRIVILEGE, + ERROR_PRIVILEGE_NOT_HELD, + ERROR_INVALID_ACCOUNT_NAME, + ERROR_USER_EXISTS, + ERROR_NO_SUCH_USER, + ERROR_GROUP_EXISTS, + ERROR_NO_SUCH_GROUP, + ERROR_MEMBER_IN_GROUP, + ERROR_MEMBER_NOT_IN_GROUP, + ERROR_LAST_ADMIN, + ERROR_WRONG_PASSWORD, + ERROR_ILL_FORMED_PASSWORD, + ERROR_PASSWORD_RESTRICTION, + ERROR_LOGON_FAILURE, + ERROR_ACCOUNT_RESTRICTION, + ERROR_INVALID_LOGON_HOURS, + ERROR_INVALID_WORKSTATION, + ERROR_PASSWORD_EXPIRED, + ERROR_ACCOUNT_DISABLED, + ERROR_NONE_MAPPED, + ERROR_TOO_MANY_LUIDS_REQUESTED, + ERROR_LUIDS_EXHAUSTED, + ERROR_INVALID_SUB_AUTHORITY, + ERROR_INVALID_ACL, + ERROR_INVALID_SID, + ERROR_INVALID_SECURITY_DESCR, // = 1338 + ERROR_BAD_INHERITANCE_ACL = 1340, + ERROR_SERVER_DISABLED, + ERROR_SERVER_NOT_DISABLED, + ERROR_INVALID_ID_AUTHORITY, + ERROR_ALLOTTED_SPACE_EXCEEDED, + ERROR_INVALID_GROUP_ATTRIBUTES, + ERROR_BAD_IMPERSONATION_LEVEL, + ERROR_CANT_OPEN_ANONYMOUS, + ERROR_BAD_VALIDATION_CLASS, + ERROR_BAD_TOKEN_TYPE, + ERROR_NO_SECURITY_ON_OBJECT, + ERROR_CANT_ACCESS_DOMAIN_INFO, + ERROR_INVALID_SERVER_STATE, + ERROR_INVALID_DOMAIN_STATE, + ERROR_INVALID_DOMAIN_ROLE, + ERROR_NO_SUCH_DOMAIN, + ERROR_DOMAIN_EXISTS, + ERROR_DOMAIN_LIMIT_EXCEEDED, + ERROR_INTERNAL_DB_CORRUPTION, + ERROR_INTERNAL_ERROR, + ERROR_GENERIC_NOT_MAPPED, + ERROR_BAD_DESCRIPTOR_FORMAT, + ERROR_NOT_LOGON_PROCESS, + ERROR_LOGON_SESSION_EXISTS, + ERROR_NO_SUCH_PACKAGE, + ERROR_BAD_LOGON_SESSION_STATE, + ERROR_LOGON_SESSION_COLLISION, + ERROR_INVALID_LOGON_TYPE, + ERROR_CANNOT_IMPERSONATE, + ERROR_RXACT_INVALID_STATE, + ERROR_RXACT_COMMIT_FAILURE, + ERROR_SPECIAL_ACCOUNT, + ERROR_SPECIAL_GROUP, + ERROR_SPECIAL_USER, + ERROR_MEMBERS_PRIMARY_GROUP, + ERROR_TOKEN_ALREADY_IN_USE, + ERROR_NO_SUCH_ALIAS, + ERROR_MEMBER_NOT_IN_ALIAS, + ERROR_MEMBER_IN_ALIAS, + ERROR_ALIAS_EXISTS, + ERROR_LOGON_NOT_GRANTED, + ERROR_TOO_MANY_SECRETS, + ERROR_SECRET_TOO_LONG, + ERROR_INTERNAL_DB_ERROR, + ERROR_TOO_MANY_CONTEXT_IDS, + ERROR_LOGON_TYPE_NOT_GRANTED, + ERROR_NT_CROSS_ENCRYPTION_REQUIRED, + ERROR_NO_SUCH_MEMBER, + ERROR_INVALID_MEMBER, + ERROR_TOO_MANY_SIDS, + ERROR_LM_CROSS_ENCRYPTION_REQUIRED, + ERROR_NO_INHERITANCE, + ERROR_FILE_CORRUPT, + ERROR_DISK_CORRUPT, + ERROR_NO_USER_SESSION_KEY, + ERROR_LICENSE_QUOTA_EXCEEDED, + ERROR_WRONG_TARGET_NAME, + ERROR_MUTUAL_AUTH_FAILED, + ERROR_TIME_SKEW, + ERROR_CURRENT_DOMAIN_NOT_ALLOWED, + ERROR_INVALID_WINDOW_HANDLE, + ERROR_INVALID_MENU_HANDLE, + ERROR_INVALID_CURSOR_HANDLE, + ERROR_INVALID_ACCEL_HANDLE, + ERROR_INVALID_HOOK_HANDLE, + ERROR_INVALID_DWP_HANDLE, + ERROR_TLW_WITH_WSCHILD, + ERROR_CANNOT_FIND_WND_CLASS, + ERROR_WINDOW_OF_OTHER_THREAD, + ERROR_HOTKEY_ALREADY_REGISTERED, + ERROR_CLASS_ALREADY_EXISTS, + ERROR_CLASS_DOES_NOT_EXIST, + ERROR_CLASS_HAS_WINDOWS, + ERROR_INVALID_INDEX, + ERROR_INVALID_ICON_HANDLE, + ERROR_PRIVATE_DIALOG_INDEX, + ERROR_LISTBOX_ID_NOT_FOUND, + ERROR_NO_WILDCARD_CHARACTERS, + ERROR_CLIPBOARD_NOT_OPEN, + ERROR_HOTKEY_NOT_REGISTERED, + ERROR_WINDOW_NOT_DIALOG, + ERROR_CONTROL_ID_NOT_FOUND, + ERROR_INVALID_COMBOBOX_MESSAGE, + ERROR_WINDOW_NOT_COMBOBOX, + ERROR_INVALID_EDIT_HEIGHT, + ERROR_DC_NOT_FOUND, + ERROR_INVALID_HOOK_FILTER, + ERROR_INVALID_FILTER_PROC, + ERROR_HOOK_NEEDS_HMOD, + ERROR_GLOBAL_ONLY_HOOK, + ERROR_JOURNAL_HOOK_SET, + ERROR_HOOK_NOT_INSTALLED, + ERROR_INVALID_LB_MESSAGE, + ERROR_SETCOUNT_ON_BAD_LB, + ERROR_LB_WITHOUT_TABSTOPS, + ERROR_DESTROY_OBJECT_OF_OTHER_THREAD, + ERROR_CHILD_WINDOW_MENU, + ERROR_NO_SYSTEM_MENU, + ERROR_INVALID_MSGBOX_STYLE, + ERROR_INVALID_SPI_VALUE, + ERROR_SCREEN_ALREADY_LOCKED, + ERROR_HWNDS_HAVE_DIFF_PARENT, + ERROR_NOT_CHILD_WINDOW, + ERROR_INVALID_GW_COMMAND, + ERROR_INVALID_THREAD_ID, + ERROR_NON_MDICHILD_WINDOW, + ERROR_POPUP_ALREADY_ACTIVE, + ERROR_NO_SCROLLBARS, + ERROR_INVALID_SCROLLBAR_RANGE, + ERROR_INVALID_SHOWWIN_COMMAND, + ERROR_NO_SYSTEM_RESOURCES, + ERROR_NONPAGED_SYSTEM_RESOURCES, + ERROR_PAGED_SYSTEM_RESOURCES, + ERROR_WORKING_SET_QUOTA, + ERROR_PAGEFILE_QUOTA, + ERROR_COMMITMENT_LIMIT, + ERROR_MENU_ITEM_NOT_FOUND, + ERROR_INVALID_KEYBOARD_HANDLE, + ERROR_HOOK_TYPE_NOT_ALLOWED, + ERROR_REQUIRES_INTERACTIVE_WINDOWSTATION, + ERROR_TIMEOUT, + ERROR_INVALID_MONITOR_HANDLE, // = 1461 + ERROR_EVENTLOG_FILE_CORRUPT = 1500, + ERROR_EVENTLOG_CANT_START, + ERROR_LOG_FILE_FULL, + ERROR_EVENTLOG_FILE_CHANGED, // = 1503 + ERROR_INSTALL_SERVICE_FAILURE = 1601, + ERROR_INSTALL_USEREXIT, + ERROR_INSTALL_FAILURE, + ERROR_INSTALL_SUSPEND, + ERROR_UNKNOWN_PRODUCT, + ERROR_UNKNOWN_FEATURE, + ERROR_UNKNOWN_COMPONENT, + ERROR_UNKNOWN_PROPERTY, + ERROR_INVALID_HANDLE_STATE, + ERROR_BAD_CONFIGURATION, + ERROR_INDEX_ABSENT, + ERROR_INSTALL_SOURCE_ABSENT, + ERROR_INSTALL_PACKAGE_VERSION, + ERROR_PRODUCT_UNINSTALLED, + ERROR_BAD_QUERY_SYNTAX, + ERROR_INVALID_FIELD, + ERROR_DEVICE_REMOVED, + ERROR_INSTALL_ALREADY_RUNNING, + ERROR_INSTALL_PACKAGE_OPEN_FAILED, + ERROR_INSTALL_PACKAGE_INVALID, + ERROR_INSTALL_UI_FAILURE, + ERROR_INSTALL_LOG_FAILURE, + ERROR_INSTALL_LANGUAGE_UNSUPPORTED, + ERROR_INSTALL_TRANSFORM_FAILURE, + ERROR_INSTALL_PACKAGE_REJECTED, + ERROR_FUNCTION_NOT_CALLED, + ERROR_FUNCTION_FAILED, + ERROR_INVALID_TABLE, + ERROR_DATATYPE_MISMATCH, + ERROR_UNSUPPORTED_TYPE, + ERROR_CREATE_FAILED, + ERROR_INSTALL_TEMP_UNWRITABLE, + ERROR_INSTALL_PLATFORM_UNSUPPORTED, + ERROR_INSTALL_NOTUSED, + ERROR_PATCH_PACKAGE_OPEN_FAILED, + ERROR_PATCH_PACKAGE_INVALID, + ERROR_PATCH_PACKAGE_UNSUPPORTED, + ERROR_PRODUCT_VERSION, + ERROR_INVALID_COMMAND_LINE, + ERROR_INSTALL_REMOTE_DISALLOWED, + ERROR_SUCCESS_REBOOT_INITIATED, + ERROR_PATCH_TARGET_NOT_FOUND, + ERROR_PATCH_PACKAGE_REJECTED, + ERROR_INSTALL_TRANSFORM_REJECTED, + ERROR_INSTALL_REMOTE_PROHIBITED, // = 1645 + RPC_S_INVALID_STRING_BINDING = 1700, + RPC_S_WRONG_KIND_OF_BINDING, + RPC_S_INVALID_BINDING, + RPC_S_PROTSEQ_NOT_SUPPORTED, + RPC_S_INVALID_RPC_PROTSEQ, + RPC_S_INVALID_STRING_UUID, + RPC_S_INVALID_ENDPOINT_FORMAT, + RPC_S_INVALID_NET_ADDR, + RPC_S_NO_ENDPOINT_FOUND, + RPC_S_INVALID_TIMEOUT, + RPC_S_OBJECT_NOT_FOUND, + RPC_S_ALREADY_REGISTERED, + RPC_S_TYPE_ALREADY_REGISTERED, + RPC_S_ALREADY_LISTENING, + RPC_S_NO_PROTSEQS_REGISTERED, + RPC_S_NOT_LISTENING, + RPC_S_UNKNOWN_MGR_TYPE, + RPC_S_UNKNOWN_IF, + RPC_S_NO_BINDINGS, + RPC_S_NO_PROTSEQS, + RPC_S_CANT_CREATE_ENDPOINT, + RPC_S_OUT_OF_RESOURCES, + RPC_S_SERVER_UNAVAILABLE, + RPC_S_SERVER_TOO_BUSY, + RPC_S_INVALID_NETWORK_OPTIONS, + RPC_S_NO_CALL_ACTIVE, + RPC_S_CALL_FAILED, + RPC_S_CALL_FAILED_DNE, + RPC_S_PROTOCOL_ERROR, // = 1728 + RPC_S_UNSUPPORTED_TRANS_SYN = 1730, + RPC_S_UNSUPPORTED_TYPE = 1732, + RPC_S_INVALID_TAG, + RPC_S_INVALID_BOUND, + RPC_S_NO_ENTRY_NAME, + RPC_S_INVALID_NAME_SYNTAX, + RPC_S_UNSUPPORTED_NAME_SYNTAX, // = 1737 + RPC_S_UUID_NO_ADDRESS = 1739, + RPC_S_DUPLICATE_ENDPOINT, + RPC_S_UNKNOWN_AUTHN_TYPE, + RPC_S_MAX_CALLS_TOO_SMALL, + RPC_S_STRING_TOO_LONG, + RPC_S_PROTSEQ_NOT_FOUND, + RPC_S_PROCNUM_OUT_OF_RANGE, + RPC_S_BINDING_HAS_NO_AUTH, + RPC_S_UNKNOWN_AUTHN_SERVICE, + RPC_S_UNKNOWN_AUTHN_LEVEL, + RPC_S_INVALID_AUTH_IDENTITY, + RPC_S_UNKNOWN_AUTHZ_SERVICE, + EPT_S_INVALID_ENTRY, + EPT_S_CANT_PERFORM_OP, + EPT_S_NOT_REGISTERED, + RPC_S_NOTHING_TO_EXPORT, + RPC_S_INCOMPLETE_NAME, + RPC_S_INVALID_VERS_OPTION, + RPC_S_NO_MORE_MEMBERS, + RPC_S_NOT_ALL_OBJS_UNEXPORTED, + RPC_S_INTERFACE_NOT_FOUND, + RPC_S_ENTRY_ALREADY_EXISTS, + RPC_S_ENTRY_NOT_FOUND, + RPC_S_NAME_SERVICE_UNAVAILABLE, + RPC_S_INVALID_NAF_ID, + RPC_S_CANNOT_SUPPORT, + RPC_S_NO_CONTEXT_AVAILABLE, + RPC_S_INTERNAL_ERROR, + RPC_S_ZERO_DIVIDE, + RPC_S_ADDRESS_ERROR, + RPC_S_FP_DIV_ZERO, + RPC_S_FP_UNDERFLOW, + RPC_S_FP_OVERFLOW, + RPC_X_NO_MORE_ENTRIES, + RPC_X_SS_CHAR_TRANS_OPEN_FAIL, + RPC_X_SS_CHAR_TRANS_SHORT_FILE, + RPC_X_SS_IN_NULL_CONTEXT, // = 1775 + RPC_X_SS_CONTEXT_DAMAGED = 1777, + RPC_X_SS_HANDLES_MISMATCH, + RPC_X_SS_CANNOT_GET_CALL_HANDLE, + RPC_X_NULL_REF_POINTER, + RPC_X_ENUM_VALUE_OUT_OF_RANGE, + RPC_X_BYTE_COUNT_TOO_SMALL, + RPC_X_BAD_STUB_DATA, + ERROR_INVALID_USER_BUFFER, + ERROR_UNRECOGNIZED_MEDIA, + ERROR_NO_TRUST_LSA_SECRET, + ERROR_NO_TRUST_SAM_ACCOUNT, + ERROR_TRUSTED_DOMAIN_FAILURE, + ERROR_TRUSTED_RELATIONSHIP_FAILURE, + ERROR_TRUST_FAILURE, + RPC_S_CALL_IN_PROGRESS, + ERROR_NETLOGON_NOT_STARTED, + ERROR_ACCOUNT_EXPIRED, + ERROR_REDIRECTOR_HAS_OPEN_HANDLES, + ERROR_PRINTER_DRIVER_ALREADY_INSTALLED, + ERROR_UNKNOWN_PORT, + ERROR_UNKNOWN_PRINTER_DRIVER, + ERROR_UNKNOWN_PRINTPROCESSOR, + ERROR_INVALID_SEPARATOR_FILE, + ERROR_INVALID_PRIORITY, + ERROR_INVALID_PRINTER_NAME, + ERROR_PRINTER_ALREADY_EXISTS, + ERROR_INVALID_PRINTER_COMMAND, + ERROR_INVALID_DATATYPE, + ERROR_INVALID_ENVIRONMENT, + RPC_S_NO_MORE_BINDINGS, + ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT, + ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT, + ERROR_NOLOGON_SERVER_TRUST_ACCOUNT, + ERROR_DOMAIN_TRUST_INCONSISTENT, + ERROR_SERVER_HAS_OPEN_HANDLES, + ERROR_RESOURCE_DATA_NOT_FOUND, + ERROR_RESOURCE_TYPE_NOT_FOUND, + ERROR_RESOURCE_NAME_NOT_FOUND, + ERROR_RESOURCE_LANG_NOT_FOUND, + ERROR_NOT_ENOUGH_QUOTA, + RPC_S_NO_INTERFACES, + RPC_S_CALL_CANCELLED, + RPC_S_BINDING_INCOMPLETE, + RPC_S_COMM_FAILURE, + RPC_S_UNSUPPORTED_AUTHN_LEVEL, + RPC_S_NO_PRINC_NAME, + RPC_S_NOT_RPC_ERROR, + RPC_S_UUID_LOCAL_ONLY, + RPC_S_SEC_PKG_ERROR, + RPC_S_NOT_CANCELLED, + RPC_X_INVALID_ES_ACTION, + RPC_X_WRONG_ES_VERSION, + RPC_X_WRONG_STUB_VERSION, + RPC_X_INVALID_PIPE_OBJECT, + RPC_X_WRONG_PIPE_ORDER, + RPC_X_WRONG_PIPE_VERSION, // = 1832 + RPC_S_GROUP_MEMBER_NOT_FOUND = 1898, + EPT_S_CANT_CREATE, + RPC_S_INVALID_OBJECT, + ERROR_INVALID_TIME, + ERROR_INVALID_FORM_NAME, + ERROR_INVALID_FORM_SIZE, + ERROR_ALREADY_WAITING, + ERROR_PRINTER_DELETED, + ERROR_INVALID_PRINTER_STATE, + ERROR_PASSWORD_MUST_CHANGE, + ERROR_DOMAIN_CONTROLLER_NOT_FOUND, + ERROR_ACCOUNT_LOCKED_OUT, + OR_INVALID_OXID, + OR_INVALID_OID, + OR_INVALID_SET, + RPC_S_SEND_INCOMPLETE, + RPC_S_INVALID_ASYNC_HANDLE, + RPC_S_INVALID_ASYNC_CALL, + RPC_X_PIPE_CLOSED, + RPC_X_PIPE_DISCIPLINE_ERROR, + RPC_X_PIPE_EMPTY, + ERROR_NO_SITENAME, + ERROR_CANT_ACCESS_FILE, + ERROR_CANT_RESOLVE_FILENAME, + RPC_S_ENTRY_TYPE_MISMATCH, + RPC_S_NOT_ALL_OBJS_EXPORTED, + RPC_S_INTERFACE_NOT_EXPORTED, + RPC_S_PROFILE_NOT_ADDED, + RPC_S_PRF_ELT_NOT_ADDED, + RPC_S_PRF_ELT_NOT_REMOVED, + RPC_S_GRP_ELT_NOT_ADDED, + RPC_S_GRP_ELT_NOT_REMOVED, + ERROR_KM_DRIVER_BLOCKED, + ERROR_CONTEXT_EXPIRED, + ERROR_PER_USER_TRUST_QUOTA_EXCEEDED, + ERROR_ALL_USER_TRUST_QUOTA_EXCEEDED, + ERROR_USER_DELETE_TRUST_QUOTA_EXCEEDED, // = 1934 + ERROR_INVALID_PIXEL_FORMAT = 2000, + ERROR_BAD_DRIVER, + ERROR_INVALID_WINDOW_STYLE, + ERROR_METAFILE_NOT_SUPPORTED, + ERROR_TRANSFORM_NOT_SUPPORTED, + ERROR_CLIPPING_NOT_SUPPORTED, // = 2005 + ERROR_INVALID_CMM = 2010, + ERROR_INVALID_PROFILE, + ERROR_TAG_NOT_FOUND, + ERROR_TAG_NOT_PRESENT, + ERROR_DUPLICATE_TAG, + ERROR_PROFILE_NOT_ASSOCIATED_WITH_DEVICE, + ERROR_PROFILE_NOT_FOUND, + ERROR_INVALID_COLORSPACE, + ERROR_ICM_NOT_ENABLED, + ERROR_DELETING_ICM_XFORM, + ERROR_INVALID_TRANSFORM, + ERROR_COLORSPACE_MISMATCH, + ERROR_INVALID_COLORINDEX, // = 2022 + ERROR_CONNECTED_OTHER_PASSWORD = 2108, + ERROR_CONNECTED_OTHER_PASSWORD_DEFAULT, // = 2109 + ERROR_BAD_USERNAME = 2202, + ERROR_NOT_CONNECTED = 2250, + ERROR_OPEN_FILES = 2401, + ERROR_ACTIVE_CONNECTIONS, // = 2402 + ERROR_DEVICE_IN_USE = 2404, + ERROR_UNKNOWN_PRINT_MONITOR = 3000, + ERROR_PRINTER_DRIVER_IN_USE, + ERROR_SPOOL_FILE_NOT_FOUND, + ERROR_SPL_NO_STARTDOC, + ERROR_SPL_NO_ADDJOB, + ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED, + ERROR_PRINT_MONITOR_ALREADY_INSTALLED, + ERROR_INVALID_PRINT_MONITOR, + ERROR_PRINT_MONITOR_IN_USE, + ERROR_PRINTER_HAS_JOBS_QUEUED, + ERROR_SUCCESS_REBOOT_REQUIRED, + ERROR_SUCCESS_RESTART_REQUIRED, + ERROR_PRINTER_NOT_FOUND, + ERROR_PRINTER_DRIVER_WARNED, + ERROR_PRINTER_DRIVER_BLOCKED, // = 3014 + ERROR_WINS_INTERNAL = 4000, + ERROR_CAN_NOT_DEL_LOCAL_WINS, + ERROR_STATIC_INIT, + ERROR_INC_BACKUP, + ERROR_FULL_BACKUP, + ERROR_REC_NON_EXISTENT, + ERROR_RPL_NOT_ALLOWED, // = 4006 + ERROR_DHCP_ADDRESS_CONFLICT = 4100, + ERROR_WMI_GUID_NOT_FOUND = 4200, + ERROR_WMI_INSTANCE_NOT_FOUND, + ERROR_WMI_ITEMID_NOT_FOUND, + ERROR_WMI_TRY_AGAIN, + ERROR_WMI_DP_NOT_FOUND, + ERROR_WMI_UNRESOLVED_INSTANCE_REF, + ERROR_WMI_ALREADY_ENABLED, + ERROR_WMI_GUID_DISCONNECTED, + ERROR_WMI_SERVER_UNAVAILABLE, + ERROR_WMI_DP_FAILED, + ERROR_WMI_INVALID_MOF, + ERROR_WMI_INVALID_REGINFO, + ERROR_WMI_ALREADY_DISABLED, + ERROR_WMI_READ_ONLY, + ERROR_WMI_SET_FAILURE, // = 4214 + ERROR_INVALID_MEDIA = 4300, + ERROR_INVALID_LIBRARY, + ERROR_INVALID_MEDIA_POOL, + ERROR_DRIVE_MEDIA_MISMATCH, + ERROR_MEDIA_OFFLINE, + ERROR_LIBRARY_OFFLINE, + ERROR_EMPTY, + ERROR_NOT_EMPTY, + ERROR_MEDIA_UNAVAILABLE, + ERROR_RESOURCE_DISABLED, + ERROR_INVALID_CLEANER, + ERROR_UNABLE_TO_CLEAN, + ERROR_OBJECT_NOT_FOUND, + ERROR_DATABASE_FAILURE, + ERROR_DATABASE_FULL, + ERROR_MEDIA_INCOMPATIBLE, + ERROR_RESOURCE_NOT_PRESENT, + ERROR_INVALID_OPERATION, + ERROR_MEDIA_NOT_AVAILABLE, + ERROR_DEVICE_NOT_AVAILABLE, + ERROR_REQUEST_REFUSED, + ERROR_INVALID_DRIVE_OBJECT, + ERROR_LIBRARY_FULL, + ERROR_MEDIUM_NOT_ACCESSIBLE, + ERROR_UNABLE_TO_LOAD_MEDIUM, + ERROR_UNABLE_TO_INVENTORY_DRIVE, + ERROR_UNABLE_TO_INVENTORY_SLOT, + ERROR_UNABLE_TO_INVENTORY_TRANSPORT, + ERROR_TRANSPORT_FULL, + ERROR_CONTROLLING_IEPORT, + ERROR_UNABLE_TO_EJECT_MOUNTED_MEDIA, + ERROR_CLEANER_SLOT_SET, + ERROR_CLEANER_SLOT_NOT_SET, + ERROR_CLEANER_CARTRIDGE_SPENT, + ERROR_UNEXPECTED_OMID, + ERROR_CANT_DELETE_LAST_ITEM, + ERROR_MESSAGE_EXCEEDS_MAX_SIZE, + ERROR_VOLUME_CONTAINS_SYS_FILES, + ERROR_INDIGENOUS_TYPE, + ERROR_NO_SUPPORTING_DRIVES, + ERROR_CLEANER_CARTRIDGE_INSTALLED, // = 4340 + ERROR_FILE_OFFLINE = 4350, + ERROR_REMOTE_STORAGE_NOT_ACTIVE, + ERROR_REMOTE_STORAGE_MEDIA_ERROR, // = 4352 + ERROR_NOT_A_REPARSE_POINT = 4390, + ERROR_REPARSE_ATTRIBUTE_CONFLICT, + ERROR_INVALID_REPARSE_DATA, + ERROR_REPARSE_TAG_INVALID, + ERROR_REPARSE_TAG_MISMATCH, // = 4394 + ERROR_VOLUME_NOT_SIS_ENABLED = 4500, + ERROR_DEPENDENT_RESOURCE_EXISTS = 5001, + ERROR_DEPENDENCY_NOT_FOUND, + ERROR_DEPENDENCY_ALREADY_EXISTS, + ERROR_RESOURCE_NOT_ONLINE, + ERROR_HOST_NODE_NOT_AVAILABLE, + ERROR_RESOURCE_NOT_AVAILABLE, + ERROR_RESOURCE_NOT_FOUND, + ERROR_SHUTDOWN_CLUSTER, + ERROR_CANT_EVICT_ACTIVE_NODE, + ERROR_OBJECT_ALREADY_EXISTS, + ERROR_OBJECT_IN_LIST, + ERROR_GROUP_NOT_AVAILABLE, + ERROR_GROUP_NOT_FOUND, + ERROR_GROUP_NOT_ONLINE, + ERROR_HOST_NODE_NOT_RESOURCE_OWNER, + ERROR_HOST_NODE_NOT_GROUP_OWNER, + ERROR_RESMON_CREATE_FAILED, + ERROR_RESMON_ONLINE_FAILED, + ERROR_RESOURCE_ONLINE, + ERROR_QUORUM_RESOURCE, + ERROR_NOT_QUORUM_CAPABLE, + ERROR_CLUSTER_SHUTTING_DOWN, + ERROR_INVALID_STATE, + ERROR_RESOURCE_PROPERTIES_STORED, + ERROR_NOT_QUORUM_CLASS, + ERROR_CORE_RESOURCE, + ERROR_QUORUM_RESOURCE_ONLINE_FAILED, + ERROR_QUORUMLOG_OPEN_FAILED, + ERROR_CLUSTERLOG_CORRUPT, + ERROR_CLUSTERLOG_RECORD_EXCEEDS_MAXSIZE, + ERROR_CLUSTERLOG_EXCEEDS_MAXSIZE, + ERROR_CLUSTERLOG_CHKPOINT_NOT_FOUND, + ERROR_CLUSTERLOG_NOT_ENOUGH_SPACE, + ERROR_QUORUM_OWNER_ALIVE, + ERROR_NETWORK_NOT_AVAILABLE, + ERROR_NODE_NOT_AVAILABLE, + ERROR_ALL_NODES_NOT_AVAILABLE, + ERROR_RESOURCE_FAILED, + ERROR_CLUSTER_INVALID_NODE, + ERROR_CLUSTER_NODE_EXISTS, + ERROR_CLUSTER_JOIN_IN_PROGRESS, + ERROR_CLUSTER_NODE_NOT_FOUND, + ERROR_CLUSTER_LOCAL_NODE_NOT_FOUND, + ERROR_CLUSTER_NETWORK_EXISTS, + ERROR_CLUSTER_NETWORK_NOT_FOUND, + ERROR_CLUSTER_NETINTERFACE_EXISTS, + ERROR_CLUSTER_NETINTERFACE_NOT_FOUND, + ERROR_CLUSTER_INVALID_REQUEST, + ERROR_CLUSTER_INVALID_NETWORK_PROVIDER, + ERROR_CLUSTER_NODE_DOWN, + ERROR_CLUSTER_NODE_UNREACHABLE, + ERROR_CLUSTER_NODE_NOT_MEMBER, + ERROR_CLUSTER_JOIN_NOT_IN_PROGRESS, + ERROR_CLUSTER_INVALID_NETWORK, // = 5054 + ERROR_CLUSTER_NODE_UP = 5056, + ERROR_CLUSTER_IPADDR_IN_USE, + ERROR_CLUSTER_NODE_NOT_PAUSED, + ERROR_CLUSTER_NO_SECURITY_CONTEXT, + ERROR_CLUSTER_NETWORK_NOT_INTERNAL, + ERROR_CLUSTER_NODE_ALREADY_UP, + ERROR_CLUSTER_NODE_ALREADY_DOWN, + ERROR_CLUSTER_NETWORK_ALREADY_ONLINE, + ERROR_CLUSTER_NETWORK_ALREADY_OFFLINE, + ERROR_CLUSTER_NODE_ALREADY_MEMBER, + ERROR_CLUSTER_LAST_INTERNAL_NETWORK, + ERROR_CLUSTER_NETWORK_HAS_DEPENDENTS, + ERROR_INVALID_OPERATION_ON_QUORUM, + ERROR_DEPENDENCY_NOT_ALLOWED, + ERROR_CLUSTER_NODE_PAUSED, + ERROR_NODE_CANT_HOST_RESOURCE, + ERROR_CLUSTER_NODE_NOT_READY, + ERROR_CLUSTER_NODE_SHUTTING_DOWN, + ERROR_CLUSTER_JOIN_ABORTED, + ERROR_CLUSTER_INCOMPATIBLE_VERSIONS, + ERROR_CLUSTER_MAXNUM_OF_RESOURCES_EXCEEDED, + ERROR_CLUSTER_SYSTEM_CONFIG_CHANGED, + ERROR_CLUSTER_RESOURCE_TYPE_NOT_FOUND, + ERROR_CLUSTER_RESTYPE_NOT_SUPPORTED, + ERROR_CLUSTER_RESNAME_NOT_FOUND, + ERROR_CLUSTER_NO_RPC_PACKAGES_REGISTERED, + ERROR_CLUSTER_OWNER_NOT_IN_PREFLIST, + ERROR_CLUSTER_DATABASE_SEQMISMATCH, + ERROR_RESMON_INVALID_STATE, + ERROR_CLUSTER_GUM_NOT_LOCKER, + ERROR_QUORUM_DISK_NOT_FOUND, + ERROR_DATABASE_BACKUP_CORRUPT, + ERROR_CLUSTER_NODE_ALREADY_HAS_DFS_ROOT, + ERROR_RESOURCE_PROPERTY_UNCHANGEABLE, // = 5089 + ERROR_CLUSTER_MEMBERSHIP_INVALID_STATE = 5890, + ERROR_CLUSTER_QUORUMLOG_NOT_FOUND, + ERROR_CLUSTER_MEMBERSHIP_HALT, + ERROR_CLUSTER_INSTANCE_ID_MISMATCH, + ERROR_CLUSTER_NETWORK_NOT_FOUND_FOR_IP, + ERROR_CLUSTER_PROPERTY_DATA_TYPE_MISMATCH, + ERROR_CLUSTER_EVICT_WITHOUT_CLEANUP, + ERROR_CLUSTER_PARAMETER_MISMATCH, + ERROR_NODE_CANNOT_BE_CLUSTERED, + ERROR_CLUSTER_WRONG_OS_VERSION, + ERROR_CLUSTER_CANT_CREATE_DUP_CLUSTER_NAME, + ERROR_CLUSCFG_ALREADY_COMMITTED, + ERROR_CLUSCFG_ROLLBACK_FAILED, + ERROR_CLUSCFG_SYSTEM_DISK_DRIVE_LETTER_CONFLICT, + ERROR_CLUSTER_OLD_VERSION, + ERROR_CLUSTER_MISMATCHED_COMPUTER_ACCT_NAME, // = 5905 + ERROR_ENCRYPTION_FAILED = 6000, + ERROR_DECRYPTION_FAILED, + ERROR_FILE_ENCRYPTED, + ERROR_NO_RECOVERY_POLICY, + ERROR_NO_EFS, + ERROR_WRONG_EFS, + ERROR_NO_USER_KEYS, + ERROR_FILE_NOT_ENCRYPTED, + ERROR_NOT_EXPORT_FORMAT, + ERROR_FILE_READ_ONLY, + ERROR_DIR_EFS_DISALLOWED, + ERROR_EFS_SERVER_NOT_TRUSTED, + ERROR_BAD_RECOVERY_POLICY, + ERROR_EFS_ALG_BLOB_TOO_BIG, + ERROR_VOLUME_NOT_SUPPORT_EFS, + ERROR_EFS_DISABLED, + ERROR_EFS_VERSION_NOT_SUPPORT, // = 6016 + ERROR_NO_BROWSER_SERVERS_FOUND = 6118, + SCHED_E_SERVICE_NOT_LOCALSYSTEM = 6200, + + ERROR_CTX_WINSTATION_NAME_INVALID = 7001, + ERROR_CTX_INVALID_PD, + ERROR_CTX_PD_NOT_FOUND, + ERROR_CTX_WD_NOT_FOUND, + ERROR_CTX_CANNOT_MAKE_EVENTLOG_ENTRY, + ERROR_CTX_SERVICE_NAME_COLLISION, + ERROR_CTX_CLOSE_PENDING, + ERROR_CTX_NO_OUTBUF, + ERROR_CTX_MODEM_INF_NOT_FOUND, + ERROR_CTX_INVALID_MODEMNAME, + ERROR_CTX_MODEM_RESPONSE_ERROR, + ERROR_CTX_MODEM_RESPONSE_TIMEOUT, + ERROR_CTX_MODEM_RESPONSE_NO_CARRIER, + ERROR_CTX_MODEM_RESPONSE_NO_DIALTONE, + ERROR_CTX_MODEM_RESPONSE_BUSY, + ERROR_CTX_MODEM_RESPONSE_VOICE, + ERROR_CTX_TD_ERROR, // = 7017 + ERROR_CTX_WINSTATION_NOT_FOUND = 7022, + ERROR_CTX_WINSTATION_ALREADY_EXISTS, + ERROR_CTX_WINSTATION_BUSY, + ERROR_CTX_BAD_VIDEO_MODE, // = 7025 + ERROR_CTX_GRAPHICS_INVALID = 7035, + ERROR_CTX_LOGON_DISABLED = 7037, + ERROR_CTX_NOT_CONSOLE, // = 7038 + ERROR_CTX_CLIENT_QUERY_TIMEOUT = 7040, + ERROR_CTX_CONSOLE_DISCONNECT, + ERROR_CTX_CONSOLE_CONNECT, // = 7042 + ERROR_CTX_SHADOW_DENIED = 7044, + ERROR_CTX_WINSTATION_ACCESS_DENIED, // = 7045 + ERROR_CTX_INVALID_WD = 7049, + ERROR_CTX_SHADOW_INVALID, + ERROR_CTX_SHADOW_DISABLED, + ERROR_CTX_CLIENT_LICENSE_IN_USE, + ERROR_CTX_CLIENT_LICENSE_NOT_SET, + ERROR_CTX_LICENSE_NOT_AVAILABLE, + ERROR_CTX_LICENSE_CLIENT_INVALID, + ERROR_CTX_LICENSE_EXPIRED, + ERROR_CTX_SHADOW_NOT_RUNNING, + ERROR_CTX_SHADOW_ENDED_BY_MODE_CHANGE, + ERROR_ACTIVATION_COUNT_EXCEEDED, // = 7059 + + FRS_ERR_INVALID_API_SEQUENCE = 8001, + FRS_ERR_STARTING_SERVICE, + FRS_ERR_STOPPING_SERVICE, + FRS_ERR_INTERNAL_API, + FRS_ERR_INTERNAL, + FRS_ERR_SERVICE_COMM, + FRS_ERR_INSUFFICIENT_PRIV, + FRS_ERR_AUTHENTICATION, + FRS_ERR_PARENT_INSUFFICIENT_PRIV, + FRS_ERR_PARENT_AUTHENTICATION, + FRS_ERR_CHILD_TO_PARENT_COMM, + FRS_ERR_PARENT_TO_CHILD_COMM, + FRS_ERR_SYSVOL_POPULATE, + FRS_ERR_SYSVOL_POPULATE_TIMEOUT, + FRS_ERR_SYSVOL_IS_BUSY, + FRS_ERR_SYSVOL_DEMOTE, + FRS_ERR_INVALID_SERVICE_PARAMETER, // = 8017 + ERROR_DS_NOT_INSTALLED = 8200, + ERROR_DS_MEMBERSHIP_EVALUATED_LOCALLY, + ERROR_DS_NO_ATTRIBUTE_OR_VALUE, + ERROR_DS_INVALID_ATTRIBUTE_SYNTAX, + ERROR_DS_ATTRIBUTE_TYPE_UNDEFINED, + ERROR_DS_ATTRIBUTE_OR_VALUE_EXISTS, + ERROR_DS_BUSY, + ERROR_DS_UNAVAILABLE, + ERROR_DS_NO_RIDS_ALLOCATED, + ERROR_DS_NO_MORE_RIDS, + ERROR_DS_INCORRECT_ROLE_OWNER, + ERROR_DS_RIDMGR_INIT_ERROR, + ERROR_DS_OBJ_CLASS_VIOLATION, + ERROR_DS_CANT_ON_NON_LEAF, + ERROR_DS_CANT_ON_RDN, + ERROR_DS_CANT_MOD_OBJ_CLASS, + ERROR_DS_CROSS_DOM_MOVE_ERROR, + ERROR_DS_GC_NOT_AVAILABLE, + ERROR_SHARED_POLICY, + ERROR_POLICY_OBJECT_NOT_FOUND, + ERROR_POLICY_ONLY_IN_DS, + ERROR_PROMOTION_ACTIVE, + ERROR_NO_PROMOTION_ACTIVE, // = 8222 + ERROR_DS_OPERATIONS_ERROR = 8224, + ERROR_DS_PROTOCOL_ERROR, + ERROR_DS_TIMELIMIT_EXCEEDED, + ERROR_DS_SIZELIMIT_EXCEEDED, + ERROR_DS_ADMIN_LIMIT_EXCEEDED, + ERROR_DS_COMPARE_FALSE, + ERROR_DS_COMPARE_TRUE, + ERROR_DS_AUTH_METHOD_NOT_SUPPORTED, + ERROR_DS_STRONG_AUTH_REQUIRED, + ERROR_DS_INAPPROPRIATE_AUTH, + ERROR_DS_AUTH_UNKNOWN, + ERROR_DS_REFERRAL, + ERROR_DS_UNAVAILABLE_CRIT_EXTENSION, + ERROR_DS_CONFIDENTIALITY_REQUIRED, + ERROR_DS_INAPPROPRIATE_MATCHING, + ERROR_DS_CONSTRAINT_VIOLATION, + ERROR_DS_NO_SUCH_OBJECT, + ERROR_DS_ALIAS_PROBLEM, + ERROR_DS_INVALID_DN_SYNTAX, + ERROR_DS_IS_LEAF, + ERROR_DS_ALIAS_DEREF_PROBLEM, + ERROR_DS_UNWILLING_TO_PERFORM, + ERROR_DS_LOOP_DETECT, + ERROR_DS_NAMING_VIOLATION, + ERROR_DS_OBJECT_RESULTS_TOO_LARGE, + ERROR_DS_AFFECTS_MULTIPLE_DSAS, + ERROR_DS_SERVER_DOWN, + ERROR_DS_LOCAL_ERROR, + ERROR_DS_ENCODING_ERROR, + ERROR_DS_DECODING_ERROR, + ERROR_DS_FILTER_UNKNOWN, + ERROR_DS_PARAM_ERROR, + ERROR_DS_NOT_SUPPORTED, + ERROR_DS_NO_RESULTS_RETURNED, + ERROR_DS_CONTROL_NOT_FOUND, + ERROR_DS_CLIENT_LOOP, + ERROR_DS_REFERRAL_LIMIT_EXCEEDED, + ERROR_DS_SORT_CONTROL_MISSING, + ERROR_DS_OFFSET_RANGE_ERROR, // = 8262 + ERROR_DS_ROOT_MUST_BE_NC = 8301, + ERROR_DS_ADD_REPLICA_INHIBITED, + ERROR_DS_ATT_NOT_DEF_IN_SCHEMA, + ERROR_DS_MAX_OBJ_SIZE_EXCEEDED, + ERROR_DS_OBJ_STRING_NAME_EXISTS, + ERROR_DS_NO_RDN_DEFINED_IN_SCHEMA, + ERROR_DS_RDN_DOESNT_MATCH_SCHEMA, + ERROR_DS_NO_REQUESTED_ATTS_FOUND, + ERROR_DS_USER_BUFFER_TO_SMALL, + ERROR_DS_ATT_IS_NOT_ON_OBJ, + ERROR_DS_ILLEGAL_MOD_OPERATION, + ERROR_DS_OBJ_TOO_LARGE, + ERROR_DS_BAD_INSTANCE_TYPE, + ERROR_DS_MASTERDSA_REQUIRED, + ERROR_DS_OBJECT_CLASS_REQUIRED, + ERROR_DS_MISSING_REQUIRED_ATT, + ERROR_DS_ATT_NOT_DEF_FOR_CLASS, + ERROR_DS_ATT_ALREADY_EXISTS, // = 8318 + ERROR_DS_CANT_ADD_ATT_VALUES = 8320, + ERROR_DS_SINGLE_VALUE_CONSTRAINT, + ERROR_DS_RANGE_CONSTRAINT, + ERROR_DS_ATT_VAL_ALREADY_EXISTS, + ERROR_DS_CANT_REM_MISSING_ATT, + ERROR_DS_CANT_REM_MISSING_ATT_VAL, + ERROR_DS_ROOT_CANT_BE_SUBREF, + ERROR_DS_NO_CHAINING, + ERROR_DS_NO_CHAINED_EVAL, + ERROR_DS_NO_PARENT_OBJECT, + ERROR_DS_PARENT_IS_AN_ALIAS, + ERROR_DS_CANT_MIX_MASTER_AND_REPS, + ERROR_DS_CHILDREN_EXIST, + ERROR_DS_OBJ_NOT_FOUND, + ERROR_DS_ALIASED_OBJ_MISSING, + ERROR_DS_BAD_NAME_SYNTAX, + ERROR_DS_ALIAS_POINTS_TO_ALIAS, + ERROR_DS_CANT_DEREF_ALIAS, + ERROR_DS_OUT_OF_SCOPE, + ERROR_DS_OBJECT_BEING_REMOVED, + ERROR_DS_CANT_DELETE_DSA_OBJ, + ERROR_DS_GENERIC_ERROR, + ERROR_DS_DSA_MUST_BE_INT_MASTER, + ERROR_DS_CLASS_NOT_DSA, + ERROR_DS_INSUFF_ACCESS_RIGHTS, + ERROR_DS_ILLEGAL_SUPERIOR, + ERROR_DS_ATTRIBUTE_OWNED_BY_SAM, + ERROR_DS_NAME_TOO_MANY_PARTS, + ERROR_DS_NAME_TOO_LONG, + ERROR_DS_NAME_VALUE_TOO_LONG, + ERROR_DS_NAME_UNPARSEABLE, + ERROR_DS_NAME_TYPE_UNKNOWN, + ERROR_DS_NOT_AN_OBJECT, + ERROR_DS_SEC_DESC_TOO_SHORT, + ERROR_DS_SEC_DESC_INVALID, + ERROR_DS_NO_DELETED_NAME, + ERROR_DS_SUBREF_MUST_HAVE_PARENT, + ERROR_DS_NCNAME_MUST_BE_NC, + ERROR_DS_CANT_ADD_SYSTEM_ONLY, + ERROR_DS_CLASS_MUST_BE_CONCRETE, + ERROR_DS_INVALID_DMD, + ERROR_DS_OBJ_GUID_EXISTS, + ERROR_DS_NOT_ON_BACKLINK, + ERROR_DS_NO_CROSSREF_FOR_NC, + ERROR_DS_SHUTTING_DOWN, + ERROR_DS_UNKNOWN_OPERATION, + ERROR_DS_INVALID_ROLE_OWNER, + ERROR_DS_COULDNT_CONTACT_FSMO, + ERROR_DS_CROSS_NC_DN_RENAME, + ERROR_DS_CANT_MOD_SYSTEM_ONLY, + ERROR_DS_REPLICATOR_ONLY, + ERROR_DS_OBJ_CLASS_NOT_DEFINED, + ERROR_DS_OBJ_CLASS_NOT_SUBCLASS, + ERROR_DS_NAME_REFERENCE_INVALID, + ERROR_DS_CROSS_REF_EXISTS, + ERROR_DS_CANT_DEL_MASTER_CROSSREF, + ERROR_DS_SUBTREE_NOTIFY_NOT_NC_HEAD, + ERROR_DS_NOTIFY_FILTER_TOO_COMPLEX, + ERROR_DS_DUP_RDN, + ERROR_DS_DUP_OID, + ERROR_DS_DUP_MAPI_ID, + ERROR_DS_DUP_SCHEMA_ID_GUID, + ERROR_DS_DUP_LDAP_DISPLAY_NAME, + ERROR_DS_SEMANTIC_ATT_TEST, + ERROR_DS_SYNTAX_MISMATCH, + ERROR_DS_EXISTS_IN_MUST_HAVE, + ERROR_DS_EXISTS_IN_MAY_HAVE, + ERROR_DS_NONEXISTENT_MAY_HAVE, + ERROR_DS_NONEXISTENT_MUST_HAVE, + ERROR_DS_AUX_CLS_TEST_FAIL, + ERROR_DS_NONEXISTENT_POSS_SUP, + ERROR_DS_SUB_CLS_TEST_FAIL, + ERROR_DS_BAD_RDN_ATT_ID_SYNTAX, + ERROR_DS_EXISTS_IN_AUX_CLS, + ERROR_DS_EXISTS_IN_SUB_CLS, + ERROR_DS_EXISTS_IN_POSS_SUP, + ERROR_DS_RECALCSCHEMA_FAILED, + ERROR_DS_TREE_DELETE_NOT_FINISHED, + ERROR_DS_CANT_DELETE, + ERROR_DS_ATT_SCHEMA_REQ_ID, + ERROR_DS_BAD_ATT_SCHEMA_SYNTAX, + ERROR_DS_CANT_CACHE_ATT, + ERROR_DS_CANT_CACHE_CLASS, + ERROR_DS_CANT_REMOVE_ATT_CACHE, + ERROR_DS_CANT_REMOVE_CLASS_CACHE, + ERROR_DS_CANT_RETRIEVE_DN, + ERROR_DS_MISSING_SUPREF, + ERROR_DS_CANT_RETRIEVE_INSTANCE, + ERROR_DS_CODE_INCONSISTENCY, + ERROR_DS_DATABASE_ERROR, + ERROR_DS_GOVERNSID_MISSING, + ERROR_DS_MISSING_EXPECTED_ATT, + ERROR_DS_NCNAME_MISSING_CR_REF, + ERROR_DS_SECURITY_CHECKING_ERROR, + ERROR_DS_SCHEMA_NOT_LOADED, + ERROR_DS_SCHEMA_ALLOC_FAILED, + ERROR_DS_ATT_SCHEMA_REQ_SYNTAX, + ERROR_DS_GCVERIFY_ERROR, + ERROR_DS_DRA_SCHEMA_MISMATCH, + ERROR_DS_CANT_FIND_DSA_OBJ, + ERROR_DS_CANT_FIND_EXPECTED_NC, + ERROR_DS_CANT_FIND_NC_IN_CACHE, + ERROR_DS_CANT_RETRIEVE_CHILD, + ERROR_DS_SECURITY_ILLEGAL_MODIFY, + ERROR_DS_CANT_REPLACE_HIDDEN_REC, + ERROR_DS_BAD_HIERARCHY_FILE, + ERROR_DS_BUILD_HIERARCHY_TABLE_FAILED, + ERROR_DS_CONFIG_PARAM_MISSING, + ERROR_DS_COUNTING_AB_INDICES_FAILED, + ERROR_DS_HIERARCHY_TABLE_MALLOC_FAILED, + ERROR_DS_INTERNAL_FAILURE, + ERROR_DS_UNKNOWN_ERROR, + ERROR_DS_ROOT_REQUIRES_CLASS_TOP, + ERROR_DS_REFUSING_FSMO_ROLES, + ERROR_DS_MISSING_FSMO_SETTINGS, + ERROR_DS_UNABLE_TO_SURRENDER_ROLES, + ERROR_DS_DRA_GENERIC, + ERROR_DS_DRA_INVALID_PARAMETER, + ERROR_DS_DRA_BUSY, + ERROR_DS_DRA_BAD_DN, + ERROR_DS_DRA_BAD_NC, + ERROR_DS_DRA_DN_EXISTS, + ERROR_DS_DRA_INTERNAL_ERROR, + ERROR_DS_DRA_INCONSISTENT_DIT, + ERROR_DS_DRA_CONNECTION_FAILED, + ERROR_DS_DRA_BAD_INSTANCE_TYPE, + ERROR_DS_DRA_OUT_OF_MEM, + ERROR_DS_DRA_MAIL_PROBLEM, + ERROR_DS_DRA_REF_ALREADY_EXISTS, + ERROR_DS_DRA_REF_NOT_FOUND, + ERROR_DS_DRA_OBJ_IS_REP_SOURCE, + ERROR_DS_DRA_DB_ERROR, + ERROR_DS_DRA_NO_REPLICA, + ERROR_DS_DRA_ACCESS_DENIED, + ERROR_DS_DRA_NOT_SUPPORTED, + ERROR_DS_DRA_RPC_CANCELLED, + ERROR_DS_DRA_SOURCE_DISABLED, + ERROR_DS_DRA_SINK_DISABLED, + ERROR_DS_DRA_NAME_COLLISION, + ERROR_DS_DRA_SOURCE_REINSTALLED, + ERROR_DS_DRA_MISSING_PARENT, + ERROR_DS_DRA_PREEMPTED, + ERROR_DS_DRA_ABANDON_SYNC, + ERROR_DS_DRA_SHUTDOWN, + ERROR_DS_DRA_INCOMPATIBLE_PARTIAL_SET, + ERROR_DS_DRA_SOURCE_IS_PARTIAL_REPLICA, + ERROR_DS_DRA_EXTN_CONNECTION_FAILED, + ERROR_DS_INSTALL_SCHEMA_MISMATCH, + ERROR_DS_DUP_LINK_ID, + ERROR_DS_NAME_ERROR_RESOLVING, + ERROR_DS_NAME_ERROR_NOT_FOUND, + ERROR_DS_NAME_ERROR_NOT_UNIQUE, + ERROR_DS_NAME_ERROR_NO_MAPPING, + ERROR_DS_NAME_ERROR_DOMAIN_ONLY, + ERROR_DS_NAME_ERROR_NO_SYNTACTICAL_MAPPING, + ERROR_DS_CONSTRUCTED_ATT_MOD, + ERROR_DS_WRONG_OM_OBJ_CLASS, + ERROR_DS_DRA_REPL_PENDING, + ERROR_DS_DS_REQUIRED, + ERROR_DS_INVALID_LDAP_DISPLAY_NAME, + ERROR_DS_NON_BASE_SEARCH, + ERROR_DS_CANT_RETRIEVE_ATTS, + ERROR_DS_BACKLINK_WITHOUT_LINK, + ERROR_DS_EPOCH_MISMATCH, + ERROR_DS_SRC_NAME_MISMATCH, + ERROR_DS_SRC_AND_DST_NC_IDENTICAL, + ERROR_DS_DST_NC_MISMATCH, + ERROR_DS_NOT_AUTHORITIVE_FOR_DST_NC, + ERROR_DS_SRC_GUID_MISMATCH, + ERROR_DS_CANT_MOVE_DELETED_OBJECT, + ERROR_DS_PDC_OPERATION_IN_PROGRESS, + ERROR_DS_CROSS_DOMAIN_CLEANUP_REQD, + ERROR_DS_ILLEGAL_XDOM_MOVE_OPERATION, + ERROR_DS_CANT_WITH_ACCT_GROUP_MEMBERSHPS, + ERROR_DS_NC_MUST_HAVE_NC_PARENT, + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE, + ERROR_DS_DST_DOMAIN_NOT_NATIVE, + ERROR_DS_MISSING_INFRASTRUCTURE_CONTAINER, + ERROR_DS_CANT_MOVE_ACCOUNT_GROUP, + ERROR_DS_CANT_MOVE_RESOURCE_GROUP, + ERROR_DS_INVALID_SEARCH_FLAG, + ERROR_DS_NO_TREE_DELETE_ABOVE_NC, + ERROR_DS_COULDNT_LOCK_TREE_FOR_DELETE, + ERROR_DS_COULDNT_IDENTIFY_OBJECTS_FOR_TREE_DELETE, + ERROR_DS_SAM_INIT_FAILURE, + ERROR_DS_SENSITIVE_GROUP_VIOLATION, + ERROR_DS_CANT_MOD_PRIMARYGROUPID, + ERROR_DS_ILLEGAL_BASE_SCHEMA_MOD, + ERROR_DS_NONSAFE_SCHEMA_CHANGE, + ERROR_DS_SCHEMA_UPDATE_DISALLOWED, + ERROR_DS_CANT_CREATE_UNDER_SCHEMA, + ERROR_DS_INSTALL_NO_SRC_SCH_VERSION, + ERROR_DS_INSTALL_NO_SCH_VERSION_IN_INIFILE, + ERROR_DS_INVALID_GROUP_TYPE, + ERROR_DS_NO_NEST_GLOBALGROUP_IN_MIXEDDOMAIN, + ERROR_DS_NO_NEST_LOCALGROUP_IN_MIXEDDOMAIN, + ERROR_DS_GLOBAL_CANT_HAVE_LOCAL_MEMBER, + ERROR_DS_GLOBAL_CANT_HAVE_UNIVERSAL_MEMBER, + ERROR_DS_UNIVERSAL_CANT_HAVE_LOCAL_MEMBER, + ERROR_DS_GLOBAL_CANT_HAVE_CROSSDOMAIN_MEMBER, + ERROR_DS_LOCAL_CANT_HAVE_CROSSDOMAIN_LOCAL_MEMBER, + ERROR_DS_HAVE_PRIMARY_MEMBERS, + ERROR_DS_STRING_SD_CONVERSION_FAILED, + ERROR_DS_NAMING_MASTER_GC, + ERROR_DS_LOOKUP_FAILURE, + ERROR_DS_COULDNT_UPDATE_SPNS, + ERROR_DS_CANT_RETRIEVE_SD, + ERROR_DS_KEY_NOT_UNIQUE, + ERROR_DS_WRONG_LINKED_ATT_SYNTAX, + ERROR_DS_SAM_NEED_BOOTKEY_PASSWORD, + ERROR_DS_SAM_NEED_BOOTKEY_FLOPPY, + ERROR_DS_CANT_START, + ERROR_DS_INIT_FAILURE, + ERROR_DS_NO_PKT_PRIVACY_ON_CONNECTION, + ERROR_DS_SOURCE_DOMAIN_IN_FOREST, + ERROR_DS_DESTINATION_DOMAIN_NOT_IN_FOREST, + ERROR_DS_DESTINATION_AUDITING_NOT_ENABLED, + ERROR_DS_CANT_FIND_DC_FOR_SRC_DOMAIN, + ERROR_DS_SRC_OBJ_NOT_GROUP_OR_USER, + ERROR_DS_SRC_SID_EXISTS_IN_FOREST, + ERROR_DS_SRC_AND_DST_OBJECT_CLASS_MISMATCH, + ERROR_SAM_INIT_FAILURE, + ERROR_DS_DRA_SCHEMA_INFO_SHIP, + ERROR_DS_DRA_SCHEMA_CONFLICT, + ERROR_DS_DRA_EARLIER_SCHEMA_CONLICT, + ERROR_DS_DRA_OBJ_NC_MISMATCH, + ERROR_DS_NC_STILL_HAS_DSAS, + ERROR_DS_GC_REQUIRED, + ERROR_DS_LOCAL_MEMBER_OF_LOCAL_ONLY, + ERROR_DS_NO_FPO_IN_UNIVERSAL_GROUPS, + ERROR_DS_CANT_ADD_TO_GC, + ERROR_DS_NO_CHECKPOINT_WITH_PDC, + ERROR_DS_SOURCE_AUDITING_NOT_ENABLED, + ERROR_DS_CANT_CREATE_IN_NONDOMAIN_NC, + ERROR_DS_INVALID_NAME_FOR_SPN, + ERROR_DS_FILTER_USES_CONTRUCTED_ATTRS, + ERROR_DS_UNICODEPWD_NOT_IN_QUOTES, + ERROR_DS_MACHINE_ACCOUNT_QUOTA_EXCEEDED, + ERROR_DS_MUST_BE_RUN_ON_DST_DC, + ERROR_DS_SRC_DC_MUST_BE_SP4_OR_GREATER, + ERROR_DS_CANT_TREE_DELETE_CRITICAL_OBJ, + ERROR_DS_INIT_FAILURE_CONSOLE, + ERROR_DS_SAM_INIT_FAILURE_CONSOLE, + ERROR_DS_FOREST_VERSION_TOO_HIGH, + ERROR_DS_DOMAIN_VERSION_TOO_HIGH, + ERROR_DS_FOREST_VERSION_TOO_LOW, + ERROR_DS_DOMAIN_VERSION_TOO_LOW, + ERROR_DS_INCOMPATIBLE_VERSION, + ERROR_DS_LOW_DSA_VERSION, + ERROR_DS_NO_BEHAVIOR_VERSION_IN_MIXEDDOMAIN, + ERROR_DS_NOT_SUPPORTED_SORT_ORDER, + ERROR_DS_NAME_NOT_UNIQUE, + ERROR_DS_MACHINE_ACCOUNT_CREATED_PRENT4, + ERROR_DS_OUT_OF_VERSION_STORE, + ERROR_DS_INCOMPATIBLE_CONTROLS_USED, + ERROR_DS_NO_REF_DOMAIN, + ERROR_DS_RESERVED_LINK_ID, + ERROR_DS_LINK_ID_NOT_AVAILABLE, + ERROR_DS_AG_CANT_HAVE_UNIVERSAL_MEMBER, + ERROR_DS_MODIFYDN_DISALLOWED_BY_INSTANCE_TYPE, + ERROR_DS_NO_OBJECT_MOVE_IN_SCHEMA_NC, + ERROR_DS_MODIFYDN_DISALLOWED_BY_FLAG, + ERROR_DS_MODIFYDN_WRONG_GRANDPARENT, + ERROR_DS_NAME_ERROR_TRUST_REFERRAL, + ERROR_NOT_SUPPORTED_ON_STANDARD_SERVER, + ERROR_DS_CANT_ACCESS_REMOTE_PART_OF_AD, + ERROR_DS_CR_IMPOSSIBLE_TO_VALIDATE_V2, + ERROR_DS_THREAD_LIMIT_EXCEEDED, + ERROR_DS_NOT_CLOSEST, + ERROR_DS_CANT_DERIVE_SPN_WITHOUT_SERVER_REF, + ERROR_DS_SINGLE_USER_MODE_FAILED, + ERROR_DS_NTDSCRIPT_SYNTAX_ERROR, + ERROR_DS_NTDSCRIPT_PROCESS_ERROR, + ERROR_DS_DIFFERENT_REPL_EPOCHS, + ERROR_DS_DRS_EXTENSIONS_CHANGED, + ERROR_DS_REPLICA_SET_CHANGE_NOT_ALLOWED_ON_DISABLED_CR, + ERROR_DS_NO_MSDS_INTID, + ERROR_DS_DUP_MSDS_INTID, + ERROR_DS_EXISTS_IN_RDNATTID, + ERROR_DS_AUTHORIZATION_FAILED, + ERROR_DS_INVALID_SCRIPT, + ERROR_DS_REMOTE_CROSSREF_OP_FAILED, + ERROR_DS_CROSS_REF_BUSY, + ERROR_DS_CANT_DERIVE_SPN_FOR_DELETED_DOMAIN, + ERROR_DS_CANT_DEMOTE_WITH_WRITEABLE_NC, + ERROR_DS_DUPLICATE_ID_FOUND, + ERROR_DS_INSUFFICIENT_ATTR_TO_CREATE_OBJECT, + ERROR_DS_GROUP_CONVERSION_ERROR, + ERROR_DS_CANT_MOVE_APP_BASIC_GROUP, + ERROR_DS_CANT_MOVE_APP_QUERY_GROUP, + ERROR_DS_ROLE_NOT_VERIFIED, + ERROR_DS_WKO_CONTAINER_CANNOT_BE_SPECIAL, + ERROR_DS_DOMAIN_RENAME_IN_PROGRESS, + ERROR_DS_EXISTING_AD_CHILD_NC, // = 8613 + DNS_ERROR_RCODE_FORMAT_ERROR = 9001, + DNS_ERROR_RCODE_SERVER_FAILURE, + DNS_ERROR_RCODE_NAME_ERROR, + DNS_ERROR_RCODE_NOT_IMPLEMENTED, + DNS_ERROR_RCODE_REFUSED, + DNS_ERROR_RCODE_YXDOMAIN, + DNS_ERROR_RCODE_YXRRSET, + DNS_ERROR_RCODE_NXRRSET, + DNS_ERROR_RCODE_NOTAUTH, + DNS_ERROR_RCODE_NOTZONE, // = 9010 + DNS_ERROR_RCODE_BADSIG = 9016, + DNS_ERROR_RCODE_BADKEY, + DNS_ERROR_RCODE_BADTIME, // = 9018 + DNS_INFO_NO_RECORDS = 9501, + DNS_ERROR_BAD_PACKET, + DNS_ERROR_NO_PACKET, + DNS_ERROR_RCODE, + DNS_ERROR_UNSECURE_PACKET, // = 9505 + DNS_ERROR_INVALID_TYPE = 9551, + DNS_ERROR_INVALID_IP_ADDRESS, + DNS_ERROR_INVALID_PROPERTY, + DNS_ERROR_TRY_AGAIN_LATER, + DNS_ERROR_NOT_UNIQUE, + DNS_ERROR_NON_RFC_NAME, + DNS_STATUS_FQDN, + DNS_STATUS_DOTTED_NAME, + DNS_STATUS_SINGLE_PART_NAME, + DNS_ERROR_INVALID_NAME_CHAR, + DNS_ERROR_NUMERIC_NAME, + DNS_ERROR_NOT_ALLOWED_ON_ROOT_SERVER, + DNS_ERROR_NOT_ALLOWED_UNDER_DELEGATION, + DNS_ERROR_CANNOT_FIND_ROOT_HINTS, + DNS_ERROR_INCONSISTENT_ROOT_HINTS, // = 9565 + DNS_ERROR_ZONE_DOES_NOT_EXIST = 9601, + DNS_ERROR_NO_ZONE_INFO, + DNS_ERROR_INVALID_ZONE_OPERATION, + DNS_ERROR_ZONE_CONFIGURATION_ERROR, + DNS_ERROR_ZONE_HAS_NO_SOA_RECORD, + DNS_ERROR_ZONE_HAS_NO_NS_RECORDS, + DNS_ERROR_ZONE_LOCKED, + DNS_ERROR_ZONE_CREATION_FAILED, + DNS_ERROR_ZONE_ALREADY_EXISTS, + DNS_ERROR_AUTOZONE_ALREADY_EXISTS, + DNS_ERROR_INVALID_ZONE_TYPE, + DNS_ERROR_SECONDARY_REQUIRES_MASTER_IP, + DNS_ERROR_ZONE_NOT_SECONDARY, + DNS_ERROR_NEED_SECONDARY_ADDRESSES, + DNS_ERROR_WINS_INIT_FAILED, + DNS_ERROR_NEED_WINS_SERVERS, + DNS_ERROR_NBSTAT_INIT_FAILED, + DNS_ERROR_SOA_DELETE_INVALID, + DNS_ERROR_FORWARDER_ALREADY_EXISTS, + DNS_ERROR_ZONE_REQUIRES_MASTER_IP, + DNS_ERROR_ZONE_IS_SHUTDOWN, // = 9621 + DNS_ERROR_PRIMARY_REQUIRES_DATAFILE = 9651, + DNS_ERROR_INVALID_DATAFILE_NAME, + DNS_ERROR_DATAFILE_OPEN_FAILURE, + DNS_ERROR_FILE_WRITEBACK_FAILED, + DNS_ERROR_DATAFILE_PARSING, // = 9655 + DNS_ERROR_RECORD_DOES_NOT_EXIST = 9701, + DNS_ERROR_RECORD_FORMAT, + DNS_ERROR_NODE_CREATION_FAILED, + DNS_ERROR_UNKNOWN_RECORD_TYPE, + DNS_ERROR_RECORD_TIMED_OUT, + DNS_ERROR_NAME_NOT_IN_ZONE, + DNS_ERROR_CNAME_LOOP, + DNS_ERROR_NODE_IS_CNAME, + DNS_ERROR_CNAME_COLLISION, + DNS_ERROR_RECORD_ONLY_AT_ZONE_ROOT, + DNS_ERROR_RECORD_ALREADY_EXISTS, + DNS_ERROR_SECONDARY_DATA, + DNS_ERROR_NO_CREATE_CACHE_DATA, + DNS_ERROR_NAME_DOES_NOT_EXIST, + DNS_WARNING_PTR_CREATE_FAILED, + DNS_WARNING_DOMAIN_UNDELETED, + DNS_ERROR_DS_UNAVAILABLE, + DNS_ERROR_DS_ZONE_ALREADY_EXISTS, + DNS_ERROR_NO_BOOTFILE_IF_DS_ZONE, // = 9719 + DNS_INFO_AXFR_COMPLETE = 9751, + DNS_ERROR_AXFR, + DNS_INFO_ADDED_LOCAL_WINS, // = 9753 + DNS_STATUS_CONTINUE_NEEDED = 9801, + DNS_ERROR_NO_TCPIP = 9851, + DNS_ERROR_NO_DNS_SERVERS, // = 9852 + DNS_ERROR_DP_DOES_NOT_EXIST = 9901, + DNS_ERROR_DP_ALREADY_EXISTS, + DNS_ERROR_DP_NOT_ENLISTED, + DNS_ERROR_DP_ALREADY_ENLISTED, + DNS_ERROR_DP_NOT_AVAILABLE, // = 9905 + +/+ already in winsock2.d defined! + + WSABASEERR = 10000, + WSAEINTR = 10004, + WSAEBADF = 10009, + WSAEACCES = 10013, + WSAEFAULT, // = 10014 + WSAEINVAL = 10022, + WSAEMFILE = 10024, + WSAEWOULDBLOCK = 10035, + WSAEINPROGRESS, + WSAEALREADY, + WSAENOTSOCK, + WSAEDESTADDRREQ, + WSAEMSGSIZE, + WSAEPROTOTYPE, + WSAENOPROTOOPT, + WSAEPROTONOSUPPORT, + WSAESOCKTNOSUPPORT, + WSAEOPNOTSUPP, + WSAEPFNOSUPPORT, + WSAEAFNOSUPPORT, + WSAEADDRINUSE, + WSAEADDRNOTAVAIL, + WSAENETDOWN, + WSAENETUNREACH, + WSAENETRESET, + WSAECONNABORTED, + WSAECONNRESET, + WSAENOBUFS, + WSAEISCONN, + WSAENOTCONN, + WSAESHUTDOWN, + WSAETOOMANYREFS, + WSAETIMEDOUT, + WSAECONNREFUSED, + WSAELOOP, + WSAENAMETOOLONG, + WSAEHOSTDOWN, + WSAEHOSTUNREACH, + WSAENOTEMPTY, + WSAEPROCLIM, + WSAEUSERS, + WSAEDQUOT, + WSAESTALE, + WSAEREMOTE, // = 10071 + WSASYSNOTREADY = 10091, + WSAVERNOTSUPPORTED, + WSANOTINITIALISED, // = 10093 + WSAEDISCON = 10101, + WSAENOMORE, + WSAECANCELLED, + WSAEINVALIDPROCTABLE, + WSAEINVALIDPROVIDER, + WSAEPROVIDERFAILEDINIT, + WSASYSCALLFAILURE, + WSASERVICE_NOT_FOUND, + WSATYPE_NOT_FOUND, + WSA_E_NO_MORE, + WSA_E_CANCELLED, + WSAEREFUSED, // = 10112 + WSAHOST_NOT_FOUND = 11001, + WSATRY_AGAIN, + WSANO_RECOVERY, + WSANO_DATA, + WSA_QOS_RECEIVERS, + WSA_QOS_SENDERS, + WSA_QOS_NO_SENDERS, + WSA_QOS_NO_RECEIVERS, + WSA_QOS_REQUEST_CONFIRMED, + WSA_QOS_ADMISSION_FAILURE, + WSA_QOS_POLICY_FAILURE, + WSA_QOS_BAD_STYLE, + WSA_QOS_BAD_OBJECT, + WSA_QOS_TRAFFIC_CTRL_ERROR, + WSA_QOS_GENERIC_ERROR, + WSA_QOS_ESERVICETYPE, + WSA_QOS_EFLOWSPEC, + WSA_QOS_EPROVSPECBUF, + WSA_QOS_EFILTERSTYLE, + WSA_QOS_EFILTERTYPE, + WSA_QOS_EFILTERCOUNT, + WSA_QOS_EOBJLENGTH, + WSA_QOS_EFLOWCOUNT, + WSA_QOS_EUNKNOWNPSOBJ, + WSA_QOS_EPOLICYOBJ, + WSA_QOS_EFLOWDESC, + WSA_QOS_EPSFLOWSPEC, + WSA_QOS_EPSFILTERSPEC, + WSA_QOS_ESDMODEOBJ, + WSA_QOS_ESHAPERATEOBJ, + WSA_QOS_RESERVED_PETYPE, // = 11031 + ++/ + + ERROR_IPSEC_QM_POLICY_EXISTS = 13000, + ERROR_IPSEC_QM_POLICY_NOT_FOUND, + ERROR_IPSEC_QM_POLICY_IN_USE, + ERROR_IPSEC_MM_POLICY_EXISTS, + ERROR_IPSEC_MM_POLICY_NOT_FOUND, + ERROR_IPSEC_MM_POLICY_IN_USE, + ERROR_IPSEC_MM_FILTER_EXISTS, + ERROR_IPSEC_MM_FILTER_NOT_FOUND, + ERROR_IPSEC_TRANSPORT_FILTER_EXISTS, + ERROR_IPSEC_TRANSPORT_FILTER_NOT_FOUND, + ERROR_IPSEC_MM_AUTH_EXISTS, + ERROR_IPSEC_MM_AUTH_NOT_FOUND, + ERROR_IPSEC_MM_AUTH_IN_USE, + ERROR_IPSEC_DEFAULT_MM_POLICY_NOT_FOUND, + ERROR_IPSEC_DEFAULT_MM_AUTH_NOT_FOUND, + ERROR_IPSEC_DEFAULT_QM_POLICY_NOT_FOUND, + ERROR_IPSEC_TUNNEL_FILTER_EXISTS, + ERROR_IPSEC_TUNNEL_FILTER_NOT_FOUND, + ERROR_IPSEC_MM_FILTER_PENDING_DELETION, + ERROR_IPSEC_TRANSPORT_FILTER_PENDING_DELETION, + ERROR_IPSEC_TUNNEL_FILTER_PENDING_DELETION, + ERROR_IPSEC_MM_POLICY_PENDING_DELETION, + ERROR_IPSEC_MM_AUTH_PENDING_DELETION, + ERROR_IPSEC_QM_POLICY_PENDING_DELETION, + WARNING_IPSEC_MM_POLICY_PRUNED, + WARNING_IPSEC_QM_POLICY_PRUNED, // = 13025 + ERROR_IPSEC_IKE_AUTH_FAIL = 13801, + ERROR_IPSEC_IKE_ATTRIB_FAIL, + ERROR_IPSEC_IKE_NEGOTIATION_PENDING, + ERROR_IPSEC_IKE_GENERAL_PROCESSING_ERROR, + ERROR_IPSEC_IKE_TIMED_OUT, + ERROR_IPSEC_IKE_NO_CERT, + ERROR_IPSEC_IKE_SA_DELETED, + ERROR_IPSEC_IKE_SA_REAPED, + ERROR_IPSEC_IKE_MM_ACQUIRE_DROP, + ERROR_IPSEC_IKE_QM_ACQUIRE_DROP, + ERROR_IPSEC_IKE_QUEUE_DROP_MM, + ERROR_IPSEC_IKE_QUEUE_DROP_NO_MM, + ERROR_IPSEC_IKE_DROP_NO_RESPONSE, + ERROR_IPSEC_IKE_MM_DELAY_DROP, + ERROR_IPSEC_IKE_QM_DELAY_DROP, + ERROR_IPSEC_IKE_ERROR, + ERROR_IPSEC_IKE_CRL_FAILED, + ERROR_IPSEC_IKE_INVALID_KEY_USAGE, + ERROR_IPSEC_IKE_INVALID_CERT_TYPE, + ERROR_IPSEC_IKE_NO_PRIVATE_KEY, // = 13820 + ERROR_IPSEC_IKE_DH_FAIL = 13822, + ERROR_IPSEC_IKE_INVALID_HEADER = 13824, + ERROR_IPSEC_IKE_NO_POLICY, + ERROR_IPSEC_IKE_INVALID_SIGNATURE, + ERROR_IPSEC_IKE_KERBEROS_ERROR, + ERROR_IPSEC_IKE_NO_PUBLIC_KEY, + ERROR_IPSEC_IKE_PROCESS_ERR, + ERROR_IPSEC_IKE_PROCESS_ERR_SA, + ERROR_IPSEC_IKE_PROCESS_ERR_PROP, + ERROR_IPSEC_IKE_PROCESS_ERR_TRANS, + ERROR_IPSEC_IKE_PROCESS_ERR_KE, + ERROR_IPSEC_IKE_PROCESS_ERR_ID, + ERROR_IPSEC_IKE_PROCESS_ERR_CERT, + ERROR_IPSEC_IKE_PROCESS_ERR_CERT_REQ, + ERROR_IPSEC_IKE_PROCESS_ERR_HASH, + ERROR_IPSEC_IKE_PROCESS_ERR_SIG, + ERROR_IPSEC_IKE_PROCESS_ERR_NONCE, + ERROR_IPSEC_IKE_PROCESS_ERR_NOTIFY, + ERROR_IPSEC_IKE_PROCESS_ERR_DELETE, + ERROR_IPSEC_IKE_PROCESS_ERR_VENDOR, + ERROR_IPSEC_IKE_INVALID_PAYLOAD, + ERROR_IPSEC_IKE_LOAD_SOFT_SA, + ERROR_IPSEC_IKE_SOFT_SA_TORN_DOWN, + ERROR_IPSEC_IKE_INVALID_COOKIE, + ERROR_IPSEC_IKE_NO_PEER_CERT, + ERROR_IPSEC_IKE_PEER_CRL_FAILED, + ERROR_IPSEC_IKE_POLICY_CHANGE, + ERROR_IPSEC_IKE_NO_MM_POLICY, + ERROR_IPSEC_IKE_NOTCBPRIV, + ERROR_IPSEC_IKE_SECLOADFAIL, + ERROR_IPSEC_IKE_FAILSSPINIT, + ERROR_IPSEC_IKE_FAILQUERYSSP, + ERROR_IPSEC_IKE_SRVACQFAIL, + ERROR_IPSEC_IKE_SRVQUERYCRED, + ERROR_IPSEC_IKE_GETSPIFAIL, + ERROR_IPSEC_IKE_INVALID_FILTER, + ERROR_IPSEC_IKE_OUT_OF_MEMORY, + ERROR_IPSEC_IKE_ADD_UPDATE_KEY_FAILED, + ERROR_IPSEC_IKE_INVALID_POLICY, + ERROR_IPSEC_IKE_UNKNOWN_DOI, + ERROR_IPSEC_IKE_INVALID_SITUATION, + ERROR_IPSEC_IKE_DH_FAILURE, + ERROR_IPSEC_IKE_INVALID_GROUP, + ERROR_IPSEC_IKE_ENCRYPT, + ERROR_IPSEC_IKE_DECRYPT, + ERROR_IPSEC_IKE_POLICY_MATCH, + ERROR_IPSEC_IKE_UNSUPPORTED_ID, + ERROR_IPSEC_IKE_INVALID_HASH, + ERROR_IPSEC_IKE_INVALID_HASH_ALG, + ERROR_IPSEC_IKE_INVALID_HASH_SIZE, + ERROR_IPSEC_IKE_INVALID_ENCRYPT_ALG, + ERROR_IPSEC_IKE_INVALID_AUTH_ALG, + ERROR_IPSEC_IKE_INVALID_SIG, + ERROR_IPSEC_IKE_LOAD_FAILED, + ERROR_IPSEC_IKE_RPC_DELETE, + ERROR_IPSEC_IKE_BENIGN_REINIT, + ERROR_IPSEC_IKE_INVALID_RESPONDER_LIFETIME_NOTIFY, // = 13879 + ERROR_IPSEC_IKE_INVALID_CERT_KEYLEN = 13881, + ERROR_IPSEC_IKE_MM_LIMIT, + ERROR_IPSEC_IKE_NEGOTIATION_DISABLED, + ERROR_IPSEC_IKE_NEG_STATUS_END, + ERROR_SXS_SECTION_NOT_FOUND, + ERROR_SXS_CANT_GEN_ACTCTX, + ERROR_SXS_INVALID_ACTCTXDATA_FORMAT, + ERROR_SXS_ASSEMBLY_NOT_FOUND, + ERROR_SXS_MANIFEST_FORMAT_ERROR, + ERROR_SXS_MANIFEST_PARSE_ERROR, + ERROR_SXS_ACTIVATION_CONTEXT_DISABLED, + ERROR_SXS_KEY_NOT_FOUND, + ERROR_SXS_VERSION_CONFLICT, + ERROR_SXS_WRONG_SECTION_TYPE, + ERROR_SXS_THREAD_QUERIES_DISABLED, + ERROR_SXS_PROCESS_DEFAULT_ALREADY_SET, + ERROR_SXS_UNKNOWN_ENCODING_GROUP, + ERROR_SXS_UNKNOWN_ENCODING, + ERROR_SXS_INVALID_XML_NAMESPACE_URI, + ERROR_SXS_ROOT_MANIFEST_DEPENDENCY_NOT_INSTALLED, + ERROR_SXS_LEAF_MANIFEST_DEPENDENCY_NOT_INSTALLED, + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE, + ERROR_SXS_MANIFEST_MISSING_REQUIRED_DEFAULT_NAMESPACE, + ERROR_SXS_MANIFEST_INVALID_REQUIRED_DEFAULT_NAMESPACE, + ERROR_SXS_PRIVATE_MANIFEST_CROSS_PATH_WITH_REPARSE_POINT, + ERROR_SXS_DUPLICATE_DLL_NAME, + ERROR_SXS_DUPLICATE_WINDOWCLASS_NAME, + ERROR_SXS_DUPLICATE_CLSID, + ERROR_SXS_DUPLICATE_IID, + ERROR_SXS_DUPLICATE_TLBID, + ERROR_SXS_DUPLICATE_PROGID, + ERROR_SXS_DUPLICATE_ASSEMBLY_NAME, + ERROR_SXS_FILE_HASH_MISMATCH, + ERROR_SXS_POLICY_PARSE_ERROR, + ERROR_SXS_XML_E_MISSINGQUOTE, + ERROR_SXS_XML_E_COMMENTSYNTAX, + ERROR_SXS_XML_E_BADSTARTNAMECHAR, + ERROR_SXS_XML_E_BADNAMECHAR, + ERROR_SXS_XML_E_BADCHARINSTRING, + ERROR_SXS_XML_E_XMLDECLSYNTAX, + ERROR_SXS_XML_E_BADCHARDATA, + ERROR_SXS_XML_E_MISSINGWHITESPACE, + ERROR_SXS_XML_E_EXPECTINGTAGEND, + ERROR_SXS_XML_E_MISSINGSEMICOLON, + ERROR_SXS_XML_E_UNBALANCEDPAREN, + ERROR_SXS_XML_E_INTERNALERROR, + ERROR_SXS_XML_E_UNEXPECTED_WHITESPACE, + ERROR_SXS_XML_E_INCOMPLETE_ENCODING, + ERROR_SXS_XML_E_MISSING_PAREN, + ERROR_SXS_XML_E_EXPECTINGCLOSEQUOTE, + ERROR_SXS_XML_E_MULTIPLE_COLONS, + ERROR_SXS_XML_E_INVALID_DECIMAL, + ERROR_SXS_XML_E_INVALID_HEXIDECIMAL, + ERROR_SXS_XML_E_INVALID_UNICODE, + ERROR_SXS_XML_E_WHITESPACEORQUESTIONMARK, + ERROR_SXS_XML_E_UNEXPECTEDENDTAG, + ERROR_SXS_XML_E_UNCLOSEDTAG, + ERROR_SXS_XML_E_DUPLICATEATTRIBUTE, + ERROR_SXS_XML_E_MULTIPLEROOTS, + ERROR_SXS_XML_E_INVALIDATROOTLEVEL, + ERROR_SXS_XML_E_BADXMLDECL, + ERROR_SXS_XML_E_MISSINGROOT, + ERROR_SXS_XML_E_UNEXPECTEDEOF, + ERROR_SXS_XML_E_BADPEREFINSUBSET, + ERROR_SXS_XML_E_UNCLOSEDSTARTTAG, + ERROR_SXS_XML_E_UNCLOSEDENDTAG, + ERROR_SXS_XML_E_UNCLOSEDSTRING, + ERROR_SXS_XML_E_UNCLOSEDCOMMENT, + ERROR_SXS_XML_E_UNCLOSEDDECL, + ERROR_SXS_XML_E_UNCLOSEDCDATA, + ERROR_SXS_XML_E_RESERVEDNAMESPACE, + ERROR_SXS_XML_E_INVALIDENCODING, + ERROR_SXS_XML_E_INVALIDSWITCH, + ERROR_SXS_XML_E_BADXMLCASE, + ERROR_SXS_XML_E_INVALID_STANDALONE, + ERROR_SXS_XML_E_UNEXPECTED_STANDALONE, + ERROR_SXS_XML_E_INVALID_VERSION, + ERROR_SXS_XML_E_MISSINGEQUALS, + ERROR_SXS_PROTECTION_RECOVERY_FAILED, + ERROR_SXS_PROTECTION_PUBLIC_KEY_TOO_SHORT, + ERROR_SXS_PROTECTION_CATALOG_NOT_VALID, + ERROR_SXS_UNTRANSLATABLE_HRESULT, + ERROR_SXS_PROTECTION_CATALOG_FILE_MISSING, + ERROR_SXS_MISSING_ASSEMBLY_IDENTITY_ATTRIBUTE, + ERROR_SXS_INVALID_ASSEMBLY_IDENTITY_ATTRIBUTE_NAME // = 14080 +} + +enum : HRESULT { + S_OK = 0x00000000, + S_FALSE = 0x00000001, + + NOERROR = 0x00000000, + + E_PENDING = 0x8000000A, + E_NOTIMPL = 0x80004001, + E_NOINTERFACE = 0x80004002, + E_POINTER = 0x80004003, + E_ABORT = 0x80004004, + E_FAIL = 0x80004005, + E_ACCESSDENIED = 0x80070005, + E_HANDLE = 0x80070006, + E_OUTOFMEMORY = 0x8007000E, + E_INVALIDARG = 0x80070057, + E_UNEXPECTED = 0x8000FFFF, + + CO_E_INIT_TLS = 0x80004006, + CO_E_INIT_SHARED_ALLOCATOR = 0x80004007, + CO_E_INIT_MEMORY_ALLOCATOR = 0x80004008, + CO_E_INIT_CLASS_CACHE = 0x80004009, + CO_E_INIT_RPC_CHANNEL = 0x8000400A, + CO_E_INIT_TLS_SET_CHANNEL_CONTROL = 0x8000400B, + CO_E_INIT_TLS_CHANNEL_CONTROL = 0x8000400C, + CO_E_INIT_UNACCEPTED_USER_ALLOCATOR = 0x8000400D, + CO_E_INIT_SCM_MUTEX_EXISTS = 0x8000400E, + CO_E_INIT_SCM_FILE_MAPPING_EXISTS = 0x8000400F, + CO_E_INIT_SCM_MAP_VIEW_OF_FILE = 0x80004010, + CO_E_INIT_SCM_EXEC_FAILURE = 0x80004011, + CO_E_INIT_ONLY_SINGLE_THREADED = 0x80004012, + + RPC_E_CALL_REJECTED = 0x80010001, + RPC_E_CALL_CANCELED = 0x80010002, + RPC_E_CANTPOST_INSENDCALL = 0x80010003, + RPC_E_CANTCALLOUT_INASYNCCALL = 0x80010004, + RPC_E_CANTCALLOUT_INEXTERNALCALL = 0x80010005, + RPC_E_CONNECTION_TERMINATED = 0x80010006, + RPC_E_SERVER_DIED = 0x80010007, + RPC_E_CLIENT_DIED = 0x80010008, + RPC_E_INVALID_DATAPACKET = 0x80010009, + RPC_E_CANTTRANSMIT_CALL = 0x8001000A, + RPC_E_CLIENT_CANTMARSHAL_DATA = 0x8001000B, + RPC_E_CLIENT_CANTUNMARSHAL_DATA = 0x8001000C, + RPC_E_SERVER_CANTMARSHAL_DATA = 0x8001000D, + RPC_E_SERVER_CANTUNMARSHAL_DATA = 0x8001000E, + RPC_E_INVALID_DATA = 0x8001000F, + RPC_E_INVALID_PARAMETER = 0x80010010, + RPC_E_CANTCALLOUT_AGAIN = 0x80010011, + RPC_E_SERVER_DIED_DNE = 0x80010012, + RPC_E_SYS_CALL_FAILED = 0x80010100, + RPC_E_OUT_OF_RESOURCES = 0x80010101, + RPC_E_ATTEMPTED_MULTITHREAD = 0x80010102, + RPC_E_NOT_REGISTERED = 0x80010103, + RPC_E_FAULT = 0x80010104, + RPC_E_SERVERFAULT = 0x80010105, + RPC_E_CHANGED_MODE = 0x80010106, + RPC_E_INVALIDMETHOD = 0x80010107, + RPC_E_DISCONNECTED = 0x80010108, + RPC_E_RETRY = 0x80010109, + RPC_E_SERVERCALL_RETRYLATER = 0x8001010A, + RPC_E_SERVERCALL_REJECTED = 0x8001010B, + RPC_E_INVALID_CALLDATA = 0x8001010C, + RPC_E_CANTCALLOUT_ININPUTSYNCCALL = 0x8001010D, + RPC_E_WRONG_THREAD = 0x8001010E, + RPC_E_THREAD_NOT_INIT = 0x8001010F, + RPC_E_UNEXPECTED = 0x8001FFFF, + + DISP_E_UNKNOWNINTERFACE = 0x80020001, + DISP_E_MEMBERNOTFOUND = 0x80020003, + DISP_E_PARAMNOTFOUND = 0x80020004, + DISP_E_TYPEMISMATCH = 0x80020005, + DISP_E_UNKNOWNNAME = 0x80020006, + DISP_E_NONAMEDARGS = 0x80020007, + DISP_E_BADVARTYPE = 0x80020008, + DISP_E_EXCEPTION = 0x80020009, + DISP_E_OVERFLOW = 0x8002000A, + DISP_E_BADINDEX = 0x8002000B, + DISP_E_UNKNOWNLCID = 0x8002000C, + DISP_E_ARRAYISLOCKED = 0x8002000D, + DISP_E_BADPARAMCOUNT = 0x8002000E, + DISP_E_PARAMNOTOPTIONAL = 0x8002000F, + DISP_E_BADCALLEE = 0x80020010, + DISP_E_NOTACOLLECTION = 0x80020011, + DISP_E_DIVBYZERO = 0x80020012, + + TYPE_E_BUFFERTOOSMALL = 0x80028016, + TYPE_E_INVDATAREAD = 0x80028018, + TYPE_E_UNSUPFORMAT = 0x80028019, + TYPE_E_REGISTRYACCESS = 0x8002801C, + TYPE_E_LIBNOTREGISTERED = 0x8002801D, + TYPE_E_UNDEFINEDTYPE = 0x80028027, + TYPE_E_QUALIFIEDNAMEDISALLOWED = 0x80028028, + TYPE_E_INVALIDSTATE = 0x80028029, + TYPE_E_WRONGTYPEKIND = 0x8002802A, + TYPE_E_ELEMENTNOTFOUND = 0x8002802B, + TYPE_E_AMBIGUOUSNAME = 0x8002802C, + TYPE_E_NAMECONFLICT = 0x8002802D, + TYPE_E_UNKNOWNLCID = 0x8002802E, + TYPE_E_DLLFUNCTIONNOTFOUND = 0x8002802F, + TYPE_E_BADMODULEKIND = 0x800288BD, + TYPE_E_SIZETOOBIG = 0x800288C5, + TYPE_E_DUPLICATEID = 0x800288C6, + TYPE_E_INVALIDID = 0x800288CF, + TYPE_E_TYPEMISMATCH = 0x80028CA0, + TYPE_E_OUTOFBOUNDS = 0x80028CA1, + TYPE_E_IOERROR = 0x80028CA2, + TYPE_E_CANTCREATETMPFILE = 0x80028CA3, + TYPE_E_CANTLOADLIBRARY = 0x80029C4A, + TYPE_E_INCONSISTENTPROPFUNCS = 0x80029C83, + TYPE_E_CIRCULARTYPE = 0x80029C84, + + STG_E_INVALIDFUNCTION = 0x80030001, + STG_E_FILENOTFOUND = 0x80030002, + STG_E_PATHNOTFOUND = 0x80030003, + STG_E_TOOMANYOPENFILES = 0x80030004, + STG_E_ACCESSDENIED = 0x80030005, + STG_E_INVALIDHANDLE = 0x80030006, + STG_E_INSUFFICIENTMEMORY = 0x80030008, + STG_E_INVALIDPOINTER = 0x80030009, + STG_E_NOMOREFILES = 0x80030012, + STG_E_DISKISWRITEPROTECTED = 0x80030013, + STG_E_SEEKERROR = 0x80030019, + STG_E_WRITEFAULT = 0x8003001D, + STG_E_READFAULT = 0x8003001E, + STG_E_SHAREVIOLATION = 0x80030020, + STG_E_LOCKVIOLATION = 0x80030021, + STG_E_FILEALREADYEXISTS = 0x80030050, + STG_E_INVALIDPARAMETER = 0x80030057, + STG_E_MEDIUMFULL = 0x80030070, + STG_E_ABNORMALAPIEXIT = 0x800300FA, + STG_E_INVALIDHEADER = 0x800300FB, + STG_E_INVALIDNAME = 0x800300FC, + STG_E_UNKNOWN = 0x800300FD, + STG_E_UNIMPLEMENTEDFUNCTION = 0x800300FE, + STG_E_INVALIDFLAG = 0x800300FF, + STG_E_INUSE = 0x80030100, + STG_E_NOTCURRENT = 0x80030101, + STG_E_REVERTED = 0x80030102, + STG_E_CANTSAVE = 0x80030103, + STG_E_OLDFORMAT = 0x80030104, + STG_E_OLDDLL = 0x80030105, + STG_E_SHAREREQUIRED = 0x80030106, + STG_E_NOTFILEBASEDSTORAGE = 0x80030107, + STG_E_EXTANTMARSHALLINGS = 0x80030108, + STG_S_CONVERTED = 0x00030200, + + OLE_E_FIRST = 0x80040000, + OLE_S_FIRST = 0x00040000, + OLE_E_OLEVERB = 0x80040000, + OLE_S_USEREG = 0x00040000, + OLE_E_ADVF = 0x80040001, + OLE_S_STATIC = 0x00040001, + OLE_E_ENUM_NOMORE = 0x80040002, + OLE_S_MAC_CLIPFORMAT = 0x00040002, + OLE_E_ADVISENOTSUPPORTED = 0x80040003, + OLE_E_NOCONNECTION = 0x80040004, + OLE_E_NOTRUNNING = 0x80040005, + OLE_E_NOCACHE = 0x80040006, + OLE_E_BLANK = 0x80040007, + OLE_E_CLASSDIFF = 0x80040008, + OLE_E_CANT_GETMONIKER = 0x80040009, + OLE_E_CANT_BINDTOSOURCE = 0x8004000A, + OLE_E_STATIC = 0x8004000B, + OLE_E_PROMPTSAVECANCELLED = 0x8004000C, + OLE_E_INVALIDRECT = 0x8004000D, + OLE_E_WRONGCOMPOBJ = 0x8004000E, + OLE_E_INVALIDHWND = 0x8004000F, + OLE_E_NOT_INPLACEACTIVE = 0x80040010, + OLE_E_CANTCONVERT = 0x80040011, + OLE_E_NOSTORAGE = 0x80040012, + + DV_E_FORMATETC = 0x80040064, + DV_E_DVTARGETDEVICE = 0x80040065, + DV_E_STGMEDIUM = 0x80040066, + DV_E_STATDATA = 0x80040067, + DV_E_LINDEX = 0x80040068, + DV_E_TYMED = 0x80040069, + DV_E_CLIPFORMAT = 0x8004006A, + DV_E_DVASPECT = 0x8004006B, + DV_E_DVTARGETDEVICE_SIZE = 0x8004006C, + DV_E_NOIVIEWOBJECT = 0x8004006D, + + OLE_E_LAST = 0x800400FF, + OLE_S_LAST = 0x000400FF, + DRAGDROP_E_FIRST = 0x80040100, + DRAGDROP_S_FIRST = 0x00040100, + DRAGDROP_E_NOTREGISTERED = 0x80040100, + DRAGDROP_S_DROP = 0x00040100, + DRAGDROP_E_ALREADYREGISTERED = 0x80040101, + DRAGDROP_S_CANCEL = 0x00040101, + DRAGDROP_E_INVALIDHWND = 0x80040102, + DRAGDROP_S_USEDEFAULTCURSORS = 0x00040102, + DRAGDROP_E_LAST = 0x8004010F, + DRAGDROP_S_LAST = 0x0004010F, + CLASSFACTORY_E_FIRST = 0x80040110, + CLASSFACTORY_S_FIRST = 0x00040110, + CLASS_E_NOAGGREGATION = 0x80040110, + CLASS_E_CLASSNOTAVAILABLE = 0x80040111, + CLASSFACTORY_E_LAST = 0x8004011F, + CLASSFACTORY_S_LAST = 0x0004011F, + MARSHAL_E_FIRST = 0x80040120, + MARSHAL_S_FIRST = 0x00040120, + MARSHAL_E_LAST = 0x8004012F, + MARSHAL_S_LAST = 0x0004012F, + DATA_E_FIRST = 0x80040130, + DATA_S_FIRST = 0x00040130, + DATA_S_SAMEFORMATETC = 0x00040130, + DATA_E_LAST = 0x8004013F, + DATA_S_LAST = 0x0004013F, + VIEW_E_FIRST = 0x80040140, + VIEW_S_FIRST = 0x00040140, + VIEW_E_DRAW = 0x80040140, + VIEW_S_ALREADY_FROZEN = 0x00040140, + VIEW_E_LAST = 0x8004014F, + VIEW_S_LAST = 0x0004014F, + REGDB_E_FIRST = 0x80040150, + REGDB_S_FIRST = 0x00040150, + REGDB_E_READREGDB = 0x80040150, + REGDB_E_WRITEREGDB = 0x80040151, + REGDB_E_KEYMISSING = 0x80040152, + REGDB_E_INVALIDVALUE = 0x80040153, + REGDB_E_CLASSNOTREG = 0x80040154, + REGDB_E_IIDNOTREG = 0x80040155, + REGDB_E_LAST = 0x8004015F, + REGDB_S_LAST = 0x0004015F, + CACHE_E_FIRST = 0x80040170, + CACHE_S_FIRST = 0x00040170, + CACHE_E_NOCACHE_UPDATED = 0x80040170, + CACHE_S_FORMATETC_NOTSUPPORTED = 0x00040170, + CACHE_S_SAMECACHE = 0x00040171, + CACHE_S_SOMECACHES_NOTUPDATED = 0x00040172, + CACHE_E_LAST = 0x8004017F, + CACHE_S_LAST = 0x0004017F, + OLEOBJ_E_FIRST = 0x80040180, + OLEOBJ_S_FIRST = 0x00040180, + OLEOBJ_E_NOVERBS = 0x80040180, + OLEOBJ_S_INVALIDVERB = 0x00040180, + OLEOBJ_E_INVALIDVERB = 0x80040181, + OLEOBJ_S_CANNOT_DOVERB_NOW = 0x00040181, + OLEOBJ_S_INVALIDHWND = 0x00040182, + OLEOBJ_E_LAST = 0x8004018F, + OLEOBJ_S_LAST = 0x0004018F, + CLIENTSITE_E_FIRST = 0x80040190, + CLIENTSITE_S_FIRST = 0x00040190, + CLIENTSITE_E_LAST = 0x8004019F, + CLIENTSITE_S_LAST = 0x0004019F, + INPLACE_E_NOTUNDOABLE = 0x800401A0, + INPLACE_E_FIRST = 0x800401A0, + INPLACE_S_FIRST = 0x000401A0, + INPLACE_S_TRUNCATED = 0x000401A0, + INPLACE_E_NOTOOLSPACE = 0x800401A1, + INPLACE_E_LAST = 0x800401AF, + INPLACE_S_LAST = 0x000401AF, + ENUM_E_FIRST = 0x800401B0, + ENUM_S_FIRST = 0x000401B0, + ENUM_E_LAST = 0x800401BF, + ENUM_S_LAST = 0x000401BF, + CONVERT10_E_FIRST = 0x800401C0, + CONVERT10_S_FIRST = 0x000401C0, + CONVERT10_E_OLESTREAM_GET = 0x800401C0, + CONVERT10_S_NO_PRESENTATION = 0x000401C0, + CONVERT10_E_OLESTREAM_PUT = 0x800401C1, + CONVERT10_E_OLESTREAM_FMT = 0x800401C2, + CONVERT10_E_OLESTREAM_BITMAP_TO_DIB = 0x800401C3, + CONVERT10_E_STG_FMT = 0x800401C4, + CONVERT10_E_STG_NO_STD_STREAM = 0x800401C5, + CONVERT10_E_STG_DIB_TO_BITMAP = 0x800401C6, + CONVERT10_E_LAST = 0x800401CF, + CONVERT10_S_LAST = 0x000401CF, + CLIPBRD_E_FIRST = 0x800401D0, + CLIPBRD_S_FIRST = 0x000401D0, + CLIPBRD_E_CANT_OPEN = 0x800401D0, + CLIPBRD_E_CANT_EMPTY = 0x800401D1, + CLIPBRD_E_CANT_SET = 0x800401D2, + CLIPBRD_E_BAD_DATA = 0x800401D3, + CLIPBRD_E_CANT_CLOSE = 0x800401D4, + CLIPBRD_E_LAST = 0x800401DF, + CLIPBRD_S_LAST = 0x000401DF, + MK_E_FIRST = 0x800401E0, + MK_S_FIRST = 0x000401E0, + MK_E_CONNECTMANUALLY = 0x800401E0, + MK_E_EXCEEDEDDEADLINE = 0x800401E1, + MK_E_NEEDGENERIC = 0x800401E2, + MK_S_REDUCED_TO_SELF = 0x000401E2, + MK_E_UNAVAILABLE = 0x800401E3, + MK_E_SYNTAX = 0x800401E4, + MK_S_ME = 0x000401E4, + MK_E_NOOBJECT = 0x800401E5, + MK_S_HIM = 0x000401E5, + MK_E_INVALIDEXTENSION = 0x800401E6, + MK_S_US = 0x000401E6, + MK_E_INTERMEDIATEINTERFACENOTSUPPORTED = 0x800401E7, + MK_S_MONIKERALREADYREGISTERED = 0x000401E7, + MK_E_NOTBINDABLE = 0x800401E8, + MK_E_NOTBOUND = 0x800401E9, + MK_E_CANTOPENFILE = 0x800401EA, + MK_E_MUSTBOTHERUSER = 0x800401EB, + MK_E_NOINVERSE = 0x800401EC, + MK_E_NOSTORAGE = 0x800401ED, + MK_E_NOPREFIX = 0x800401EE, + MK_E_LAST = 0x800401EF, + MK_S_LAST = 0x000401EF, + MK_E_ENUMERATION_FAILED = 0x800401EF, + CO_E_FIRST = 0x800401F0, + CO_S_FIRST = 0x000401F0, + CO_E_NOTINITIALIZED = 0x800401F0, + CO_E_ALREADYINITIALIZED = 0x800401F1, + CO_E_CANTDETERMINECLASS = 0x800401F2, + CO_E_CLASSSTRING = 0x800401F3, + CO_E_IIDSTRING = 0x800401F4, + CO_E_APPNOTFOUND = 0x800401F5, + CO_E_APPSINGLEUSE = 0x800401F6, + CO_E_ERRORINAPP = 0x800401F7, + CO_E_DLLNOTFOUND = 0x800401F8, + CO_E_ERRORINDLL = 0x800401F9, + CO_E_WRONGOSFORAPP = 0x800401FA, + CO_E_OBJNOTREG = 0x800401FB, + CO_E_OBJISREG = 0x800401FC, + CO_E_OBJNOTCONNECTED = 0x800401FD, + CO_E_APPDIDNTREG = 0x800401FE, + CO_E_LAST = 0x800401FF, + CO_S_LAST = 0x000401FF, + CO_E_RELEASED = 0x800401FF, + + CO_E_CLASS_CREATE_FAILED = 0x80080001, + CO_E_SCM_ERROR = 0x80080002, + CO_E_SCM_RPC_FAILURE = 0x80080003, + CO_E_BAD_PATH = 0x80080004, + CO_E_SERVER_EXEC_FAILURE = 0x80080005, + CO_E_OBJSRV_RPC_FAILURE = 0x80080006, + MK_E_NO_NORMALIZED = 0x80080007, + CO_E_SERVER_STOPPING = 0x80080008, + MEM_E_INVALID_ROOT = 0x80080009, + MEM_E_INVALID_LINK = 0x80080010, + MEM_E_INVALID_SIZE = 0x80080011, + CO_S_NOTALLINTERFACES = 0x00080012, + + NTE_BAD_UID = 0x80090001, + NTE_BAD_HASH = 0x80090002, + NTE_BAD_KEY = 0x80090003, + NTE_BAD_LEN = 0x80090004, + NTE_BAD_DATA = 0x80090005, + NTE_BAD_SIGNATURE = 0x80090006, + NTE_BAD_VER = 0x80090007, + NTE_BAD_ALGID = 0x80090008, + NTE_BAD_FLAGS = 0x80090009, + NTE_BAD_TYPE = 0x8009000A, + NTE_BAD_KEY_STATE = 0x8009000B, + NTE_BAD_HASH_STATE = 0x8009000C, + NTE_NO_KEY = 0x8009000D, + NTE_NO_MEMORY = 0x8009000E, + NTE_EXISTS = 0x8009000F, + NTE_PERM = 0x80090010, + NTE_NOT_FOUND = 0x80090011, + NTE_DOUBLE_ENCRYPT = 0x80090012, + NTE_BAD_PROVIDER = 0x80090013, + NTE_BAD_PROV_TYPE = 0x80090014, + NTE_BAD_PUBLIC_KEY = 0x80090015, + NTE_BAD_KEYSET = 0x80090016, + NTE_PROV_TYPE_NOT_DEF = 0x80090017, + NTE_PROV_TYPE_ENTRY_BAD = 0x80090018, + NTE_KEYSET_NOT_DEF = 0x80090019, + NTE_KEYSET_ENTRY_BAD = 0x8009001A, + NTE_PROV_TYPE_NO_MATCH = 0x8009001B, + NTE_SIGNATURE_FILE_BAD = 0x8009001C, + NTE_PROVIDER_DLL_FAIL = 0x8009001D, + NTE_PROV_DLL_NOT_FOUND = 0x8009001E, + NTE_BAD_KEYSET_PARAM = 0x8009001F, + NTE_FAIL = 0x80090020, + NTE_SYS_ERR = 0x80090021 +} + + +enum : bool { + SEVERITY_SUCCESS = 0, + SEVERITY_ERROR = 1 +} + +enum : uint { + FACILITY_NULL = 0, + FACILITY_RPC, + FACILITY_DISPATCH, + FACILITY_STORAGE, + FACILITY_ITF, // = 4 + FACILITY_WIN32 = 7, + FACILITY_WINDOWS = 8, + FACILITY_CONTROL = 10, + FACILITY_NT_BIT = 0x10000000 +} + +// C Macros + +bool SUCCEEDED(HRESULT Status) { + return Status >= 0; +} + +bool FAILED(HRESULT Status) { + return Status < 0; +} + +bool IS_ERROR(HRESULT Status) { + return (Status >>> 31) == SEVERITY_ERROR; +} + +ushort HRESULT_CODE(HRESULT r) { + return cast(ushort) (r & 0xFFFF); +} + +ushort SCODE_CODE(SCODE r) { + return cast(ushort) (r & 0xFFFF); +} + +ushort HRESULT_FACILITY(HRESULT r) { + return cast(ushort) ((r>>16) & 0x1fff); +} + +ushort SCODE_FACILITY(SCODE r) { + return cast(ushort) ((r>>16) & 0x1fff); +} + +ushort HRESULT_SEVERITY(HRESULT r) { + return cast(ushort) ((r>>31) & 0x1); +} + +ushort SCODE_SEVERITY(SCODE r) { + return cast(ushort) ((r>>31) & 0x1); +} + +HRESULT MAKE_HRESULT(bool s, uint f, uint c) { + return (s << 31) | (f << 16) | c; +} + +SCODE MAKE_SCODE(bool s, uint f, uint c) { + return (s << 31) | (f << 16) | c; +} + +SCODE GetScode(HRESULT hr) { + return hr; +} + +HRESULT ResultFromScode(SCODE c) { + return c; +} + +HRESULT HRESULT_FROM_NT(HRESULT x) { + return x | FACILITY_NT_BIT; +} + +HRESULT HRESULT_FROM_WIN32(HRESULT x) { + return x ? (x & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000 : 0; +} + +HRESULT PropagateResult(HRESULT hrPrevious, SCODE scBase) { + return scBase; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/wingdi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/wingdi.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,4590 @@ +/***********************************************************************\ +* wingdi.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.wingdi; +pragma(lib, "gdi32.lib"); + +// FIXME: clean up Windows version support + +private import win32.w32api, win32.windef, win32.winver; + +// BITMAPINFOHEADER.biCompression +enum : DWORD { + BI_RGB = 0, + BI_RLE8, + BI_RLE4, + BI_BITFIELDS, + BI_JPEG, + BI_PNG +} + +// --- +// COLORADJUSTMENT -- only for NT 3.1+, Win2000+ +const WORD + CA_NEGATIVE = 1, + CA_LOG_FILTER = 2; + +// COLORADJUSTMENT +enum : WORD { + ILLUMINANT_DEVICE_DEFAULT = 0, + ILLUMINANT_A, + ILLUMINANT_B, + ILLUMINANT_C, + ILLUMINANT_D50, + ILLUMINANT_D55, + ILLUMINANT_D65, + ILLUMINANT_D75, + ILLUMINANT_F2, + ILLUMINANT_MAX_INDEX = ILLUMINANT_F2, + ILLUMINANT_TUNGSTEN = ILLUMINANT_A, + ILLUMINANT_DAYLIGHT = ILLUMINANT_C, + ILLUMINANT_FLUORESCENT = ILLUMINANT_F2, + ILLUMINANT_NTSC = ILLUMINANT_C +} + +enum { + RGB_GAMMA_MIN = 2500, + RGB_GAMMA_MAX = 65000, + REFERENCE_WHITE_MIN = 6000, + REFERENCE_WHITE_MAX = 10000, + REFERENCE_BLACK_MIN = 0, + REFERENCE_BLACK_MAX = 4000, + COLOR_ADJ_MIN = -100, + COLOR_ADJ_MAX = 100, +} +//--- + +/* FIXME: move to win32.winuser ? */ +// DrawIconEx() +enum : UINT { + DI_MASK = 1, + DI_IMAGE = 2, + DI_NORMAL = 3, + DI_COMPAT = 4, + DI_DEFAULTSIZE = 8 +} + +// DOCINFO +enum : DWORD { + DI_APPBANDING = 1, + DI_ROPS_READ_DESTINATION = 2, +} + +// ENHMETAHEADER +enum : DWORD { + EMR_HEADER = 1, + EMR_POLYBEZIER, + EMR_POLYGON, + EMR_POLYLINE, + EMR_POLYBEZIERTO, + EMR_POLYLINETO, + EMR_POLYPOLYLINE, + EMR_POLYPOLYGON, + EMR_SETWINDOWEXTEX, + EMR_SETWINDOWORGEX, + EMR_SETVIEWPORTEXTEX, + EMR_SETVIEWPORTORGEX, + EMR_SETBRUSHORGEX, + EMR_EOF, + EMR_SETPIXELV, + EMR_SETMAPPERFLAGS, + EMR_SETMAPMODE, + EMR_SETBKMODE, + EMR_SETPOLYFILLMODE, + EMR_SETROP2, + EMR_SETSTRETCHBLTMODE, + EMR_SETTEXTALIGN, + EMR_SETCOLORADJUSTMENT, + EMR_SETTEXTCOLOR, + EMR_SETBKCOLOR, + EMR_OFFSETCLIPRGN, + EMR_MOVETOEX, + EMR_SETMETARGN, + EMR_EXCLUDECLIPRECT, + EMR_INTERSECTCLIPRECT, + EMR_SCALEVIEWPORTEXTEX, + EMR_SCALEWINDOWEXTEX, + EMR_SAVEDC, + EMR_RESTOREDC, + EMR_SETWORLDTRANSFORM, + EMR_MODIFYWORLDTRANSFORM, + EMR_SELECTOBJECT, + EMR_CREATEPEN, + EMR_CREATEBRUSHINDIRECT, + EMR_DELETEOBJECT, + EMR_ANGLEARC, + EMR_ELLIPSE, + EMR_RECTANGLE, + EMR_ROUNDRECT, + EMR_ARC, + EMR_CHORD, + EMR_PIE, + EMR_SELECTPALETTE, + EMR_CREATEPALETTE, + EMR_SETPALETTEENTRIES, + EMR_RESIZEPALETTE, + EMR_REALIZEPALETTE, + EMR_EXTFLOODFILL, + EMR_LINETO, + EMR_ARCTO, + EMR_POLYDRAW, + EMR_SETARCDIRECTION, + EMR_SETMITERLIMIT, + EMR_BEGINPATH, + EMR_ENDPATH, + EMR_CLOSEFIGURE, + EMR_FILLPATH, + EMR_STROKEANDFILLPATH, + EMR_STROKEPATH, + EMR_FLATTENPATH, + EMR_WIDENPATH, + EMR_SELECTCLIPPATH, + EMR_ABORTPATH, // 68 + // reserved 69 + EMR_GDICOMMENT = 70, + EMR_FILLRGN, + EMR_FRAMERGN, + EMR_INVERTRGN, + EMR_PAINTRGN, + EMR_EXTSELECTCLIPRGN, + EMR_BITBLT, + EMR_STRETCHBLT, + EMR_MASKBLT, + EMR_PLGBLT, + EMR_SETDIBITSTODEVICE, + EMR_STRETCHDIBITS, + EMR_EXTCREATEFONTINDIRECTW, + EMR_EXTTEXTOUTA, + EMR_EXTTEXTOUTW, + EMR_POLYBEZIER16, + EMR_POLYGON16, + EMR_POLYLINE16, + EMR_POLYBEZIERTO16, + EMR_POLYLINETO16, + EMR_POLYPOLYLINE16, + EMR_POLYPOLYGON16, + EMR_POLYDRAW16, + EMR_CREATEMONOBRUSH, + EMR_CREATEDIBPATTERNBRUSHPT, + EMR_EXTCREATEPEN, + EMR_POLYTEXTOUTA, + EMR_POLYTEXTOUTW, // 97 + EMR_SETICMMODE, + EMR_CREATECOLORSPACE, + EMR_SETCOLORSPACE, + EMR_DELETECOLORSPACE, + EMR_GLSRECORD, + EMR_GLSBOUNDEDRECORD, + EMR_PIXELFORMAT, // = 104 + // reserved 105 - 110 + EMR_COLORCORRECTPALETTE = 111, + EMR_SETICMPROFILEA, + EMR_SETICMPROFILEW, + EMR_ALPHABLEND, + EMR_SETLAYOUT, + EMR_TRANSPARENTBLT, // 116 + // reserved 117 + EMR_GRADIENTFILL = 118, + // reserved 119, 120 + EMR_COLORMATCHTOTARGETW = 121, + EMR_CREATECOLORSPACEW // 122 +} + +const EMR_MIN = EMR_HEADER; + +static if (WINVER >= 0x0500) + const EMR_MAX = EMR_CREATECOLORSPACEW; +else static if (WINVER >= 0x0400) + const EMR_MAX = EMR_PIXELFORMAT; +else + const EMR_MAX = EMR_POLYTEXTOUTW; + +// ENHMETAHEADER.dSignature, ENHMETAHEADER3.dSignature, +// EMRFORMAT.dSignature +enum : DWORD { + ENHMETA_SIGNATURE = 1179469088, + EPS_SIGNATURE = 0x46535045 +} + +static if (_WIN32_WINNT >= 0x0500) { + // AddFontResourceEx() + enum : DWORD { + FR_PRIVATE = 0x10, + FR_NOT_ENUM = 0x20 + } +} + +enum { + META_SAVEDC = 0x1E, + META_REALIZEPALETTE = 0x35, + META_SETPALENTRIES = 0x37, + META_CREATEPALETTE = 0xf7, + META_SETBKMODE = 0x102, + META_SETMAPMODE = 0x103, + META_SETROP2 = 0x104, + META_SETRELABS = 0x105, + META_SETPOLYFILLMODE = 0x106, + META_SETSTRETCHBLTMODE = 0x107, + META_SETTEXTCHAREXTRA = 0x108, + META_RESTOREDC = 0x127, + META_INVERTREGION = 0x12A, + META_PAINTREGION = 0x12B, + META_SELECTCLIPREGION = 0x12C, + META_SELECTOBJECT = 0x12D, + META_SETTEXTALIGN = 0x12E, + META_RESIZEPALETTE = 0x139, + META_DIBCREATEPATTERNBRUSH = 0x142, + META_SETLAYOUT = 0x149, + META_DELETEOBJECT = 0x1F0, + META_CREATEPATTERNBRUSH = 0x1F9, + META_SETBKCOLOR = 0x201, + META_SETTEXTCOLOR = 0x209, + META_SETTEXTJUSTIFICATION = 0x20A, + META_SETWINDOWORG = 0x20B, + META_SETWINDOWEXT = 0x20C, + META_SETVIEWPORTORG = 0x20D, + META_SETVIEWPORTEXT = 0x20E, + META_OFFSETWINDOWORG = 0x20F, + META_OFFSETVIEWPORTORG = 0x211, + META_LINETO = 0x213, + META_MOVETO = 0x214, + META_OFFSETCLIPRGN = 0x220, + META_FILLREGION = 0x228, + META_SETMAPPERFLAGS = 0x231, + META_SELECTPALETTE = 0x234, + META_CREATEPENINDIRECT = 0x2FA, + META_CREATEFONTINDIRECT = 0x2FB, + META_CREATEBRUSHINDIRECT = 0x2FC, + META_POLYGON = 0x324, + META_POLYLINE = 0x325, + META_SCALEWINDOWEXT = 0x410, + META_SCALEVIEWPORTEXT = 0x412, + META_EXCLUDECLIPRECT = 0x415, + META_INTERSECTCLIPRECT = 0x416, + META_ELLIPSE = 0x418, + META_FLOODFILL = 0x419, + META_RECTANGLE = 0x41B, + META_SETPIXEL = 0x41F, + META_FRAMEREGION = 0x429, + META_ANIMATEPALETTE = 0x436, + META_TEXTOUT = 0x521, + META_POLYPOLYGON = 0x538, + META_EXTFLOODFILL = 0x548, + META_ROUNDRECT = 0x61C, + META_PATBLT = 0x61D, + META_ESCAPE = 0x626, + META_CREATEREGION = 0x6FF, + META_ARC = 0x817, + META_PIE = 0x81A, + META_CHORD = 0x830, + META_BITBLT = 0x922, + META_DIBBITBLT = 0x940, + META_EXTTEXTOUT = 0xA32, + META_STRETCHBLT = 0xB23, + META_DIBSTRETCHBLT = 0xB41, + META_SETDIBTODEV = 0xD33, + META_STRETCHDIB = 0xF43 +} + +// EMRPOLYDRAW +enum : BYTE { + PT_CLOSEFIGURE = 1, + PT_LINETO = 2, + PT_BEZIERTO = 4, + PT_MOVETO = 6 +} + +// ---- +// PIXELFORMATDESCRIPTOR.iPixelType +enum : BYTE { + PFD_TYPE_RGBA = 0, + PFD_TYPE_COLORINDEX = 1 +} + +deprecated { +// PIXELFORMATDESCRIPTOR. +const byte + PFD_MAIN_PLANE = 0, + PFD_OVERLAY_PLANE = 1, + PFD_UNDERLAY_PLANE = -1; +} +// PIXELFORMATDESCRIPTOR.dwFlags +const DWORD + PFD_DOUBLEBUFFER = 0x00000001, + PFD_STEREO = 0x00000002, + PFD_DRAW_TO_WINDOW = 0x00000004, + PFD_DRAW_TO_BITMAP = 0x00000008, + PFD_SUPPORT_GDI = 0x00000010, + PFD_SUPPORT_OPENGL = 0x00000020, + PFD_GENERIC_FORMAT = 0x00000040, + PFD_NEED_PALETTE = 0x00000080, + PFD_NEED_SYSTEM_PALETTE = 0x00000100, + PFD_SWAP_EXCHANGE = 0x00000200, + PFD_SWAP_COPY = 0x00000400, + PFD_SWAP_LAYER_BUFFERS = 0x00000800, + PFD_GENERIC_ACCELERATED = 0x00001000, + PFD_SUPPORT_DIRECTDRAW = 0x00002000, + /* PIXELFORMATDESCRIPTOR flags for use in ChoosePixelFormat only */ + PFD_DEPTH_DONTCARE = 0x20000000, + PFD_DOUBLEBUFFER_DONTCARE = 0x40000000, + PFD_STEREO_DONTCARE = 0x80000000; + +// ---- + +const DWORD + BLACKNESS = 0x000042, + NOTSRCERASE = 0x1100A6, + NOTSRCCOPY = 0x330008, + SRCERASE = 0x440328, + DSTINVERT = 0x550009, + PATINVERT = 0x5A0049, + SRCINVERT = 0x660046, + SRCAND = 0x8800C6, + MERGEPAINT = 0xBB0226, + MERGECOPY = 0xC000CA, + SRCCOPY = 0xCC0020, + SRCPAINT = 0xEE0086, + PATCOPY = 0xF00021, + PATPAINT = 0xFB0A09, + WHITENESS = 0xFF0062; +static if (WINVER >= 0x0500) { + const DWORD + NOMIRRORBITMAP = 0x80000000, + CAPTUREBLT = 0x40000000; +} + +// GetROP2(), SetROP2() +enum : int { + R2_BLACK = 1, + R2_NOTMERGEPEN = 2, + R2_MASKNOTPEN = 3, + R2_NOTCOPYPEN = 4, + R2_MASKPENNOT = 5, + R2_NOT = 6, + R2_XORPEN = 7, + R2_NOTMASKPEN = 8, + R2_MASKPEN = 9, + R2_NOTXORPEN = 10, + R2_NOP = 11, + R2_MERGENOTPEN = 12, + R2_COPYPEN = 13, + R2_MERGEPENNOT = 14, + R2_MERGEPEN = 15, + R2_WHITE = 16 +} + +const R2_LAST = R2_WHITE; + +// CheckColorsInGamut() +const ubyte + CM_IN_GAMUT = 0, + CM_OUT_OF_GAMUT = 255; + +/* UpdateICMRegKey Constants */ +const int + ICM_ADDPROFILE = 1, + ICM_DELETEPROFILE = 2, + ICM_QUERYPROFILE = 3, + ICM_SETDEFAULTPROFILE = 4, + ICM_REGISTERICMATCHER = 5, + ICM_UNREGISTERICMATCHER = 6, + ICM_QUERYMATCH = 7; + +enum : int { + RGN_AND = 1, + RGN_OR = 2, + RGN_XOR = 3, + RGN_DIFF = 4, + RGN_COPY = 5 +} + +const RGN_MIN = RGN_AND; +const RGN_MAX = RGN_COPY; + +// Return values for CombineRgn() +enum { + NULLREGION = 1, + SIMPLEREGION = 2, + COMPLEXREGION = 3 +} + +const ERROR = 0; +alias ERROR RGN_ERROR; + +// CreateDIBitmap() +const DWORD CBM_INIT = 4; + +// CreateDIBitmap() +enum : UINT { + DIB_RGB_COLORS = 0, + DIB_PAL_COLORS = 1 +} + +// --- +// Values for LOGFONT and CreateFont() + +// FIXME: For D, replace with lfFaceName.length() +const LF_FACESIZE = 32; +const LF_FULLFACESIZE = 64; + +// FIXME: Not needed for D, only EXTLOGFONT +const ELF_VENDOR_SIZE = 4; + +// ??? +const ELF_VERSION = 0; +const ELF_CULTURE_LATIN = 0; + +// LOGFONT.lfWeight +const LONG + FW_DONTCARE = 0, + FW_THIN = 100, + FW_EXTRALIGHT = 200, + FW_ULTRALIGHT = FW_EXTRALIGHT, + FW_LIGHT = 300, + FW_NORMAL = 400, + FW_REGULAR = FW_NORMAL, + FW_MEDIUM = 500, + FW_SEMIBOLD = 600, + FW_DEMIBOLD = FW_SEMIBOLD, + FW_BOLD = 700, + FW_EXTRABOLD = 800, + FW_ULTRABOLD = FW_EXTRABOLD, + FW_HEAVY = 900, + FW_BLACK = FW_HEAVY; + +// LOGFONT.lfCharSet +enum : DWORD { + ANSI_CHARSET = 0, + DEFAULT_CHARSET = 1, + SYMBOL_CHARSET = 2, + MAC_CHARSET = 77, + SHIFTJIS_CHARSET = 128, + HANGEUL_CHARSET = 129, + HANGUL_CHARSET = 129, + JOHAB_CHARSET = 130, + GB2312_CHARSET = 134, + CHINESEBIG5_CHARSET = 136, + GREEK_CHARSET = 161, + TURKISH_CHARSET = 162, + VIETNAMESE_CHARSET = 163, + HEBREW_CHARSET = 177, + ARABIC_CHARSET = 178, + BALTIC_CHARSET = 186, + RUSSIAN_CHARSET = 204, + THAI_CHARSET = 222, + EASTEUROPE_CHARSET = 238, + OEM_CHARSET = 255 +} + +// LOGFONT.lfOutPrecision +enum : BYTE { + OUT_DEFAULT_PRECIS = 0, + OUT_STRING_PRECIS, + OUT_CHARACTER_PRECIS, + OUT_STROKE_PRECIS, + OUT_TT_PRECIS, + OUT_DEVICE_PRECIS, + OUT_RASTER_PRECIS, + OUT_TT_ONLY_PRECIS, + OUT_OUTLINE_PRECIS, + OUT_SCREEN_OUTLINE_PRECIS, + OUT_PS_ONLY_PRECIS, // 10 +} + +// LOGFONT.lfClipPrecision +enum : BYTE { + CLIP_DEFAULT_PRECIS = 0, + CLIP_CHARACTER_PRECIS = 1, + CLIP_STROKE_PRECIS = 2, + CLIP_MASK = 15, + CLIP_LH_ANGLES = 16, + CLIP_TT_ALWAYS = 32, + CLIP_DFA_DISABLE = 64, + CLIP_EMBEDDED = 128 +} + +// LOGFONT.lfQuality +enum : BYTE { + DEFAULT_QUALITY = 0, + DRAFT_QUALITY, + PROOF_QUALITY, + NONANTIALIASED_QUALITY, + ANTIALIASED_QUALITY +} + +// LOGFONT.lfPitchAndFamily + +const BYTE + DEFAULT_PITCH = 0, + FIXED_PITCH = 1, + VARIABLE_PITCH = 2, + MONO_FONT = 8, + FF_DONTCARE = 0, + FF_ROMAN = 16, + FF_SWISS = 32, + FF_SCRIPT = 64, + FF_MODERN = 48, + FF_DECORATIVE = 80; + +// ---- +// Enums for the PANOSE struct + +const PANOSE_COUNT=10; + +enum { + PAN_FAMILYTYPE_INDEX = 0, + PAN_SERIFSTYLE_INDEX, + PAN_WEIGHT_INDEX, + PAN_PROPORTION_INDEX, + PAN_CONTRAST_INDEX, + PAN_STROKEVARIATION_INDEX, + PAN_ARMSTYLE_INDEX, + PAN_LETTERFORM_INDEX, + PAN_MIDLINE_INDEX, + PAN_XHEIGHT_INDEX +} + +const PAN_CULTURE_LATIN=0; + +// NOTE: the first two values (PAN_ANY and PAN_NO_FIT) apply to all these enums! +enum : BYTE { + PAN_ANY = 0, + PAN_NO_FIT = 1, +} + +enum : BYTE { + PAN_FAMILY_TEXT_DISPLAY = 2, + PAN_FAMILY_SCRIPT, + PAN_FAMILY_DECORATIVE, + PAN_FAMILY_PICTORIAL +} +enum : BYTE { + PAN_SERIF_COVE = 2, + PAN_SERIF_OBTUSE_COVE, + PAN_SERIF_SQUARE_COVE, + PAN_SERIF_OBTUSE_SQUARE_COVE, + PAN_SERIF_SQUARE, + PAN_SERIF_THIN, + PAN_SERIF_BONE, + PAN_SERIF_EXAGGERATED, + PAN_SERIF_TRIANGLE, + PAN_SERIF_NORMAL_SANS, + PAN_SERIF_OBTUSE_SANS, + PAN_SERIF_PERP_SANS, + PAN_SERIF_FLARED, + PAN_SERIF_ROUNDED +} + +enum : BYTE { + PAN_WEIGHT_VERY_LIGHT = 2, + PAN_WEIGHT_LIGHT, + PAN_WEIGHT_THIN, + PAN_WEIGHT_BOOK, + PAN_WEIGHT_MEDIUM, + PAN_WEIGHT_DEMI, + PAN_WEIGHT_BOLD, + PAN_WEIGHT_HEAVY, + PAN_WEIGHT_BLACK, + PAN_WEIGHT_NORD +} + +enum : BYTE { + PAN_PROP_OLD_STYLE = 2, + PAN_PROP_MODERN, + PAN_PROP_EVEN_WIDTH, + PAN_PROP_EXPANDED, + PAN_PROP_CONDENSED, + PAN_PROP_VERY_EXPANDED, + PAN_PROP_VERY_CONDENSED, + PAN_PROP_MONOSPACED +} + +enum : BYTE { + PAN_CONTRAST_NONE = 2, + PAN_CONTRAST_VERY_LOW, + PAN_CONTRAST_LOW, + PAN_CONTRAST_MEDIUM_LOW, + PAN_CONTRAST_MEDIUM, + PAN_CONTRAST_MEDIUM_HIGH, + PAN_CONTRAST_HIGH, + PAN_CONTRAST_VERY_HIGH +} + +// PANOSE.bStrokeVariation +enum : BYTE { + PAN_STROKE_GRADUAL_DIAG = 2, + PAN_STROKE_GRADUAL_TRAN, + PAN_STROKE_GRADUAL_VERT, + PAN_STROKE_GRADUAL_HORZ, + PAN_STROKE_RAPID_VERT, + PAN_STROKE_RAPID_HORZ, + PAN_STROKE_INSTANT_VERT +} + +// PANOSE.bArmStyle +enum : BYTE { + PAN_STRAIGHT_ARMS_HORZ = 2, + PAN_STRAIGHT_ARMS_WEDGE, + PAN_STRAIGHT_ARMS_VERT, + PAN_STRAIGHT_ARMS_SINGLE_SERIF, + PAN_STRAIGHT_ARMS_DOUBLE_SERIF, + PAN_BENT_ARMS_HORZ, + PAN_BENT_ARMS_WEDGE, + PAN_BENT_ARMS_VERT, + PAN_BENT_ARMS_SINGLE_SERIF, + PAN_BENT_ARMS_DOUBLE_SERIF +} + +// PANOSE.bLetterForm +enum : BYTE { + PAN_LETT_NORMAL_CONTACT = 2, + PAN_LETT_NORMAL_WEIGHTED, + PAN_LETT_NORMAL_BOXED, + PAN_LETT_NORMAL_FLATTENED, + PAN_LETT_NORMAL_ROUNDED, + PAN_LETT_NORMAL_OFF_CENTER, + PAN_LETT_NORMAL_SQUARE, + PAN_LETT_OBLIQUE_CONTACT, + PAN_LETT_OBLIQUE_WEIGHTED, + PAN_LETT_OBLIQUE_BOXED, + PAN_LETT_OBLIQUE_FLATTENED, + PAN_LETT_OBLIQUE_ROUNDED, + PAN_LETT_OBLIQUE_OFF_CENTER, + PAN_LETT_OBLIQUE_SQUARE +} + +// PANOSE.bMidLine +enum : BYTE { + PAN_MIDLINE_STANDARD_TRIMMED = 2, + PAN_MIDLINE_STANDARD_POINTED, + PAN_MIDLINE_STANDARD_SERIFED, + PAN_MIDLINE_HIGH_TRIMMED, + PAN_MIDLINE_HIGH_POINTED, + PAN_MIDLINE_HIGH_SERIFED, + PAN_MIDLINE_CONSTANT_TRIMMED, + PAN_MIDLINE_CONSTANT_POINTED, + PAN_MIDLINE_CONSTANT_SERIFED, + PAN_MIDLINE_LOW_TRIMMED, + PAN_MIDLINE_LOW_POINTED, + PAN_MIDLINE_LOW_SERIFED +} + +// PANOSE.bXHeight +enum : BYTE { + PAN_XHEIGHT_CONSTANT_SMALL = 2, + PAN_XHEIGHT_CONSTANT_STD, + PAN_XHEIGHT_CONSTANT_LARGE, + PAN_XHEIGHT_DUCKING_SMALL, + PAN_XHEIGHT_DUCKING_STD, + PAN_XHEIGHT_DUCKING_LARGE +} + +// ---- +// ??? +const FS_LATIN1 = 0x00000001; +const FS_LATIN2 = 0x00000002; +const FS_CYRILLIC = 0x00000004; +const FS_GREEK = 0x00000008; +const FS_TURKISH = 0x00000010; +const FS_HEBREW = 0x00000020; +const FS_ARABIC = 0x00000040; +const FS_BALTIC = 0x00000080; +const FS_VIETNAMESE = 0x00000100; +const FS_THAI = 0x00010000; +const FS_JISJAPAN = 0x00020000; +const FS_CHINESESIMP = 0x00040000; +const FS_WANSUNG = 0x00080000; +const FS_CHINESETRAD = 0x00100000; +const FS_JOHAB = 0x00200000; +const FS_SYMBOL = 0x80000000; + +// ---- +// Poly Fill Mode +enum : int { + ALTERNATE = 1, + WINDING = 2 +} +const int POLYFILL_LAST = WINDING; + +//--- +// LOGBRUSH +enum : LONG { + HS_HORIZONTAL = 0, + HS_VERTICAL, + HS_FDIAGONAL, + HS_BDIAGONAL, + HS_CROSS, + HS_DIAGCROSS +} + +//LOGBRUSH.lbStyle +enum : UINT { + BS_SOLID = 0, + BS_NULL = 1, + BS_HOLLOW = BS_NULL, + BS_HATCHED, + BS_PATTERN, + BS_INDEXED, + BS_DIBPATTERN, + BS_DIBPATTERNPT, + BS_PATTERN8X8, + BS_DIBPATTERN8X8, + BS_MONOPATTERN, +} +//----- +// EXTLOGPEN, ExtCreatePen() + +// EXTLOGPEN.elpPenStyle +enum : DWORD { + PS_SOLID = 0, + PS_DASH = 1, + PS_DOT = 2, + PS_DASHDOT = 3, + PS_DASHDOTDOT = 4, + PS_NULL = 5, + PS_INSIDEFRAME = 6, + PS_USERSTYLE = 7, + PS_ALTERNATE = 8, + PS_STYLE_MASK = 15, +} + +enum : DWORD { + PS_COSMETIC = 0x00000000, + PS_GEOMETRIC = 0x00010000, + PS_TYPE_MASK = 0x000F0000, +} +enum : DWORD { + PS_ENDCAP_ROUND = 0x00000000, + PS_ENDCAP_SQUARE = 0x00000100, + PS_ENDCAP_FLAT = 0x00000200, + PS_ENDCAP_MASK = 0x00000F00, +} +enum : DWORD { + PS_JOIN_ROUND = 0x00000000, + PS_JOIN_BEVEL = 0x00001000, + PS_JOIN_MITER = 0x00002000, + PS_JOIN_MASK = 0x0000F000, +} + +// --- +// DeviceCapabilities() + +enum : WORD { + DC_FIELDS = 1, + DC_PAPERS, + DC_PAPERSIZE, + DC_MINEXTENT, + DC_MAXEXTENT, + DC_BINS, + DC_DUPLEX, + DC_SIZE, + DC_EXTRA, + DC_VERSION, + DC_DRIVER, + DC_BINNAMES, + DC_ENUMRESOLUTIONS, + DC_FILEDEPENDENCIES, + DC_TRUETYPE, + DC_PAPERNAMES, + DC_ORIENTATION, + DC_COPIES, + DC_BINADJUST, + DC_EMF_COMPLIANT, + DC_DATATYPE_PRODUCED, + DC_COLLATE, + DC_MANUFACTURER, + DC_MODEL, +} + +static if (WINVER >= 0x0500) { + enum { + DC_PERSONALITY = 25, + DC_PRINTRATE = 26, + DC_PRINTRATEUNIT = 27, + DC_PRINTERMEM = 28, + DC_MEDIAREADY = 29, + DC_STAPLE = 30, + DC_PRINTRATEPPM = 31, + DC_COLORDEVICE = 32, + DC_NUP = 33, + DC_MEDIATYPENAMES = 34, + DC_MEDIATYPES = 35, + } + enum { + PRINTRATEUNIT_PPM = 1, + PRINTRATEUNIT_CPS = 2, + PRINTRATEUNIT_LPM = 3, + PRINTRATEUNIT_IPM = 4, + } +} + + +// return from DC_TRUETYPE +const DWORD + DCTT_BITMAP = 1, + DCTT_DOWNLOAD = 2, + DCTT_SUBDEV = 4, + DCTT_DOWNLOAD_OUTLINE = 8; + +static if (WINVER >= 0x0400) { + // return from DC_BINADJUST + enum : DWORD { + DCBA_FACEUPNONE = 0x0000, + DCBA_FACEUPCENTER = 0x0001, + DCBA_FACEUPLEFT = 0x0002, + DCBA_FACEUPRIGHT = 0x0003, + DCBA_FACEDOWNNONE = 0x0100, + DCBA_FACEDOWNCENTER = 0x0101, + DCBA_FACEDOWNLEFT = 0x0102, + DCBA_FACEDOWNRIGHT = 0x0103, + } +} +//--- + +const FLOODFILLBORDER = 0; +const FLOODFILLSURFACE = 1; + +// ExtTextOut() +const UINT + ETO_OPAQUE = 0x0002, + ETO_CLIPPED = 0x0004, + ETO_GLYPH_INDEX = 0x0010, + ETO_RTLREADING = 0x0080, + ETO_NUMERICSLOCAL = 0x0400, + ETO_NUMERICSLATIN = 0x0800, + ETO_IGNORELANGUAGE = 0x1000; +static if (_WIN32_WINNT >= 0x0500) { + const UINT + ETO_PDY = 0x2000; +} + +// GdiComment() +enum { + GDICOMMENT_BEGINGROUP = 0x00000002, + GDICOMMENT_ENDGROUP = 0x00000003, + GDICOMMENT_UNICODE_STRING = 0x00000040, + GDICOMMENT_UNICODE_END = 0x00000080, + GDICOMMENT_MULTIFORMATS = 0x40000004, + GDICOMMENT_IDENTIFIER = 0x43494447, + GDICOMMENT_WINDOWS_METAFILE = 0x80000001, +} + +// Get/SetArcDirection() +enum : int { + AD_COUNTERCLOCKWISE = 1, + AD_CLOCKWISE = 2 +} + +const RDH_RECTANGLES = 1; + +// GCPRESULTS.lpClass +enum { + GCPCLASS_LATIN = 1, + GCPCLASS_HEBREW = 2, + GCPCLASS_ARABIC = 2, + GCPCLASS_NEUTRAL, + GCPCLASS_LOCALNUMBER, + GCPCLASS_LATINNUMBER, + GCPCLASS_LATINNUMERICTERMINATOR, + GCPCLASS_LATINNUMERICSEPARATOR, + GCPCLASS_NUMERICSEPARATOR, // = 8, + GCPCLASS_POSTBOUNDRTL = 16, + GCPCLASS_POSTBOUNDLTR = 32, + GCPCLASS_PREBOUNDRTL = 64, + GCPCLASS_PREBOUNDLTR = 128, + GCPGLYPH_LINKAFTER = 0x4000, + GCPGLYPH_LINKBEFORE = 0x8000 +} + +// GetBoundsRect(), SetBoundsRect() +const UINT + DCB_RESET = 1, + DCB_ACCUMULATE = 2, + DCB_SET = DCB_RESET | DCB_ACCUMULATE, + DCB_ENABLE = 4, + DCB_DISABLE = 8, + DCB_DIRTY = DCB_ACCUMULATE; + +//--- +// GetObjectType() +enum : DWORD { + OBJ_PEN = 1, + OBJ_BRUSH, + OBJ_DC, + OBJ_METADC, + OBJ_PAL, + OBJ_FONT, + OBJ_BITMAP, + OBJ_REGION, + OBJ_METAFILE, + OBJ_MEMDC, + OBJ_EXTPEN, + OBJ_ENHMETADC, + OBJ_ENHMETAFILE, + OBJ_COLORSPACE, +} + +//--------------------- +// Capabilities for GetDeviceCaps(dc, xxx) + +enum : int { + DRIVERVERSION = 0, + TECHNOLOGY = 2, + HORZSIZE = 4, + VERTSIZE = 6, + HORZRES = 8, + VERTRES = 10, + BITSPIXEL = 12, + PLANES = 14, + NUMBRUSHES = 16, + NUMPENS = 18, + NUMMARKERS = 20, + NUMFONTS = 22, + NUMCOLORS = 24, + PDEVICESIZE = 26, + CURVECAPS = 28, + LINECAPS = 30, + POLYGONALCAPS = 32, + TEXTCAPS = 34, + CLIPCAPS = 36, + RASTERCAPS = 38, + ASPECTX = 40, + ASPECTY = 42, + ASPECTXY = 44, + LOGPIXELSX = 88, + LOGPIXELSY = 90, + SIZEPALETTE = 104, + NUMRESERVED = 106, + COLORRES = 108, + PHYSICALWIDTH = 110, + PHYSICALHEIGHT = 111, + PHYSICALOFFSETX = 112, + PHYSICALOFFSETY = 113, + SCALINGFACTORX = 114, + SCALINGFACTORY = 115, + VREFRESH = 116, + DESKTOPVERTRES = 117, + DESKTOPHORZRES = 118, + BLTALIGNMENT = 119 +} +static if (WINVER >= 0x0500) { + int + SHADEBLENDCAPS = 120, + COLORMGMTCAPS = 121; +} + +// Return values for GetDeviceCaps(dc, TECHNOLOGY) +enum : int { + DT_PLOTTER = 0, + DT_RASDISPLAY, + DT_RASPRINTER, + DT_RASCAMERA, + DT_CHARSTREAM, + DT_METAFILE, + DT_DISPFILE // = 6 +} + +// Return values for GetDeviceCaps(dc, RASTERCAPS) +const int + RC_NONE = 0, + RC_BITBLT = 1, + RC_BANDING = 2, + RC_SCALING = 4, + RC_BITMAP64 = 8, + RC_GDI20_OUTPUT = 16, + RC_GDI20_STATE = 32, + RC_SAVEBITMAP = 64, + RC_DI_BITMAP = 128, + RC_PALETTE = 256, + RC_DIBTODEV = 512, + RC_BIGFONT = 1024, + RC_STRETCHBLT = 2048, + RC_FLOODFILL = 4096, + RC_STRETCHDIB = 8192, + RC_OP_DX_OUTPUT = 0x4000, + RC_DEVBITS = 0x8000; + +static if (WINVER >= 0x0500) { + /* Shading and blending caps */ + const SB_NONE = 0x00000000; + const SB_CONST_ALPHA = 0x00000001; + const SB_PIXEL_ALPHA = 0x00000002; + const SB_PREMULT_ALPHA = 0x00000004; + const SB_GRAD_RECT = 0x00000010; + const SB_GRAD_TRI = 0x00000020; + /* Color Management caps */ + const CM_NONE = 0x00000000; + const CM_DEVICE_ICM = 0x00000001; + const CM_GAMMA_RAMP = 0x00000002; + const CM_CMYK_COLOR = 0x00000004; +} + +// Return values for GetDeviceCaps(dc, CURVECAPS) +const int + CC_NONE = 0, + CC_CIRCLES = 1, + CC_PIE = 2, + CC_CHORD = 4, + CC_ELLIPSES = 8, + CC_WIDE = 16, + CC_STYLED = 32, + CC_WIDESTYLED = 64, + CC_INTERIORS = 128, + CC_ROUNDRECT = 256; + +// Return values for GetDeviceCaps(dc, LINECAPS) + +const int + LC_NONE = 0, + LC_POLYLINE = 2, + LC_MARKER = 4, + LC_POLYMARKER = 8, + LC_WIDE = 16, + LC_STYLED = 32, + LC_WIDESTYLED = 64, + LC_INTERIORS = 128; + +// Return values for GetDeviceCaps(dc, POLYGONALCAPS) + +const int + PC_NONE = 0, + PC_POLYGON = 1, + PC_RECTANGLE = 2, + PC_WINDPOLYGON = 4, + PC_TRAPEZOID = 4, + PC_SCANLINE = 8, + PC_WIDE = 16, + PC_STYLED = 32, + PC_WIDESTYLED = 64, + PC_INTERIORS = 128, + PC_POLYPOLYGON = 256, + PC_PATHS = 512; + +/* Clipping Capabilities */ +const int CP_NONE = 0, + CP_RECTANGLE = 1, + CP_REGION = 2; + +// Return values for GetDeviceCaps(dc, TEXTCAPS) + +const int + TC_OP_CHARACTER = 1, + TC_OP_STROKE = 2, + TC_CP_STROKE = 4, + TC_CR_90 = 8, + TC_CR_ANY = 16, + TC_SF_X_YINDEP = 32, + TC_SA_DOUBLE = 64, + TC_SA_INTEGER = 128, + TC_SA_CONTIN = 256, + TC_EA_DOUBLE = 512, + TC_IA_ABLE = 1024, + TC_UA_ABLE = 2048, + TC_SO_ABLE = 4096, + TC_RA_ABLE = 8192, + TC_VA_ABLE = 16384, + TC_RESERVED = 32768, + TC_SCROLLBLT = 65536; + +// End GetDeviceCaps +//--------------------- +// GetCharacterPlacement(), and GetFontLanguageInfo() +const DWORD + GCP_DBCS = 1, + GCP_REORDER = 2, + GCP_USEKERNING = 8, + GCP_GLYPHSHAPE = 16, + GCP_LIGATE = 32, + GCP_DIACRITIC = 256, + GCP_KASHIDA = 1024, + GCP_ERROR = 0x8000, + GCP_JUSTIFY = 0x10000, + GCP_CLASSIN = 0x80000, + GCP_MAXEXTENT = 0x100000, + GCP_JUSTIFYIN = 0x200000, + GCP_DISPLAYZWG = 0x400000, + GCP_SYMSWAPOFF = 0x800000, + GCP_NUMERICOVERRIDE = 0x1000000, + GCP_NEUTRALOVERRIDE = 0x2000000, + GCP_NUMERICSLATIN = 0x4000000, + GCP_NUMERICSLOCAL = 0x8000000, + // Only for GetFontLanguageInfo() + FLI_GLYPHS = 0x40000, + FLI_MASK = 0x103b; + +// GetGlyphOutline() +enum : UINT { + GGO_METRICS = 0, + GGO_BITMAP = 1, + GGO_NATIVE = 2, + GGO_BEZIER = 3, + GGO_GRAY2_BITMAP = 4, + GGO_GRAY4_BITMAP = 5, + GGO_GRAY8_BITMAP = 6, + GGO_GLYPH_INDEX = 128, + GGO_UNHINTED = 256 +} + +enum : int { + GM_COMPATIBLE = 1, + GM_ADVANCED +} +const GM_LAST = GM_ADVANCED; + +enum : int { + MM_TEXT = 1, + MM_LOMETRIC, + MM_HIMETRIC, + MM_LOENGLISH, + MM_HIENGLISH, + MM_TWIPS, + MM_ISOTROPIC, + MM_ANISOTROPIC, +} + +const int + MM_MIN = MM_TEXT, + MM_MAX = MM_ANISOTROPIC, + MM_MAX_FIXEDSCALE = MM_TWIPS; + +const ABSOLUTE = 1; +const RELATIVE = 2; + +enum : BYTE { + PC_RESERVED = 1, + PC_EXPLICIT = 2, + PC_NOCOLLAPSE = 4 +} + +/* FIXME: move to win32.commctrl ? */ +// ImageList +const COLORREF + CLR_NONE = 0xffffffff, + CLR_INVALID = CLR_NONE, + CLR_DEFAULT = 0xff000000; + +// RASTERIZER_STATUS.wFlags +const short + TT_AVAILABLE = 1, + TT_ENABLED = 2; + +// GetStockObject() +enum : int { + WHITE_BRUSH = 0, + LTGRAY_BRUSH, + GRAY_BRUSH, + DKGRAY_BRUSH, + BLACK_BRUSH, + HOLLOW_BRUSH, // = 5 + NULL_BRUSH = HOLLOW_BRUSH, + WHITE_PEN = 6, + BLACK_PEN, + NULL_PEN, // = 8 + OEM_FIXED_FONT = 10, + ANSI_FIXED_FONT, + ANSI_VAR_FONT, + SYSTEM_FONT, + DEVICE_DEFAULT_FONT, + DEFAULT_PALETTE, + SYSTEM_FIXED_FONT, +} +static if (WINVER >= 0x0400) { + enum : int { + DEFAULT_GUI_FONT = SYSTEM_FIXED_FONT + 1, + } +} +static if (_WIN32_WINNT >= 0x0500) { + enum : int { + DC_BRUSH = DEFAULT_GUI_FONT + 1, + DC_PEN, + } +} + +static if (_WIN32_WINNT >= 0x0500) { + const STOCK_LAST = DC_PEN; +} +else static if (WINVER >= 0x0400) { + const STOCK_LAST = DEFAULT_GUI_FONT; +} +else { + const STOCK_LAST = SYSTEM_FIXED_FONT; +} + +// Get/SetSystemPaletteUse() +enum : UINT { + SYSPAL_ERROR = 0, + SYSPAL_STATIC = 1, + SYSPAL_NOSTATIC = 2, + SYSPAL_NOSTATIC256 = 3, +} + +// SetTextAlign() +const UINT + TA_TOP = 0, + TA_CENTER = 6, + TA_BOTTOM = 8, + TA_BASELINE = 24, + TA_LEFT = 0, + TA_RIGHT = 2, + TA_RTLREADING = 256, + TA_NOUPDATECP = 0, + TA_UPDATECP = 1, + TA_MASK = TA_BASELINE+TA_CENTER+TA_UPDATECP+TA_RTLREADING, + VTA_BASELINE = TA_BASELINE, + VTA_CENTER = TA_CENTER, + VTA_LEFT = TA_BOTTOM, + VTA_RIGHT = TA_TOP, + VTA_BOTTOM = TA_RIGHT, + VTA_TOP = TA_LEFT; + +// EMRMODIFYWORLDTRANSFORM.iMode +enum : DWORD { + MWT_IDENTITY = 1, + MWT_LEFTMULTIPLY, + MWT_RIGHTMULTIPLY +} + +const DWORD + MWT_MIN = MWT_IDENTITY, + MWT_MAX = MWT_RIGHTMULTIPLY; + +enum { + TRANSPARENT = 1, + OPAQUE = 2 +} + +// Get/SetStretchMode() +enum : int { + BLACKONWHITE = 1, + WHITEONBLACK = 2, + COLORONCOLOR = 3, + HALFTONE = 4, + + STRETCH_ANDSCANS = 1, + STRETCH_ORSCANS = 2, + STRETCH_DELETESCANS = 3, + STRETCH_HALFTONE = 4, + + MAXSTRETCHBLTMODE = 4 +} + +// TranslateCharsetInfo() +enum : DWORD { + TCI_SRCCHARSET = 1, + TCI_SRCCODEPAGE = 2, + TCI_SRCFONTSIG = 3, + TCI_SRCLOCALE = 0x1000, +} + +// SetICMMode() +enum : int { + ICM_OFF = 1, + ICM_ON = 2, + ICM_QUERY = 3, + ICM_DONE_OUTSIDEDC = 4, +} + +// ---- +// Escape() Spooler Error Codes +enum : int { + SP_NOTREPORTED = 0x4000, + SP_ERROR = -1, + SP_APPABORT = -2, + SP_USERABORT = -3, + SP_OUTOFDISK = -4, + SP_OUTOFMEMORY = -5 +} + +// Escape(), ExtEscape() +// Most of the following are deprecated (Win16 only) +enum : int { + NEWFRAME = 1, + ABORTDOC = 2, + NEXTBAND = 3, + SETCOLORTABLE = 4, + GETCOLORTABLE = 5, + FLUSHOUTPUT = 6, + DRAFTMODE = 7, + QUERYESCSUPPORT = 8, + SETABORTPROC = 9, + STARTDOC = 10, + ENDDOC = 11, + GETPHYSPAGESIZE = 12, + GETPRINTINGOFFSET = 13, + GETSCALINGFACTOR = 14, + MFCOMMENT = 15, + GETPENWIDTH = 16, + SETCOPYCOUNT = 17, + SELECTPAPERSOURCE = 18, + DEVICEDATA = 19, + PASSTHROUGH = 19, + GETTECHNOLOGY = 20, + SETLINECAP = 21, + SETLINEJOIN = 22, + SETMITERLIMIT = 23, + BANDINFO = 24, + DRAWPATTERNRECT = 25, + GETVECTORPENSIZE = 26, + GETVECTORBRUSHSIZE = 27, + ENABLEDUPLEX = 28, + GETSETPAPERBINS = 29, + GETSETPRINTORIENT = 30, + ENUMPAPERBINS = 31, + SETDIBSCALING = 32, + EPSPRINTING = 33, + ENUMPAPERMETRICS = 34, + GETSETPAPERMETRICS = 35, + POSTSCRIPT_DATA = 37, + POSTSCRIPT_IGNORE = 38, + MOUSETRAILS = 39, + GETDEVICEUNITS = 42, + GETEXTENDEDTEXTMETRICS = 256, + GETEXTENTTABLE = 257, + GETPAIRKERNTABLE = 258, + GETTRACKKERNTABLE = 259, + EXTTEXTOUT = 512, + GETFACENAME = 513, + DOWNLOADFACE = 514, + ENABLERELATIVEWIDTHS = 768, + ENABLEPAIRKERNING = 769, + SETKERNTRACK = 770, + SETALLJUSTVALUES = 771, + SETCHARSET = 772, + STRETCHBLT = 2048, + METAFILE_DRIVER = 2049, + GETSETSCREENPARAMS = 3072, + QUERYDIBSUPPORT = 3073, + BEGIN_PATH = 4096, + CLIP_TO_PATH = 4097, + END_PATH = 4098, + EXT_DEVICE_CAPS = 4099, + RESTORE_CTM = 4100, + SAVE_CTM = 4101, + SET_ARC_DIRECTION = 4102, + SET_BACKGROUND_COLOR = 4103, + SET_POLY_MODE = 4104, + SET_SCREEN_ANGLE = 4105, + SET_SPREAD = 4106, + TRANSFORM_CTM = 4107, + SET_CLIP_BOX = 4108, + SET_BOUNDS = 4109, + SET_MIRROR_MODE = 4110, + OPENCHANNEL = 4110, + DOWNLOADHEADER = 4111, + CLOSECHANNEL = 4112, + POSTSCRIPT_PASSTHROUGH = 4115, + ENCAPSULATED_POSTSCRIPT = 4116, + POSTSCRIPT_IDENTIFY = 4117, + POSTSCRIPT_INJECTION = 4118, + CHECKJPEGFORMAT = 4119, + CHECKPNGFORMAT = 4120, + GET_PS_FEATURESETTING = 4121, + SPCLPASSTHROUGH2 = 4568, +} + +enum : int { + PSIDENT_GDICENTRIC = 0, + PSIDENT_PSCENTRIC = 1, +} + +/* + * Header structure for the input buffer to POSTSCRIPT_INJECTION escape + */ +struct PSINJECTDATA { + DWORD DataBytes; + WORD InjectionPoint; + WORD PageNumber; +} +alias PSINJECTDATA* PPSINJECTDATA; + +/* Constants for PSINJECTDATA.InjectionPoint field */ +enum { + PSINJECT_BEGINSTREAM = 1, + PSINJECT_PSADOBE = 2, + PSINJECT_PAGESATEND = 3, + PSINJECT_PAGES = 4, + PSINJECT_DOCNEEDEDRES = 5, + PSINJECT_DOCSUPPLIEDRES = 6, + PSINJECT_PAGEORDER = 7, + PSINJECT_ORIENTATION = 8, + PSINJECT_BOUNDINGBOX = 9, + PSINJECT_DOCUMENTPROCESSCOLORS = 10, + PSINJECT_COMMENTS = 11, + PSINJECT_BEGINDEFAULTS = 12, + PSINJECT_ENDDEFAULTS = 13, + PSINJECT_BEGINPROLOG = 14, + PSINJECT_ENDPROLOG = 15, + PSINJECT_BEGINSETUP = 16, + PSINJECT_ENDSETUP = 17, + PSINJECT_TRAILER = 18, + PSINJECT_EOF = 19, + PSINJECT_ENDSTREAM = 20, + PSINJECT_DOCUMENTPROCESSCOLORSATEND = 21, + + PSINJECT_PAGENUMBER = 100, + PSINJECT_BEGINPAGESETUP = 101, + PSINJECT_ENDPAGESETUP = 102, + PSINJECT_PAGETRAILER = 103, + PSINJECT_PLATECOLOR = 104, + PSINJECT_SHOWPAGE = 105, + PSINJECT_PAGEBBOX = 106, + PSINJECT_ENDPAGECOMMENTS = 107, + + PSINJECT_VMSAVE = 200, + PSINJECT_VMRESTORE = 201, +} + +/* Parameter for GET_PS_FEATURESETTING escape */ +enum { + FEATURESETTING_NUP = 0, + FEATURESETTING_OUTPUT = 1, + FEATURESETTING_PSLEVEL = 2, + FEATURESETTING_CUSTPAPER = 3, + FEATURESETTING_MIRROR = 4, + FEATURESETTING_NEGATIVE = 5, + FEATURESETTING_PROTOCOL = 6, +} + +enum { + FEATURESETTING_PRIVATE_BEGIN = 0x1000, + FEATURESETTING_PRIVATE_END = 0x1FFF, +} + +/* Value returned for FEATURESETTING_PROTOCOL */ +const PSPROTOCOL_ASCII = 0; +const PSPROTOCOL_BCP = 1; +const PSPROTOCOL_TBCP = 2; +const PSPROTOCOL_BINARY = 3; + +// ---- + +const WPARAM PR_JOBSTATUS = 0; + +// ??? +const QDI_SETDIBITS = 1; +const QDI_GETDIBITS = 2; +const QDI_DIBTOSCREEN = 4; +const QDI_STRETCHDIB = 8; + +const ASPECT_FILTERING = 1; + +// LOGCOLORSPACE.lcsCSType +enum : LCSCSTYPE { + LCS_CALIBRATED_RGB = 0, + LCS_DEVICE_RGB, + LCS_DEVICE_CMYK +} /* What this for? */ + +// LOGCOLORSPACE.lcsIntent +enum : LCSGAMUTMATCH { + LCS_GM_BUSINESS = 1, + LCS_GM_GRAPHICS = 2, + LCS_GM_IMAGES = 4, + LCS_GM_ABS_COLORIMETRIC = 8, +} + +const DWORD + RASTER_FONTTYPE = 1, + DEVICE_FONTTYPE = 2, + TRUETYPE_FONTTYPE = 4; + +// --- +// DEVMODE struct + +// FIXME: Not needed for D (use .length instead) +const CCHDEVICENAME = 32; +const CCHFORMNAME = 32; + +// DEVMODE.dmSpecVersion +// current version of specification +static if (WINVER >= 0x0500 || _WIN32_WINNT >= 0x0400) { + const WORD DM_SPECVERSION = 0x0401; +} +else static if (WINVER >= 0x0400) { + const WORD DM_SPECVERSION = 0x0400; +} +else { + const WORD DM_SPECVERSION = 0x0320; +} + +// DEVMODE.dmOrientation +enum : short { + DMORIENT_PORTRAIT = 1, + DMORIENT_LANDSCAPE = 2 +} + +// DEVMODE.dmPaperSize +enum : short { + DMPAPER_LETTER = 1, + DMPAPER_LETTERSMALL, + DMPAPER_TABLOID, + DMPAPER_LEDGER, + DMPAPER_LEGAL, + DMPAPER_STATEMENT, + DMPAPER_EXECUTIVE, + DMPAPER_A3, + DMPAPER_A4, + DMPAPER_A4SMALL, + DMPAPER_A5, + DMPAPER_B4, + DMPAPER_B5, + DMPAPER_FOLIO, + DMPAPER_QUARTO, + DMPAPER_10X14, + DMPAPER_11X17, + DMPAPER_NOTE, + DMPAPER_ENV_9, + DMPAPER_ENV_10, + DMPAPER_ENV_11, + DMPAPER_ENV_12, + DMPAPER_ENV_14, + DMPAPER_CSHEET, + DMPAPER_DSHEET, + DMPAPER_ESHEET, + DMPAPER_ENV_DL, + DMPAPER_ENV_C5, + DMPAPER_ENV_C3, + DMPAPER_ENV_C4, + DMPAPER_ENV_C6, + DMPAPER_ENV_C65, + DMPAPER_ENV_B4, + DMPAPER_ENV_B5, + DMPAPER_ENV_B6, + DMPAPER_ENV_ITALY, + DMPAPER_ENV_MONARCH, + DMPAPER_ENV_PERSONAL, + DMPAPER_FANFOLD_US, + DMPAPER_FANFOLD_STD_GERMAN, + DMPAPER_FANFOLD_LGL_GERMAN, + DMPAPER_ISO_B4, + DMPAPER_JAPANESE_POSTCARD, + DMPAPER_9X11, + DMPAPER_10X11, + DMPAPER_15X11, + DMPAPER_ENV_INVITE, + DMPAPER_RESERVED_48, + DMPAPER_RESERVED_49, + DMPAPER_LETTER_EXTRA, + DMPAPER_LEGAL_EXTRA, + DMPAPER_TABLOID_EXTRA, + DMPAPER_A4_EXTRA, + DMPAPER_LETTER_TRANSVERSE, + DMPAPER_A4_TRANSVERSE, + DMPAPER_LETTER_EXTRA_TRANSVERSE, + DMPAPER_A_PLUS, + DMPAPER_B_PLUS, + DMPAPER_LETTER_PLUS, + DMPAPER_A4_PLUS, + DMPAPER_A5_TRANSVERSE, + DMPAPER_B5_TRANSVERSE, + DMPAPER_A3_EXTRA, + DMPAPER_A5_EXTRA, + DMPAPER_B5_EXTRA, + DMPAPER_A2, + DMPAPER_A3_TRANSVERSE, + DMPAPER_A3_EXTRA_TRANSVERSE // = 68 +} +static if (WINVER >= 0x0500) { + enum : short { + DMPAPER_DBL_JAPANESE_POSTCARD = 69, + DMPAPER_A6, + DMPAPER_JENV_KAKU2, + DMPAPER_JENV_KAKU3, + DMPAPER_JENV_CHOU3, + DMPAPER_JENV_CHOU4, + DMPAPER_LETTER_ROTATED, + DMPAPER_A3_ROTATED, + DMPAPER_A4_ROTATED, + DMPAPER_A5_ROTATED, + DMPAPER_B4_JIS_ROTATED, + DMPAPER_B5_JIS_ROTATED, + DMPAPER_JAPANESE_POSTCARD_ROTATED, + DMPAPER_DBL_JAPANESE_POSTCARD_ROTATED, + DMPAPER_A6_ROTATED, + DMPAPER_JENV_KAKU2_ROTATED, + DMPAPER_JENV_KAKU3_ROTATED, + DMPAPER_JENV_CHOU3_ROTATED, + DMPAPER_JENV_CHOU4_ROTATED, + DMPAPER_B6_JIS, + DMPAPER_B6_JIS_ROTATED, + DMPAPER_12X11, + DMPAPER_JENV_YOU4, + DMPAPER_JENV_YOU4_ROTATED, + DMPAPER_P16K, + DMPAPER_P32K, + DMPAPER_P32KBIG, + DMPAPER_PENV_1, + DMPAPER_PENV_2, + DMPAPER_PENV_3, + DMPAPER_PENV_4, + DMPAPER_PENV_5, + DMPAPER_PENV_6, + DMPAPER_PENV_7, + DMPAPER_PENV_8, + DMPAPER_PENV_9, + DMPAPER_PENV_10, + DMPAPER_P16K_ROTATED, + DMPAPER_P32K_ROTATED, + DMPAPER_P32KBIG_ROTATED, + DMPAPER_PENV_1_ROTATED, + DMPAPER_PENV_2_ROTATED, + DMPAPER_PENV_3_ROTATED, + DMPAPER_PENV_4_ROTATED, + DMPAPER_PENV_5_ROTATED, + DMPAPER_PENV_6_ROTATED, + DMPAPER_PENV_7_ROTATED, + DMPAPER_PENV_8_ROTATED, + DMPAPER_PENV_9_ROTATED, + DMPAPER_PENV_10_ROTATED // 118 + } +} + +const short DMPAPER_FIRST = DMPAPER_LETTER; + +static if (WINVER >= 0x0500) + const short DMPAPER_LAST = DMPAPER_PENV_10_ROTATED; +else + const short DMPAPER_LAST = DMPAPER_A3_EXTRA_TRANSVERSE; + +const short DMPAPER_USER = 256; + + +// DEVMODE.dmDefaultSource +enum : short { + DMBIN_ONLYONE = 1, + DMBIN_UPPER = 1, + DMBIN_LOWER, + DMBIN_MIDDLE, + DMBIN_MANUAL, + DMBIN_ENVELOPE, + DMBIN_ENVMANUAL, + DMBIN_AUTO, + DMBIN_TRACTOR, + DMBIN_SMALLFMT, + DMBIN_LARGEFMT, + DMBIN_LARGECAPACITY, // = 11 + DMBIN_CASSETTE = 14, + DMBIN_FORMSOURCE, +} +short + DMBIN_FIRST = DMBIN_UPPER, + DMBIN_LAST = DMBIN_FORMSOURCE, + DMBIN_USER = 256; + +// DEVMODE.dmPrintQuality +enum : short { + DMRES_DRAFT = -1, + DMRES_LOW = -2, + DMRES_MEDIUM = -3, + DMRES_HIGH = -4 +} + +// DEVMODE.dmColor +enum : short { + DMCOLOR_MONOCHROME = 1, + DMCOLOR_COLOR = 2 +} + +// DEVMODE.dmDuplex +enum : short { + DMDUP_SIMPLEX = 1, + DMDUP_VERTICAL = 2, + DMDUP_HORIZONTAL = 3 +} + +// DEVMODE.dmTTOption +enum : short { + DMTT_BITMAP = 1, + DMTT_DOWNLOAD, + DMTT_SUBDEV, + DMTT_DOWNLOAD_OUTLINE +} + +// DEVMODE.dmCollate +enum : short { + DMCOLLATE_FALSE = 0, + DMCOLLATE_TRUE +} + +static if (WINVER >= 0x0501) { + /* DEVMODE dmDisplayOrientation specifiations */ + enum : short { + DMDO_DEFAULT = 0, + DMDO_90 = 1, + DMDO_180 = 2, + DMDO_270 = 3, + } + + /* DEVMODE dmDisplayFixedOutput specifiations */ + enum : short { + DMDFO_DEFAULT = 0, + DMDFO_STRETCH = 1, + DMDFO_CENTER = 2, + } +} + + +/* FIXME: this flags are deprecated ? */ +// DEVMODE.dmDisplayFlags +const DWORD + DM_GRAYSCALE = 1, + DM_INTERLACED = 2; + +const DWORD + DMDISPLAYFLAGS_TEXTMODE = 0x00000004; + +/* dmNup , multiple logical page per physical page options */ +const DWORD + DMNUP_SYSTEM = 1, + DMNUP_ONEUP = 2; + +// DEVMODE.dmFields +const DWORD + DM_ORIENTATION = 0x00000001, + DM_PAPERSIZE = 0x00000002, + DM_PAPERLENGTH = 0x00000004, + DM_PAPERWIDTH = 0x00000008, + DM_SCALE = 0x00000010; +static if (WINVER >= 0x0500) { + const DWORD + DM_POSITION = 0x00000020, + DM_NUP = 0x00000040; +} +static if (WINVER >= 0x0501) { + const DWORD + DM_DISPLAYORIENTATION = 0x00000080; +} +const DWORD + DM_COPIES = 0x00000100, + DM_DEFAULTSOURCE = 0x00000200, + DM_PRINTQUALITY = 0x00000400, + DM_COLOR = 0x00000800, + DM_DUPLEX = 0x00001000, + DM_YRESOLUTION = 0x00002000, + DM_TTOPTION = 0x00004000, + DM_COLLATE = 0x00008000, + DM_FORMNAME = 0x00010000, + DM_LOGPIXELS = 0x00020000, + DM_BITSPERPEL = 0x00040000, + DM_PELSWIDTH = 0x00080000, + DM_PELSHEIGHT = 0x00100000, + DM_DISPLAYFLAGS = 0x00200000, + DM_DISPLAYFREQUENCY = 0x00400000; +static if (WINVER >= 0x0400) { + const DWORD + DM_ICMMETHOD = 0x00800000, + DM_ICMINTENT = 0x01000000, + DM_MEDIATYPE = 0x02000000, + DM_DITHERTYPE = 0x04000000, + DM_PANNINGWIDTH = 0x08000000, + DM_PANNINGHEIGHT = 0x10000000; +} +static if (WINVER >= 0x0501) { + const DWORD + DM_DISPLAYFIXEDOUTPUT = 0x20000000; +} + +// DEVMODE.dmICMMethod +enum : DWORD { + DMICMMETHOD_NONE = 1, + DMICMMETHOD_SYSTEM = 2, + DMICMMETHOD_DRIVER = 3, + DMICMMETHOD_DEVICE = 4, + DMICMMETHOD_USER = 256 +} + +// DEVMODE.dmICMIntent +enum : DWORD { + DMICM_SATURATE = 1, + DMICM_CONTRAST = 2, + DMICM_COLORIMETRIC = 3, + DMICM_ABS_COLORIMETRIC = 4, + DMICM_USER = 256 +} + +// DEVMODE.dmMediaType +enum : DWORD { + DMMEDIA_STANDARD = 1, + DMMEDIA_TRANSPARENCY = 2, + DMMEDIA_GLOSSY = 3, + DMMEDIA_USER = 256 +} + +// DEVMODE.dmDitherType +enum : DWORD { + DMDITHER_NONE = 1, + DMDITHER_COARSE, + DMDITHER_FINE, + DMDITHER_LINEART, + DMDITHER_ERRORDIFFUSION, + DMDITHER_RESERVED6, + DMDITHER_RESERVED7, + DMDITHER_RESERVED8, + DMDITHER_RESERVED9, + DMDITHER_GRAYSCALE, + DMDITHER_USER = 256 +} + +// ---- +// DocumentProperties() +const DWORD + DM_UPDATE = 1, + DM_COPY = 2, + DM_PROMPT = 4, + DM_MODIFY = 8, + DM_IN_BUFFER = DM_MODIFY, + DM_IN_PROMPT = DM_PROMPT, + DM_OUT_BUFFER = DM_COPY, + DM_OUT_DEFAULT = DM_UPDATE; +// --- + +const GDI_ERROR = 0xFFFFFFFF; +const HGDI_ERROR= cast(HANDLE)GDI_ERROR; + +// TEXTMETRIC.tmPitchAndFamily +const BYTE + TMPF_FIXED_PITCH = 1, + TMPF_VECTOR = 2, + TMPF_TRUETYPE = 4, + TMPF_DEVICE = 8; + +// NEWTEXTMETRIC.ntmFlags +const DWORD + NTM_ITALIC = 0x00000001, + NTM_BOLD = 0x00000020, + NTM_REGULAR = 0x00000040, + NTM_NONNEGATIVE_AC = 0x00010000, + NTM_PS_OPENTYPE = 0x00020000, + NTM_TT_OPENTYPE = 0x00040000, + NTM_MULTIPLEMASTER = 0x00080000, + NTM_TYPE1 = 0x00100000, + NTM_DSIG = 0x00200000; + +// --- +const DWORD TT_POLYGON_TYPE = 24; + +// TTPOLYCURVE +enum : WORD { + TT_PRIM_LINE = 1, + TT_PRIM_QSPLINE = 2, + TT_PRIM_CSPLINE = 3, +} +// --- +const FONTMAPPER_MAX = 10; +const ENHMETA_STOCK_OBJECT = 0x80000000; +const WGL_FONT_LINES = 0; +const WGL_FONT_POLYGONS = 1; + +// --- +// LAYERPLANEDESCRIPTOR.dwFlags +const DWORD + LPD_DOUBLEBUFFER = 1, + LPD_STEREO = 2, + LPD_SUPPORT_GDI = 16, + LPD_SUPPORT_OPENGL = 32, + LPD_SHARE_DEPTH = 64, + LPD_SHARE_STENCIL = 128, + LPD_SHARE_ACCUM = 256, + LPD_SWAP_EXCHANGE = 512, + LPD_SWAP_COPY = 1024, + LPD_TRANSPARENT = 4096; + +// LAYERPLANEDESCRIPTOR.iPixelType +enum : BYTE { + LPD_TYPE_RGBA = 0, + LPD_TYPE_COLORINDEX = 1 +} + +// --- + +// wglSwapLayerBuffers() +const UINT + WGL_SWAP_MAIN_PLANE = 1, + WGL_SWAP_OVERLAY1 = 2, + WGL_SWAP_OVERLAY2 = 4, + WGL_SWAP_OVERLAY3 = 8, + WGL_SWAP_OVERLAY4 = 16, + WGL_SWAP_OVERLAY5 = 32, + WGL_SWAP_OVERLAY6 = 64, + WGL_SWAP_OVERLAY7 = 128, + WGL_SWAP_OVERLAY8 = 256, + WGL_SWAP_OVERLAY9 = 512, + WGL_SWAP_OVERLAY10 = 1024, + WGL_SWAP_OVERLAY11 = 2048, + WGL_SWAP_OVERLAY12 = 4096, + WGL_SWAP_OVERLAY13 = 8192, + WGL_SWAP_OVERLAY14 = 16384, + WGL_SWAP_OVERLAY15 = 32768, + WGL_SWAP_UNDERLAY1 = 65536, + WGL_SWAP_UNDERLAY2 = 0x20000, + WGL_SWAP_UNDERLAY3 = 0x40000, + WGL_SWAP_UNDERLAY4 = 0x80000, + WGL_SWAP_UNDERLAY5 = 0x100000, + WGL_SWAP_UNDERLAY6 = 0x200000, + WGL_SWAP_UNDERLAY7 = 0x400000, + WGL_SWAP_UNDERLAY8 = 0x800000, + WGL_SWAP_UNDERLAY9 = 0x1000000, + WGL_SWAP_UNDERLAY10 = 0x2000000, + WGL_SWAP_UNDERLAY11 = 0x4000000, + WGL_SWAP_UNDERLAY12 = 0x8000000, + WGL_SWAP_UNDERLAY13 = 0x10000000, + WGL_SWAP_UNDERLAY14 = 0x20000000, + WGL_SWAP_UNDERLAY15 = 0x40000000; + +const AC_SRC_OVER = 0x00; +const AC_SRC_ALPHA = 0x01; + +// ??? +const AC_SRC_NO_PREMULT_ALPHA = 0x01; +const AC_SRC_NO_ALPHA = 0x02; +const AC_DST_NO_PREMULT_ALPHA = 0x10; +const AC_DST_NO_ALPHA = 0x20; + +const LAYOUT_RTL = 1; +const LAYOUT_BTT = 2; +const LAYOUT_VBH = 4; +const LAYOUT_BITMAPORIENTATIONPRESERVED = 8; + +static if (WINVER > 0x0400) { + const CS_ENABLE = 0x00000001; + const CS_DISABLE = 0x00000002; + const CS_DELETE_TRANSFORM = 0x00000003; +} +static if (WINVER > 0x0500) { + const GRADIENT_FILL_RECT_H=0x00; + const GRADIENT_FILL_RECT_V=0x01; + const GRADIENT_FILL_TRIANGLE=0x02; + const GRADIENT_FILL_OP_FLAG=0xff; + const COLORMATCHTOTARGET_EMBEDED=0x00000001; + const CREATECOLORSPACE_EMBEDED=0x00000001; + const SETICMPROFILE_EMBEDED=0x00000001; +} + +// DISPLAY_DEVICE.StateFlags +const DWORD + DISPLAY_DEVICE_ATTACHED_TO_DESKTOP = 0x00000001, + DISPLAY_DEVICE_MULTI_DRIVER = 0x00000002, + DISPLAY_DEVICE_PRIMARY_DEVICE = 0x00000004, + DISPLAY_DEVICE_MIRRORING_DRIVER = 0x00000008, + DISPLAY_DEVICE_VGA_COMPATIBLE = 0x00000010, + DISPLAY_DEVICE_REMOVABLE = 0x00000020, + DISPLAY_DEVICE_DISCONNECT = 0x02000000, + DISPLAY_DEVICE_REMOTE = 0x04000000, + DISPLAY_DEVICE_MODESPRUNED = 0x08000000; + +/* Child device state */ +const DWORD + DISPLAY_DEVICE_ACTIVE = 0x00000001, + DISPLAY_DEVICE_ATTACHED = 0x00000002; + +static if (_WIN32_WINNT >= 0x0500) { + const GGI_MARK_NONEXISTING_GLYPHS = 1; +} + +// ---------- +// STRUCTS +// ---------- + +struct ABC { + int abcA; + UINT abcB; + int abcC; +} +alias ABC* PABC, NPABC, LPABC; + +struct ABCFLOAT { + FLOAT abcfA; + FLOAT abcfB; + FLOAT abcfC; +} +alias ABCFLOAT* PABCFLOAT, NPABCFLOAT, LPABCFLOAT; + +struct BITMAP { + LONG bmType; + LONG bmWidth; + LONG bmHeight; + LONG bmWidthBytes; + WORD bmPlanes; + WORD bmBitsPixel; + LPVOID bmBits; +} +alias BITMAP* PBITMAP, NPBITMAP, LPBITMAP; + +struct BITMAPCOREHEADER { + DWORD bcSize; + WORD bcWidth; + WORD bcHeight; + WORD bcPlanes; + WORD bcBitCount; +} +alias BITMAPCOREHEADER* PBITMAPCOREHEADER, LPBITMAPCOREHEADER; + +align(1): +struct RGBTRIPLE { + BYTE rgbtBlue; + BYTE rgbtGreen; + BYTE rgbtRed; +} +alias RGBTRIPLE* LPRGBTRIPLE; + +align(2): +struct BITMAPFILEHEADER { + WORD bfType; + DWORD bfSize; + WORD bfReserved1; + WORD bfReserved2; + DWORD bfOffBits; +} +alias BITMAPFILEHEADER* LPBITMAPFILEHEADER, PBITMAPFILEHEADER; + +align: + +struct BITMAPCOREINFO { + BITMAPCOREHEADER bmciHeader; + RGBTRIPLE[1] bmciColors; +} +alias BITMAPCOREINFO* LPBITMAPCOREINFO, PBITMAPCOREINFO; + +struct BITMAPINFOHEADER { + DWORD biSize; + LONG biWidth; + LONG biHeight; + WORD biPlanes; + WORD biBitCount; + DWORD biCompression; + DWORD biSizeImage; + LONG biXPelsPerMeter; + LONG biYPelsPerMeter; + DWORD biClrUsed; + DWORD biClrImportant; +} + +alias BITMAPINFOHEADER* LPBITMAPINFOHEADER, PBITMAPINFOHEADER; + +struct RGBQUAD { + BYTE rgbBlue; + BYTE rgbGreen; + BYTE rgbRed; + BYTE rgbReserved; +}; +alias RGBQUAD* LPRGBQUAD; + +struct BITMAPINFO { + BITMAPINFOHEADER bmiHeader; + RGBQUAD[1] bmiColors; +}; +alias BITMAPINFO* PBITMAPINFO, LPBITMAPINFO; + +alias int FXPT16DOT16; +alias int* LPFXPT16DOT16; +alias int FXPT2DOT30; +alias int* LPFXPT2DOT30; + +struct CIEXYZ { + FXPT2DOT30 ciexyzX; + FXPT2DOT30 ciexyzY; + FXPT2DOT30 ciexyzZ; +} +alias CIEXYZ* LPCIEXYZ; + +struct CIEXYZTRIPLE { + CIEXYZ ciexyzRed; + CIEXYZ ciexyzGreen; + CIEXYZ ciexyzBlue; +} +alias CIEXYZTRIPLE* LPCIEXYZTRIPLE; + +struct BITMAPV4HEADER { + DWORD bV4Size; + LONG bV4Width; + LONG bV4Height; + WORD bV4Planes; + WORD bV4BitCount; + DWORD bV4V4Compression; + DWORD bV4SizeImage; + LONG bV4XPelsPerMeter; + LONG bV4YPelsPerMeter; + DWORD bV4ClrUsed; + DWORD bV4ClrImportant; + DWORD bV4RedMask; + DWORD bV4GreenMask; + DWORD bV4BlueMask; + DWORD bV4AlphaMask; + DWORD bV4CSType; + CIEXYZTRIPLE bV4Endpoints; + DWORD bV4GammaRed; + DWORD bV4GammaGreen; + DWORD bV4GammaBlue; +} +alias BITMAPV4HEADER* LPBITMAPV4HEADER, PBITMAPV4HEADER; + +struct BITMAPV5HEADER { + DWORD bV5Size; + LONG bV5Width; + LONG bV5Height; + WORD bV5Planes; + WORD bV5BitCount; + DWORD bV5Compression; + DWORD bV5SizeImage; + LONG bV5XPelsPerMeter; + LONG bV5YPelsPerMeter; + DWORD bV5ClrUsed; + DWORD bV5ClrImportant; + DWORD bV5RedMask; + DWORD bV5GreenMask; + DWORD bV5BlueMask; + DWORD bV5AlphaMask; + DWORD bV5CSType; + CIEXYZTRIPLE bV5Endpoints; + DWORD bV5GammaRed; + DWORD bV5GammaGreen; + DWORD bV5GammaBlue; + DWORD bV5Intent; + DWORD bV5ProfileData; + DWORD bV5ProfileSize; + DWORD bV5Reserved; +} +alias BITMAPV5HEADER* LPBITMAPV5HEADER, PBITMAPV5HEADER; + +struct FONTSIGNATURE { + DWORD[4] fsUsb; + DWORD[2] fsCsb; +} +alias FONTSIGNATURE* PFONTSIGNATURE, LPFONTSIGNATURE; + +struct CHARSETINFO { + UINT ciCharset; + UINT ciACP; + FONTSIGNATURE fs; +} +alias CHARSETINFO* PCHARSETINFO, NPCHARSETINFO, LPCHARSETINFO; + +struct COLORADJUSTMENT { + WORD caSize; + WORD caFlags; + WORD caIlluminantIndex; + WORD caRedGamma; + WORD caGreenGamma; + WORD caBlueGamma; + WORD caReferenceBlack; + WORD caReferenceWhite; + SHORT caContrast; + SHORT caBrightness; + SHORT caColorfulness; + SHORT caRedGreenTint; +} +alias COLORADJUSTMENT* PCOLORADJUSTMENT, LPCOLORADJUSTMENT; + +struct DEVMODEA { + BYTE[CCHDEVICENAME] dmDeviceName; + WORD dmSpecVersion; + WORD dmDriverVersion; + WORD dmSize; + WORD dmDriverExtra; + DWORD dmFields; + union { + struct { + short dmOrientation; + short dmPaperSize; + short dmPaperLength; + short dmPaperWidth; + short dmScale; + short dmCopies; + short dmDefaultSource; + short dmPrintQuality; + } + POINTL dmPosition; + DWORD dmDisplayOrientation; + DWORD dmDisplayFixedOutput; + } + short dmColor; + short dmDuplex; + short dmYResolution; + short dmTTOption; + short dmCollate; + BYTE[CCHFORMNAME] dmFormName; + WORD dmLogPixels; + DWORD dmBitsPerPel; + DWORD dmPelsWidth; + DWORD dmPelsHeight; + union { + DWORD dmDisplayFlags; + DWORD dmNup; + } + DWORD dmDisplayFrequency; + static if (WINVER >= 0x0400) { + DWORD dmICMMethod; + DWORD dmICMIntent; + DWORD dmMediaType; + DWORD dmDitherType; + DWORD dmReserved1; + DWORD dmReserved2; + static if ((WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)) { + DWORD dmPanningWidth; + DWORD dmPanningHeight; + } + } +} +alias DEVMODEA* PDEVMODEA, NPDEVMODEA, LPDEVMODEA; + +struct DEVMODEW { + WCHAR[CCHDEVICENAME] dmDeviceName; + WORD dmSpecVersion; + WORD dmDriverVersion; + WORD dmSize; + WORD dmDriverExtra; + DWORD dmFields; + union { + struct { + short dmOrientation; + short dmPaperSize; + short dmPaperLength; + short dmPaperWidth; + short dmScale; + short dmCopies; + short dmDefaultSource; + short dmPrintQuality; + } + POINTL dmPosition; + DWORD dmDisplayOrientation; + DWORD dmDisplayFixedOutput; + } + + short dmColor; + short dmDuplex; + short dmYResolution; + short dmTTOption; + short dmCollate; + WCHAR[CCHFORMNAME] dmFormName; + WORD dmLogPixels; + DWORD dmBitsPerPel; + DWORD dmPelsWidth; + DWORD dmPelsHeight; + union { + DWORD dmDisplayFlags; + DWORD dmNup; + } + DWORD dmDisplayFrequency; + static if (WINVER >= 0x0400) { + DWORD dmICMMethod; + DWORD dmICMIntent; + DWORD dmMediaType; + DWORD dmDitherType; + DWORD dmReserved1; + DWORD dmReserved2; + static if ((WINVER >= 0x0500) || (_WIN32_WINNT >= 0x0400)) { + DWORD dmPanningWidth; + DWORD dmPanningHeight; + } + } +} +alias DEVMODEW* PDEVMODEW, NPDEVMODEW, LPDEVMODEW; + +/* + * Information about output options + */ +struct PSFEATURE_OUTPUT { + BOOL bPageIndependent; + BOOL bSetPageDevice; +} +alias PSFEATURE_OUTPUT* PPSFEATURE_OUTPUT; + +/* + * Information about custom paper size + */ +struct PSFEATURE_CUSTPAPER { + LONG lOrientation; + LONG lWidth; + LONG lHeight; + LONG lWidthOffset; + LONG lHeightOffset; +} +alias PSFEATURE_CUSTPAPER* PPSFEATURE_CUSTPAPER; + +struct DIBSECTION { + BITMAP dsBm; + BITMAPINFOHEADER dsBmih; + DWORD[3] dsBitfields; + HANDLE dshSection; + DWORD dsOffset; +} +alias DIBSECTION* PDIBSECTION; + +struct DOCINFOA { + int cbSize = DOCINFOA.sizeof; + LPCSTR lpszDocName; + LPCSTR lpszOutput; + LPCSTR lpszDatatype; + DWORD fwType; +} +alias DOCINFOA* LPDOCINFOA; + +struct DOCINFOW { + int cbSize = DOCINFOW.sizeof; + LPCWSTR lpszDocName; + LPCWSTR lpszOutput; + LPCWSTR lpszDatatype; + DWORD fwType; +} +alias DOCINFOW* LPDOCINFOW; + + +struct PANOSE { + BYTE bFamilyType; + BYTE bSerifStyle; + BYTE bWeight; + BYTE bProportion; + BYTE bContrast; + BYTE bStrokeVariation; + BYTE bArmStyle; + BYTE bLetterform; + BYTE bMidline; + BYTE bXHeight; +} +alias PANOSE* LPPANOSE; + +struct LOGFONTA { + LONG lfHeight; + LONG lfWidth; + LONG lfEscapement; + LONG lfOrientation; + LONG lfWeight; + BYTE lfItalic; + BYTE lfUnderline; + BYTE lfStrikeOut; + BYTE lfCharSet; + BYTE lfOutPrecision; + BYTE lfClipPrecision; + BYTE lfQuality; + BYTE lfPitchAndFamily; + CHAR[LF_FACESIZE] lfFaceName; +} +alias LOGFONTA* PLOGFONTA, NPLOGFONTA, LPLOGFONTA; + +struct LOGFONTW { + LONG lfHeight; + LONG lfWidth; + LONG lfEscapement; + LONG lfOrientation; + LONG lfWeight; + BYTE lfItalic; + BYTE lfUnderline; + BYTE lfStrikeOut; + BYTE lfCharSet; + BYTE lfOutPrecision; + BYTE lfClipPrecision; + BYTE lfQuality; + BYTE lfPitchAndFamily; + WCHAR[LF_FACESIZE] lfFaceName; +} +alias LOGFONTW* PLOGFONTW, NPLOGFONTW, LPLOGFONTW; + +struct EXTLOGFONTA { + LOGFONTA elfLogFont; + BYTE[LF_FULLFACESIZE] elfFullName; + BYTE[LF_FACESIZE] elfStyle; + DWORD elfVersion; + DWORD elfStyleSize; + DWORD elfMatch; + DWORD elfReserved; + BYTE[ELF_VENDOR_SIZE] elfVendorId; + DWORD elfCulture; + PANOSE elfPanose; +} +alias EXTLOGFONTA* PEXTLOGFONTA, NPEXTLOGFONTA, LPEXTLOGFONTA; + +struct EXTLOGFONTW { + LOGFONTW elfLogFont; + WCHAR[LF_FULLFACESIZE] elfFullName; + WCHAR[LF_FACESIZE] elfStyle; + DWORD elfVersion; + DWORD elfStyleSize; + DWORD elfMatch; + DWORD elfReserved; + BYTE[ELF_VENDOR_SIZE] elfVendorId; + DWORD elfCulture; + PANOSE elfPanose; +} +alias EXTLOGFONTW* PEXTLOGFONTW, NPEXTLOGFONTW, LPEXTLOGFONTW; + +struct LOGPEN { + UINT lopnStyle; + POINT lopnWidth; + COLORREF lopnColor; +} +alias LOGPEN* PLOGPEN, NPLOGPEN, LPLOGPEN; + +// ---------------------- EMR ------------ + +struct EMR { + DWORD iType; + DWORD nSize; +} +alias EMR* PEMR; + +struct EMRANGLEARC { + EMR emr; + POINTL ptlCenter; + DWORD nRadius; + FLOAT eStartAngle; + FLOAT eSweepAngle; +} +alias EMRANGLEARC* PEMRANGLEARC; + +struct EMRARC { + EMR emr; + RECTL rclBox; + POINTL ptlStart; + POINTL ptlEnd; +} +alias EMRARC* PEMRARC; +typedef EMRARC EMRARCTO; +alias EMRARCTO* PEMRARCTO; +typedef EMRARC EMRCHORD; +alias EMRCHORD* PEMRCHORD; +typedef EMRARC EMRPIE; +alias EMRPIE* PEMRPIE; + +struct XFORM { + FLOAT eM11; + FLOAT eM12; + FLOAT eM21; + FLOAT eM22; + FLOAT eDx; + FLOAT eDy; +} +alias XFORM* PXFORM, LPXFORM; + +struct EMRBITBLT { + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG cxDest; + LONG cyDest; + DWORD dwRop; + LONG xSrc; + LONG ySrc; + XFORM xformSrc; + COLORREF crBkColorSrc; + DWORD iUsageSrc; + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; +} +alias EMRBITBLT* PEMRBITBLT; + +struct LOGBRUSH { + UINT lbStyle; + COLORREF lbColor; + LONG lbHatch; +} +typedef LOGBRUSH PATTERN; +alias LOGBRUSH* PLOGBRUSH, NPLOGBRUSH, LPLOGBRUSH; +alias PATTERN* PPATTERN, NPPATTERN, LPPATTERN; + +struct LOGBRUSH32 { + UINT lbStyle; + COLORREF lbColor; + ULONG lbHatch; +} +alias LOGBRUSH32* PLOGBRUSH32, NPLOGBRUSH32, LPLOGBRUSH32; + +struct EMRCREATEBRUSHINDIRECT { + EMR emr; + DWORD ihBrush; + LOGBRUSH32 lb; +} +alias EMRCREATEBRUSHINDIRECT* PEMRCREATEBRUSHINDIRECT; + +alias LONG LCSCSTYPE, LCSGAMUTMATCH; + +struct LOGCOLORSPACEA { + DWORD lcsSignature; + DWORD lcsVersion; + DWORD lcsSize; + LCSCSTYPE lcsCSType; + LCSGAMUTMATCH lcsIntent; + CIEXYZTRIPLE lcsEndpoints; + DWORD lcsGammaRed; + DWORD lcsGammaGreen; + DWORD lcsGammaBlue; + CHAR[MAX_PATH] lcsFilename; +} +alias LOGCOLORSPACEA* LPLOGCOLORSPACEA; + +struct LOGCOLORSPACEW { + DWORD lcsSignature; + DWORD lcsVersion; + DWORD lcsSize; + LCSCSTYPE lcsCSType; + LCSGAMUTMATCH lcsIntent; + CIEXYZTRIPLE lcsEndpoints; + DWORD lcsGammaRed; + DWORD lcsGammaGreen; + DWORD lcsGammaBlue; + WCHAR[MAX_PATH] lcsFilename; +} +alias LOGCOLORSPACEW* LPLOGCOLORSPACEW; + +alias USHORT COLOR16; +struct TRIVERTEX { + LONG x; + LONG y; + COLOR16 Red; + COLOR16 Green; + COLOR16 Blue; + COLOR16 Alpha; +} +alias TRIVERTEX* PTRIVERTEX, LPTRIVERTEX; + +static if (WINVER >= 0x0400) { + + struct EMRGLSRECORD { + EMR emr; + DWORD cbData; + BYTE[1] Data; + } + alias EMRGLSRECORD* PEMRGLSRECORD; + + struct EMRGLSBOUNDEDRECORD { + EMR emr; + RECTL rclBounds; + DWORD cbData; + BYTE[1] Data; + } + alias EMRGLSBOUNDEDRECORD* PEMRGLSBOUNDEDRECORD; + + struct EMRPIXELFORMAT { + EMR emr; + PIXELFORMATDESCRIPTOR pfd; + } + alias EMRPIXELFORMAT* PEMRPIXELFORMAT; + + struct EMRCREATECOLORSPACE { + EMR emr; + DWORD ihCS; + LOGCOLORSPACE lcs; + } + alias EMRCREATECOLORSPACE* PEMRCREATECOLORSPACE; + + struct EMRSETCOLORSPACE { + EMR emr; + DWORD ihCS; + } + alias EMRSETCOLORSPACE* PEMRSETCOLORSPACE; + typedef EMRSETCOLORSPACE EMRSELECTCOLORSPACE; + alias EMRSELECTCOLORSPACE* PEMRSELECTCOLORSPACE; + typedef EMRSETCOLORSPACE EMRDELETECOLORSPACE; + alias EMRDELETECOLORSPACE* PEMRDELETECOLORSPACE; +} + +static if (WINVER >= 0x0500) { + + struct EMREXTESCAPE { + EMR emr; + INT iEscape; + INT cbEscData; + BYTE[1] EscData; + } + alias EMREXTESCAPE* PEMREXTESCAPE; + typedef EMREXTESCAPE EMRDRAWESCAPE; + alias EMRDRAWESCAPE* PEMRDRAWESCAPE; + + struct EMRNAMEDESCAPE { + EMR emr; + INT iEscape; + INT cbDriver; + INT cbEscData; + BYTE[1] EscData; + } + alias EMRNAMEDESCAPE* PEMRNAMEDESCAPE; + + struct EMRSETICMPROFILE { + EMR emr; + DWORD dwFlags; + DWORD cbName; + DWORD cbData; + BYTE[1] Data; + } + alias EMRSETICMPROFILE* PEMRSETICMPROFILE; + typedef EMRSETICMPROFILE EMRSETICMPROFILEA; + alias EMRSETICMPROFILEA* PEMRSETICMPROFILEA; + typedef EMRSETICMPROFILE EMRSETICMPROFILEW; + alias EMRSETICMPROFILEW* PEMRSETICMPROFILEW; + + struct EMRCREATECOLORSPACEW { + EMR emr; + DWORD ihCS; + LOGCOLORSPACEW lcs; + DWORD dwFlags; + DWORD cbData; + BYTE[1] Data; + } + alias EMRCREATECOLORSPACEW* PEMRCREATECOLORSPACEW; + + struct EMRCOLORMATCHTOTARGET { + EMR emr; + DWORD dwAction; + DWORD dwFlags; + DWORD cbName; + DWORD cbData; + BYTE[1] Data; + } + alias EMRCOLORMATCHTOTARGET* PEMRCOLORMATCHTOTARGET; + + struct EMRCOLORCORRECTPALETTE { + EMR emr; + DWORD ihPalette; + DWORD nFirstEntry; + DWORD nPalEntries; + DWORD nReserved; + } + alias EMRCOLORCORRECTPALETTE* PEMRCOLORCORRECTPALETTE; + + struct EMRALPHABLEND { + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG cxDest; + LONG cyDest; + DWORD dwRop; + LONG xSrc; + LONG ySrc; + XFORM xformSrc; + COLORREF crBkColorSrc; + DWORD iUsageSrc; + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + LONG cxSrc; + LONG cySrc; + } + alias EMRALPHABLEND* PEMRALPHABLEND; + + struct EMRGRADIENTFILL { + EMR emr; + RECTL rclBounds; + DWORD nVer; + DWORD nTri; + ULONG ulMode; + TRIVERTEX[1] Ver; + } + alias EMRGRADIENTFILL* PEMRGRADIENTFILL; + + struct EMRTRANSPARENTBLT { + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG cxDest; + LONG cyDest; + DWORD dwRop; + LONG xSrc; + LONG ySrc; + XFORM xformSrc; + COLORREF crBkColorSrc; + DWORD iUsageSrc; + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + LONG cxSrc; + LONG cySrc; + } + alias EMRTRANSPARENTBLT* PEMRTRANSPARENTBLT; +} + +struct EMRCREATEDIBPATTERNBRUSHPT { + EMR emr; + DWORD ihBrush; + DWORD iUsage; + DWORD offBmi; + DWORD cbBmi; + DWORD offBits; + DWORD cbBits; +} +alias EMRCREATEDIBPATTERNBRUSHPT* PEMRCREATEDIBPATTERNBRUSHPT; + +struct EMRCREATEMONOBRUSH { + EMR emr; + DWORD ihBrush; + DWORD iUsage; + DWORD offBmi; + DWORD cbBmi; + DWORD offBits; + DWORD cbBits; +} +alias EMRCREATEMONOBRUSH* PEMRCREATEMONOBRUSH; + +struct PALETTEENTRY { + BYTE peRed; + BYTE peGreen; + BYTE peBlue; + BYTE peFlags; +} +alias PALETTEENTRY* PPALETTEENTRY, LPPALETTEENTRY; + +struct LOGPALETTE { + WORD palVersion; + WORD palNumEntries; + PALETTEENTRY[1] palPalEntry; +} +alias LOGPALETTE* PLOGPALETTE, NPLOGPALETTE, LPLOGPALETTE; + +struct EMRCREATEPALETTE { + EMR emr; + DWORD ihPal; + LOGPALETTE lgpl; +} +alias EMRCREATEPALETTE* PEMRCREATEPALETTE; + +struct EMRCREATEPEN { + EMR emr; + DWORD ihPen; + LOGPEN lopn; +} +alias EMRCREATEPEN* PEMRCREATEPEN; + +struct EMRELLIPSE { + EMR emr; + RECTL rclBox; +} +alias EMRELLIPSE* PEMRELLIPSE; + +typedef EMRELLIPSE EMRRECTANGLE; +alias EMRRECTANGLE* PEMRRECTANGLE; + +struct EMREOF { + EMR emr; + DWORD nPalEntries; + DWORD offPalEntries; + DWORD nSizeLast; +} +alias EMREOF* PEMREOF; + +struct EMREXCLUDECLIPRECT { + EMR emr; + RECTL rclClip; +} +alias EMREXCLUDECLIPRECT* PEMREXCLUDECLIPRECT; +typedef EMREXCLUDECLIPRECT EMRINTERSECTCLIPRECT; +alias EMRINTERSECTCLIPRECT* PEMRINTERSECTCLIPRECT; + +struct EMREXTCREATEFONTINDIRECTW { + EMR emr; + DWORD ihFont; + EXTLOGFONTW elfw; +} +alias EMREXTCREATEFONTINDIRECTW* PEMREXTCREATEFONTINDIRECTW; + +struct EXTLOGPEN { + UINT elpPenStyle; + UINT elpWidth; + UINT elpBrushStyle; + COLORREF elpColor; + LONG elpHatch; + DWORD elpNumEntries; + DWORD[1] elpStyleEntry; +} +alias EXTLOGPEN* PEXTLOGPEN, NPEXTLOGPEN, LPEXTLOGPEN; + +struct EMREXTCREATEPEN { + EMR emr; + DWORD ihPen; + DWORD offBmi; + DWORD cbBmi; + DWORD offBits; + DWORD cbBits; + EXTLOGPEN elp; +} +alias EMREXTCREATEPEN* PEMREXTCREATEPEN; + +struct EMREXTFLOODFILL { + EMR emr; + POINTL ptlStart; + COLORREF crColor; + DWORD iMode; +} +alias EMREXTFLOODFILL* PEMREXTFLOODFILL; + +struct EMREXTSELECTCLIPRGN { + EMR emr; + DWORD cbRgnData; + DWORD iMode; + BYTE [1]RgnData; +} +alias EMREXTSELECTCLIPRGN* PEMREXTSELECTCLIPRGN; + +struct EMRTEXT { + POINTL ptlReference; + DWORD nChars; + DWORD offString; + DWORD fOptions; + RECTL rcl; + DWORD offDx; +} +alias EMRTEXT* PEMRTEXT; + +struct EMREXTTEXTOUTA { + EMR emr; + RECTL rclBounds; + DWORD iGraphicsMode; + FLOAT exScale; + FLOAT eyScale; + EMRTEXT emrtext; +} +alias EMREXTTEXTOUTA* PEMREXTTEXTOUTA; +typedef EMREXTTEXTOUTA EMREXTTEXTOUTW; +alias EMREXTTEXTOUTW* PEMREXTTEXTOUTW; + +struct EMRFILLPATH { + EMR emr; + RECTL rclBounds; +} +alias EMRFILLPATH* PEMRFILLPATH; + +typedef EMRFILLPATH EMRSTROKEANDFILLPATH; +alias EMRSTROKEANDFILLPATH* PEMRSTROKEANDFILLPATH; + +typedef EMRFILLPATH EMRSTROKEPATH; +alias EMRSTROKEPATH* PEMRSTROKEPATH; + +struct EMRFILLRGN { + EMR emr; + RECTL rclBounds; + DWORD cbRgnData; + DWORD ihBrush; + BYTE[1] RgnData; +} +alias EMRFILLRGN* PEMRFILLRGN; + +struct EMRFORMAT { + DWORD dSignature; + DWORD nVersion; + DWORD cbData; + DWORD offData; +} +alias EMRFORMAT* PEMRFORMAT; + +struct EMRFRAMERGN { + EMR emr; + RECTL rclBounds; + DWORD cbRgnData; + DWORD ihBrush; + SIZEL szlStroke; + BYTE[1] RgnData; +} +alias EMRFRAMERGN* PEMRFRAMERGN; + +struct EMRGDICOMMENT { + EMR emr; + DWORD cbData; + BYTE[1] Data; +} +alias EMRGDICOMMENT* PEMRGDICOMMENT; + +struct EMRINVERTRGN { + EMR emr; + RECTL rclBounds; + DWORD cbRgnData; + BYTE[1] RgnData; +} +alias EMRINVERTRGN* PEMRINVERTRGN; +typedef EMRINVERTRGN EMRPAINTRGN; +alias EMRPAINTRGN* PEMRPAINTRGN; + +struct EMRLINETO { + EMR emr; + POINTL ptl; +} +alias EMRLINETO* PEMRLINETO; +typedef EMRLINETO EMRMOVETOEX; +alias EMRMOVETOEX* PEMRMOVETOEX; + +struct EMRMASKBLT { + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG cxDest; + LONG cyDest; + DWORD dwRop; + LONG xSrc; + LONG ySrc; + XFORM xformSrc; + COLORREF crBkColorSrc; + DWORD iUsageSrc; + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + LONG xMask; + LONG yMask; + DWORD iUsageMask; + DWORD offBmiMask; + DWORD cbBmiMask; + DWORD offBitsMask; + DWORD cbBitsMask; +} +alias EMRMASKBLT* PEMRMASKBLT; + +struct EMRMODIFYWORLDTRANSFORM { + EMR emr; + XFORM xform; + DWORD iMode; +} +alias EMRMODIFYWORLDTRANSFORM* PEMRMODIFYWORLDTRANSFORM; + +struct EMROFFSETCLIPRGN { + EMR emr; + POINTL ptlOffset; +} +alias EMROFFSETCLIPRGN* PEMROFFSETCLIPRGN; + +struct EMRPLGBLT { + EMR emr; + RECTL rclBounds; + POINTL[3] aptlDest; + LONG xSrc; + LONG ySrc; + LONG cxSrc; + LONG cySrc; + XFORM xformSrc; + COLORREF crBkColorSrc; + DWORD iUsageSrc; + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + LONG xMask; + LONG yMask; + DWORD iUsageMask; + DWORD offBmiMask; + DWORD cbBmiMask; + DWORD offBitsMask; + DWORD cbBitsMask; +} +alias EMRPLGBLT* PEMRPLGBLT; + +struct EMRPOLYDRAW { + EMR emr; + RECTL rclBounds; + DWORD cptl; + POINTL[1] aptl; + BYTE[1] abTypes; +} +alias EMRPOLYDRAW* PEMRPOLYDRAW; + +struct EMRPOLYDRAW16 { + EMR emr; + RECTL rclBounds; + DWORD cpts; + POINTS[1] apts; + BYTE[1] abTypes; +} +alias EMRPOLYDRAW16* PEMRPOLYDRAW16; + +struct EMRPOLYLINE { + EMR emr; + RECTL rclBounds; + DWORD cptl; + POINTL[1] aptl; +} +alias EMRPOLYLINE* PEMRPOLYLINE; +typedef EMRPOLYLINE EMRPOLYBEZIER; +alias EMRPOLYBEZIER* PEMRPOLYBEZIER; +typedef EMRPOLYLINE EMRPOLYGON; +alias EMRPOLYGON* PEMRPOLYGON; +typedef EMRPOLYLINE EMRPOLYBEZIERTO; +alias EMRPOLYBEZIERTO* PEMRPOLYBEZIERTO; +typedef EMRPOLYLINE EMRPOLYLINETO; +alias EMRPOLYLINETO* PEMRPOLYLINETO; + +struct EMRPOLYLINE16 { + EMR emr; + RECTL rclBounds; + DWORD cpts; + POINTS[1] apts; +} +alias EMRPOLYLINE16* PEMRPOLYLINE16; +typedef EMRPOLYLINE16 EMRPOLYBEZIER16; +alias EMRPOLYBEZIER16* PEMRPOLYBEZIER16; +typedef EMRPOLYLINE16 EMRPOLYGON16; +alias EMRPOLYGON16* PEMRPOLYGON16; +typedef EMRPOLYLINE16 EMRPOLYBEZIERTO16; +alias EMRPOLYBEZIERTO16* PEMRPOLYBEZIERTO16; +typedef EMRPOLYLINE16 EMRPOLYLINETO16; +alias EMRPOLYLINETO16* PEMRPOLYLINETO16; + +struct EMRPOLYPOLYLINE { + EMR emr; + RECTL rclBounds; + DWORD nPolys; + DWORD cptl; + DWORD[1] aPolyCounts; + POINTL[1] aptl; +} +alias EMRPOLYPOLYLINE* PEMRPOLYPOLYLINE; +typedef EMRPOLYPOLYLINE EMRPOLYPOLYGON; +alias EMRPOLYPOLYGON* PEMRPOLYPOLYGON; + +struct EMRPOLYPOLYLINE16 { + EMR emr; + RECTL rclBounds; + DWORD nPolys; + DWORD cpts; + DWORD[1] aPolyCounts; + POINTS[1] apts; +} +alias EMRPOLYPOLYLINE16* PEMRPOLYPOLYLINE16; +typedef EMRPOLYPOLYLINE16 EMRPOLYPOLYGON16; +alias EMRPOLYPOLYGON16* PEMRPOLYPOLYGON16; + +struct EMRPOLYTEXTOUTA { + EMR emr; + RECTL rclBounds; + DWORD iGraphicsMode; + FLOAT exScale; + FLOAT eyScale; + LONG cStrings; + EMRTEXT[1] aemrtext; +} +alias EMRPOLYTEXTOUTA* PEMRPOLYTEXTOUTA; +typedef EMRPOLYTEXTOUTA EMRPOLYTEXTOUTW; +alias EMRPOLYTEXTOUTW* PEMRPOLYTEXTOUTW; + +struct EMRRESIZEPALETTE { + EMR emr; + DWORD ihPal; + DWORD cEntries; +} +alias EMRRESIZEPALETTE* PEMRRESIZEPALETTE; + +struct EMRRESTOREDC { + EMR emr; + LONG iRelative; +} +alias EMRRESTOREDC* PEMRRESTOREDC; + +struct EMRROUNDRECT { + EMR emr; + RECTL rclBox; + SIZEL szlCorner; +} +alias EMRROUNDRECT* PEMRROUNDRECT; + +struct EMRSCALEVIEWPORTEXTEX { + EMR emr; + LONG xNum; + LONG xDenom; + LONG yNum; + LONG yDenom; +} +alias EMRSCALEVIEWPORTEXTEX* PEMRSCALEVIEWPORTEXTEX; +typedef EMRSCALEVIEWPORTEXTEX EMRSCALEWINDOWEXTEX; +alias EMRSCALEWINDOWEXTEX* PEMRSCALEWINDOWEXTEX; + +struct EMRSELECTOBJECT { + EMR emr; + DWORD ihObject; +} +alias EMRSELECTOBJECT* PEMRSELECTOBJECT; +typedef EMRSELECTOBJECT EMRDELETEOBJECT; +alias EMRDELETEOBJECT* PEMRDELETEOBJECT; + +struct EMRSELECTPALETTE { + EMR emr; + DWORD ihPal; +} +alias EMRSELECTPALETTE* PEMRSELECTPALETTE; + +struct EMRSETARCDIRECTION { + EMR emr; + DWORD iArcDirection; +} +alias EMRSETARCDIRECTION* PEMRSETARCDIRECTION; + +struct EMRSETTEXTCOLOR { + EMR emr; + COLORREF crColor; +} +alias EMRSETTEXTCOLOR* PEMRSETTEXTCOLOR; +typedef EMRSETTEXTCOLOR EMRSETBKCOLOR; +alias EMRSETBKCOLOR* PEMRSETBKCOLOR; + +struct EMRSETCOLORADJUSTMENT { + EMR emr; + COLORADJUSTMENT ColorAdjustment; +} +alias EMRSETCOLORADJUSTMENT* PEMRSETCOLORADJUSTMENT; + +struct EMRSETDIBITSTODEVICE { + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG xSrc; + LONG ySrc; + LONG cxSrc; + LONG cySrc; + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + DWORD iUsageSrc; + DWORD iStartScan; + DWORD cScans; +} +alias EMRSETDIBITSTODEVICE* PEMRSETDIBITSTODEVICE; + +struct EMRSETMAPPERFLAGS { + EMR emr; + DWORD dwFlags; +} +alias EMRSETMAPPERFLAGS* PEMRSETMAPPERFLAGS; + +struct EMRSETMITERLIMIT { + EMR emr; + FLOAT eMiterLimit; +} +alias EMRSETMITERLIMIT* PEMRSETMITERLIMIT; + +struct EMRSETPALETTEENTRIES { + EMR emr; + DWORD ihPal; + DWORD iStart; + DWORD cEntries; + PALETTEENTRY[1] aPalEntries; +} +alias EMRSETPALETTEENTRIES* PEMRSETPALETTEENTRIES; + +struct EMRSETPIXELV { + EMR emr; + POINTL ptlPixel; + COLORREF crColor; +} +alias EMRSETPIXELV* PEMRSETPIXELV; + +struct EMRSETVIEWPORTEXTEX { + EMR emr; + SIZEL szlExtent; +} +alias EMRSETVIEWPORTEXTEX* PEMRSETVIEWPORTEXTEX; +typedef EMRSETVIEWPORTEXTEX EMRSETWINDOWEXTEX; +alias EMRSETWINDOWEXTEX* PEMRSETWINDOWEXTEX; + +struct EMRSETVIEWPORTORGEX { + EMR emr; + POINTL ptlOrigin; +} +alias EMRSETVIEWPORTORGEX* PEMRSETVIEWPORTORGEX; +typedef EMRSETVIEWPORTORGEX EMRSETWINDOWORGEX; +alias EMRSETWINDOWORGEX* PEMRSETWINDOWORGEX; +typedef EMRSETVIEWPORTORGEX EMRSETBRUSHORGEX; +alias EMRSETBRUSHORGEX* PEMRSETBRUSHORGEX; + +struct EMRSETWORLDTRANSFORM { + EMR emr; + XFORM xform; +} +alias EMRSETWORLDTRANSFORM* PEMRSETWORLDTRANSFORM; + +struct EMRSTRETCHBLT { + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG cxDest; + LONG cyDest; + DWORD dwRop; + LONG xSrc; + LONG ySrc; + XFORM xformSrc; + COLORREF crBkColorSrc; + DWORD iUsageSrc; + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + LONG cxSrc; + LONG cySrc; +} +alias EMRSTRETCHBLT* PEMRSTRETCHBLT; + +struct EMRSTRETCHDIBITS { + EMR emr; + RECTL rclBounds; + LONG xDest; + LONG yDest; + LONG xSrc; + LONG ySrc; + LONG cxSrc; + LONG cySrc; + DWORD offBmiSrc; + DWORD cbBmiSrc; + DWORD offBitsSrc; + DWORD cbBitsSrc; + DWORD iUsageSrc; + DWORD dwRop; + LONG cxDest; + LONG cyDest; +} +alias EMRSTRETCHDIBITS* PEMRSTRETCHDIBITS; + +struct EMRABORTPATH { + EMR emr; +} +alias EMRABORTPATH* PEMRABORTPATH; +typedef EMRABORTPATH EMRBEGINPATH; +alias EMRBEGINPATH* PEMRBEGINPATH; +typedef EMRABORTPATH EMRENDPATH; +alias EMRENDPATH* PEMRENDPATH; +typedef EMRABORTPATH EMRCLOSEFIGURE; +alias EMRCLOSEFIGURE* PEMRCLOSEFIGURE; +typedef EMRABORTPATH EMRFLATTENPATH; +alias EMRFLATTENPATH* PEMRFLATTENPATH; +typedef EMRABORTPATH EMRWIDENPATH; +alias EMRWIDENPATH* PEMRWIDENPATH; +typedef EMRABORTPATH EMRSETMETARGN; +alias EMRSETMETARGN* PEMRSETMETARGN; +typedef EMRABORTPATH EMRSAVEDC; +alias EMRSAVEDC* PEMRSAVEDC; +typedef EMRABORTPATH EMRREALIZEPALETTE; +alias EMRREALIZEPALETTE* PEMRREALIZEPALETTE; + +struct EMRSELECTCLIPPATH { + EMR emr; + DWORD iMode; +} +alias EMRSELECTCLIPPATH* PEMRSELECTCLIPPATH; +typedef EMRSELECTCLIPPATH EMRSETBKMODE; +alias EMRSETBKMODE* PEMRSETBKMODE; +typedef EMRSELECTCLIPPATH EMRSETMAPMODE; +alias EMRSETMAPMODE* PEMRSETMAPMODE; +typedef EMRSELECTCLIPPATH EMRSETPOLYFILLMODE; +alias EMRSETPOLYFILLMODE* PEMRSETPOLYFILLMODE; +typedef EMRSELECTCLIPPATH EMRSETROP2; +alias EMRSETROP2* PEMRSETROP2; +typedef EMRSELECTCLIPPATH EMRSETSTRETCHBLTMODE; +alias EMRSETSTRETCHBLTMODE* PEMRSETSTRETCHBLTMODE; +typedef EMRSELECTCLIPPATH EMRSETICMMODE; +alias EMRSETICMMODE* PEMRSETICMMODE; +typedef EMRSELECTCLIPPATH EMRSETTEXTALIGN; +alias EMRSETTEXTALIGN* PEMRSETTEXTALIGN; +typedef EMRSELECTCLIPPATH EMRENABLEICM; +alias EMRENABLEICM* PEMRENABLEICM; +static if (WINVER >= 0x0500) { + typedef EMRSELECTCLIPPATH EMRSETLAYOUT; + alias EMRSETLAYOUT* PEMRSETLAYOUT; +} + +align(2): +struct METAHEADER { + WORD mtType; + WORD mtHeaderSize; + WORD mtVersion; + DWORD mtSize; + WORD mtNoObjects; + DWORD mtMaxRecord; + WORD mtNoParameters; +} +alias METAHEADER* PMETAHEADER; +alias METAHEADER* LPMETAHEADER; + +align: + +struct ENHMETAHEADER { + DWORD iType; + DWORD nSize; + RECTL rclBounds; + RECTL rclFrame; + DWORD dSignature = ENHMETA_SIGNATURE; + DWORD nVersion; + DWORD nBytes; + DWORD nRecords; + WORD nHandles; + WORD sReserved; + DWORD nDescription; + DWORD offDescription; + DWORD nPalEntries; + SIZEL szlDevice; + SIZEL szlMillimeters; + static if (WINVER >= 0x0400) { + DWORD cbPixelFormat; + DWORD offPixelFormat; + DWORD bOpenGL; + } + static if (WINVER >= 0x0500) { + SIZEL szlMicrometers; + } +} +alias ENHMETAHEADER* PENHMETAHEADER, LPENHMETAHEADER; + +struct METARECORD { + DWORD rdSize; + WORD rdFunction; + WORD[1] rdParm; +} +alias METARECORD* PMETARECORD; +alias METARECORD* LPMETARECORD; + +struct ENHMETARECORD { + DWORD iType; + DWORD nSize; + DWORD[1] dParm; +} +alias ENHMETARECORD* PENHMETARECORD, LPENHMETARECORD; + +// --- + +struct HANDLETABLE { + HGDIOBJ[1] objectHandle; +} +alias HANDLETABLE* PHANDLETABLE, LPHANDLETABLE; + +struct TEXTMETRICA { + LONG tmHeight; + LONG tmAscent; + LONG tmDescent; + LONG tmInternalLeading; + LONG tmExternalLeading; + LONG tmAveCharWidth; + LONG tmMaxCharWidth; + LONG tmWeight; + LONG tmOverhang; + LONG tmDigitizedAspectX; + LONG tmDigitizedAspectY; + BYTE tmFirstChar; + BYTE tmLastChar; + BYTE tmDefaultChar; + BYTE tmBreakChar; + BYTE tmItalic; + BYTE tmUnderlined; + BYTE tmStruckOut; + BYTE tmPitchAndFamily; + BYTE tmCharSet; +} +alias TEXTMETRICA* PTEXTMETRICA, NPTEXTMETRICA, LPTEXTMETRICA; + +struct TEXTMETRICW { + LONG tmHeight; + LONG tmAscent; + LONG tmDescent; + LONG tmInternalLeading; + LONG tmExternalLeading; + LONG tmAveCharWidth; + LONG tmMaxCharWidth; + LONG tmWeight; + LONG tmOverhang; + LONG tmDigitizedAspectX; + LONG tmDigitizedAspectY; + WCHAR tmFirstChar; + WCHAR tmLastChar; + WCHAR tmDefaultChar; + WCHAR tmBreakChar; + BYTE tmItalic; + BYTE tmUnderlined; + BYTE tmStruckOut; + BYTE tmPitchAndFamily; + BYTE tmCharSet; +} +alias TEXTMETRICW* PTEXTMETRICW, NPTEXTMETRICW, LPTEXTMETRICW; + +struct RGNDATAHEADER { + DWORD dwSize; + DWORD iType; + DWORD nCount; + DWORD nRgnSize; + RECT rcBound; +} +alias RGNDATAHEADER* PRGNDATAHEADER; + +struct RGNDATA { + RGNDATAHEADER rdh; + char[1] Buffer; +} +alias RGNDATA* PRGNDATA, NPRGNDATA, LPRGNDATA; + +/* for GetRandomRgn */ +const SYSRGN=4; +struct GCP_RESULTSA { + DWORD lStructSize; + LPSTR lpOutString; + UINT* lpOrder; + INT* lpDx; + INT* lpCaretPos; + LPSTR lpClass; + LPWSTR lpGlyphs; + UINT nGlyphs; + UINT nMaxFit; +} +alias GCP_RESULTSA* LPGCP_RESULTSA; + +struct GCP_RESULTSW { + DWORD lStructSize; + LPWSTR lpOutString; + UINT* lpOrder; + INT* lpDx; + INT* lpCaretPos; + LPWSTR lpClass; + LPWSTR lpGlyphs; + UINT nGlyphs; + UINT nMaxFit; +} +alias GCP_RESULTSW* LPGCP_RESULTSW; + +struct GLYPHMETRICS { + UINT gmBlackBoxX; + UINT gmBlackBoxY; + POINT gmptGlyphOrigin; + short gmCellIncX; + short gmCellIncY; +} +alias GLYPHMETRICS* LPGLYPHMETRICS; + +static if (_WIN32_WINNT >= 0x0500) { + struct WCRANGE { + WCHAR wcLow; + USHORT cGlyphs; + } + alias WCRANGE* PWCRANGE, LPWCRANGE; + + struct GLYPHSET { + DWORD cbThis; + DWORD flAccel; + DWORD cGlyphsSupported; + DWORD cRanges; + WCRANGE[1] ranges; + } + alias GLYPHSET* PGLYPHSET, LPGLYPHSET; + + const DWORD GS_8BIT_INDICES = 0x00000001; +} + +struct KERNINGPAIR { + WORD wFirst; + WORD wSecond; + int iKernAmount; +} +alias KERNINGPAIR* LPKERNINGPAIR; + +struct FIXED { + WORD fract; + short value; +} + +struct MAT2 { + FIXED eM11; + FIXED eM12; + FIXED eM21; + FIXED eM22; +} +alias MAT2* LPMAT2; + +struct OUTLINETEXTMETRICA { + UINT otmSize; + TEXTMETRICA otmTextMetrics; + BYTE otmFiller; + PANOSE otmPanoseNumber; + UINT otmfsSelection; + UINT otmfsType; + int otmsCharSlopeRise; + int otmsCharSlopeRun; + int otmItalicAngle; + UINT otmEMSquare; + int otmAscent; + int otmDescent; + UINT otmLineGap; + UINT otmsCapEmHeight; + UINT otmsXHeight; + RECT otmrcFontBox; + int otmMacAscent; + int otmMacDescent; + UINT otmMacLineGap; + UINT otmusMinimumPPEM; + POINT otmptSubscriptSize; + POINT otmptSubscriptOffset; + POINT otmptSuperscriptSize; + POINT otmptSuperscriptOffset; + UINT otmsStrikeoutSize; + int otmsStrikeoutPosition; + int otmsUnderscoreSize; + int otmsUnderscorePosition; + PSTR otmpFamilyName; + PSTR otmpFaceName; + PSTR otmpStyleName; + PSTR otmpFullName; +} +alias OUTLINETEXTMETRICA* POUTLINETEXTMETRICA, NPOUTLINETEXTMETRICA, LPOUTLINETEXTMETRICA; + +struct OUTLINETEXTMETRICW { + UINT otmSize; + TEXTMETRICW otmTextMetrics; + BYTE otmFiller; + PANOSE otmPanoseNumber; + UINT otmfsSelection; + UINT otmfsType; + int otmsCharSlopeRise; + int otmsCharSlopeRun; + int otmItalicAngle; + UINT otmEMSquare; + int otmAscent; + int otmDescent; + UINT otmLineGap; + UINT otmsCapEmHeight; + UINT otmsXHeight; + RECT otmrcFontBox; + int otmMacAscent; + int otmMacDescent; + UINT otmMacLineGap; + UINT otmusMinimumPPEM; + POINT otmptSubscriptSize; + POINT otmptSubscriptOffset; + POINT otmptSuperscriptSize; + POINT otmptSuperscriptOffset; + UINT otmsStrikeoutSize; + int otmsStrikeoutPosition; + int otmsUnderscoreSize; + int otmsUnderscorePosition; + PSTR otmpFamilyName; + PSTR otmpFaceName; + PSTR otmpStyleName; + PSTR otmpFullName; +} +alias OUTLINETEXTMETRICW* POUTLINETEXTMETRICW, NPOUTLINETEXTMETRICW, LPOUTLINETEXTMETRICW; + +struct RASTERIZER_STATUS { + short nSize; + short wFlags; + short nLanguageID; +} +alias RASTERIZER_STATUS* LPRASTERIZER_STATUS; + +struct POLYTEXTA { + int x; + int y; + UINT n; + LPCSTR lpstr; + UINT uiFlags; + RECT rcl; + int* pdx; +} +alias POLYTEXTA* PPOLYTEXTA, NPPOLYTEXTA, LPPOLYTEXTA; + +struct POLYTEXTW { + int x; + int y; + UINT n; + LPCWSTR lpstr; + UINT uiFlags; + RECT rcl; + int* pdx; +} +alias POLYTEXTW* PPOLYTEXTW, NPPOLYTEXTW, LPPOLYTEXTW; + +struct PIXELFORMATDESCRIPTOR { + WORD nSize; + WORD nVersion; + DWORD dwFlags; + BYTE iPixelType; + BYTE cColorBits; + BYTE cRedBits; + BYTE cRedShift; + BYTE cGreenBits; + BYTE cGreenShift; + BYTE cBlueBits; + BYTE cBlueShift; + BYTE cAlphaBits; + BYTE cAlphaShift; + BYTE cAccumBits; + BYTE cAccumRedBits; + BYTE cAccumGreenBits; + BYTE cAccumBlueBits; + BYTE cAccumAlphaBits; + BYTE cDepthBits; + BYTE cStencilBits; + BYTE cAuxBuffers; + BYTE iLayerType; + BYTE bReserved; + DWORD dwLayerMask; + DWORD dwVisibleMask; + DWORD dwDamageMask; +} +alias PIXELFORMATDESCRIPTOR* PPIXELFORMATDESCRIPTOR, LPPIXELFORMATDESCRIPTOR; + +struct METAFILEPICT { + LONG mm; + LONG xExt; + LONG yExt; + HMETAFILE hMF; +} +alias METAFILEPICT* LPMETAFILEPICT; + +struct LOCALESIGNATURE { + DWORD[4] lsUsb; + DWORD[2] lsCsbDefault; + DWORD[2] lsCsbSupported; +} +alias LOCALESIGNATURE* PLOCALESIGNATURE, LPLOCALESIGNATURE; + +alias LONG LCSTYPE; /* What this for? */ + +align(4): +struct NEWTEXTMETRICA { + LONG tmHeight; + LONG tmAscent; + LONG tmDescent; + LONG tmInternalLeading; + LONG tmExternalLeading; + LONG tmAveCharWidth; + LONG tmMaxCharWidth; + LONG tmWeight; + LONG tmOverhang; + LONG tmDigitizedAspectX; + LONG tmDigitizedAspectY; + BYTE tmFirstChar; + BYTE tmLastChar; + BYTE tmDefaultChar; + BYTE tmBreakChar; + BYTE tmItalic; + BYTE tmUnderlined; + BYTE tmStruckOut; + BYTE tmPitchAndFamily; + BYTE tmCharSet; + DWORD ntmFlags; + UINT ntmSizeEM; + UINT ntmCellHeight; + UINT ntmAvgWidth; +} +alias NEWTEXTMETRICA* PNEWTEXTMETRICA, NPNEWTEXTMETRICA, LPNEWTEXTMETRICA; + +struct NEWTEXTMETRICW { + LONG tmHeight; + LONG tmAscent; + LONG tmDescent; + LONG tmInternalLeading; + LONG tmExternalLeading; + LONG tmAveCharWidth; + LONG tmMaxCharWidth; + LONG tmWeight; + LONG tmOverhang; + LONG tmDigitizedAspectX; + LONG tmDigitizedAspectY; + WCHAR tmFirstChar; + WCHAR tmLastChar; + WCHAR tmDefaultChar; + WCHAR tmBreakChar; + BYTE tmItalic; + BYTE tmUnderlined; + BYTE tmStruckOut; + BYTE tmPitchAndFamily; + BYTE tmCharSet; + DWORD ntmFlags; + UINT ntmSizeEM; + UINT ntmCellHeight; + UINT ntmAvgWidth; +} +alias NEWTEXTMETRICW* PNEWTEXTMETRICW, NPNEWTEXTMETRICW, LPNEWTEXTMETRICW; + +align: +struct NEWTEXTMETRICEXA { + NEWTEXTMETRICA ntmTm; + FONTSIGNATURE ntmFontSig; +} + +struct NEWTEXTMETRICEXW { + NEWTEXTMETRICW ntmTm; + FONTSIGNATURE ntmFontSig; +} + +struct PELARRAY { + LONG paXCount; + LONG paYCount; + LONG paXExt; + LONG paYExt; + BYTE paRGBs; +} +alias PELARRAY* PPELARRAY, NPPELARRAY, LPPELARRAY; + +struct ENUMLOGFONTA { + LOGFONTA elfLogFont; + BYTE[LF_FULLFACESIZE] elfFullName; + BYTE[LF_FACESIZE] elfStyle; +} +alias ENUMLOGFONTA* LPENUMLOGFONTA; + +struct ENUMLOGFONTW { + LOGFONTW elfLogFont; + WCHAR[LF_FULLFACESIZE] elfFullName; + WCHAR[LF_FACESIZE] elfStyle; +} +alias ENUMLOGFONTW* LPENUMLOGFONTW; + +struct ENUMLOGFONTEXA { + LOGFONTA elfLogFont; + BYTE[LF_FULLFACESIZE] elfFullName; + BYTE[LF_FACESIZE] elfStyle; + BYTE[LF_FACESIZE] elfScript; +} +alias ENUMLOGFONTEXA* LPENUMLOGFONTEXA; + +struct ENUMLOGFONTEXW { + LOGFONTW elfLogFont; + WCHAR[LF_FULLFACESIZE] elfFullName; + WCHAR[LF_FACESIZE] elfStyle; + WCHAR[LF_FACESIZE] elfScript; +} +alias ENUMLOGFONTEXW* LPENUMLOGFONTEXW; + +struct POINTFX { + FIXED x; + FIXED y; +} +alias POINTFX* LPPOINTFX; + +struct TTPOLYCURVE { + WORD wType; + WORD cpfx; + POINTFX[1] apfx; +} +alias TTPOLYCURVE* LPTTPOLYCURVE; + +struct TTPOLYGONHEADER { + DWORD cb; + DWORD dwType; + POINTFX pfxStart; +} +alias TTPOLYGONHEADER* LPTTPOLYGONHEADER; + +struct POINTFLOAT { + FLOAT x; + FLOAT y; +} +alias POINTFLOAT* PPOINTFLOAT; + +struct GLYPHMETRICSFLOAT { + FLOAT gmfBlackBoxX; + FLOAT gmfBlackBoxY; + POINTFLOAT gmfptGlyphOrigin; + FLOAT gmfCellIncX; + FLOAT gmfCellIncY; +} +alias GLYPHMETRICSFLOAT* PGLYPHMETRICSFLOAT, LPGLYPHMETRICSFLOAT; + +struct LAYERPLANEDESCRIPTOR { + WORD nSize; + WORD nVersion; + DWORD dwFlags; + BYTE iPixelType; + BYTE cColorBits; + BYTE cRedBits; + BYTE cRedShift; + BYTE cGreenBits; + BYTE cGreenShift; + BYTE cBlueBits; + BYTE cBlueShift; + BYTE cAlphaBits; + BYTE cAlphaShift; + BYTE cAccumBits; + BYTE cAccumRedBits; + BYTE cAccumGreenBits; + BYTE cAccumBlueBits; + BYTE cAccumAlphaBits; + BYTE cDepthBits; + BYTE cStencilBits; + BYTE cAuxBuffers; + BYTE iLayerPlane; + BYTE bReserved; + COLORREF crTransparent; +} +alias LAYERPLANEDESCRIPTOR* PLAYERPLANEDESCRIPTOR, LPLAYERPLANEDESCRIPTOR; + +struct BLENDFUNCTION { + BYTE BlendOp; + BYTE BlendFlags; + BYTE SourceConstantAlpha; + BYTE AlphaFormat; +} +alias BLENDFUNCTION* PBLENDFUNCTION, LPBLENDFUNCTION; + +const MM_MAX_NUMAXES = 16; + +struct DESIGNVECTOR { + DWORD dvReserved; + DWORD dvNumAxes; + LONG[MM_MAX_NUMAXES] dvValues; +} +alias DESIGNVECTOR* PDESIGNVECTOR, LPDESIGNVECTOR; +const STAMP_DESIGNVECTOR = 0x8000000 + 'd' + ('v' << 8); +const STAMP_AXESLIST = 0x8000000 + 'a' + ('l' << 8); + +static if (_WIN32_WINNT >= 0x0500) { + + const MM_MAX_AXES_NAMELEN = 16; + + struct AXISINFOA { + LONG axMinValue; + LONG axMaxValue; + BYTE[MM_MAX_AXES_NAMELEN] axAxisName; + } + alias AXISINFOA* PAXISINFOA, LPAXISINFOA; + + struct AXISINFOW { + LONG axMinValue; + LONG axMaxValue; + WCHAR[MM_MAX_AXES_NAMELEN] axAxisName; + } + alias AXISINFOW* PAXISINFOW, LPAXISINFOW; + + version (Unicode) { + alias AXISINFOW AXISINFO; + alias PAXISINFOW PAXISINFO; + alias LPAXISINFOW LPAXISINFO; + } + else { + alias AXISINFOA AXISINFO; + alias PAXISINFOA PAXISINFO; + alias LPAXISINFOA LPAXISINFO; + } + + struct AXESLISTA { + DWORD axlReserved; + DWORD axlNumAxes; + AXISINFOA[MM_MAX_NUMAXES] axlAxisInfo; + } + alias AXESLISTA* PAXESLISTA, LPAXESLISTA; + + struct AXESLISTW { + DWORD axlReserved; + DWORD axlNumAxes; + AXISINFOW[MM_MAX_NUMAXES] axlAxisInfo; + } + alias AXESLISTW* PAXESLISTW, LPAXESLISTW; + + version (Unicode) { + alias AXESLISTW AXESLIST; + alias PAXESLISTW PAXESLIST; + alias LPAXESLISTW LPAXESLIST; + } + else { + alias AXESLISTA AXESLIST; + alias PAXESLISTA PAXESLIST; + alias LPAXESLISTA LPAXESLIST; + } + + struct ENUMLOGFONTEXDVA { + ENUMLOGFONTEXA elfEnumLogfontEx; + DESIGNVECTOR elfDesignVector; + } + alias ENUMLOGFONTEXDVA* PENUMLOGFONTEXDVA, LPENUMLOGFONTEXDVA; + + struct ENUMLOGFONTEXDVW { + ENUMLOGFONTEXW elfEnumLogfontEx; + DESIGNVECTOR elfDesignVector; + } + alias ENUMLOGFONTEXDVW* PENUMLOGFONTEXDVW, LPENUMLOGFONTEXDVW; + + HFONT CreateFontIndirectExA(ENUMLOGFONTEXDVA*); + HFONT CreateFontIndirectExW(ENUMLOGFONTEXDVW*); + version (Unicode) + alias CreateFontIndirectExW CreateFontIndirectEx; + else + alias CreateFontIndirectExA CreateFontIndirectEx; + + struct ENUMTEXTMETRICA { + NEWTEXTMETRICEXA etmNewTextMetricEx; + AXESLISTA etmAxesList; + } + alias ENUMTEXTMETRICA* PENUMTEXTMETRICA, LPENUMTEXTMETRICA; + + struct ENUMTEXTMETRICW { + NEWTEXTMETRICEXW etmNewTextMetricEx; + AXESLISTW etmAxesList; + } + alias ENUMTEXTMETRICW* PENUMTEXTMETRICW, LPENUMTEXTMETRICW; + + version (Unicode) { + alias ENUMTEXTMETRICW ENUMTEXTMETRIC; + alias PENUMTEXTMETRICW PENUMTEXTMETRIC; + alias LPENUMTEXTMETRICW LPENUMTEXTMETRIC; + } + else { + alias ENUMTEXTMETRICA ENUMTEXTMETRIC; + alias PENUMTEXTMETRICA PENUMTEXTMETRIC; + alias LPENUMTEXTMETRICA LPENUMTEXTMETRIC; + } +} /* _WIN32_WINNT >= 0x0500 */ + +struct GRADIENT_TRIANGLE { + ULONG Vertex1; + ULONG Vertex2; + ULONG Vertex3; +} +alias GRADIENT_TRIANGLE* PGRADIENT_TRIANGLE, LPGRADIENT_TRIANGLE; + +struct GRADIENT_RECT { + ULONG UpperLeft; + ULONG LowerRight; +} +alias GRADIENT_RECT* PGRADIENT_RECT, LPGRADIENT_RECT; + +struct DISPLAY_DEVICEA { + DWORD cb; + CHAR[32] DeviceName; + CHAR[128] DeviceString; + DWORD StateFlags; + CHAR[128] DeviceID; + CHAR[128] DeviceKey; +} +alias DISPLAY_DEVICEA* PDISPLAY_DEVICEA, LPDISPLAY_DEVICEA; + +struct DISPLAY_DEVICEW { + DWORD cb; + WCHAR[32] DeviceName; + WCHAR[128] DeviceString; + DWORD StateFlags; + WCHAR[128] DeviceID; + WCHAR[128] DeviceKey; +} +alias DISPLAY_DEVICEW* PDISPLAY_DEVICEW, LPDISPLAY_DEVICEW; + +static if (WINVER >= 0x0400) { + struct DRAWPATRECT { + POINT ptPosition; + POINT ptSize; + WORD wStyle; + WORD wPattern; + } + alias DRAWPATRECT* PDRAWPATRECT; +} + +// --------- +// Callbacks + +alias BOOL function (HDC, int) ABORTPROC; +alias int function (HDC, HANDLETABLE*, METARECORD*, int, LPARAM) MFENUMPROC; +alias int function (HDC, HANDLETABLE*, ENHMETARECORD*, int, LPARAM) ENHMFENUMPROC; +alias int function (LOGFONTA*, TEXTMETRICA*, DWORD, LPARAM) FONTENUMPROCA, OLDFONTENUMPROCA; +alias int function (LOGFONTW*, TEXTMETRICW*, DWORD, LPARAM) FONTENUMPROCW, OLDFONTENUMPROCW; +alias int function (LPSTR, LPARAM) ICMENUMPROCA; +alias int function (LPWSTR, LPARAM) ICMENUMPROCW; +alias void function (LPVOID, LPARAM) GOBJENUMPROC; +alias void function (int, int, LPARAM) LINEDDAPROC; +alias UINT function (HWND, HMODULE, LPDEVMODEA, LPSTR, LPSTR, LPDEVMODEA, LPSTR, UINT) LPFNDEVMODE; +alias DWORD function (LPSTR, LPSTR, UINT, LPSTR, LPDEVMODEA) LPFNDEVCAPS; + + +// --------- +// C Macros. +// FIXME: +//POINTS MAKEPOINTS(DWORD dwValue) #define MAKEPOINTS(l) (*((POINTS*)&(l))) + +DWORD MAKEROP4(DWORD fore, DWORD back) { + return ((back<<8) & 0xFF000000) | (fore); +} + +COLORREF CMYK(BYTE c, BYTE m, BYTE y, BYTE k) { + return cast(COLORREF)(k | (y << 8) | (m << 16) | (c << 24)); +} + +BYTE GetCValue(COLORREF cmyk) { + return cast(BYTE)(cmyk >> 24); +} + +BYTE GetMValue(COLORREF cmyk) { + return cast(BYTE)(cmyk >> 16); +} + +BYTE GetYValue(COLORREF cmyk) { + return cast(BYTE)(cmyk >> 8); +} + +BYTE GetKValue(COLORREF cmyk) { + return cast(BYTE)cmyk; +} + +COLORREF RGB(BYTE r, BYTE g, BYTE b) { + return cast(COLORREF)(r | (g << 8) | (b << 16)); +} + +BYTE GetRValue(COLORREF c) { + return cast(BYTE)c; +} + +BYTE GetGValue(COLORREF c) { + return cast(BYTE)(c >> 8); +} + +BYTE GetBValue(COLORREF c) { + return cast(BYTE)(c >> 16); +} + +COLORREF PALETTEINDEX(WORD i) { + return 0x01000000 | cast(COLORREF) i; +} + +COLORREF PALETTERGB(BYTE r, BYTE g, BYTE b) { + return 0x02000000|RGB(r, g, b); +} + +extern(Windows) { + int AbortDoc(HDC); + BOOL AbortPath(HDC); + int AddFontResourceA(LPCSTR); + int AddFontResourceW(LPCWSTR); + BOOL AngleArc(HDC, int, int, DWORD, FLOAT, FLOAT); + BOOL AnimatePalette(HPALETTE, UINT, UINT, PALETTEENTRY*); + BOOL Arc(HDC, int, int, int, int, int, int, int, int); + BOOL ArcTo(HDC, int, int, int, int, int, int, int, int); + BOOL BeginPath(HDC); + BOOL BitBlt(HDC, int, int, int, int, HDC, int, int, DWORD); + BOOL CancelDC(HDC); + BOOL CheckColorsInGamut(HDC, PVOID, PVOID, DWORD); + BOOL Chord(HDC, int, int, int, int, int, int, int, int); + int ChoosePixelFormat(HDC, PIXELFORMATDESCRIPTOR*); + HENHMETAFILE CloseEnhMetaFile(HDC); + BOOL CloseFigure(HDC); + HMETAFILE CloseMetaFile(HDC); + BOOL ColorMatchToTarget(HDC, HDC, DWORD); + BOOL ColorCorrectPalette(HDC, HPALETTE, DWORD, DWORD); + int CombineRgn(HRGN, HRGN, HRGN, int); + BOOL CombineTransform(LPXFORM, XFORM*, XFORM*); + HENHMETAFILE CopyEnhMetaFileA(HENHMETAFILE, LPCSTR); + HENHMETAFILE CopyEnhMetaFileW(HENHMETAFILE, LPCWSTR); + HMETAFILE CopyMetaFileA(HMETAFILE, LPCSTR); + HMETAFILE CopyMetaFileW(HMETAFILE, LPCWSTR); + HBITMAP CreateBitmap(int, int, UINT, UINT, PCVOID); + HBITMAP CreateBitmapIndirect(BITMAP*); + HBRUSH CreateBrushIndirect(LOGBRUSH*); + HCOLORSPACE CreateColorSpaceA(LPLOGCOLORSPACEA); + HCOLORSPACE CreateColorSpaceW(LPLOGCOLORSPACEW); + HBITMAP CreateCompatibleBitmap(HDC, int, int); + HDC CreateCompatibleDC(HDC); + HDC CreateDCA(LPCSTR, LPCSTR, LPCSTR, DEVMODEA*); + HDC CreateDCW(LPCWSTR, LPCWSTR, LPCWSTR, DEVMODEW*); + HBITMAP CreateDIBitmap(HDC, BITMAPINFOHEADER*, DWORD, PCVOID, BITMAPINFO*, UINT); + HBRUSH CreateDIBPatternBrush(HGLOBAL, UINT); + HBRUSH CreateDIBPatternBrushPt(PCVOID, UINT); + HBITMAP CreateDIBSection(HDC, BITMAPINFO*, UINT, void**, HANDLE, DWORD); + HBITMAP CreateDiscardableBitmap(HDC, int, int); + HRGN CreateEllipticRgn(int, int, int, int); + HRGN CreateEllipticRgnIndirect(LPCRECT); + HDC CreateEnhMetaFileA(HDC, LPCSTR, LPCRECT, LPCSTR); + HDC CreateEnhMetaFileW(HDC, LPCWSTR, LPCRECT, LPCWSTR); + HFONT CreateFontA(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCSTR); + HFONT CreateFontW(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCWSTR); + HFONT CreateFontIndirectA(LOGFONTA*); + HFONT CreateFontIndirectW(LOGFONTW*); + HPALETTE CreateHalftonePalette(HDC); + HBRUSH CreateHatchBrush(int, COLORREF); + HDC CreateICA(LPCSTR, LPCSTR, LPCSTR, DEVMODEA*); + HDC CreateICW(LPCWSTR, LPCWSTR, LPCWSTR, DEVMODEW*); + HDC CreateMetaFileA(LPCSTR); + HDC CreateMetaFileW(LPCWSTR); + HPALETTE CreatePalette(LOGPALETTE*); + HBRUSH CreatePatternBrush(HBITMAP); + HPEN CreatePen(int, int, COLORREF); + HPEN CreatePenIndirect(LOGPEN*); + HRGN CreatePolygonRgn(POINT*, int, int); + HRGN CreatePolyPolygonRgn(POINT*, INT*, int, int); + HRGN CreateRectRgn(int, int, int, int); + HRGN CreateRectRgnIndirect(LPCRECT); + HRGN CreateRoundRectRgn(int, int, int, int, int, int); + BOOL CreateScalableFontResourceA(DWORD, LPCSTR, LPCSTR, LPCSTR); + BOOL CreateScalableFontResourceW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR); + HBRUSH CreateSolidBrush(COLORREF); + BOOL DeleteColorSpace(HCOLORSPACE); + BOOL DeleteDC(HDC); + BOOL DeleteEnhMetaFile(HENHMETAFILE); + BOOL DeleteMetaFile(HMETAFILE); + BOOL DeleteObject(HGDIOBJ); + int DescribePixelFormat(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR); + DWORD DeviceCapabilitiesA(LPCSTR, LPCSTR, WORD, LPSTR, DEVMODEA*); + DWORD DeviceCapabilitiesW(LPCWSTR, LPCWSTR, WORD, LPWSTR, DEVMODEW*); + BOOL DPtoLP(HDC, LPPOINT, int); + int DrawEscape(HDC, int, int, LPCSTR); + BOOL Ellipse(HDC, int, int, int, int); + int EndDoc(HDC); + int EndPage(HDC); + BOOL EndPath(HDC); + BOOL EnumEnhMetaFile(HDC, HENHMETAFILE, ENHMFENUMPROC, PVOID, LPCRECT); + int EnumFontFamiliesA(HDC, LPCSTR, FONTENUMPROCA, LPARAM); + int EnumFontFamiliesW(HDC, LPCWSTR, FONTENUMPROCW, LPARAM); + int EnumFontFamiliesExA(HDC, PLOGFONTA, FONTENUMPROCA, LPARAM, DWORD); + int EnumFontFamiliesExW(HDC, PLOGFONTW, FONTENUMPROCW, LPARAM, DWORD); + int EnumFontsA(HDC, LPCSTR, FONTENUMPROCA, LPARAM); + int EnumFontsW(HDC, LPCWSTR, FONTENUMPROCW, LPARAM); + int EnumICMProfilesA(HDC, ICMENUMPROCA, LPARAM); + int EnumICMProfilesW(HDC, ICMENUMPROCW, LPARAM); + BOOL EnumMetaFile(HDC, HMETAFILE, MFENUMPROC, LPARAM); + int EnumObjects(HDC, int, GOBJENUMPROC, LPARAM); + BOOL EqualRgn(HRGN, HRGN); + int Escape(HDC, int, int, LPCSTR, PVOID); + int ExcludeClipRect(HDC, int, int, int, int); + int ExcludeUpdateRgn(HDC, HWND); + HPEN ExtCreatePen(DWORD, DWORD, LOGBRUSH*, DWORD, DWORD*); + HRGN ExtCreateRegion(XFORM*, DWORD, RGNDATA*); + int ExtEscape(HDC, int, int, LPCSTR, int, LPSTR); + BOOL ExtFloodFill(HDC, int, int, COLORREF, UINT); + int ExtSelectClipRgn(HDC, HRGN, int); + BOOL ExtTextOutA(HDC, int, int, UINT, LPCRECT, LPCSTR, UINT, INT*); + BOOL ExtTextOutW(HDC, int, int, UINT, LPCRECT, LPCWSTR, UINT, INT*); + BOOL FillPath(HDC); + int FillRect(HDC, LPCRECT, HBRUSH); + int FillRgn(HDC, HRGN, HBRUSH); + BOOL FixBrushOrgEx(HDC, int, int, LPPOINT); + BOOL FlattenPath(HDC); + BOOL FloodFill(HDC, int, int, COLORREF); + BOOL FrameRgn(HDC, HRGN, HBRUSH, int, int); + BOOL GdiComment(HDC, UINT, BYTE*); + BOOL GdiFlush(); + DWORD GdiGetBatchLimit(); + DWORD GdiSetBatchLimit(DWORD); + int GetArcDirection(HDC); + BOOL GetAspectRatioFilterEx(HDC, LPSIZE); + LONG GetBitmapBits(HBITMAP, LONG, PVOID); + BOOL GetBitmapDimensionEx(HBITMAP, LPSIZE); + COLORREF GetBkColor(HDC); + int GetBkMode(HDC); + UINT GetBoundsRect(HDC, LPRECT, UINT); + BOOL GetBrushOrgEx(HDC, LPPOINT); + BOOL GetCharABCWidthsA(HDC, UINT, UINT, LPABC); + BOOL GetCharABCWidthsW(HDC, UINT, UINT, LPABC); + BOOL GetCharABCWidthsFloatA(HDC, UINT, UINT, LPABCFLOAT); + BOOL GetCharABCWidthsFloatW(HDC, UINT, UINT, LPABCFLOAT); + DWORD GetCharacterPlacementA(HDC, LPCSTR, int, int, LPGCP_RESULTSA, DWORD); + DWORD GetCharacterPlacementW(HDC, LPCWSTR, int, int, LPGCP_RESULTSW, DWORD); + BOOL GetCharWidth32A(HDC, UINT, UINT, LPINT); + BOOL GetCharWidth32W(HDC, UINT, UINT, LPINT); + BOOL GetCharWidthA(HDC, UINT, UINT, LPINT); + BOOL GetCharWidthW(HDC, UINT, UINT, LPINT); + BOOL GetCharWidthFloatA(HDC, UINT, UINT, PFLOAT); + BOOL GetCharWidthFloatW(HDC, UINT, UINT, PFLOAT); + int GetClipBox(HDC, LPRECT); + int GetClipRgn(HDC, HRGN); + BOOL GetColorAdjustment(HDC, LPCOLORADJUSTMENT); + HANDLE GetColorSpace(HDC); + HGDIOBJ GetCurrentObject(HDC, UINT); + BOOL GetCurrentPositionEx(HDC, LPPOINT); + HCURSOR GetCursor(); + BOOL GetDCOrgEx(HDC, LPPOINT); + int GetDeviceCaps(HDC, int); + BOOL GetDeviceGammaRamp(HDC, PVOID); + UINT GetDIBColorTable(HDC, UINT, UINT, RGBQUAD*); + int GetDIBits(HDC, HBITMAP, UINT, UINT, PVOID, LPBITMAPINFO, UINT); + HENHMETAFILE GetEnhMetaFileA(LPCSTR); + HENHMETAFILE GetEnhMetaFileW(LPCWSTR); + UINT GetEnhMetaFileBits(HENHMETAFILE, UINT, LPBYTE); + UINT GetEnhMetaFileDescriptionA(HENHMETAFILE, UINT, LPSTR); + UINT GetEnhMetaFileDescriptionW(HENHMETAFILE, UINT, LPWSTR); + UINT GetEnhMetaFileHeader(HENHMETAFILE, UINT, LPENHMETAHEADER); + UINT GetEnhMetaFilePaletteEntries(HENHMETAFILE, UINT, LPPALETTEENTRY); + UINT GetEnhMetaFilePixelFormat(HENHMETAFILE, DWORD, PIXELFORMATDESCRIPTOR*); + DWORD GetFontData(HDC, DWORD, DWORD, PVOID, DWORD); + DWORD GetFontLanguageInfo(HDC); + DWORD GetGlyphOutlineA(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, PVOID, MAT2*); + DWORD GetGlyphOutlineW(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, PVOID, MAT2*); + int GetGraphicsMode(HDC); + BOOL GetICMProfileA(HDC, DWORD, LPSTR); + BOOL GetICMProfileW(HDC, DWORD, LPWSTR); + DWORD GetKerningPairsA(HDC, DWORD, LPKERNINGPAIR); + DWORD GetKerningPairsW(HDC, DWORD, LPKERNINGPAIR); + BOOL GetLogColorSpaceA(HCOLORSPACE, LPLOGCOLORSPACEA, DWORD); + BOOL GetLogColorSpaceW(HCOLORSPACE, LPLOGCOLORSPACEW, DWORD); + int GetMapMode(HDC); + HMETAFILE GetMetaFileA(LPCSTR); + HMETAFILE GetMetaFileW(LPCWSTR); + UINT GetMetaFileBitsEx(HMETAFILE, UINT, PVOID); + int GetMetaRgn(HDC, HRGN); + BOOL GetMiterLimit(HDC, PFLOAT); + COLORREF GetNearestColor(HDC, COLORREF); + UINT GetNearestPaletteIndex(HPALETTE, COLORREF); + int GetObjectA(HGDIOBJ, int, PVOID); + int GetObjectW(HGDIOBJ, int, PVOID); + DWORD GetObjectType(HGDIOBJ); + UINT GetOutlineTextMetricsA(HDC, UINT, LPOUTLINETEXTMETRICA); + UINT GetOutlineTextMetricsW(HDC, UINT, LPOUTLINETEXTMETRICW); + UINT GetPaletteEntries(HPALETTE, UINT, UINT, LPPALETTEENTRY); + int GetPath(HDC, LPPOINT, PBYTE, int); + COLORREF GetPixel(HDC, int, int); + int GetPixelFormat(HDC); + int GetPolyFillMode(HDC); + BOOL GetRasterizerCaps(LPRASTERIZER_STATUS, UINT); + int GetRandomRgn (HDC, HRGN, INT); + DWORD GetRegionData(HRGN, DWORD, LPRGNDATA); + int GetRgnBox(HRGN, LPRECT); + int GetROP2(HDC); + HGDIOBJ GetStockObject(int); + int GetStretchBltMode(HDC); + UINT GetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY); + UINT GetSystemPaletteUse(HDC); + UINT GetTextAlign(HDC); + int GetTextCharacterExtra(HDC); + int GetTextCharset(HDC); + int GetTextCharsetInfo(HDC, LPFONTSIGNATURE, DWORD); + COLORREF GetTextColor(HDC); + BOOL GetTextExtentExPointA(HDC, LPCSTR, int, int, LPINT, LPINT, LPSIZE); + BOOL GetTextExtentExPointW(HDC, LPCWSTR, int, int, LPINT, LPINT, LPSIZE); + BOOL GetTextExtentPointA(HDC, LPCSTR, int, LPSIZE); + BOOL GetTextExtentPointW(HDC, LPCWSTR, int, LPSIZE); + BOOL GetTextExtentPoint32A(HDC, LPCSTR, int, LPSIZE); + BOOL GetTextExtentPoint32W(HDC, LPCWSTR, int, LPSIZE); + int GetTextFaceA(HDC, int, LPSTR); + int GetTextFaceW(HDC, int, LPWSTR); + BOOL GetTextMetricsA(HDC, LPTEXTMETRICA); + BOOL GetTextMetricsW(HDC, LPTEXTMETRICW); + BOOL GetViewportExtEx(HDC, LPSIZE); + BOOL GetViewportOrgEx(HDC, LPPOINT); + BOOL GetWindowExtEx(HDC, LPSIZE); + BOOL GetWindowOrgEx(HDC, LPPOINT); + UINT GetWinMetaFileBits(HENHMETAFILE, UINT, LPBYTE, INT, HDC); + BOOL GetWorldTransform(HDC, LPXFORM); + int IntersectClipRect(HDC, int, int, int, int); + BOOL InvertRgn(HDC, HRGN); + BOOL LineDDA(int, int, int, int, LINEDDAPROC, LPARAM); + BOOL LineTo(HDC, int, int); + BOOL LPtoDP(HDC, LPPOINT, int); + BOOL MaskBlt(HDC, int, int, int, int, HDC, int, int, HBITMAP, int, int, DWORD); + BOOL ModifyWorldTransform(HDC, XFORM*, DWORD); + BOOL MoveToEx(HDC, int, int, LPPOINT); + int OffsetClipRgn(HDC, int, int); + int OffsetRgn(HRGN, int, int); + BOOL OffsetViewportOrgEx(HDC, int, int, LPPOINT); + BOOL OffsetWindowOrgEx(HDC, int, int, LPPOINT); + BOOL PaintRgn(HDC, HRGN); + BOOL PatBlt(HDC, int, int, int, int, DWORD); + HRGN PathToRegion(HDC); + BOOL Pie(HDC, int, int, int, int, int, int, int, int); + BOOL PlayEnhMetaFile(HDC, HENHMETAFILE, LPCRECT); + BOOL PlayEnhMetaFileRecord(HDC, LPHANDLETABLE, ENHMETARECORD*, UINT); + BOOL PlayMetaFile(HDC, HMETAFILE); + BOOL PlayMetaFileRecord(HDC, LPHANDLETABLE, LPMETARECORD, UINT); + BOOL PlgBlt(HDC, POINT*, HDC, int, int, int, int, HBITMAP, int, int); + BOOL PolyBezier(HDC, POINT*, DWORD); + BOOL PolyBezierTo(HDC, POINT*, DWORD); + BOOL PolyDraw(HDC, POINT*, BYTE*, int); + BOOL Polygon(HDC, POINT*, int); + BOOL Polyline(HDC, POINT*, int); + BOOL PolylineTo(HDC, POINT*, DWORD); + BOOL PolyPolygon(HDC, POINT*, INT*, int); + BOOL PolyPolyline(HDC, POINT*, DWORD*, DWORD); + BOOL PolyTextOutA(HDC, POLYTEXTA*, int); + BOOL PolyTextOutW(HDC, POLYTEXTW*, int); + BOOL PtInRegion(HRGN, int, int); + BOOL PtVisible(HDC, int, int); + UINT RealizePalette(HDC); + BOOL Rectangle(HDC, int, int, int, int); + BOOL RectInRegion(HRGN, LPCRECT); + BOOL RectVisible(HDC, LPCRECT); + BOOL RemoveFontResourceA(LPCSTR); + BOOL RemoveFontResourceW(LPCWSTR); + + HDC ResetDCA(HDC, DEVMODEA*); + HDC ResetDCW(HDC, DEVMODEW*); + BOOL ResizePalette(HPALETTE, UINT); + BOOL RestoreDC(HDC, int); + BOOL RoundRect(HDC, int, int, int, int, int, int); + int SaveDC(HDC); + BOOL ScaleViewportExtEx(HDC, int, int, int, int, LPSIZE); + BOOL ScaleWindowExtEx(HDC, int, int, int, int, LPSIZE); + BOOL SelectClipPath(HDC, int); + int SelectClipRgn(HDC, HRGN); + HGDIOBJ SelectObject(HDC, HGDIOBJ); + HPALETTE SelectPalette(HDC, HPALETTE, BOOL); + int SetAbortProc(HDC, ABORTPROC); + int SetArcDirection(HDC, int); + LONG SetBitmapBits(HBITMAP, DWORD, PCVOID); + BOOL SetBitmapDimensionEx(HBITMAP, int, int, LPSIZE); + COLORREF SetBkColor(HDC, COLORREF); + int SetBkMode(HDC, int); + UINT SetBoundsRect(HDC, LPCRECT, UINT); + BOOL SetBrushOrgEx(HDC, int, int, LPPOINT); + BOOL SetColorAdjustment(HDC, COLORADJUSTMENT*); + BOOL SetColorSpace(HDC, HCOLORSPACE); + + BOOL SetDeviceGammaRamp(HDC, PVOID); + UINT SetDIBColorTable(HDC, UINT, UINT, RGBQUAD*); + int SetDIBits(HDC, HBITMAP, UINT, UINT, PCVOID, BITMAPINFO*, UINT); + int SetDIBitsToDevice(HDC, int, int, DWORD, DWORD, int, int, UINT, UINT, PCVOID, BITMAPINFO*, UINT); + HENHMETAFILE SetEnhMetaFileBits(UINT, BYTE*); + int SetGraphicsMode(HDC, int); + int SetICMMode(HDC, int); + BOOL SetICMProfileA(HDC, LPSTR); + BOOL SetICMProfileW(HDC, LPWSTR); + int SetMapMode(HDC, int); + + static if (WINVER >= 0x0500) { + DWORD SetLayout(HDC hdc, DWORD l); + DWORD GetLayout(HDC hdc); + } + + DWORD SetMapperFlags(HDC, DWORD); + HMETAFILE SetMetaFileBitsEx(UINT, BYTE*); + int SetMetaRgn(HDC); + BOOL SetMiterLimit(HDC, FLOAT, PFLOAT); + UINT SetPaletteEntries(HPALETTE, UINT, UINT, PALETTEENTRY*); + COLORREF SetPixel(HDC, int, int, COLORREF); + BOOL SetPixelFormat(HDC, int, PIXELFORMATDESCRIPTOR*); + BOOL SetPixelV(HDC, int, int, COLORREF); + int SetPolyFillMode(HDC, int); + BOOL SetRectRgn(HRGN, int, int, int, int); + int SetROP2(HDC, int); + int SetStretchBltMode(HDC, int); + UINT SetSystemPaletteUse(HDC, UINT); + UINT SetTextAlign(HDC, UINT); + int SetTextCharacterExtra(HDC, int); + COLORREF SetTextColor(HDC, COLORREF); + BOOL SetTextJustification(HDC, int, int); + BOOL SetViewportExtEx(HDC, int, int, LPSIZE); + BOOL SetViewportOrgEx(HDC, int, int, LPPOINT); + BOOL SetWindowExtEx(HDC, int, int, LPSIZE); + BOOL SetWindowOrgEx(HDC, int, int, LPPOINT); + HENHMETAFILE SetWinMetaFileBits(UINT, BYTE*, HDC, METAFILEPICT*); + BOOL SetWorldTransform(HDC, XFORM*); + int StartDocA(HDC, DOCINFOA*); + int StartDocW(HDC, DOCINFOW*); + int StartPage(HDC); + BOOL StretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD); + int StretchDIBits(HDC, int, int, int, int, int, int, int, int, VOID* , BITMAPINFO* , UINT, DWORD); + BOOL StrokeAndFillPath(HDC); + BOOL StrokePath(HDC); + BOOL SwapBuffers(HDC); + BOOL TextOutA(HDC, int, int, LPCSTR, int); + BOOL TextOutW(HDC, int, int, LPCWSTR, int); + BOOL TranslateCharsetInfo(PDWORD, LPCHARSETINFO, DWORD); + BOOL UnrealizeObject(HGDIOBJ); + BOOL UpdateColors(HDC); + BOOL UpdateICMRegKeyA(DWORD, DWORD, LPSTR, UINT); + BOOL UpdateICMRegKeyW(DWORD, DWORD, LPWSTR, UINT); + BOOL WidenPath(HDC); + BOOL wglCopyContext(HGLRC, HGLRC, UINT); + HGLRC wglCreateContext(HDC); + HGLRC wglCreateLayerContext(HDC, int); + BOOL wglDeleteContext(HGLRC); + BOOL wglDescribeLayerPlane(HDC, int, int, UINT, LPLAYERPLANEDESCRIPTOR); + HGLRC wglGetCurrentContext(); + HDC wglGetCurrentDC(); + int wglGetLayerPaletteEntries(HDC, int, int, int, COLORREF*); + PROC wglGetProcAddress(LPCSTR); + BOOL wglMakeCurrent(HDC, HGLRC); + BOOL wglRealizeLayerPalette(HDC, int, BOOL); + int wglSetLayerPaletteEntries(HDC, int, int, int, COLORREF*); + BOOL wglShareLists(HGLRC, HGLRC); + BOOL wglSwapLayerBuffers(HDC, UINT); + BOOL wglUseFontBitmapsA(HDC, DWORD, DWORD, DWORD); + BOOL wglUseFontBitmapsW(HDC, DWORD, DWORD, DWORD); + BOOL wglUseFontOutlinesA(HDC, DWORD, DWORD, DWORD, FLOAT, FLOAT, int, LPGLYPHMETRICSFLOAT); + BOOL wglUseFontOutlinesW(HDC, DWORD, DWORD, DWORD, FLOAT, FLOAT, int, LPGLYPHMETRICSFLOAT); + + static if (WINVER >= 0x0500) { + alias WGLSWAP* PWGLSWAP; + struct WGLSWAP { + HDC hdc; + UINT uiFlags; + } + const WGL_SWAPMULTIPLE_MAX = 16; + DWORD wglSwapMultipleBuffers(UINT, WGLSWAP*); +} + +static if (WINVER >= 0x0500) { + BOOL AlphaBlend(HDC, int, int, int, int, HDC, int, int, int, int, BLENDFUNCTION); + BOOL GradientFill(HDC, PTRIVERTEX, ULONG, PVOID, ULONG, ULONG); + BOOL TransparentBlt(HDC, int, int, int, int, HDC, int, int, int, int, UINT); + } + + static if (_WIN32_WINNT >= 0x0500) { + COLORREF SetDCBrushColor(HDC, COLORREF); + COLORREF SetDCPenColor(HDC, COLORREF); + HANDLE AddFontMemResourceEx(PVOID, DWORD, PVOID, DWORD*); + int AddFontResourceExA(LPCSTR, DWORD, PVOID); + int AddFontResourceExW(LPCWSTR, DWORD, PVOID); + BOOL RemoveFontMemResourceEx(HANDLE); + BOOL RemoveFontResourceExA(LPCSTR, DWORD, PVOID); + BOOL RemoveFontResourceExW(LPCWSTR, DWORD, PVOID); + DWORD GetFontUnicodeRanges(HDC, LPGLYPHSET); + DWORD GetGlyphIndicesA(HDC, LPCSTR, int, LPWORD, DWORD); + DWORD GetGlyphIndicesW(HDC, LPCWSTR, int, LPWORD, DWORD); + BOOL GetTextExtentPointI(HDC, LPWORD, int, LPSIZE); + BOOL GetTextExtentExPointI(HDC, LPWORD, int, int, LPINT, LPINT, LPSIZE); + BOOL GetCharWidthI(HDC, UINT, UINT, LPWORD, LPINT); + BOOL GetCharABCWidthsI(HDC, UINT, UINT, LPWORD, LPABC); + } +} // extern (Windows) + +version(Unicode) { + alias WCHAR BCHAR; + alias DOCINFOW DOCINFO; + alias LOGFONTW LOGFONT; + + alias TEXTMETRICW TEXTMETRIC; + alias NPTEXTMETRICW NPTEXTMETRIC; + alias ICMENUMPROCW ICMENUMPROC; + alias FONTENUMPROCW FONTENUMPROC; + alias DEVMODEW DEVMODE; + + alias EXTLOGFONTW EXTLOGFONT; + alias GCP_RESULTSW GCP_RESULTS; + alias OUTLINETEXTMETRICW OUTLINETEXTMETRIC; + alias POLYTEXTW POLYTEXT; + alias LOGCOLORSPACEW LOGCOLORSPACE; + alias NEWTEXTMETRICW NEWTEXTMETRIC; + alias NEWTEXTMETRICEXW NEWTEXTMETRICEX; + alias ENUMLOGFONTW ENUMLOGFONT; + alias ENUMLOGFONTEXW ENUMLOGFONTEX; + alias DISPLAY_DEVICEW DISPLAY_DEVICE; + alias AddFontResourceW AddFontResource; + + alias CopyEnhMetaFileW CopyEnhMetaFile; + alias CopyMetaFileW CopyMetaFile; + alias CreateColorSpaceW CreateColorSpace; + alias CreateDCW CreateDC; + alias CreateEnhMetaFileW CreateEnhMetaFile; + alias CreateFontW CreateFont; + alias CreateFontIndirectW CreateFontIndirect; + alias CreateICW CreateIC; + alias CreateMetaFileW CreateMetaFile; + alias CreateScalableFontResourceW CreateScalableFontResource; + alias DeviceCapabilitiesW DeviceCapabilities; + alias EnumFontFamiliesW EnumFontFamilies; + alias EnumFontFamiliesExW EnumFontFamiliesEx; + alias EnumFontsW EnumFonts; + alias EnumICMProfilesW EnumICMProfiles; + alias ExtTextOutW ExtTextOut; + alias GetCharABCWidthsFloatW GetCharABCWidthsFloat; + alias GetCharABCWidthsW GetCharABCWidths; + alias GetCharacterPlacementW GetCharacterPlacement; + alias GetCharWidth32W GetCharWidth32; + alias GetCharWidthFloatW GetCharWidthFloat; + alias GetCharWidthW GetCharWidth; + alias GetEnhMetaFileW GetEnhMetaFile; + alias GetEnhMetaFileDescriptionW GetEnhMetaFileDescription; + alias GetGlyphOutlineW GetGlyphOutline; + alias GetICMProfileW GetICMProfile; + alias GetKerningPairsW GetKerningPairs; + alias GetLogColorSpaceW GetLogColorSpace; + alias GetMetaFileW GetMetaFile; + alias GetObjectW GetObject; + alias GetOutlineTextMetricsW GetOutlineTextMetrics; + alias GetTextExtentPointW GetTextExtentPoint; + alias GetTextExtentExPointW GetTextExtentExPoint; + alias GetTextExtentPoint32W GetTextExtentPoint32; + alias GetTextFaceW GetTextFace; + alias GetTextMetricsW GetTextMetrics; + alias PolyTextOutW PolyTextOut; + alias RemoveFontResourceW RemoveFontResource; + + alias ResetDCW ResetDC; + alias SetICMProfileW SetICMProfile; + alias StartDocW StartDoc; + alias TextOutW TextOut; + alias UpdateICMRegKeyW UpdateICMRegKey; + alias wglUseFontBitmapsW wglUseFontBitmaps; + alias wglUseFontOutlinesW wglUseFontOutlines; + static if (_WIN32_WINNT >= 0x0500) { + alias ENUMLOGFONTEXDVW ENUMLOGFONTEXDV; + alias PENUMLOGFONTEXDVW PENUMLOGFONTEXDV; + alias LPENUMLOGFONTEXDVW LPENUMLOGFONTEXDV; + alias AddFontResourceExW AddFontResourceEx; + alias RemoveFontResourceExW RemoveFontResourceEx; + alias GetGlyphIndicesW GetGlyphIndices; + } +} else { /* non-unicode build */ + alias BYTE BCHAR; + alias DOCINFOA DOCINFO; + alias LOGFONTA LOGFONT; + alias TEXTMETRICA TEXTMETRIC; + alias NPTEXTMETRICA NPTEXTMETRIC; + alias ICMENUMPROCA ICMENUMPROC; + alias FONTENUMPROCA FONTENUMPROC; + alias DEVMODEA DEVMODE; + alias EXTLOGFONTA EXTLOGFONT; + alias GCP_RESULTSA GCP_RESULTS; + alias OUTLINETEXTMETRICA OUTLINETEXTMETRIC; + alias POLYTEXTA POLYTEXT; + alias LOGCOLORSPACEA LOGCOLORSPACE; + alias NEWTEXTMETRICA NEWTEXTMETRIC; + alias NEWTEXTMETRICEXA NEWTEXTMETRICEX; + alias ENUMLOGFONTA ENUMLOGFONT; + alias ENUMLOGFONTEXA ENUMLOGFONTEX; + alias DISPLAY_DEVICEA DISPLAY_DEVICE; + + alias AddFontResourceA AddFontResource; + alias CopyEnhMetaFileA CopyEnhMetaFile; + alias CopyMetaFileA CopyMetaFile; + alias CreateColorSpaceA CreateColorSpace; + alias CreateDCA CreateDC; + alias CreateEnhMetaFileA CreateEnhMetaFile; + alias CreateFontA CreateFont; + alias CreateFontIndirectA CreateFontIndirect; + alias CreateICA CreateIC; + alias CreateMetaFileA CreateMetaFile; + alias CreateScalableFontResourceA CreateScalableFontResource; + alias DeviceCapabilitiesA DeviceCapabilities; + alias EnumFontFamiliesA EnumFontFamilies; + alias EnumFontFamiliesExA EnumFontFamiliesEx; + alias EnumFontsA EnumFonts; + alias EnumICMProfilesA EnumICMProfiles; + alias ExtTextOutA ExtTextOut; + alias GetCharWidthFloatA GetCharWidthFloat; + alias GetCharWidthA GetCharWidth; + alias GetCharacterPlacementA GetCharacterPlacement; + alias GetCharABCWidthsA GetCharABCWidths; + alias GetCharABCWidthsFloatA GetCharABCWidthsFloat; + alias GetCharWidth32A GetCharWidth32; + alias GetEnhMetaFileA GetEnhMetaFile; + alias GetEnhMetaFileDescriptionA GetEnhMetaFileDescription; + alias GetGlyphOutlineA GetGlyphOutline; + alias GetICMProfileA GetICMProfile; + alias GetKerningPairsA GetKerningPairs; + alias GetLogColorSpaceA GetLogColorSpace; + alias GetMetaFileA GetMetaFile; + alias GetObjectA GetObject; + alias GetOutlineTextMetricsA GetOutlineTextMetrics; + alias GetTextExtentPointA GetTextExtentPoint; + alias GetTextExtentExPointA GetTextExtentExPoint; + alias GetTextExtentPoint32A GetTextExtentPoint32; + alias GetTextFaceA GetTextFace; + alias GetTextMetricsA GetTextMetrics; + alias PolyTextOutA PolyTextOut; + alias RemoveFontResourceA RemoveFontResource; + alias ResetDCA ResetDC; + alias SetICMProfileA SetICMProfile; + alias StartDocA StartDoc; + alias TextOutA TextOut; + alias UpdateICMRegKeyA UpdateICMRegKey; + alias wglUseFontBitmapsA wglUseFontBitmaps; + alias wglUseFontOutlinesA wglUseFontOutlines; + static if (_WIN32_WINNT >= 0x0500) { + alias ENUMLOGFONTEXDVA ENUMLOGFONTEXDV; + alias PENUMLOGFONTEXDVA PENUMLOGFONTEXDV; + alias LPENUMLOGFONTEXDVA LPENUMLOGFONTEXDV; + alias AddFontResourceExA AddFontResourceEx; + alias RemoveFontResourceExA RemoveFontResourceEx; + alias GetGlyphIndicesA GetGlyphIndices; + } +} + +// Common to both ASCII & UNICODE +alias DOCINFO* LPDOCINFO; +alias LOGFONT* PLOGFONT, NPLOGFONT, LPLOGFONT; +alias TEXTMETRIC* PTEXTMETRIC, LPTEXTMETRIC; +alias DEVMODE* PDEVMODE, NPDEVMODE, LPDEVMODE; +alias EXTLOGFONT* PEXTLOGFONT, NPEXTLOGFONT, LPEXTLOGFONT; +alias GCP_RESULTS* LPGCP_RESULTS; +alias OUTLINETEXTMETRIC* POUTLINETEXTMETRIC, NPOUTLINETEXTMETRIC, LPOUTLINETEXTMETRIC; +alias POLYTEXT* PPOLYTEXT, NPPOLYTEXT, LPPOLYTEXT; +alias LOGCOLORSPACE* LPLOGCOLORSPACE; +alias NEWTEXTMETRIC* PNEWTEXTMETRIC, NPNEWTEXTMETRIC, LPNEWTEXTMETRIC; +alias ENUMLOGFONT* LPENUMLOGFONT; +alias ENUMLOGFONTEX* LPENUMLOGFONTEX; +alias DISPLAY_DEVICE* PDISPLAY_DEVICE, LPDISPLAY_DEVICE; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/wininet.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/wininet.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1241 @@ +/***********************************************************************\ +* wininet.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.wininet; + +// FIXME: check types and grouping of constants + +import win32.windows; + +enum { + INTERNET_INVALID_PORT_NUMBER = 0, + INTERNET_DEFAULT_FTP_PORT = 21, + INTERNET_DEFAULT_GOPHER_PORT = 70, + INTERNET_DEFAULT_HTTP_PORT = 80, + INTERNET_DEFAULT_HTTPS_PORT = 443, + INTERNET_DEFAULT_SOCKS_PORT = 1080 +} + +const size_t + MAX_CACHE_ENTRY_INFO_SIZE = 4096, + INTERNET_MAX_HOST_NAME_LENGTH = 256, + INTERNET_MAX_USER_NAME_LENGTH = 128, + INTERNET_MAX_PASSWORD_LENGTH = 128, + INTERNET_MAX_PORT_NUMBER_LENGTH = 5, + INTERNET_MAX_PORT_NUMBER_VALUE = 65535, + INTERNET_MAX_PATH_LENGTH = 2048, + INTERNET_MAX_SCHEME_LENGTH = 32, + INTERNET_MAX_URL_LENGTH = INTERNET_MAX_SCHEME_LENGTH + + "://".length + + INTERNET_MAX_PATH_LENGTH; + +enum : DWORD { + INTERNET_KEEP_ALIVE_UNKNOWN = DWORD.max, + INTERNET_KEEP_ALIVE_DISABLED = 0, + INTERNET_KEEP_ALIVE_ENABLED +} + +enum { + INTERNET_REQFLAG_FROM_CACHE = 1, + INTERNET_REQFLAG_ASYNC = 2 +} + +const DWORD + INTERNET_FLAG_RELOAD = 0x80000000, + INTERNET_FLAG_RAW_DATA = 0x40000000, + INTERNET_FLAG_EXISTING_CONNECT = 0x20000000, + INTERNET_FLAG_ASYNC = 0x10000000, + INTERNET_FLAG_PASSIVE = 0x08000000, + INTERNET_FLAG_NO_CACHE_WRITE = 0x04000000, + INTERNET_FLAG_DONT_CACHE = INTERNET_FLAG_NO_CACHE_WRITE, + INTERNET_FLAG_MAKE_PERSISTENT = 0x02000000, + INTERNET_FLAG_OFFLINE = 0x01000000, + INTERNET_FLAG_SECURE = 0x00800000, + INTERNET_FLAG_KEEP_CONNECTION = 0x00400000, + INTERNET_FLAG_NO_AUTO_REDIRECT = 0x00200000, + INTERNET_FLAG_READ_PREFETCH = 0x00100000, + INTERNET_FLAG_NO_COOKIES = 0x00080000, + INTERNET_FLAG_NO_AUTH = 0x00040000, + INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP = 0x00008000, + INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS = 0x00004000, + INTERNET_FLAG_IGNORE_CERT_DATE_INVALID = 0x00002000, + INTERNET_FLAG_IGNORE_CERT_CN_INVALID = 0x00001000, + INTERNET_FLAG_RESYNCHRONIZE = 0x00000800, + INTERNET_FLAG_HYPERLINK = 0x00000400, + INTERNET_FLAG_NO_UI = 0x00000200, + INTERNET_FLAG_PRAGMA_NOCACHE = 0x00000100, + INTERNET_FLAG_MUST_CACHE_REQUEST = 0x00000010, + INTERNET_FLAG_TRANSFER_ASCII = FTP_TRANSFER_TYPE_ASCII, + INTERNET_FLAG_TRANSFER_BINARY = FTP_TRANSFER_TYPE_BINARY, + + SECURITY_INTERNET_MASK = 0x0000F000, + SECURITY_SET_MASK = SECURITY_INTERNET_MASK, + + INTERNET_FLAGS_MASK = 0xFFFCFE13, + INTERNET_OPTIONS_MASK = ~INTERNET_FLAGS_MASK; + +const INTERNET_NO_CALLBACK = 0; +const INTERNET_RFC1123_FORMAT = 0; +const size_t INTERNET_RFC1123_BUFSIZE = 30; + +const DWORD + ICU_ESCAPE = 0x80000000, + ICU_USERNAME = 0x40000000, + ICU_NO_ENCODE = 0x20000000, + ICU_DECODE = 0x10000000, + ICU_NO_META = 0x08000000, + ICU_ENCODE_SPACES_ONLY = 0x04000000, + ICU_BROWSER_MODE = 0x02000000; + +enum { + INTERNET_OPEN_TYPE_PRECONFIG = 0, + INTERNET_OPEN_TYPE_DIRECT = 1, + INTERNET_OPEN_TYPE_PROXY = 3, + PRE_CONFIG_INTERNET_ACCESS = INTERNET_OPEN_TYPE_PRECONFIG, + LOCAL_INTERNET_ACCESS = INTERNET_OPEN_TYPE_DIRECT, + GATEWAY_INTERNET_ACCESS = 2, + CERN_PROXY_INTERNET_ACCESS = INTERNET_OPEN_TYPE_PROXY, +} + +const ISO_GLOBAL = 1; +const ISO_REGISTRY = 2; +const ISO_VALID_FLAGS = ISO_GLOBAL | ISO_REGISTRY; + +enum { + INTERNET_OPTION_CALLBACK = 1, + INTERNET_OPTION_CONNECT_TIMEOUT, + INTERNET_OPTION_CONNECT_RETRIES, + INTERNET_OPTION_CONNECT_BACKOFF, + INTERNET_OPTION_SEND_TIMEOUT, + INTERNET_OPTION_CONTROL_SEND_TIMEOUT = INTERNET_OPTION_SEND_TIMEOUT, + INTERNET_OPTION_RECEIVE_TIMEOUT, + INTERNET_OPTION_CONTROL_RECEIVE_TIMEOUT = INTERNET_OPTION_RECEIVE_TIMEOUT, + INTERNET_OPTION_DATA_SEND_TIMEOUT, + INTERNET_OPTION_DATA_RECEIVE_TIMEOUT, + INTERNET_OPTION_HANDLE_TYPE, + INTERNET_OPTION_CONTEXT_VALUE, + INTERNET_OPTION_LISTEN_TIMEOUT, + INTERNET_OPTION_READ_BUFFER_SIZE, + INTERNET_OPTION_WRITE_BUFFER_SIZE, // = 13 + INTERNET_OPTION_ASYNC_ID = 15, + INTERNET_OPTION_ASYNC_PRIORITY, // = 16 + INTERNET_OPTION_PARENT_HANDLE = 21, + INTERNET_OPTION_KEEP_CONNECTION, + INTERNET_OPTION_REQUEST_FLAGS, + INTERNET_OPTION_EXTENDED_ERROR, // = 24 + INTERNET_OPTION_OFFLINE_MODE = 26, + INTERNET_OPTION_CACHE_STREAM_HANDLE, + INTERNET_OPTION_USERNAME, + INTERNET_OPTION_PASSWORD, + INTERNET_OPTION_ASYNC, + INTERNET_OPTION_SECURITY_FLAGS, + INTERNET_OPTION_SECURITY_CERTIFICATE_STRUCT, + INTERNET_OPTION_DATAFILE_NAME, + INTERNET_OPTION_URL, + INTERNET_OPTION_SECURITY_CERTIFICATE, + INTERNET_OPTION_SECURITY_KEY_BITNESS, + INTERNET_OPTION_REFRESH, + INTERNET_OPTION_PROXY, + INTERNET_OPTION_SETTINGS_CHANGED, + INTERNET_OPTION_VERSION, + INTERNET_OPTION_USER_AGENT, + INTERNET_OPTION_END_BROWSER_SESSION, + INTERNET_OPTION_PROXY_USERNAME, + INTERNET_OPTION_PROXY_PASSWORD, // = 44 + INTERNET_FIRST_OPTION = INTERNET_OPTION_CALLBACK, + // why? + INTERNET_LAST_OPTION = INTERNET_OPTION_USER_AGENT +} + +const INTERNET_PRIORITY_FOREGROUND = 1000; + +enum { + INTERNET_HANDLE_TYPE_INTERNET = 1, + INTERNET_HANDLE_TYPE_CONNECT_FTP, + INTERNET_HANDLE_TYPE_CONNECT_GOPHER, + INTERNET_HANDLE_TYPE_CONNECT_HTTP, + INTERNET_HANDLE_TYPE_FTP_FIND, + INTERNET_HANDLE_TYPE_FTP_FIND_HTML, + INTERNET_HANDLE_TYPE_FTP_FILE, + INTERNET_HANDLE_TYPE_FTP_FILE_HTML, + INTERNET_HANDLE_TYPE_GOPHER_FIND, + INTERNET_HANDLE_TYPE_GOPHER_FIND_HTML, + INTERNET_HANDLE_TYPE_GOPHER_FILE, + INTERNET_HANDLE_TYPE_GOPHER_FILE_HTML, + INTERNET_HANDLE_TYPE_HTTP_REQUEST +} + +const DWORD + SECURITY_FLAG_SECURE = 0x00000001, + SECURITY_FLAG_SSL = 0x00000002, + SECURITY_FLAG_SSL3 = 0x00000004, + SECURITY_FLAG_PCT = 0x00000008, + SECURITY_FLAG_PCT4 = 0x00000010, + SECURITY_FLAG_IETFSSL4 = 0x00000020, + SECURITY_FLAG_IGNORE_REVOCATION = 0x00000080, + SECURITY_FLAG_IGNORE_UNKNOWN_CA = 0x00000100, + SECURITY_FLAG_IGNORE_WRONG_USAGE = 0x00000200, + SECURITY_FLAG_40BIT = 0x10000000, + SECURITY_FLAG_128BIT = 0x20000000, + SECURITY_FLAG_56BIT = 0x40000000, + SECURITY_FLAG_UNKNOWNBIT = 0x80000000, + SECURITY_FLAG_NORMALBITNESS = SECURITY_FLAG_40BIT, + SECURITY_FLAG_IGNORE_CERT_CN_INVALID = INTERNET_FLAG_IGNORE_CERT_CN_INVALID, + SECURITY_FLAG_IGNORE_CERT_DATE_INVALID = INTERNET_FLAG_IGNORE_CERT_DATE_INVALID, + SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTPS = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTPS, + SECURITY_FLAG_IGNORE_REDIRECT_TO_HTTP = INTERNET_FLAG_IGNORE_REDIRECT_TO_HTTP; + +enum { + INTERNET_SERVICE_FTP = 1, + INTERNET_SERVICE_GOPHER, + INTERNET_SERVICE_HTTP +} + +enum { + INTERNET_STATUS_RESOLVING_NAME = 10, + INTERNET_STATUS_NAME_RESOLVED = 11, + INTERNET_STATUS_CONNECTING_TO_SERVER = 20, + INTERNET_STATUS_CONNECTED_TO_SERVER = 21, + INTERNET_STATUS_SENDING_REQUEST = 30, + INTERNET_STATUS_REQUEST_SENT = 31, + INTERNET_STATUS_RECEIVING_RESPONSE = 40, + INTERNET_STATUS_RESPONSE_RECEIVED = 41, + INTERNET_STATUS_CTL_RESPONSE_RECEIVED = 42, + INTERNET_STATUS_PREFETCH = 43, + INTERNET_STATUS_CLOSING_CONNECTION = 50, + INTERNET_STATUS_CONNECTION_CLOSED = 51, + INTERNET_STATUS_HANDLE_CREATED = 60, + INTERNET_STATUS_HANDLE_CLOSING = 70, + INTERNET_STATUS_REQUEST_COMPLETE = 100, + INTERNET_STATUS_REDIRECT = 110 +} + +const INTERNET_INVALID_STATUS_CALLBACK + = cast(INTERNET_STATUS_CALLBACK) -1; + +enum { + FTP_TRANSFER_TYPE_UNKNOWN = 0, + FTP_TRANSFER_TYPE_ASCII = 1, + FTP_TRANSFER_TYPE_BINARY = 2, + FTP_TRANSFER_TYPE_MASK = 3 +} + +const size_t + MAX_GOPHER_DISPLAY_TEXT = 128, + MAX_GOPHER_SELECTOR_TEXT = 256, + MAX_GOPHER_HOST_NAME = INTERNET_MAX_HOST_NAME_LENGTH, + MAX_GOPHER_LOCATOR_LENGTH + = 1 + MAX_GOPHER_DISPLAY_TEXT + 1 + MAX_GOPHER_SELECTOR_TEXT + 1 + + MAX_GOPHER_HOST_NAME + 1 + INTERNET_MAX_PORT_NUMBER_LENGTH + 4; + +const DWORD + GOPHER_TYPE_TEXT_FILE = 0x00000001, + GOPHER_TYPE_DIRECTORY = 0x00000002, + GOPHER_TYPE_CSO = 0x00000004, + GOPHER_TYPE_ERROR = 0x00000008, + GOPHER_TYPE_MAC_BINHEX = 0x00000010, + GOPHER_TYPE_DOS_ARCHIVE = 0x00000020, + GOPHER_TYPE_UNIX_UUENCODED = 0x00000040, + GOPHER_TYPE_INDEX_SERVER = 0x00000080, + GOPHER_TYPE_TELNET = 0x00000100, + GOPHER_TYPE_BINARY = 0x00000200, + GOPHER_TYPE_REDUNDANT = 0x00000400, + GOPHER_TYPE_TN3270 = 0x00000800, + GOPHER_TYPE_GIF = 0x00001000, + GOPHER_TYPE_IMAGE = 0x00002000, + GOPHER_TYPE_BITMAP = 0x00004000, + GOPHER_TYPE_MOVIE = 0x00008000, + GOPHER_TYPE_SOUND = 0x00010000, + GOPHER_TYPE_HTML = 0x00020000, + GOPHER_TYPE_PDF = 0x00040000, + GOPHER_TYPE_CALENDAR = 0x00080000, + GOPHER_TYPE_INLINE = 0x00100000, + GOPHER_TYPE_UNKNOWN = 0x20000000, + GOPHER_TYPE_ASK = 0x40000000, + GOPHER_TYPE_GOPHER_PLUS = 0x80000000, + GOPHER_TYPE_FILE_MASK = 0x001FF271; + +BOOL IS_GOPHER_FILE(DWORD t) { + return !!(t & GOPHER_TYPE_FILE_MASK); +} + +BOOL IS_GOPHER_DIRECTORY(DWORD t) { + return !!(t & GOPHER_TYPE_DIRECTORY); +} + +BOOL IS_GOPHER_PHONE_SERVER(DWORD t) { + return !!(t & GOPHER_TYPE_CSO); +} + +BOOL IS_GOPHER_ERROR(DWORD t) { + return !!(t & GOPHER_TYPE_ERROR); +} + +BOOL IS_GOPHER_INDEX_SERVER(DWORD t) { + return !!(t & GOPHER_TYPE_INDEX_SERVER); +} + +BOOL IS_GOPHER_TELNET_SESSION(DWORD t) { + return !!(t & GOPHER_TYPE_TELNET); +} + +BOOL IS_GOPHER_BACKUP_SERVER(DWORD t) { + return !!(t & GOPHER_TYPE_REDUNDANT); +} + +BOOL IS_GOPHER_TN3270_SESSION(DWORD t) { + return !!(t & GOPHER_TYPE_TN3270); +} + +BOOL IS_GOPHER_ASK(DWORD t) { + return !!(t & GOPHER_TYPE_ASK); +} + +BOOL IS_GOPHER_PLUS(DWORD t) { + return !!(t & GOPHER_TYPE_GOPHER_PLUS); +} + +BOOL IS_GOPHER_TYPE_KNOWN(DWORD t) { + return !(t & GOPHER_TYPE_UNKNOWN); +} + +const size_t + MAX_GOPHER_CATEGORY_NAME = 128, + MAX_GOPHER_ATTRIBUTE_NAME = 128, + MIN_GOPHER_ATTRIBUTE_LENGTH = 256; + +const TCHAR[] + GOPHER_INFO_CATEGORY = "+INFO", + GOPHER_ADMIN_CATEGORY = "+ADMIN", + GOPHER_VIEWS_CATEGORY = "+VIEWS", + GOPHER_ABSTRACT_CATEGORY = "+ABSTRACT", + GOPHER_VERONICA_CATEGORY = "+VERONICA", + GOPHER_ADMIN_ATTRIBUTE = "Admin", + GOPHER_MOD_DATE_ATTRIBUTE = "Mod-Date", + GOPHER_TTL_ATTRIBUTE = "TTL", + GOPHER_SCORE_ATTRIBUTE = "Score", + GOPHER_RANGE_ATTRIBUTE = "Score-range", + GOPHER_SITE_ATTRIBUTE = "Site", + GOPHER_ORG_ATTRIBUTE = "Org", + GOPHER_LOCATION_ATTRIBUTE = "Loc", + GOPHER_GEOG_ATTRIBUTE = "Geog", + GOPHER_TIMEZONE_ATTRIBUTE = "TZ", + GOPHER_PROVIDER_ATTRIBUTE = "Provider", + GOPHER_VERSION_ATTRIBUTE = "Version", + GOPHER_ABSTRACT_ATTRIBUTE = "Abstract", + GOPHER_VIEW_ATTRIBUTE = "View", + GOPHER_TREEWALK_ATTRIBUTE = "treewalk"; + +enum : DWORD { + GOPHER_ATTRIBUTE_ID_BASE = 0xABCCCC00, + GOPHER_CATEGORY_ID_ALL, + GOPHER_CATEGORY_ID_INFO, + GOPHER_CATEGORY_ID_ADMIN, + GOPHER_CATEGORY_ID_VIEWS, + GOPHER_CATEGORY_ID_ABSTRACT, + GOPHER_CATEGORY_ID_VERONICA, + GOPHER_CATEGORY_ID_ASK, + GOPHER_CATEGORY_ID_UNKNOWN, + GOPHER_ATTRIBUTE_ID_ALL, + GOPHER_ATTRIBUTE_ID_ADMIN, + GOPHER_ATTRIBUTE_ID_MOD_DATE, + GOPHER_ATTRIBUTE_ID_TTL, + GOPHER_ATTRIBUTE_ID_SCORE, + GOPHER_ATTRIBUTE_ID_RANGE, + GOPHER_ATTRIBUTE_ID_SITE, + GOPHER_ATTRIBUTE_ID_ORG, + GOPHER_ATTRIBUTE_ID_LOCATION, + GOPHER_ATTRIBUTE_ID_GEOG, + GOPHER_ATTRIBUTE_ID_TIMEZONE, + GOPHER_ATTRIBUTE_ID_PROVIDER, + GOPHER_ATTRIBUTE_ID_VERSION, + GOPHER_ATTRIBUTE_ID_ABSTRACT, + GOPHER_ATTRIBUTE_ID_VIEW, + GOPHER_ATTRIBUTE_ID_TREEWALK, + GOPHER_ATTRIBUTE_ID_UNKNOWN +} + +const HTTP_MAJOR_VERSION = 1; +const HTTP_MINOR_VERSION = 0; +const TCHAR[] HTTP_VERSION = "HTTP/1.0"; + +enum : DWORD { + HTTP_QUERY_MIME_VERSION, + HTTP_QUERY_CONTENT_TYPE, + HTTP_QUERY_CONTENT_TRANSFER_ENCODING, + HTTP_QUERY_CONTENT_ID, + HTTP_QUERY_CONTENT_DESCRIPTION, + HTTP_QUERY_CONTENT_LENGTH, + HTTP_QUERY_CONTENT_LANGUAGE, + HTTP_QUERY_ALLOW, + HTTP_QUERY_PUBLIC, + HTTP_QUERY_DATE, + HTTP_QUERY_EXPIRES, + HTTP_QUERY_LAST_MODIFIED, + HTTP_QUERY_MESSAGE_ID, + HTTP_QUERY_URI, + HTTP_QUERY_DERIVED_FROM, + HTTP_QUERY_COST, + HTTP_QUERY_LINK, + HTTP_QUERY_PRAGMA, + HTTP_QUERY_VERSION, + HTTP_QUERY_STATUS_CODE, + HTTP_QUERY_STATUS_TEXT, + HTTP_QUERY_RAW_HEADERS, + HTTP_QUERY_RAW_HEADERS_CRLF, + HTTP_QUERY_CONNECTION, + HTTP_QUERY_ACCEPT, + HTTP_QUERY_ACCEPT_CHARSET, + HTTP_QUERY_ACCEPT_ENCODING, + HTTP_QUERY_ACCEPT_LANGUAGE, + HTTP_QUERY_AUTHORIZATION, + HTTP_QUERY_CONTENT_ENCODING, + HTTP_QUERY_FORWARDED, + HTTP_QUERY_FROM, + HTTP_QUERY_IF_MODIFIED_SINCE, + HTTP_QUERY_LOCATION, + HTTP_QUERY_ORIG_URI, + HTTP_QUERY_REFERER, + HTTP_QUERY_RETRY_AFTER, + HTTP_QUERY_SERVER, + HTTP_QUERY_TITLE, + HTTP_QUERY_USER_AGENT, + HTTP_QUERY_WWW_AUTHENTICATE, + HTTP_QUERY_PROXY_AUTHENTICATE, + HTTP_QUERY_ACCEPT_RANGES, + HTTP_QUERY_SET_COOKIE, + HTTP_QUERY_COOKIE, + HTTP_QUERY_REQUEST_METHOD, + HTTP_QUERY_MAX = 45, + HTTP_QUERY_CUSTOM = 65535 +} + +const DWORD + HTTP_QUERY_FLAG_REQUEST_HEADERS = 0x80000000, + HTTP_QUERY_FLAG_SYSTEMTIME = 0x40000000, + HTTP_QUERY_FLAG_NUMBER = 0x20000000, + HTTP_QUERY_FLAG_COALESCE = 0x10000000, + HTTP_QUERY_MODIFIER_FLAGS_MASK = 0xF0000000, + HTTP_QUERY_HEADER_MASK = ~HTTP_QUERY_MODIFIER_FLAGS_MASK; + +enum { + HTTP_STATUS_OK = 200, + HTTP_STATUS_CREATED, + HTTP_STATUS_ACCEPTED, + HTTP_STATUS_PARTIAL, + HTTP_STATUS_NO_CONTENT, // = 204 + HTTP_STATUS_AMBIGUOUS = 300, + HTTP_STATUS_MOVED, + HTTP_STATUS_REDIRECT, + HTTP_STATUS_REDIRECT_METHOD, + HTTP_STATUS_NOT_MODIFIED, // = 304 + HTTP_STATUS_BAD_REQUEST = 400, + HTTP_STATUS_DENIED, + HTTP_STATUS_PAYMENT_REQ, + HTTP_STATUS_FORBIDDEN, + HTTP_STATUS_NOT_FOUND, + HTTP_STATUS_BAD_METHOD, + HTTP_STATUS_NONE_ACCEPTABLE, + HTTP_STATUS_PROXY_AUTH_REQ, + HTTP_STATUS_REQUEST_TIMEOUT, + HTTP_STATUS_CONFLICT, + HTTP_STATUS_GONE, + HTTP_STATUS_AUTH_REFUSED, // = 411 + HTTP_STATUS_SERVER_ERROR = 500, + HTTP_STATUS_NOT_SUPPORTED, + HTTP_STATUS_BAD_GATEWAY, + HTTP_STATUS_SERVICE_UNAVAIL, + HTTP_STATUS_GATEWAY_TIMEOUT // = 504 +} + +enum { + INTERNET_PREFETCH_PROGRESS, + INTERNET_PREFETCH_COMPLETE, + INTERNET_PREFETCH_ABORTED +} + +const FLAGS_ERROR_UI_FILTER_FOR_ERRORS = 0x01; +const FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS = 0x02; +const FLAGS_ERROR_UI_FLAGS_GENERATE_DATA = 0x04; +const FLAGS_ERROR_UI_FLAGS_NO_UI = 0x08; + +const DWORD + HTTP_ADDREQ_INDEX_MASK = 0x0000FFFF, + HTTP_ADDREQ_FLAGS_MASK = 0xFFFF0000, + HTTP_ADDREQ_FLAG_COALESCE_WITH_SEMICOLON = 0x01000000, + HTTP_ADDREQ_FLAG_ADD_IF_NEW = 0x10000000, + HTTP_ADDREQ_FLAG_ADD = 0x20000000, + HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA = 0x40000000, + HTTP_ADDREQ_FLAG_COALESCE = HTTP_ADDREQ_FLAG_COALESCE_WITH_COMMA, + HTTP_ADDREQ_FLAG_REPLACE = 0x80000000; + +enum { + INTERNET_ERROR_BASE = 12000, + ERROR_INTERNET_OUT_OF_HANDLES, + ERROR_INTERNET_TIMEOUT, + ERROR_INTERNET_EXTENDED_ERROR, + ERROR_INTERNET_INTERNAL_ERROR, + ERROR_INTERNET_INVALID_URL, + ERROR_INTERNET_UNRECOGNIZED_SCHEME, + ERROR_INTERNET_NAME_NOT_RESOLVED, + ERROR_INTERNET_PROTOCOL_NOT_FOUND, + ERROR_INTERNET_INVALID_OPTION, + ERROR_INTERNET_BAD_OPTION_LENGTH, + ERROR_INTERNET_OPTION_NOT_SETTABLE, + ERROR_INTERNET_SHUTDOWN, + ERROR_INTERNET_INCORRECT_USER_NAME, + ERROR_INTERNET_INCORRECT_PASSWORD, + ERROR_INTERNET_LOGIN_FAILURE, + ERROR_INTERNET_INVALID_OPERATION, + ERROR_INTERNET_OPERATION_CANCELLED, + ERROR_INTERNET_INCORRECT_HANDLE_TYPE, + ERROR_INTERNET_INCORRECT_HANDLE_STATE, + ERROR_INTERNET_NOT_PROXY_REQUEST, + ERROR_INTERNET_REGISTRY_VALUE_NOT_FOUND, + ERROR_INTERNET_BAD_REGISTRY_PARAMETER, + ERROR_INTERNET_NO_DIRECT_ACCESS, + ERROR_INTERNET_NO_CONTEXT, + ERROR_INTERNET_NO_CALLBACK, + ERROR_INTERNET_REQUEST_PENDING, + ERROR_INTERNET_INCORRECT_FORMAT, + ERROR_INTERNET_ITEM_NOT_FOUND, + ERROR_INTERNET_CANNOT_CONNECT, + ERROR_INTERNET_CONNECTION_ABORTED, + ERROR_INTERNET_CONNECTION_RESET, + ERROR_INTERNET_FORCE_RETRY, + ERROR_INTERNET_INVALID_PROXY_REQUEST, + ERROR_INTERNET_NEED_UI, // = INTERNET_ERROR_BASE + 34 + ERROR_INTERNET_HANDLE_EXISTS = INTERNET_ERROR_BASE + 36, + ERROR_INTERNET_SEC_CERT_DATE_INVALID, + ERROR_INTERNET_SEC_CERT_CN_INVALID, + ERROR_INTERNET_HTTP_TO_HTTPS_ON_REDIR, + ERROR_INTERNET_HTTPS_TO_HTTP_ON_REDIR, + ERROR_INTERNET_MIXED_SECURITY, + ERROR_INTERNET_CHG_POST_IS_NON_SECURE, + ERROR_INTERNET_POST_IS_NON_SECURE, + ERROR_INTERNET_CLIENT_AUTH_CERT_NEEDED, + ERROR_INTERNET_INVALID_CA, + ERROR_INTERNET_CLIENT_AUTH_NOT_SETUP, + ERROR_INTERNET_ASYNC_THREAD_FAILED, + ERROR_INTERNET_REDIRECT_SCHEME_CHANGE, // = INTERNET_ERROR_BASE + 48 + + ERROR_FTP_TRANSFER_IN_PROGRESS = INTERNET_ERROR_BASE + 110, + ERROR_FTP_DROPPED, // = INTERNET_ERROR_BASE + 111 + ERROR_GOPHER_PROTOCOL_ERROR = INTERNET_ERROR_BASE + 130, + ERROR_GOPHER_NOT_FILE, + ERROR_GOPHER_DATA_ERROR, + ERROR_GOPHER_END_OF_DATA, + ERROR_GOPHER_INVALID_LOCATOR, + ERROR_GOPHER_INCORRECT_LOCATOR_TYPE, + ERROR_GOPHER_NOT_GOPHER_PLUS, + ERROR_GOPHER_ATTRIBUTE_NOT_FOUND, + ERROR_GOPHER_UNKNOWN_LOCATOR, // = INTERNET_ERROR_BASE + 138, + ERROR_HTTP_HEADER_NOT_FOUND = INTERNET_ERROR_BASE + 150, + ERROR_HTTP_DOWNLEVEL_SERVER, + ERROR_HTTP_INVALID_SERVER_RESPONSE, + ERROR_HTTP_INVALID_HEADER, + ERROR_HTTP_INVALID_QUERY_REQUEST, + ERROR_HTTP_HEADER_ALREADY_EXISTS, + ERROR_HTTP_REDIRECT_FAILED, + ERROR_INTERNET_SECURITY_CHANNEL_ERROR, + ERROR_INTERNET_UNABLE_TO_CACHE_FILE, + ERROR_INTERNET_TCPIP_NOT_INSTALLED, + ERROR_HTTP_NOT_REDIRECTED, // = INTERNET_ERROR_BASE + 160 + // why? + INTERNET_ERROR_LAST = ERROR_INTERNET_TCPIP_NOT_INSTALLED +} + + +const NORMAL_CACHE_ENTRY = 0x000001; +const STABLE_CACHE_ENTRY = 0x000002; +const STICKY_CACHE_ENTRY = 0x000004; +const SPARSE_CACHE_ENTRY = 0x010000; +const OCX_CACHE_ENTRY = 0x020000; +const COOKIE_CACHE_ENTRY = 0x100000; +const URLHISTORY_CACHE_ENTRY = 0x200000; + +const CACHE_ENTRY_ATTRIBUTE_FC = 0x0004; +const CACHE_ENTRY_HITRATE_FC = 0x0010; +const CACHE_ENTRY_MODTIME_FC = 0x0040; +const CACHE_ENTRY_EXPTIME_FC = 0x0080; +const CACHE_ENTRY_ACCTIME_FC = 0x0100; +const CACHE_ENTRY_SYNCTIME_FC = 0x0200; +const CACHE_ENTRY_HEADERINFO_FC = 0x0400; + +enum { + WININET_API_FLAG_ASYNC = 1, + WININET_API_FLAG_SYNC = 4, + WININET_API_FLAG_USE_CONTEXT = 8 +} + +// FIXME: how should these really be grouped? +enum { + IRF_ASYNC = WININET_API_FLAG_ASYNC, + IRF_SYNC = WININET_API_FLAG_SYNC, + IRF_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT, +} +const IRF_NO_WAIT = 8; + +enum { + HSR_ASYNC = WININET_API_FLAG_ASYNC, + HSR_SYNC = WININET_API_FLAG_SYNC, + HSR_USE_CONTEXT = WININET_API_FLAG_USE_CONTEXT, +} + +const HSR_INITIATE = 8; +const HSR_DOWNLOAD = 16; +const HSR_CHUNKED = 32; + +const INTERNET_DIAL_UNATTENDED = 0x8000; +const INTERNET_DIALSTATE_DISCONNECTED = 1; +const INTERENT_GOONLINE_REFRESH = 1; +const INTERENT_GOONLINE_MASK = 1; +const INTERNET_AUTODIAL_FORCE_ONLINE = 1; +const INTERNET_AUTODIAL_FORCE_UNATTENDED = 2; +const INTERNET_AUTODIAL_FAILIFSECURITYCHECK = 4; +const INTERNET_CONNECTION_MODEM = 0x01; +const INTERNET_CONNECTION_LAN = 0x02; +const INTERNET_CONNECTION_PROXY = 0x04; +const INTERNET_CONNECTION_MODEM_BUSY = 0x08; +const INTERNET_RAS_INSTALLED = 0x10; +const INTERNET_CONNECTION_OFFLINE = 0x20; +const INTERNET_CONNECTION_CONFIGURED = 0x40; + +enum { + CACHEGROUP_SEARCH_ALL = 0, + CACHEGROUP_SEARCH_BYURL = 1 +} + +enum { + INTERNET_CACHE_GROUP_ADD = 0, + INTERNET_CACHE_GROUP_REMOVE = 1 +} + +alias HANDLE HINTERNET; +alias HANDLE* LPHINTERNET; + +alias LONGLONG GROUPID; +alias WORD INTERNET_PORT; +alias WORD* LPINTERNET_PORT; + +enum INTERNET_SCHEME { + INTERNET_SCHEME_PARTIAL = -2, + INTERNET_SCHEME_UNKNOWN, + INTERNET_SCHEME_DEFAULT, + INTERNET_SCHEME_FTP, + INTERNET_SCHEME_GOPHER, + INTERNET_SCHEME_HTTP, + INTERNET_SCHEME_HTTPS, + INTERNET_SCHEME_FILE, + INTERNET_SCHEME_NEWS, + INTERNET_SCHEME_MAILTO, + INTERNET_SCHEME_SOCKS, + INTERNET_SCHEME_FIRST = INTERNET_SCHEME_FTP, + INTERNET_SCHEME_LAST = INTERNET_SCHEME_SOCKS +} +alias INTERNET_SCHEME* LPINTERNET_SCHEME; + +struct INTERNET_ASYNC_RESULT { + DWORD dwResult; + DWORD dwError; +} +alias INTERNET_ASYNC_RESULT* LPINTERNET_ASYNC_RESULT; + +struct INTERNET_PREFETCH_STATUS { + DWORD dwStatus; + DWORD dwSize; +} +alias INTERNET_PREFETCH_STATUS* LPINTERNET_PREFETCH_STATUS; + +struct INTERNET_PROXY_INFO { + DWORD dwAccessType; + LPCTSTR lpszProxy; + LPCTSTR lpszProxyBypass; +} +alias INTERNET_PROXY_INFO* LPINTERNET_PROXY_INFO; + +struct INTERNET_VERSION_INFO { + DWORD dwMajorVersion; + DWORD dwMinorVersion; +} +alias INTERNET_VERSION_INFO* LPINTERNET_VERSION_INFO; + +struct URL_COMPONENTSA { + DWORD dwStructSize = URL_COMPONENTSA.sizeof; + LPSTR lpszScheme; + DWORD dwSchemeLength; + INTERNET_SCHEME nScheme; + LPSTR lpszHostName; + DWORD dwHostNameLength; + INTERNET_PORT nPort; + LPSTR lpszUserName; + DWORD dwUserNameLength; + LPSTR lpszPassword; + DWORD dwPasswordLength; + LPSTR lpszUrlPath; + DWORD dwUrlPathLength; + LPSTR lpszExtraInfo; + DWORD dwExtraInfoLength; +} +alias URL_COMPONENTSA* LPURL_COMPONENTSA; + +struct URL_COMPONENTSW { + DWORD dwStructSize = URL_COMPONENTSW.sizeof; + LPWSTR lpszScheme; + DWORD dwSchemeLength; + INTERNET_SCHEME nScheme; + LPWSTR lpszHostName; + DWORD dwHostNameLength; + INTERNET_PORT nPort; + LPWSTR lpszUserName; + DWORD dwUserNameLength; + LPWSTR lpszPassword; + DWORD dwPasswordLength; + LPWSTR lpszUrlPath; + DWORD dwUrlPathLength; + LPWSTR lpszExtraInfo; + DWORD dwExtraInfoLength; +} +alias URL_COMPONENTSW* LPURL_COMPONENTSW; + +struct INTERNET_CERTIFICATE_INFO { + FILETIME ftExpiry; + FILETIME ftStart; + LPTSTR lpszSubjectInfo; + LPTSTR lpszIssuerInfo; + LPTSTR lpszProtocolName; + LPTSTR lpszSignatureAlgName; + LPTSTR lpszEncryptionAlgName; + DWORD dwKeySize; +} +alias INTERNET_CERTIFICATE_INFO* LPINTERNET_CERTIFICATE_INFO; + +extern (Windows) alias void function(HINTERNET, DWORD, DWORD, PVOID, DWORD) + INTERNET_STATUS_CALLBACK; +alias INTERNET_STATUS_CALLBACK* LPINTERNET_STATUS_CALLBACK; + +struct GOPHER_FIND_DATAA { + CHAR[MAX_GOPHER_DISPLAY_TEXT+1] DisplayString; + DWORD GopherType; + DWORD SizeLow; + DWORD SizeHigh; + FILETIME LastModificationTime; + CHAR[MAX_GOPHER_LOCATOR_LENGTH+1] Locator; +} +alias GOPHER_FIND_DATAA* LPGOPHER_FIND_DATAA; + +struct GOPHER_FIND_DATAW { + WCHAR[MAX_GOPHER_DISPLAY_TEXT+1] DisplayString; + DWORD GopherType; + DWORD SizeLow; + DWORD SizeHigh; + FILETIME LastModificationTime; + WCHAR[MAX_GOPHER_LOCATOR_LENGTH+1] Locator; +} +alias GOPHER_FIND_DATAW* LPGOPHER_FIND_DATAW; + +struct GOPHER_ADMIN_ATTRIBUTE_TYPE { + LPCTSTR Comment; + LPCTSTR EmailAddress; +} +alias GOPHER_ADMIN_ATTRIBUTE_TYPE* LPGOPHER_ADMIN_ATTRIBUTE_TYPE; + +struct GOPHER_MOD_DATE_ATTRIBUTE_TYPE { + FILETIME DateAndTime; +} +alias GOPHER_MOD_DATE_ATTRIBUTE_TYPE* LPGOPHER_MOD_DATE_ATTRIBUTE_TYPE; + +struct GOPHER_TTL_ATTRIBUTE_TYPE { + DWORD Ttl; +} +alias GOPHER_TTL_ATTRIBUTE_TYPE* LPGOPHER_TTL_ATTRIBUTE_TYPE; + +struct GOPHER_SCORE_ATTRIBUTE_TYPE { + INT Score; +} +alias GOPHER_SCORE_ATTRIBUTE_TYPE* LPGOPHER_SCORE_ATTRIBUTE_TYPE; + +struct GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE { + INT LowerBound; + INT UpperBound; +} +alias GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE* LPGOPHER_SCORE_RANGE_ATTRIBUTE_TYPE; + +struct GOPHER_SITE_ATTRIBUTE_TYPE { + LPCTSTR Site; +} +alias GOPHER_SITE_ATTRIBUTE_TYPE* LPGOPHER_SITE_ATTRIBUTE_TYPE; + +struct GOPHER_ORGANIZATION_ATTRIBUTE_TYPE { + LPCTSTR Organization; +} +alias GOPHER_ORGANIZATION_ATTRIBUTE_TYPE* LPGOPHER_ORGANIZATION_ATTRIBUTE_TYPE; + +struct GOPHER_LOCATION_ATTRIBUTE_TYPE { + LPCTSTR Location; +} +alias GOPHER_LOCATION_ATTRIBUTE_TYPE* LPGOPHER_LOCATION_ATTRIBUTE_TYPE; + +struct GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE { + INT DegreesNorth; + INT MinutesNorth; + INT SecondsNorth; + INT DegreesEast; + INT MinutesEast; + INT SecondsEast; +} +alias GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE* + LPGOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE; + +struct GOPHER_TIMEZONE_ATTRIBUTE_TYPE { + INT Zone; +} +alias GOPHER_TIMEZONE_ATTRIBUTE_TYPE* LPGOPHER_TIMEZONE_ATTRIBUTE_TYPE; + +struct GOPHER_PROVIDER_ATTRIBUTE_TYPE { + LPCTSTR Provider; +} +alias GOPHER_PROVIDER_ATTRIBUTE_TYPE* LPGOPHER_PROVIDER_ATTRIBUTE_TYPE; + +struct GOPHER_VERSION_ATTRIBUTE_TYPE { + LPCTSTR Version; +} +alias GOPHER_VERSION_ATTRIBUTE_TYPE* LPGOPHER_VERSION_ATTRIBUTE_TYPE; + +struct GOPHER_ABSTRACT_ATTRIBUTE_TYPE { + LPCTSTR ShortAbstract; + LPCTSTR AbstractFile; +} +alias GOPHER_ABSTRACT_ATTRIBUTE_TYPE* LPGOPHER_ABSTRACT_ATTRIBUTE_TYPE; + +struct GOPHER_VIEW_ATTRIBUTE_TYPE { + LPCTSTR ContentType; + LPCTSTR Language; + DWORD Size; +} +alias GOPHER_VIEW_ATTRIBUTE_TYPE* LPGOPHER_VIEW_ATTRIBUTE_TYPE; + +struct GOPHER_VERONICA_ATTRIBUTE_TYPE { + BOOL TreeWalk; +} +alias GOPHER_VERONICA_ATTRIBUTE_TYPE* LPGOPHER_VERONICA_ATTRIBUTE_TYPE; + +struct GOPHER_ASK_ATTRIBUTE_TYPE { + LPCTSTR QuestionType; + LPCTSTR QuestionText; +} +alias GOPHER_ASK_ATTRIBUTE_TYPE* LPGOPHER_ASK_ATTRIBUTE_TYPE; + +struct GOPHER_UNKNOWN_ATTRIBUTE_TYPE { + LPCTSTR Text; +} +alias GOPHER_UNKNOWN_ATTRIBUTE_TYPE* LPGOPHER_UNKNOWN_ATTRIBUTE_TYPE; + +struct GOPHER_ATTRIBUTE_TYPE { + DWORD CategoryId; + DWORD AttributeId; + union { + GOPHER_ADMIN_ATTRIBUTE_TYPE Admin; + GOPHER_MOD_DATE_ATTRIBUTE_TYPE ModDate; + GOPHER_TTL_ATTRIBUTE_TYPE Ttl; + GOPHER_SCORE_ATTRIBUTE_TYPE Score; + GOPHER_SCORE_RANGE_ATTRIBUTE_TYPE ScoreRange; + GOPHER_SITE_ATTRIBUTE_TYPE Site; + GOPHER_ORGANIZATION_ATTRIBUTE_TYPE Organization; + GOPHER_LOCATION_ATTRIBUTE_TYPE Location; + GOPHER_GEOGRAPHICAL_LOCATION_ATTRIBUTE_TYPE GeographicalLocation; + GOPHER_TIMEZONE_ATTRIBUTE_TYPE TimeZone; + GOPHER_PROVIDER_ATTRIBUTE_TYPE Provider; + GOPHER_VERSION_ATTRIBUTE_TYPE Version; + GOPHER_ABSTRACT_ATTRIBUTE_TYPE Abstract; + GOPHER_VIEW_ATTRIBUTE_TYPE View; + GOPHER_VERONICA_ATTRIBUTE_TYPE Veronica; + GOPHER_ASK_ATTRIBUTE_TYPE Ask; + GOPHER_UNKNOWN_ATTRIBUTE_TYPE Unknown; + } /+AttributeType;+/ +} +alias GOPHER_ATTRIBUTE_TYPE* LPGOPHER_ATTRIBUTE_TYPE; + +alias BOOL function(LPGOPHER_ATTRIBUTE_TYPE, DWORD) + GOPHER_ATTRIBUTE_ENUMERATOR; + +struct INTERNET_CACHE_ENTRY_INFOA { + DWORD dwStructSize = INTERNET_CACHE_ENTRY_INFOA.sizeof; + LPSTR lpszSourceUrlName; + LPSTR lpszLocalFileName; + DWORD CacheEntryType; + DWORD dwUseCount; + DWORD dwHitRate; + DWORD dwSizeLow; + DWORD dwSizeHigh; + FILETIME LastModifiedTime; + FILETIME ExpireTime; + FILETIME LastAccessTime; + FILETIME LastSyncTime; + PBYTE lpHeaderInfo; + DWORD dwHeaderInfoSize; + LPSTR lpszFileExtension; + DWORD dwReserved; +} +alias INTERNET_CACHE_ENTRY_INFOA* LPINTERNET_CACHE_ENTRY_INFOA; + +struct INTERNET_CACHE_ENTRY_INFOW { + DWORD dwStructSize = INTERNET_CACHE_ENTRY_INFOW.sizeof; + LPSTR lpszSourceUrlName; + LPWSTR lpszLocalFileName; + DWORD CacheEntryType; + DWORD dwUseCount; + DWORD dwHitRate; + DWORD dwSizeLow; + DWORD dwSizeHigh; + FILETIME LastModifiedTime; + FILETIME ExpireTime; + FILETIME LastAccessTime; + FILETIME LastSyncTime; + PBYTE lpHeaderInfo; + DWORD dwHeaderInfoSize; + LPWSTR lpszFileExtension; + DWORD dwReserved; +} +alias INTERNET_CACHE_ENTRY_INFOW* LPINTERNET_CACHE_ENTRY_INFOW; + +struct INTERNET_BUFFERSA { + DWORD dwStructSize = INTERNET_BUFFERSA.sizeof; + INTERNET_BUFFERSA* Next; + LPCSTR lpcszHeader; + DWORD dwHeadersLength; + DWORD dwHeadersTotal; + LPVOID lpvBuffer; + DWORD dwBufferLength; + DWORD dwBufferTotal; + DWORD dwOffsetLow; + DWORD dwOffsetHigh; +} +alias INTERNET_BUFFERSA* LPINTERNET_BUFFERSA; + +struct INTERNET_BUFFERSW { + DWORD dwStructSize = INTERNET_BUFFERSW.sizeof; + INTERNET_BUFFERSW* Next; + LPCWSTR lpcszHeader; + DWORD dwHeadersLength; + DWORD dwHeadersTotal; + LPVOID lpvBuffer; + DWORD dwBufferLength; + DWORD dwBufferTotal; + DWORD dwOffsetLow; + DWORD dwOffsetHigh; +} +alias INTERNET_BUFFERSW* LPINTERNET_BUFFERSW; + +const size_t + GROUP_OWNER_STORAGE_SIZE = 4, + GROUPNAME_MAX_LENGTH = 120; + +struct INTERNET_CACHE_GROUP_INFOA { + DWORD dwGroupSize; + DWORD dwGroupFlags; + DWORD dwGroupType; + DWORD dwDiskUsage; + DWORD dwDiskQuota; + DWORD[GROUP_OWNER_STORAGE_SIZE] dwOwnerStorage; + CHAR[GROUPNAME_MAX_LENGTH] szGroupName; +} +alias INTERNET_CACHE_GROUP_INFOA* LPINTERNET_CACHE_GROUP_INFOA; + +struct INTERNET_CACHE_GROUP_INFOW { + DWORD dwGroupSize; + DWORD dwGroupFlags; + DWORD dwGroupType; + DWORD dwDiskUsage; + DWORD dwDiskQuota; + DWORD[GROUP_OWNER_STORAGE_SIZE] dwOwnerStorage; + WCHAR[GROUPNAME_MAX_LENGTH] szGroupName; +} +alias INTERNET_CACHE_GROUP_INFOW* LPINTERNET_CACHE_GROUP_INFOW; + +extern (Windows) { + BOOL InternetTimeFromSystemTime(SYSTEMTIME*, DWORD, LPSTR, DWORD); + BOOL InternetTimeToSystemTime(LPCSTR, SYSTEMTIME*, DWORD); + BOOL InternetDebugGetLocalTime(SYSTEMTIME*, PDWORD); + BOOL InternetCrackUrlA(LPCSTR, DWORD, DWORD, LPURL_COMPONENTSA); + BOOL InternetCrackUrlW(LPCWSTR, DWORD, DWORD, LPURL_COMPONENTSW); + BOOL InternetCreateUrlA(LPURL_COMPONENTSA, DWORD, LPSTR, PDWORD); + BOOL InternetCreateUrlW(LPURL_COMPONENTSW, DWORD, LPWSTR, PDWORD); + BOOL InternetCanonicalizeUrlA(LPCSTR, LPSTR, PDWORD, DWORD); + BOOL InternetCanonicalizeUrlW(LPCWSTR, LPWSTR, PDWORD, DWORD); + BOOL InternetCheckConnectionA(LPCSTR, DWORD, DWORD); + BOOL InternetCheckConnectionW(LPCWSTR, DWORD, DWORD); + BOOL InternetCombineUrlA(LPCSTR, LPCSTR, LPSTR, PDWORD, DWORD); + BOOL InternetCombineUrlW(LPCWSTR, LPCWSTR, LPWSTR, PDWORD, DWORD); + HINTERNET InternetOpenA(LPCSTR, DWORD, LPCSTR, LPCSTR, DWORD); + HINTERNET InternetOpenW(LPCWSTR, DWORD, LPCWSTR, LPCWSTR, DWORD); + BOOL InternetCloseHandle(HINTERNET); + HINTERNET InternetConnectA(HINTERNET, LPCSTR, INTERNET_PORT, LPCSTR, + LPCSTR, DWORD, DWORD, DWORD); + HINTERNET InternetConnectW(HINTERNET, LPCWSTR, INTERNET_PORT, LPCWSTR, + LPCWSTR, DWORD, DWORD, DWORD); + HINTERNET InternetOpenUrlA(HINTERNET, LPCSTR, LPCSTR, DWORD, DWORD, + DWORD); + HINTERNET InternetOpenUrlW(HINTERNET, LPCWSTR, LPCWSTR, DWORD, DWORD, + DWORD); + BOOL InternetReadFile(HINTERNET, PVOID, DWORD, PDWORD); + DWORD InternetSetFilePointer(HINTERNET, LONG, PVOID, DWORD, DWORD); + BOOL InternetWriteFile(HINTERNET, LPCVOID, DWORD, PDWORD); + BOOL InternetQueryDataAvailable(HINTERNET, PDWORD, DWORD, DWORD); + BOOL InternetFindNextFileA(HINTERNET, PVOID); + BOOL InternetFindNextFileW(HINTERNET, PVOID); + BOOL InternetQueryOptionA(HINTERNET, DWORD, PVOID, PDWORD); + BOOL InternetQueryOptionW(HINTERNET, DWORD, PVOID, PDWORD); + BOOL InternetSetOptionA(HINTERNET, DWORD, PVOID, DWORD); + BOOL InternetSetOptionW(HINTERNET, DWORD, PVOID, DWORD); + BOOL InternetSetOptionExA(HINTERNET, DWORD, PVOID, DWORD, DWORD); + BOOL InternetSetOptionExW(HINTERNET, DWORD, PVOID, DWORD, DWORD); + BOOL InternetGetLastResponseInfoA(PDWORD, LPSTR, PDWORD); + BOOL InternetGetLastResponseInfoW(PDWORD, LPWSTR, PDWORD); + INTERNET_STATUS_CALLBACK InternetSetStatusCallback(HINTERNET, + INTERNET_STATUS_CALLBACK); + DWORD FtpGetFileSize(HINTERNET, LPDWORD); + HINTERNET FtpFindFirstFileA(HINTERNET, LPCSTR, LPWIN32_FIND_DATA, DWORD, + DWORD); + HINTERNET FtpFindFirstFileW(HINTERNET, LPCWSTR, LPWIN32_FIND_DATA, DWORD, + DWORD); + BOOL FtpGetFileA(HINTERNET, LPCSTR, LPCSTR, BOOL, DWORD, DWORD, DWORD); + BOOL FtpGetFileW(HINTERNET, LPCWSTR, LPCWSTR, BOOL, DWORD, DWORD, DWORD); + BOOL FtpPutFileA(HINTERNET, LPCSTR, LPCSTR, DWORD, DWORD); + BOOL FtpPutFileW(HINTERNET, LPCWSTR, LPCWSTR, DWORD, DWORD); + BOOL FtpDeleteFileA(HINTERNET, LPCSTR); + BOOL FtpDeleteFileW(HINTERNET, LPCWSTR); + BOOL FtpRenameFileA(HINTERNET, LPCSTR, LPCSTR); + BOOL FtpRenameFileW(HINTERNET, LPCWSTR, LPCWSTR); + HINTERNET FtpOpenFileA(HINTERNET, LPCSTR, DWORD, DWORD, DWORD); + HINTERNET FtpOpenFileW(HINTERNET, LPCWSTR, DWORD, DWORD, DWORD); + BOOL FtpCreateDirectoryA(HINTERNET, LPCSTR); + BOOL FtpCreateDirectoryW(HINTERNET, LPCWSTR); + BOOL FtpRemoveDirectoryA(HINTERNET, LPCSTR); + BOOL FtpRemoveDirectoryW(HINTERNET, LPCWSTR); + BOOL FtpSetCurrentDirectoryA(HINTERNET, LPCSTR); + BOOL FtpSetCurrentDirectoryW(HINTERNET, LPCWSTR); + BOOL FtpGetCurrentDirectoryA(HINTERNET, LPSTR, PDWORD); + BOOL FtpGetCurrentDirectoryW(HINTERNET, LPWSTR, PDWORD); + BOOL FtpCommandA(HINTERNET, BOOL, DWORD, LPCSTR, DWORD_PTR, HINTERNET*); + BOOL FtpCommandW(HINTERNET, BOOL, DWORD, LPCWSTR, DWORD_PTR, HINTERNET*); + BOOL GopherCreateLocatorA(LPCSTR, INTERNET_PORT, LPCSTR, LPCSTR, DWORD, + LPSTR, PDWORD); + BOOL GopherCreateLocatorW(LPCWSTR, INTERNET_PORT, LPCWSTR, LPCWSTR, DWORD, + LPWSTR, PDWORD); + BOOL GopherGetLocatorTypeA(LPCSTR, PDWORD); + BOOL GopherGetLocatorTypeW(LPCWSTR, PDWORD); + HINTERNET GopherFindFirstFileA(HINTERNET, LPCSTR, LPCSTR, + LPGOPHER_FIND_DATAA, DWORD, DWORD); + HINTERNET GopherFindFirstFileW(HINTERNET, LPCWSTR, LPCWSTR, + LPGOPHER_FIND_DATAW, DWORD, DWORD); + HINTERNET GopherOpenFileA(HINTERNET, LPCSTR, LPCSTR, DWORD, DWORD); + HINTERNET GopherOpenFileW(HINTERNET, LPCWSTR, LPCWSTR, DWORD, DWORD); + BOOL GopherGetAttributeA(HINTERNET, LPCSTR, LPCSTR, LPBYTE, DWORD, + PDWORD, GOPHER_ATTRIBUTE_ENUMERATOR, DWORD); + BOOL GopherGetAttributeW(HINTERNET, LPCWSTR, LPCWSTR, LPBYTE, DWORD, + PDWORD, GOPHER_ATTRIBUTE_ENUMERATOR, DWORD); + HINTERNET HttpOpenRequestA(HINTERNET, LPCSTR, LPCSTR, LPCSTR, LPCSTR, + LPCSTR*, DWORD, DWORD); + HINTERNET HttpOpenRequestW(HINTERNET, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR, + LPCWSTR*, DWORD, DWORD); + BOOL HttpAddRequestHeadersA(HINTERNET, LPCSTR, DWORD, DWORD); + BOOL HttpAddRequestHeadersW(HINTERNET, LPCWSTR, DWORD, DWORD); + BOOL HttpSendRequestA(HINTERNET, LPCSTR, DWORD, PVOID, DWORD); + BOOL HttpSendRequestW(HINTERNET, LPCWSTR, DWORD, PVOID, DWORD); + BOOL HttpQueryInfoA(HINTERNET, DWORD, PVOID, PDWORD, PDWORD); + BOOL HttpQueryInfoW(HINTERNET, DWORD, PVOID, PDWORD, PDWORD); + BOOL InternetSetCookieA(LPCSTR, LPCSTR, LPCSTR); + BOOL InternetSetCookieW(LPCSTR, LPCWSTR, LPCWSTR); + BOOL InternetGetCookieA(LPCSTR, LPCSTR, LPSTR, PDWORD); + BOOL InternetGetCookieW(LPCSTR, LPCWSTR, LPWSTR, PDWORD); + DWORD InternetAttemptConnect(DWORD); + DWORD InternetErrorDlg(HWND, HINTERNET, DWORD, DWORD, PVOID*); + DWORD InternetConfirmZoneCrossing(HWND, LPSTR, LPSTR, BOOL); + BOOL CreateUrlCacheEntryA(LPCSTR, DWORD, LPCSTR, LPSTR, DWORD); + BOOL CreateUrlCacheEntryW(LPCSTR, DWORD, LPCSTR, LPWSTR, DWORD); + BOOL CommitUrlCacheEntryA(LPCSTR, LPCSTR, FILETIME, FILETIME, DWORD, + LPBYTE, DWORD, LPCSTR, DWORD); + BOOL CommitUrlCacheEntryW(LPCSTR, LPCWSTR, FILETIME, FILETIME, DWORD, + LPBYTE, DWORD, LPCWSTR, DWORD); + BOOL RetrieveUrlCacheEntryFileA(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOA, + PDWORD, DWORD); + BOOL RetrieveUrlCacheEntryFileW(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOW, + PDWORD, DWORD); + BOOL UnlockUrlCacheEntryFile(LPCSTR, DWORD); + HANDLE RetrieveUrlCacheEntryStreamA(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOA, + PDWORD, BOOL, DWORD); + HANDLE RetrieveUrlCacheEntryStreamW(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOW, + PDWORD, BOOL, DWORD); + BOOL ReadUrlCacheEntryStream(HANDLE, DWORD, PVOID, PDWORD, DWORD); + BOOL UnlockUrlCacheEntryStream(HANDLE, DWORD); + BOOL GetUrlCacheEntryInfoA(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOA, PDWORD); + BOOL GetUrlCacheEntryInfoW(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOW, PDWORD); + BOOL SetUrlCacheEntryInfoA(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOA, DWORD); + BOOL SetUrlCacheEntryInfoW(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOW, DWORD); + HANDLE FindFirstUrlCacheEntryA(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOA, + PDWORD); + HANDLE FindFirstUrlCacheEntryW(LPCSTR, LPINTERNET_CACHE_ENTRY_INFOW, + PDWORD); + BOOL FindNextUrlCacheEntryA(HANDLE, LPINTERNET_CACHE_ENTRY_INFOA, PDWORD); + BOOL FindNextUrlCacheEntryW(HANDLE, LPINTERNET_CACHE_ENTRY_INFOW, PDWORD); + BOOL FindCloseUrlCache(HANDLE); + BOOL DeleteUrlCacheEntry(LPCSTR); + DWORD AuthenticateUser(PVOID*, LPSTR, LPSTR, DWORD, LPSTR, DWORD, LPSTR, + LPSTR); + BOOL HttpSendRequestExA(HINTERNET, LPINTERNET_BUFFERSA, + LPINTERNET_BUFFERSA, DWORD, DWORD); + BOOL HttpSendRequestExW(HINTERNET, LPINTERNET_BUFFERSW, + LPINTERNET_BUFFERSW, DWORD, DWORD); + BOOL HttpEndRequestA(HINTERNET, LPINTERNET_BUFFERSA, DWORD, DWORD); + BOOL HttpEndRequestW(HINTERNET, LPINTERNET_BUFFERSW, DWORD, DWORD); + DWORD InternetDial(HWND, LPTSTR, DWORD, LPDWORD, DWORD); + DWORD InternetHangUp(DWORD, DWORD); + BOOL InternetGoOnline(LPTSTR, HWND, DWORD); + BOOL InternetAutodial(DWORD, DWORD); + BOOL InternetAutodialHangup(DWORD); + BOOL InternetGetConnectedState(LPDWORD, DWORD); + BOOL InternetSetDialState(LPCTSTR, DWORD, DWORD); + BOOL InternetReadFileExA(HINTERNET, LPINTERNET_BUFFERSA, DWORD, DWORD_PTR); + BOOL InternetReadFileExW(HINTERNET, LPINTERNET_BUFFERSW, DWORD, DWORD_PTR); + GROUPID CreateUrlCacheGroup(DWORD, LPVOID); + BOOL DeleteUrlCacheGroup(GROUPID, DWORD, LPVOID); + HANDLE FindFirstUrlCacheGroup(DWORD, DWORD, LPVOID, DWORD, GROUPID*, + LPVOID); + BOOL FindNextUrlCacheGroup(HANDLE, GROUPID*, LPVOID); + BOOL GetUrlCacheGroupAttributeA(GROUPID, DWORD, DWORD, + LPINTERNET_CACHE_GROUP_INFOA, LPDWORD, LPVOID); + BOOL GetUrlCacheGroupAttributeW(GROUPID, DWORD, DWORD, + LPINTERNET_CACHE_GROUP_INFOW, LPDWORD, LPVOID); + BOOL SetUrlCacheGroupAttributeA(GROUPID, DWORD, DWORD, + LPINTERNET_CACHE_GROUP_INFOA, LPVOID); + BOOL SetUrlCacheGroupAttributeW(GROUPID, DWORD, DWORD, + LPINTERNET_CACHE_GROUP_INFOW, LPVOID); +} + +version (Unicode) { + alias URL_COMPONENTSW URL_COMPONENTS; + alias LPURL_COMPONENTSW LPURL_COMPONENTS; + alias GOPHER_FIND_DATAW GOPHER_FIND_DATA; + alias LPGOPHER_FIND_DATAW LPGOPHER_FIND_DATA; + alias INTERNET_CACHE_ENTRY_INFOW INTERNET_CACHE_ENTRY_INFO; + alias LPINTERNET_CACHE_ENTRY_INFOW LPINTERNET_CACHE_ENTRY_INFO; + alias INTERNET_BUFFERSW INTERNET_BUFFERS; + alias INTERNET_CACHE_GROUP_INFOW INTERNET_CACHE_GROUP_INFO; + alias LPINTERNET_CACHE_GROUP_INFOW LPINTERNET_CACHE_GROUP_INFO; + alias InternetCrackUrlW InternetCrackUrl; + alias InternetCreateUrlW InternetCreateUrl; + alias InternetCanonicalizeUrlW InternetCanonicalizeUrl; + alias InternetCheckConnectionW InternetCheckConnection; + alias InternetCombineUrlW InternetCombineUrl; + alias InternetOpenW InternetOpen; + alias InternetConnectW InternetConnect; + alias InternetOpenUrlW InternetOpenUrl; + alias InternetFindNextFileW InternetFindNextFile; + alias InternetQueryOptionW InternetQueryOption; + alias InternetSetOptionW InternetSetOption; + alias InternetSetOptionExW InternetSetOptionEx; + alias InternetGetLastResponseInfoW InternetGetLastResponseInfo; + alias InternetReadFileExW InternetReadFileEx; + alias FtpFindFirstFileW FtpFindFirstFile; + alias FtpGetFileW FtpGetFile; + alias FtpPutFileW FtpPutFile; + alias FtpDeleteFileW FtpDeleteFile; + alias FtpRenameFileW FtpRenameFile; + alias FtpOpenFileW FtpOpenFile; + alias FtpCreateDirectoryW FtpCreateDirectory; + alias FtpRemoveDirectoryW FtpRemoveDirectory; + alias FtpSetCurrentDirectoryW FtpSetCurrentDirectory; + alias FtpGetCurrentDirectoryW FtpGetCurrentDirectory; + alias FtpCommandW FtpCommand; + alias GopherGetLocatorTypeW GopherGetLocatorType; + alias GopherCreateLocatorW GopherCreateLocator; + alias GopherFindFirstFileW GopherFindFirstFile; + alias GopherOpenFileW GopherOpenFile; + alias GopherGetAttributeW GopherGetAttribute; + alias HttpSendRequestW HttpSendRequest; + alias HttpOpenRequestW HttpOpenRequest; + alias HttpAddRequestHeadersW HttpAddRequestHeaders; + alias HttpQueryInfoW HttpQueryInfo; + alias InternetSetCookieW InternetSetCookie; + alias InternetGetCookieW InternetGetCookie; + alias CreateUrlCacheEntryW CreateUrlCacheEntry; + alias RetrieveUrlCacheEntryStreamW RetrieveUrlCacheEntryStream; + alias FindNextUrlCacheEntryW FindNextUrlCacheEntry; + alias CommitUrlCacheEntryW CommitUrlCacheEntry; + alias GetUrlCacheEntryInfoW GetUrlCacheEntryInfo; + alias SetUrlCacheEntryInfoW SetUrlCacheEntryInfo; + alias FindFirstUrlCacheEntryW FindFirstUrlCacheEntry; + alias RetrieveUrlCacheEntryFileW RetrieveUrlCacheEntryFile; + alias HttpSendRequestExW HttpSendRequestEx; + alias HttpEndRequestW HttpEndRequest; + alias GetUrlCacheGroupAttributeW GetUrlCacheGroupAttribute; + alias SetUrlCacheGroupAttributeW SetUrlCacheGroupAttribute; +} else { + alias URL_COMPONENTSA URL_COMPONENTS; + alias LPURL_COMPONENTSA LPURL_COMPONENTS; + alias GOPHER_FIND_DATAA GOPHER_FIND_DATA; + alias LPGOPHER_FIND_DATAA LPGOPHER_FIND_DATA; + alias INTERNET_CACHE_ENTRY_INFOA INTERNET_CACHE_ENTRY_INFO; + alias LPINTERNET_CACHE_ENTRY_INFOA LPINTERNET_CACHE_ENTRY_INFO; + alias INTERNET_BUFFERSA INTERNET_BUFFERS; + alias INTERNET_CACHE_GROUP_INFOA INTERNET_CACHE_GROUP_INFO; + alias LPINTERNET_CACHE_GROUP_INFOA LPINTERNET_CACHE_GROUP_INFO; + alias GopherGetAttributeA GopherGetAttribute; + alias InternetCrackUrlA InternetCrackUrl; + alias InternetCreateUrlA InternetCreateUrl; + alias InternetCanonicalizeUrlA InternetCanonicalizeUrl; + alias InternetCheckConnectionA InternetCheckConnection; + alias InternetCombineUrlA InternetCombineUrl; + alias InternetOpenA InternetOpen; + alias InternetConnectA InternetConnect; + alias InternetOpenUrlA InternetOpenUrl; + alias InternetFindNextFileA InternetFindNextFile; + alias InternetQueryOptionA InternetQueryOption; + alias InternetSetOptionA InternetSetOption; + alias InternetSetOptionExA InternetSetOptionEx; + alias InternetGetLastResponseInfoA InternetGetLastResponseInfo; + alias InternetReadFileExA InternetReadFileEx; + alias FtpFindFirstFileA FtpFindFirstFile; + alias FtpGetFileA FtpGetFile; + alias FtpPutFileA FtpPutFile; + alias FtpDeleteFileA FtpDeleteFile; + alias FtpRenameFileA FtpRenameFile; + alias FtpOpenFileA FtpOpenFile; + alias FtpCreateDirectoryA FtpCreateDirectory; + alias FtpRemoveDirectoryA FtpRemoveDirectory; + alias FtpSetCurrentDirectoryA FtpSetCurrentDirectory; + alias FtpGetCurrentDirectoryA FtpGetCurrentDirectory; + alias FtpCommandA FtpCommand; + alias GopherGetLocatorTypeA GopherGetLocatorType; + alias GopherCreateLocatorA GopherCreateLocator; + alias GopherFindFirstFileA GopherFindFirstFile; + alias GopherOpenFileA GopherOpenFile; + alias HttpSendRequestA HttpSendRequest; + alias HttpOpenRequestA HttpOpenRequest; + alias HttpAddRequestHeadersA HttpAddRequestHeaders; + alias HttpQueryInfoA HttpQueryInfo; + alias InternetSetCookieA InternetSetCookie; + alias InternetGetCookieA InternetGetCookie; + alias CreateUrlCacheEntryA CreateUrlCacheEntry; + alias RetrieveUrlCacheEntryStreamA RetrieveUrlCacheEntryStream; + alias FindNextUrlCacheEntryA FindNextUrlCacheEntry; + alias CommitUrlCacheEntryA CommitUrlCacheEntry; + alias GetUrlCacheEntryInfoA GetUrlCacheEntryInfo; + alias SetUrlCacheEntryInfoA SetUrlCacheEntryInfo; + alias FindFirstUrlCacheEntryA FindFirstUrlCacheEntry; + alias RetrieveUrlCacheEntryFileA RetrieveUrlCacheEntryFile; + alias HttpSendRequestExA HttpSendRequestEx; + alias HttpEndRequestA HttpEndRequest; + alias GetUrlCacheGroupAttributeA GetUrlCacheGroupAttribute; + alias SetUrlCacheGroupAttributeA SetUrlCacheGroupAttribute; +} + +alias INTERNET_BUFFERS* LPINTERNET_BUFFERS; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winioctl.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winioctl.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,712 @@ +/***********************************************************************\ +* winioctl.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winioctl; + +// FIXME: check types of some constants + +private import win32.basetyps, win32.windef; + +const size_t + HIST_NO_OF_BUCKETS = 24, + HISTOGRAM_BUCKET_SIZE = HISTOGRAM_BUCKET.sizeof, + DISK_HISTOGRAM_SIZE = DISK_HISTOGRAM.sizeof; + +alias DWORD DEVICE_TYPE; + +enum : DEVICE_TYPE { + FILE_DEVICE_BEEP = 1, + FILE_DEVICE_CD_ROM, + FILE_DEVICE_CD_ROM_FILE_SYSTEM, + FILE_DEVICE_CONTROLLER, + FILE_DEVICE_DATALINK, + FILE_DEVICE_DFS, + FILE_DEVICE_DISK, + FILE_DEVICE_DISK_FILE_SYSTEM, + FILE_DEVICE_FILE_SYSTEM, + FILE_DEVICE_INPORT_PORT, + FILE_DEVICE_KEYBOARD, + FILE_DEVICE_MAILSLOT, + FILE_DEVICE_MIDI_IN, + FILE_DEVICE_MIDI_OUT, + FILE_DEVICE_MOUSE, + FILE_DEVICE_MULTI_UNC_PROVIDER, + FILE_DEVICE_NAMED_PIPE, + FILE_DEVICE_NETWORK, + FILE_DEVICE_NETWORK_BROWSER, + FILE_DEVICE_NETWORK_FILE_SYSTEM, + FILE_DEVICE_NULL, + FILE_DEVICE_PARALLEL_PORT, + FILE_DEVICE_PHYSICAL_NETCARD, + FILE_DEVICE_PRINTER, + FILE_DEVICE_SCANNER, + FILE_DEVICE_SERIAL_MOUSE_PORT, + FILE_DEVICE_SERIAL_PORT, + FILE_DEVICE_SCREEN, + FILE_DEVICE_SOUND, + FILE_DEVICE_STREAMS, + FILE_DEVICE_TAPE, + FILE_DEVICE_TAPE_FILE_SYSTEM, + FILE_DEVICE_TRANSPORT, + FILE_DEVICE_UNKNOWN, + FILE_DEVICE_VIDEO, + FILE_DEVICE_VIRTUAL_DISK, + FILE_DEVICE_WAVE_IN, + FILE_DEVICE_WAVE_OUT, + FILE_DEVICE_8042_PORT, + FILE_DEVICE_NETWORK_REDIRECTOR, + FILE_DEVICE_BATTERY, + FILE_DEVICE_BUS_EXTENDER, + FILE_DEVICE_MODEM, + FILE_DEVICE_VDM, + FILE_DEVICE_MASS_STORAGE, + FILE_DEVICE_SMB, + FILE_DEVICE_KS, + FILE_DEVICE_CHANGER, + FILE_DEVICE_SMARTCARD, + FILE_DEVICE_ACPI, + FILE_DEVICE_DVD, + FILE_DEVICE_FULLSCREEN_VIDEO, + FILE_DEVICE_DFS_FILE_SYSTEM, + FILE_DEVICE_DFS_VOLUME, + FILE_DEVICE_SERENUM, + FILE_DEVICE_TERMSRV, + FILE_DEVICE_KSEC // = 57 +} + +enum { + METHOD_BUFFERED, + METHOD_IN_DIRECT, + METHOD_OUT_DIRECT, + METHOD_NEITHER +} + +enum { + FILE_ANY_ACCESS, + FILE_SPECIAL_ACCESS = 0, + FILE_READ_ACCESS, + FILE_WRITE_ACCESS +} + +/* Bit pattern: + * tttttttt tttttttt aaffffff ffffffmm + */ +/+ +#define CTL_CODE(t, f, m, a) (((t)<<16)|((a)<<14)|((f)<<2)|(m)) ++/ + +template CTL_CODE_T(DEVICE_TYPE t, uint f, uint m, uint a) { + const DWORD CTL_CODE_T = (t << 16) | (a << 14) | (f << 2) | m; +} + +DEVICE_TYPE DEVICE_TYPE_FROM_CTL_CODE(DWORD c) { + return (c & 0xFFFF0000) >> 16; +} + +const DEVICE_TYPE + IOCTL_STORAGE_BASE = FILE_DEVICE_MASS_STORAGE, + IOCTL_DISK_BASE = FILE_DEVICE_DISK, + IOCTL_VOLUME_BASE = 'V'; + +enum : DWORD { + IOCTL_STORAGE_CHECK_VERIFY = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_STORAGE_CHECK_VERIFY2 = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0200, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_STORAGE_MEDIA_REMOVAL = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0201, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_STORAGE_EJECT_MEDIA = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0202, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_STORAGE_LOAD_MEDIA = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_STORAGE_LOAD_MEDIA2 = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0203, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_STORAGE_RESERVE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0204, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_STORAGE_RELEASE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0205, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_STORAGE_FIND_NEW_DEVICES = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0206, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_STORAGE_EJECTION_CONTROL = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0250, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_STORAGE_MCN_CONTROL = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0251, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_STORAGE_GET_MEDIA_TYPES = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0300, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_STORAGE_GET_MEDIA_TYPES_EX = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0301, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_STORAGE_RESET_BUS = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0400, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_STORAGE_RESET_DEVICE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0401, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_STORAGE_GET_DEVICE_NUMBER = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0420, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_STORAGE_PREDICT_FAILURE = CTL_CODE_T!(IOCTL_STORAGE_BASE, 0x0440, METHOD_BUFFERED, FILE_ANY_ACCESS), + + IOCTL_DISK_GET_DRIVE_GEOMETRY = CTL_CODE_T!(IOCTL_DISK_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_GET_PARTITION_INFO = CTL_CODE_T!(IOCTL_DISK_BASE, 1, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_SET_PARTITION_INFO = CTL_CODE_T!(IOCTL_DISK_BASE, 2, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), + IOCTL_DISK_GET_DRIVE_LAYOUT = CTL_CODE_T!(IOCTL_DISK_BASE, 3, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_SET_DRIVE_LAYOUT = CTL_CODE_T!(IOCTL_DISK_BASE, 4, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), + IOCTL_DISK_VERIFY = CTL_CODE_T!(IOCTL_DISK_BASE, 5, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_FORMAT_TRACKS = CTL_CODE_T!(IOCTL_DISK_BASE, 6, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), + IOCTL_DISK_REASSIGN_BLOCKS = CTL_CODE_T!(IOCTL_DISK_BASE, 7, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), + IOCTL_DISK_PERFORMANCE = CTL_CODE_T!(IOCTL_DISK_BASE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_IS_WRITABLE = CTL_CODE_T!(IOCTL_DISK_BASE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_LOGGING = CTL_CODE_T!(IOCTL_DISK_BASE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_FORMAT_TRACKS_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 11, METHOD_BUFFERED, FILE_READ_ACCESS|FILE_WRITE_ACCESS), + IOCTL_DISK_HISTOGRAM_STRUCTURE = CTL_CODE_T!(IOCTL_DISK_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_HISTOGRAM_DATA = CTL_CODE_T!(IOCTL_DISK_BASE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_HISTOGRAM_RESET = CTL_CODE_T!(IOCTL_DISK_BASE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_REQUEST_STRUCTURE = CTL_CODE_T!(IOCTL_DISK_BASE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_REQUEST_DATA = CTL_CODE_T!(IOCTL_DISK_BASE, 16, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_GET_PARTITION_INFO_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x12, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_SET_PARTITION_INFO_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x13, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), + IOCTL_DISK_GET_DRIVE_LAYOUT_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x14, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_SET_DRIVE_LAYOUT_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x15, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), + IOCTL_DISK_CREATE_DISK = CTL_CODE_T!(IOCTL_DISK_BASE, 0x16, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), + IOCTL_DISK_GET_LENGTH_INFO = CTL_CODE_T!(IOCTL_DISK_BASE, 0x17, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_PERFORMANCE_OFF = CTL_CODE_T!(IOCTL_DISK_BASE, 0x18, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_GET_DRIVE_GEOMETRY_EX = CTL_CODE_T!(IOCTL_DISK_BASE, 0x28, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_GROW_PARTITION = CTL_CODE_T!(IOCTL_DISK_BASE, 0x34, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), + IOCTL_DISK_GET_CACHE_INFORMATION = CTL_CODE_T!(IOCTL_DISK_BASE, 0x35, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_SET_CACHE_INFORMATION = CTL_CODE_T!(IOCTL_DISK_BASE, 0x36, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), + IOCTL_DISK_DELETE_DRIVE_LAYOUT = CTL_CODE_T!(IOCTL_DISK_BASE, 0x40, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), + IOCTL_DISK_UPDATE_PROPERTIES = CTL_CODE_T!(IOCTL_DISK_BASE, 0x50, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_CHECK_VERIFY = CTL_CODE_T!(IOCTL_DISK_BASE, 0x200, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_MEDIA_REMOVAL = CTL_CODE_T!(IOCTL_DISK_BASE, 0x201, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_EJECT_MEDIA = CTL_CODE_T!(IOCTL_DISK_BASE, 0x202, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_LOAD_MEDIA = CTL_CODE_T!(IOCTL_DISK_BASE, 0x203, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_RESERVE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x204, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_RELEASE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x205, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_FIND_NEW_DEVICES = CTL_CODE_T!(IOCTL_DISK_BASE, 0x206, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_REMOVE_DEVICE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x207, METHOD_BUFFERED, FILE_READ_ACCESS), + IOCTL_DISK_GET_MEDIA_TYPES = CTL_CODE_T!(IOCTL_DISK_BASE, 0x300, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_DISK_UPDATE_DRIVE_SIZE = CTL_CODE_T!(IOCTL_DISK_BASE, 0x0032, METHOD_BUFFERED, FILE_READ_ACCESS | FILE_WRITE_ACCESS), + IOCTL_SERIAL_LSRMST_INSERT = CTL_CODE_T!(FILE_DEVICE_SERIAL_PORT, 31, METHOD_BUFFERED, FILE_ANY_ACCESS), + + IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS = CTL_CODE_T!(IOCTL_VOLUME_BASE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS), + IOCTL_VOLUME_IS_CLUSTERED = CTL_CODE_T!(IOCTL_VOLUME_BASE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS), + + FSCTL_LOCK_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS), + FSCTL_UNLOCK_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS), + FSCTL_DISMOUNT_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS), + FSCTL_MOUNT_DBLS_VOLUME = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 13, METHOD_BUFFERED, FILE_ANY_ACCESS), + FSCTL_GET_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 15, METHOD_BUFFERED, FILE_ANY_ACCESS), + FSCTL_SET_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 16, METHOD_BUFFERED, FILE_READ_DATA|FILE_WRITE_DATA), + FSCTL_READ_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 17, METHOD_NEITHER, FILE_READ_DATA), + FSCTL_WRITE_COMPRESSION = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 18, METHOD_NEITHER, FILE_WRITE_DATA), + FSCTL_GET_NTFS_VOLUME_DATA = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 25, METHOD_BUFFERED, FILE_ANY_ACCESS), + FSCTL_GET_VOLUME_BITMAP = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 27, METHOD_NEITHER, FILE_ANY_ACCESS), + FSCTL_GET_RETRIEVAL_POINTERS = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 28, METHOD_NEITHER, FILE_ANY_ACCESS), + FSCTL_MOVE_FILE = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 29, METHOD_BUFFERED, FILE_ANY_ACCESS), + FSCTL_GET_REPARSE_POINT = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 42, METHOD_BUFFERED, FILE_ANY_ACCESS), + FSCTL_SET_REPARSE_POINT = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 41, METHOD_BUFFERED, FILE_ANY_ACCESS), + FSCTL_DELETE_REPARSE_POINT = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 43, METHOD_BUFFERED, FILE_ANY_ACCESS), + FSCTL_SET_SPARSE = CTL_CODE_T!(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_SPECIAL_ACCESS), +} + +enum : BYTE { + PARTITION_ENTRY_UNUSED, + PARTITION_FAT_12, + PARTITION_XENIX_1, + PARTITION_XENIX_2, + PARTITION_FAT_16, + PARTITION_EXTENDED, + PARTITION_HUGE, + PARTITION_IFS, // = 0x07 + PARTITION_FAT32 = 0x0B, + PARTITION_FAT32_XINT13 = 0x0C, + PARTITION_XINT13 = 0x0E, + PARTITION_XINT13_EXTENDED = 0x0F, + PARTITION_PREP = 0x41, + PARTITION_LDM = 0x42, + PARTITION_UNIX = 0x63 +} + +const BYTE + PARTITION_NTFT = 0x80, + VALID_NTFT = 0xC0; + +enum { + SERIAL_LSRMST_ESCAPE, + SERIAL_LSRMST_LSR_DATA, + SERIAL_LSRMST_LSR_NODATA, + SERIAL_LSRMST_MST +} + +enum { + DISK_LOGGING_START, + DISK_LOGGING_STOP, + DISK_LOGGING_DUMP, + DISK_BINNING +} + +alias WORD BAD_TRACK_NUMBER; +alias WORD* PBAD_TRACK_NUMBER; + +enum BIN_TYPES { + RequestSize, RequestLocation +} + +struct BIN_RANGE { + LARGE_INTEGER StartValue; + LARGE_INTEGER Length; +} +alias BIN_RANGE* PBIN_RANGE; + +struct BIN_COUNT { + BIN_RANGE BinRange; + DWORD BinCount; +} +alias BIN_COUNT* PBIN_COUNT; + +struct BIN_RESULTS { + DWORD NumberOfBins; + BIN_COUNT _BinCounts; + + BIN_COUNT* BinCounts() { return &_BinCounts; } +} +alias BIN_RESULTS* PBIN_RESULTS; + +enum PARTITION_STYLE { + PARTITION_STYLE_MBR, + PARTITION_STYLE_GPT, + PARTITION_STYLE_RAW +} + +struct CREATE_DISK_GPT { + GUID DiskId; + DWORD MaxPartitionCount; +} +alias CREATE_DISK_GPT* PCREATE_DISK_GPT; + +struct CREATE_DISK_MBR { + DWORD Signature; +} +alias CREATE_DISK_MBR* PCREATE_DISK_MBR; + +struct CREATE_DISK { + PARTITION_STYLE PartitionStyle; + union { + CREATE_DISK_MBR Mbr; + CREATE_DISK_GPT Gpt; + } +} +alias CREATE_DISK* PCREATE_DISK; + +enum DISK_CACHE_RETENTION_PRIORITY { + EqualPriority, + KeepPrefetchedData, + KeepReadData +} + +struct DISK_CACHE_INFORMATION { + BOOLEAN ParametersSavable; + BOOLEAN ReadCacheEnabled; + BOOLEAN WriteCacheEnabled; + DISK_CACHE_RETENTION_PRIORITY ReadRetentionPriority; + DISK_CACHE_RETENTION_PRIORITY WriteRetentionPriority; + WORD DisablePrefetchTransferLength; + BOOLEAN PrefetchScalar; + union { + struct _ScalarPrefetch { + WORD Minimum; + WORD Maximum; + WORD MaximumBlocks; + } + _ScalarPrefetch ScalarPrefetch; + struct _BlockPrefetch { + WORD Minimum; + WORD Maximum; + } + _BlockPrefetch BlockPrefetch; + } +} +alias DISK_CACHE_INFORMATION* PDISK_CACHE_INFORMATION; + +enum DETECTION_TYPE { + DetectNone, + DetectInt13, + DetectExInt13 +} + +struct DISK_INT13_INFO { + WORD DriveSelect; + DWORD MaxCylinders; + WORD SectorsPerTrack; + WORD MaxHeads; + WORD NumberDrives; + } +alias DISK_INT13_INFO* PDISK_INT13_INFO; + +struct DISK_EX_INT13_INFO { + WORD ExBufferSize; + WORD ExFlags; + DWORD ExCylinders; + DWORD ExHeads; + DWORD ExSectorsPerTrack; + DWORD64 ExSectorsPerDrive; + WORD ExSectorSize; + WORD ExReserved; +} +alias DISK_EX_INT13_INFO* PDISK_EX_INT13_INFO; + +struct DISK_DETECTION_INFO { + DWORD SizeOfDetectInfo; + DETECTION_TYPE DetectionType; + DISK_INT13_INFO Int13; + DISK_EX_INT13_INFO ExInt13; +} +alias DISK_DETECTION_INFO* PDISK_DETECTION_INFO; + +enum MEDIA_TYPE { + Unknown, + F5_1Pt2_512, + F3_1Pt44_512, + F3_2Pt88_512, + F3_20Pt8_512, + F3_720_512, + F5_360_512, + F5_320_512, + F5_320_1024, + F5_180_512, + F5_160_512, + RemovableMedia, + FixedMedia, + F3_120M_512, + F3_640_512, + F5_640_512, + F5_720_512, + F3_1Pt2_512, + F3_1Pt23_1024, + F5_1Pt23_1024, + F3_128Mb_512, + F3_230Mb_512, + F8_256_128, + F3_200Mb_512, + F3_240M_512, + F3_32M_512 +} +alias MEDIA_TYPE* PMEDIA_TYPE; + +struct DISK_GEOMETRY { + LARGE_INTEGER Cylinders; + MEDIA_TYPE MediaType; + DWORD TracksPerCylinder; + DWORD SectorsPerTrack; + DWORD BytesPerSector; +} +alias DISK_GEOMETRY* PDISK_GEOMETRY; + +struct DISK_GEOMETRY_EX { + DISK_GEOMETRY Geometry; + LARGE_INTEGER DiskSize; + BYTE _Data; + + BYTE* Data() { return &_Data; } +} +alias DISK_GEOMETRY_EX* PDISK_GEOMETRY_EX; + +struct DISK_GROW_PARTITION { + DWORD PartitionNumber; + LARGE_INTEGER BytesToGrow; +} +alias DISK_GROW_PARTITION* PDISK_GROW_PARTITION; + +struct DISK_PARTITION_INFO { + DWORD SizeOfPartitionInfo; + PARTITION_STYLE PartitionStyle; + union { + //struct { + DWORD Signature; + //} Mbr; + //struct { + GUID DiskId; + //} Gpt; + } +} +alias DISK_PARTITION_INFO* PDISK_PARTITION_INFO; + +struct DISK_PERFORMANCE { + LARGE_INTEGER BytesRead; + LARGE_INTEGER BytesWritten; + LARGE_INTEGER ReadTime; + LARGE_INTEGER WriteTime; + DWORD ReadCount; + DWORD WriteCount; + DWORD QueueDepth; +} +alias DISK_PERFORMANCE* PDISK_PERFORMANCE; + +struct DISK_RECORD { + LARGE_INTEGER ByteOffset; + LARGE_INTEGER StartTime; + LARGE_INTEGER EndTime; + PVOID VirtualAddress; + DWORD NumberOfBytes; + BYTE DeviceNumber; + BOOLEAN ReadRequest; +} +alias DISK_RECORD* PDISK_RECORD; + +struct DISK_LOGGING { + BYTE Function; + PVOID BufferAddress; + DWORD BufferSize; +} +alias DISK_LOGGING* PDISK_LOGGING; + +struct DISKQUOTA_USER_INFORMATION { + LONGLONG QuotaUsed; + LONGLONG QuotaThreshold; + LONGLONG QuotaLimit; +} +alias DISKQUOTA_USER_INFORMATION* PDISKQUOTA_USER_INFORMATION; + +struct FORMAT_PARAMETERS { + MEDIA_TYPE MediaType; + DWORD StartCylinderNumber; + DWORD EndCylinderNumber; + DWORD StartHeadNumber; + DWORD EndHeadNumber; +} +alias FORMAT_PARAMETERS* PFORMAT_PARAMETERS; + +struct FORMAT_EX_PARAMETERS { + MEDIA_TYPE MediaType; + DWORD StartCylinderNumber; + DWORD EndCylinderNumber; + DWORD StartHeadNumber; + DWORD EndHeadNumber; + WORD FormatGapLength; + WORD SectorsPerTrack; + WORD _SectorNumber; + + WORD* SectorNumber() { return &_SectorNumber; } +} +alias FORMAT_EX_PARAMETERS* PFORMAT_EX_PARAMETERS; + +struct GET_LENGTH_INFORMATION { + LARGE_INTEGER Length; +} + +struct HISTOGRAM_BUCKET { + DWORD Reads; + DWORD Writes; +} +alias HISTOGRAM_BUCKET* PHISTOGRAM_BUCKET; + +struct DISK_HISTOGRAM { + LARGE_INTEGER DiskSize; + LARGE_INTEGER Start; + LARGE_INTEGER End; + LARGE_INTEGER Average; + LARGE_INTEGER AverageRead; + LARGE_INTEGER AverageWrite; + DWORD Granularity; + DWORD Size; + DWORD ReadCount; + DWORD WriteCount; + PHISTOGRAM_BUCKET Histogram; +} +alias DISK_HISTOGRAM* PDISK_HISTOGRAM; + +struct DISK_EXTENT { + DWORD DiskNumber; + LARGE_INTEGER StartingOffset; + LARGE_INTEGER ExtentLength; +} +alias DISK_EXTENT* PDISK_EXTENT; + +struct VOLUME_DISK_EXTENTS { + DWORD NumberOfDiskExtents; + DISK_EXTENT _Extents; + + DISK_EXTENT* Extents() { return &_Extents; } +} +alias VOLUME_DISK_EXTENTS* PVOLUME_DISK_EXTENTS; + +struct PARTITION_INFORMATION { + LARGE_INTEGER StartingOffset; + LARGE_INTEGER PartitionLength; + DWORD HiddenSectors; + DWORD PartitionNumber; + BYTE PartitionType; + BOOLEAN BootIndicator; + BOOLEAN RecognizedPartition; + BOOLEAN RewritePartition; +} +alias PARTITION_INFORMATION* PPARTITION_INFORMATION; + +struct DRIVE_LAYOUT_INFORMATION { + DWORD PartitionCount; + DWORD Signature; + PARTITION_INFORMATION _PartitionEntry; + + PARTITION_INFORMATION* PartitionEntry() { return &_PartitionEntry; } +} +alias DRIVE_LAYOUT_INFORMATION* PDRIVE_LAYOUT_INFORMATION; + +struct DRIVE_LAYOUT_INFORMATION_GPT { + GUID DiskId; + LARGE_INTEGER StartingUsableOffset; + LARGE_INTEGER UsableLength; + ULONG MaxPartitionCount; +} +alias DRIVE_LAYOUT_INFORMATION_GPT* PDRIVE_LAYOUT_INFORMATION_GPT; + +struct DRIVE_LAYOUT_INFORMATION_MBR { + ULONG Signature; +} +alias DRIVE_LAYOUT_INFORMATION_MBR* PDRIVE_LAYOUT_INFORMATION_MBR; + +struct PARTITION_INFORMATION_MBR { + BYTE PartitionType; + BOOLEAN BootIndicator; + BOOLEAN RecognizedPartition; + DWORD HiddenSectors; +} + +struct PARTITION_INFORMATION_GPT { + GUID PartitionType; + GUID PartitionId; + DWORD64 Attributes; + WCHAR[36] Name; +} + +struct PARTITION_INFORMATION_EX { + PARTITION_STYLE PartitionStyle; + LARGE_INTEGER StartingOffset; + LARGE_INTEGER PartitionLength; + DWORD PartitionNumber; + BOOLEAN RewritePartition; + union { + PARTITION_INFORMATION_MBR Mbr; + PARTITION_INFORMATION_GPT Gpt; + } +} + +struct DRIVE_LAYOUT_INFORMATION_EX { + DWORD PartitionStyle; + DWORD PartitionCount; + union { + DRIVE_LAYOUT_INFORMATION_MBR Mbr; + DRIVE_LAYOUT_INFORMATION_GPT Gpt; + } + PARTITION_INFORMATION_EX _PartitionEntry; + + PARTITION_INFORMATION_EX* PartitionEntry() { return &_PartitionEntry; } +} +alias DRIVE_LAYOUT_INFORMATION_EX* PDRIVE_LAYOUT_INFORMATION_EX; + +struct MOVE_FILE_DATA { + HANDLE FileHandle; + LARGE_INTEGER StartingVcn; + LARGE_INTEGER StartingLcn; + DWORD ClusterCount; +} +alias MOVE_FILE_DATA* PMOVE_FILE_DATA; + +struct PERF_BIN { + DWORD NumberOfBins; + DWORD TypeOfBin; + BIN_RANGE _BinsRanges; + + BIN_RANGE* BinsRanges() { return &_BinsRanges; } +} +alias PERF_BIN* PPERF_BIN; + +struct PREVENT_MEDIA_REMOVAL { + BOOLEAN PreventMediaRemoval; +} +alias PREVENT_MEDIA_REMOVAL* PPREVENT_MEDIA_REMOVAL; + +struct RETRIEVAL_POINTERS_BUFFER { + DWORD ExtentCount; + LARGE_INTEGER StartingVcn; + // In MinGW, this is declared as struct { ... } Extents[1]; + struct Extent { + LARGE_INTEGER NextVcn; + LARGE_INTEGER Lcn; + } + Extent _Extents; + + Extent* Extents() { return &_Extents; } +} +alias RETRIEVAL_POINTERS_BUFFER* PRETRIEVAL_POINTERS_BUFFER; + +struct REASSIGN_BLOCKS { + WORD Reserved; + WORD Count; + DWORD _BlockNumber; + + DWORD* BlockNumber() { return &_BlockNumber; } +} +alias REASSIGN_BLOCKS* PREASSIGN_BLOCKS; + +struct SET_PARTITION_INFORMATION { + BYTE PartitionType; +} +alias SET_PARTITION_INFORMATION* PSET_PARTITION_INFORMATION; + +struct STARTING_LCN_INPUT_BUFFER { + LARGE_INTEGER StartingLcn; +} +alias STARTING_LCN_INPUT_BUFFER* PSTARTING_LCN_INPUT_BUFFER; + +struct STARTING_VCN_INPUT_BUFFER { + LARGE_INTEGER StartingVcn; +} +alias STARTING_VCN_INPUT_BUFFER* PSTARTING_VCN_INPUT_BUFFER; + +struct VERIFY_INFORMATION { + LARGE_INTEGER StartingOffset; + DWORD Length; +} +alias VERIFY_INFORMATION* PVERIFY_INFORMATION; + +struct VOLUME_BITMAP_BUFFER { + LARGE_INTEGER StartingLcn; + LARGE_INTEGER BitmapSize; + BYTE _Buffer; + + BYTE* Buffer() { return &_Buffer; } +} +alias VOLUME_BITMAP_BUFFER* PVOLUME_BITMAP_BUFFER; + +struct NTFS_VOLUME_DATA_BUFFER { + LARGE_INTEGER VolumeSerialNumber; + LARGE_INTEGER NumberSectors; + LARGE_INTEGER TotalClusters; + LARGE_INTEGER FreeClusters; + LARGE_INTEGER TotalReserved; + DWORD BytesPerSector; + DWORD BytesPerCluster; + DWORD BytesPerFileRecordSegment; + DWORD ClustersPerFileRecordSegment; + LARGE_INTEGER MftValidDataLength; + LARGE_INTEGER MftStartLcn; + LARGE_INTEGER Mft2StartLcn; + LARGE_INTEGER MftZoneStart; + LARGE_INTEGER MftZoneEnd; +} +alias NTFS_VOLUME_DATA_BUFFER* PNTFS_VOLUME_DATA_BUFFER; + + +bool IsRecognizedPartition(BYTE t) { + return ((t & PARTITION_NTFT) + && ((t & ~VALID_NTFT) == PARTITION_FAT_12 + || (t & ~VALID_NTFT) == PARTITION_FAT_16 + || (t & ~VALID_NTFT) == PARTITION_IFS + || (t & ~VALID_NTFT) == PARTITION_HUGE + || (t & ~VALID_NTFT) == PARTITION_FAT32 + || (t & ~VALID_NTFT) == PARTITION_FAT32_XINT13 + || (t & ~VALID_NTFT) == PARTITION_XINT13)) + || (t & ~PARTITION_NTFT) == PARTITION_FAT_12 + || (t & ~PARTITION_NTFT) == PARTITION_FAT_16 + || (t & ~PARTITION_NTFT) == PARTITION_IFS + || (t & ~PARTITION_NTFT) == PARTITION_HUGE + || (t & ~PARTITION_NTFT) == PARTITION_FAT32 + || (t & ~PARTITION_NTFT) == PARTITION_FAT32_XINT13 + || (t & ~PARTITION_NTFT) == PARTITION_XINT13; +} + +bool IsContainerPartition(BYTE t) { + return ((t & PARTITION_NTFT) + && ((t & ~VALID_NTFT) == PARTITION_EXTENDED + || (t & ~VALID_NTFT) == PARTITION_XINT13_EXTENDED)) + || (t & ~PARTITION_NTFT) == PARTITION_EXTENDED + || (t & ~PARTITION_NTFT) == PARTITION_XINT13_EXTENDED; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winldap.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winldap.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,853 @@ +/***********************************************************************\ +* winldap.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winldap; + +/* Comment from MinGW + winldap.h - Header file for the Windows LDAP API + + Written by Filip Navara + + References: + The C LDAP Application Program Interface + http://www.watersprings.org/pub/id/draft-ietf-ldapext-ldap-c-api-05.txt + + Lightweight Directory Access Protocol Reference + http://msdn.microsoft.com/library/en-us/netdir/ldap/ldap_reference.asp + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +import win32.schannel, win32.winber; +private import win32.wincrypt, win32.windef; +version(Tango){ + private import tango.stdc.stdio; +} + +align(4): + +enum { + LDAP_VERSION1 = 1, + LDAP_VERSION2 = 2, + LDAP_VERSION3 = 3, + LDAP_VERSION = LDAP_VERSION2, + LDAP_VERSION_MIN = LDAP_VERSION2, + LDAP_VERSION_MAX = LDAP_VERSION3 +} + +/* MinGW defines ANSI and Unicode versions as LDAP_VENDOR_NAME and + * LDAP_VENDOR_NAME_W respectively; similarly with other string constants + * defined in this module. + */ +const TCHAR[] LDAP_VENDOR_NAME = "Microsoft Corporation."; + +const LDAP_API_VERSION = 2004; +const LDAP_VENDOR_VERSION = 510; +const LDAP_API_INFO_VERSION = 1; +const LDAP_FEATURE_INFO_VERSION = 1; + +enum { + LDAP_SUCCESS = 0x00, + LDAP_OPT_SUCCESS = LDAP_SUCCESS, + LDAP_OPERATIONS_ERROR, + LDAP_PROTOCOL_ERROR, + LDAP_TIMELIMIT_EXCEEDED, + LDAP_SIZELIMIT_EXCEEDED, + LDAP_COMPARE_FALSE, + LDAP_COMPARE_TRUE, + LDAP_STRONG_AUTH_NOT_SUPPORTED, + LDAP_AUTH_METHOD_NOT_SUPPORTED = LDAP_STRONG_AUTH_NOT_SUPPORTED, + LDAP_STRONG_AUTH_REQUIRED, + LDAP_REFERRAL_V2, + LDAP_PARTIAL_RESULTS = LDAP_REFERRAL_V2, + LDAP_REFERRAL, + LDAP_ADMIN_LIMIT_EXCEEDED, + LDAP_UNAVAILABLE_CRIT_EXTENSION, + LDAP_CONFIDENTIALITY_REQUIRED, + LDAP_SASL_BIND_IN_PROGRESS, // = 0x0e + LDAP_NO_SUCH_ATTRIBUTE = 0x10, + LDAP_UNDEFINED_TYPE, + LDAP_INAPPROPRIATE_MATCHING, + LDAP_CONSTRAINT_VIOLATION, + LDAP_TYPE_OR_VALUE_EXISTS, + LDAP_ATTRIBUTE_OR_VALUE_EXISTS = LDAP_TYPE_OR_VALUE_EXISTS, + LDAP_INVALID_SYNTAX, // = 0x15 + LDAP_NO_SUCH_OBJECT = 0x20, + LDAP_ALIAS_PROBLEM, + LDAP_INVALID_DN_SYNTAX, + LDAP_IS_LEAF, + LDAP_ALIAS_DEREF_PROBLEM, // = 0x24 + LDAP_INAPPROPRIATE_AUTH = 0x30, + LDAP_INVALID_CREDENTIALS, + LDAP_INSUFFICIENT_ACCESS, + LDAP_INSUFFICIENT_RIGHTS = LDAP_INSUFFICIENT_ACCESS, + LDAP_BUSY, + LDAP_UNAVAILABLE, + LDAP_UNWILLING_TO_PERFORM, + LDAP_LOOP_DETECT, // = 0x36 + LDAP_NAMING_VIOLATION = 0x40, + LDAP_OBJECT_CLASS_VIOLATION, + LDAP_NOT_ALLOWED_ON_NONLEAF, + LDAP_NOT_ALLOWED_ON_RDN, + LDAP_ALREADY_EXISTS, + LDAP_NO_OBJECT_CLASS_MODS, + LDAP_RESULTS_TOO_LARGE, + LDAP_AFFECTS_MULTIPLE_DSAS, // = 0x47 + LDAP_OTHER = 0x50, + LDAP_SERVER_DOWN, + LDAP_LOCAL_ERROR, + LDAP_ENCODING_ERROR, + LDAP_DECODING_ERROR, + LDAP_TIMEOUT, + LDAP_AUTH_UNKNOWN, + LDAP_FILTER_ERROR, + LDAP_USER_CANCELLED, + LDAP_PARAM_ERROR, + LDAP_NO_MEMORY, + LDAP_CONNECT_ERROR, + LDAP_NOT_SUPPORTED, + LDAP_CONTROL_NOT_FOUND, + LDAP_NO_RESULTS_RETURNED, + LDAP_MORE_RESULTS_TO_RETURN, + LDAP_CLIENT_LOOP, + LDAP_REFERRAL_LIMIT_EXCEEDED // = 0x61 +} + +enum { + LDAP_PORT = 389, + LDAP_SSL_PORT = 636, + LDAP_GC_PORT = 3268, + LDAP_SSL_GC_PORT = 3269 +} + +const void* + LDAP_OPT_OFF = null, + LDAP_OPT_ON = cast(void*) 1; + +enum { + LDAP_OPT_API_INFO = 0x00, + LDAP_OPT_DESC, + LDAP_OPT_DEREF, + LDAP_OPT_SIZELIMIT, + LDAP_OPT_TIMELIMIT, + LDAP_OPT_THREAD_FN_PTRS, + LDAP_OPT_REBIND_FN, + LDAP_OPT_REBIND_ARG, + LDAP_OPT_REFERRALS, + LDAP_OPT_RESTART, + LDAP_OPT_SSL, + LDAP_OPT_TLS = LDAP_OPT_SSL, + LDAP_OPT_IO_FN_PTRS, // = 0x0b + LDAP_OPT_CACHE_FN_PTRS = 0x0d, + LDAP_OPT_CACHE_STRATEGY, + LDAP_OPT_CACHE_ENABLE, + LDAP_OPT_REFERRAL_HOP_LIMIT, + LDAP_OPT_PROTOCOL_VERSION, + LDAP_OPT_VERSION = LDAP_OPT_PROTOCOL_VERSION, + LDAP_OPT_SERVER_CONTROLS, + LDAP_OPT_CLIENT_CONTROLS, // = 0x13 + LDAP_OPT_API_FEATURE_INFO = 0x15, + LDAP_OPT_HOST_NAME = 0x30, + LDAP_OPT_ERROR_NUMBER, + LDAP_OPT_ERROR_STRING, + LDAP_OPT_SERVER_ERROR, + LDAP_OPT_SERVER_EXT_ERROR, // = 0x34 + LDAP_OPT_PING_KEEP_ALIVE = 0x36, + LDAP_OPT_PING_WAIT_TIME, + LDAP_OPT_PING_LIMIT, // = 0x38 + LDAP_OPT_DNSDOMAIN_NAME = 0x3b, + LDAP_OPT_GETDSNAME_FLAGS = 0x3d, + LDAP_OPT_HOST_REACHABLE, + LDAP_OPT_PROMPT_CREDENTIALS, + LDAP_OPT_TCP_KEEPALIVE, // = 0x40 + LDAP_OPT_REFERRAL_CALLBACK = 0x70, + LDAP_OPT_CLIENT_CERTIFICATE = 0x80, + LDAP_OPT_SERVER_CERTIFICATE, // = 0x81 + LDAP_OPT_AUTO_RECONNECT = 0x91, + LDAP_OPT_SSPI_FLAGS, + LDAP_OPT_SSL_INFO, + LDAP_OPT_TLS_INFO = LDAP_OPT_SSL_INFO, + LDAP_OPT_REF_DEREF_CONN_PER_MSG, + LDAP_OPT_SIGN, + LDAP_OPT_ENCRYPT, + LDAP_OPT_SASL_METHOD, + LDAP_OPT_AREC_EXCLUSIVE, + LDAP_OPT_SECURITY_CONTEXT, + LDAP_OPT_ROOTDSE_CACHE // = 0x9a +} + +enum { + LDAP_DEREF_NEVER, + LDAP_DEREF_SEARCHING, + LDAP_DEREF_FINDING, + LDAP_DEREF_ALWAYS +} + +const LDAP_NO_LIMIT = 0; + +const TCHAR[] LDAP_CONTROL_REFERRALS = "1.2.840.113556.1.4.616"; + +// FIXME: check type (declared with U suffix in MinGW) +enum : uint { + LDAP_CHASE_SUBORDINATE_REFERRALS = 0x20, + LDAP_CHASE_EXTERNAL_REFERRALS = 0x40 +} + +enum { + LDAP_SCOPE_DEFAULT = -1, + LDAP_SCOPE_BASE, + LDAP_SCOPE_ONELEVEL, + LDAP_SCOPE_SUBTREE +} + +enum { + LDAP_MOD_ADD, + LDAP_MOD_DELETE, + LDAP_MOD_REPLACE, + LDAP_MOD_BVALUES = 0x80 +} + +enum : int { + LDAP_RES_BIND = 0x61, + LDAP_RES_SEARCH_ENTRY = 0x64, + LDAP_RES_SEARCH_RESULT = 0x65, + LDAP_RES_MODIFY = 0x67, + LDAP_RES_ADD = 0x69, + LDAP_RES_DELETE = 0x6b, + LDAP_RES_MODRDN = 0x6d, + LDAP_RES_COMPARE = 0x6f, + LDAP_RES_SEARCH_REFERENCE = 0x73, + LDAP_RES_EXTENDED = 0x78, + LDAP_RES_ANY = -1 +} + +enum { + LDAP_MSG_ONE, + LDAP_MSG_ALL, + LDAP_MSG_RECEIVED +} + +const TCHAR[] + LDAP_SERVER_SORT_OID = "1.2.840.113556.1.4.473", + LDAP_SERVER_RESP_SORT_OID = "1.2.840.113556.1.4.474", + LDAP_PAGED_RESULT_OID_STRING = "1.2.840.113556.1.4.319", + LDAP_CONTROL_VLVREQUEST = "2.16.840.1.113730.3.4.9", + LDAP_CONTROL_VLVRESPONSE = "2.16.840.1.113730.3.4.10", + LDAP_START_TLS_OID = "1.3.6.1.4.1.1466.20037", + LDAP_TTL_EXTENDED_OP_OID = "1.3.6.1.4.1.1466.101.119.1"; + +enum { + LDAP_AUTH_NONE = 0x00U, + LDAP_AUTH_SIMPLE = 0x80U, + LDAP_AUTH_SASL = 0x83U, + LDAP_AUTH_OTHERKIND = 0x86U, + LDAP_AUTH_EXTERNAL = LDAP_AUTH_OTHERKIND | 0x0020U, + LDAP_AUTH_SICILY = LDAP_AUTH_OTHERKIND | 0x0200U, + LDAP_AUTH_NEGOTIATE = LDAP_AUTH_OTHERKIND | 0x0400U, + LDAP_AUTH_MSN = LDAP_AUTH_OTHERKIND | 0x0800U, + LDAP_AUTH_NTLM = LDAP_AUTH_OTHERKIND | 0x1000U, + LDAP_AUTH_DIGEST = LDAP_AUTH_OTHERKIND | 0x4000U, + LDAP_AUTH_DPA = LDAP_AUTH_OTHERKIND | 0x2000U, + LDAP_AUTH_SSPI = LDAP_AUTH_NEGOTIATE +} + +enum { + LDAP_FILTER_AND = 0xa0, + LDAP_FILTER_OR, + LDAP_FILTER_NOT, + LDAP_FILTER_EQUALITY, + LDAP_FILTER_SUBSTRINGS, + LDAP_FILTER_GE, + LDAP_FILTER_LE, // = 0xa6 + LDAP_FILTER_APPROX = 0xa8, + LDAP_FILTER_EXTENSIBLE, + LDAP_FILTER_PRESENT = 0x87 +} + +enum { + LDAP_SUBSTRING_INITIAL = 0x80, + LDAP_SUBSTRING_ANY, + LDAP_SUBSTRING_FINAL +} + +struct LDAP { + char[76] Reserved; + PCHAR ld_host; + ULONG ld_version; + UCHAR ld_lberoptions; + int ld_deref; + int ld_timelimit; + int ld_sizelimit; + int ld_errno; + PCHAR ld_matched; + PCHAR ld_error; +} +alias LDAP* PLDAP; + +struct LDAPMessage { + ULONG lm_msgid; + ULONG lm_msgtype; + BerElement* lm_ber; + LDAPMessage* lm_chain; + LDAPMessage* lm_next; + ULONG lm_time; +} +alias LDAPMessage* PLDAPMessage; + +struct LDAP_TIMEVAL { + LONG tv_sec; + LONG tv_usec; +} +alias LDAP_TIMEVAL* PLDAP_TIMEVAL; + +struct LDAPAPIInfoA { + int ldapai_info_version; + int ldapai_api_version; + int ldapai_protocol_version; + char** ldapai_extensions; + char* ldapai_vendor_name; + int ldapai_vendor_version; +} +alias LDAPAPIInfoA* PLDAPAPIInfoA; + +struct LDAPAPIInfoW { + int ldapai_info_version; + int ldapai_api_version; + int ldapai_protocol_version; + PWCHAR* ldapai_extensions; + PWCHAR ldapai_vendor_name; + int ldapai_vendor_version; +} +alias LDAPAPIInfoW* PLDAPAPIInfoW; + +struct LDAPAPIFeatureInfoA { + int ldapaif_info_version; + char* ldapaif_name; + int ldapaif_version; +} +alias LDAPAPIFeatureInfoA* PLDAPAPIFeatureInfoA; + +struct LDAPAPIFeatureInfoW { + int ldapaif_info_version; + PWCHAR ldapaif_name; + int ldapaif_version; +} +alias LDAPAPIFeatureInfoW* PLDAPAPIFeatureInfoW; + +struct LDAPControlA { + PCHAR ldctl_oid; + BerValue ldctl_value; + BOOLEAN ldctl_iscritical; +} +alias LDAPControlA* PLDAPControlA; + +struct LDAPControlW { + PWCHAR ldctl_oid; + BerValue ldctl_value; + BOOLEAN ldctl_iscritical; +} +alias LDAPControlW* PLDAPControlW; + +/* Do we really need these? In MinGW, LDAPModA/W have only mod_op, mod_type + * and mod_vals, and macros are used to simulate anonymous unions in those + * structures. + */ +union mod_vals_u_tA { + PCHAR* modv_strvals; + BerValue** modv_bvals; +} + +union mod_vals_u_tW { + PWCHAR* modv_strvals; + BerValue** modv_bvals; +} + +struct LDAPModA { + ULONG mod_op; + PCHAR mod_type; + + union { + mod_vals_u_tA mod_vals; + // The following members are defined as macros in MinGW. + PCHAR* mod_values; + BerValue** mod_bvalues; + } +} +alias LDAPModA* PLDAPModA; + +struct LDAPModW { + ULONG mod_op; + PWCHAR mod_type; + + union { + mod_vals_u_tW mod_vals; + // The following members are defined as macros in MinGW. + PWCHAR* mod_values; + BerValue** mod_bvalues; + } +} +alias LDAPModW* PLDAPModW; + +/* Opaque structure + * http://msdn.microsoft.com/library/en-us/ldap/ldap/ldapsearch.asp + */ +struct LDAPSearch; +alias LDAPSearch* PLDAPSearch; + +struct LDAPSortKeyA { + PCHAR sk_attrtype; + PCHAR sk_matchruleoid; + BOOLEAN sk_reverseorder; +} +alias LDAPSortKeyA* PLDAPSortKeyA; + +struct LDAPSortKeyW { + PWCHAR sk_attrtype; + PWCHAR sk_matchruleoid; + BOOLEAN sk_reverseorder; +} +alias LDAPSortKeyW* PLDAPSortKeyW; + +/* MinGW defines these as immediate function typedefs, which don't translate + * well into D. + */ +extern (C) { + alias ULONG function(PLDAP, PLDAP, PWCHAR, PCHAR, ULONG, PVOID, PVOID, + PLDAP*) QUERYFORCONNECTION; + alias BOOLEAN function(PLDAP, PLDAP, PWCHAR, PCHAR, PLDAP, ULONG, PVOID, + PVOID, ULONG) NOTIFYOFNEWCONNECTION; + alias ULONG function(PLDAP, PLDAP) DEREFERENCECONNECTION; + alias BOOLEAN function(PLDAP, PSecPkgContext_IssuerListInfoEx, + PCCERT_CONTEXT*) QUERYCLIENTCERT; +} + +struct LDAP_REFERRAL_CALLBACK { + ULONG SizeOfCallbacks; + QUERYFORCONNECTION* QueryForConnection; + NOTIFYOFNEWCONNECTION* NotifyRoutine; + DEREFERENCECONNECTION* DereferenceRoutine; +} +alias LDAP_REFERRAL_CALLBACK* PLDAP_REFERRAL_CALLBACK; + +struct LDAPVLVInfo { + int ldvlv_version; + uint ldvlv_before_count; + uint ldvlv_after_count; + uint ldvlv_offset; + uint ldvlv_count; + BerValue* ldvlv_attrvalue; + BerValue* ldvlv_context; + void* ldvlv_extradata; +} + +/* + * Under Microsoft WinLDAP the function ldap_error is only stub. + * This macro uses LDAP structure to get error string and pass it to the user. + */ +int ldap_perror(LDAP* handle, char* message) { + return printf("%s: %s\n", message, handle.ld_error); +} + +/* FIXME: In MinGW, these are WINLDAPAPI == DECLSPEC_IMPORT. Linkage + * attribute? + */ +extern (C) { + PLDAP ldap_initA(PCHAR, ULONG); + PLDAP ldap_initW(PWCHAR, ULONG); + PLDAP ldap_openA(PCHAR, ULONG); + PLDAP ldap_openW(PWCHAR, ULONG); + PLDAP cldap_openA(PCHAR, ULONG); + PLDAP cldap_openW(PWCHAR, ULONG); + ULONG ldap_connect(LDAP*, LDAP_TIMEVAL*); + PLDAP ldap_sslinitA(PCHAR, ULONG, int); + PLDAP ldap_sslinitW(PWCHAR, ULONG, int); + ULONG ldap_start_tls_sA(LDAP*, PLDAPControlA*, PLDAPControlA*); + ULONG ldap_start_tls_sW(LDAP*, PLDAPControlW*, PLDAPControlW*); + BOOLEAN ldap_stop_tls_s(LDAP*); + ULONG ldap_get_optionA(LDAP*, int, void*); + ULONG ldap_get_optionW(LDAP*, int, void*); + ULONG ldap_set_optionA(LDAP*, int, void*); + ULONG ldap_set_optionW(LDAP*, int, void*); + ULONG ldap_control_freeA(LDAPControlA*); + ULONG ldap_control_freeW(LDAPControlW*); + ULONG ldap_controls_freeA(LDAPControlA**); + ULONG ldap_controls_freeW(LDAPControlW**); + ULONG ldap_free_controlsA(LDAPControlA**); + ULONG ldap_free_controlsW(LDAPControlW**); + ULONG ldap_sasl_bindA(LDAP*, PCHAR, PCHAR, BERVAL*, PLDAPControlA*, + PLDAPControlA*, int*); + ULONG ldap_sasl_bindW(LDAP*, PWCHAR, PWCHAR, BERVAL*, PLDAPControlW*, + PLDAPControlW*, int*); + ULONG ldap_sasl_bind_sA(LDAP*, PCHAR, PCHAR, BERVAL*, PLDAPControlA*, + PLDAPControlA*, PBERVAL*); + ULONG ldap_sasl_bind_sW(LDAP*, PWCHAR, PWCHAR, BERVAL*, PLDAPControlW*, + PLDAPControlW*, PBERVAL*); + ULONG ldap_simple_bindA(LDAP*, PCHAR, PCHAR); + ULONG ldap_simple_bindW(LDAP*, PWCHAR, PWCHAR); + ULONG ldap_simple_bind_sA(LDAP*, PCHAR, PCHAR); + ULONG ldap_simple_bind_sW(LDAP*, PWCHAR, PWCHAR); + ULONG ldap_unbind(LDAP*); + ULONG ldap_unbind_s(LDAP*); + ULONG ldap_search_extA(LDAP*, PCHAR, ULONG, PCHAR, PCHAR[], ULONG, + PLDAPControlW*, PLDAPControlW*, ULONG, ULONG, ULONG*); + ULONG ldap_search_extW(LDAP*, PWCHAR, ULONG, PWCHAR, PWCHAR[], ULONG, + PLDAPControlW*, PLDAPControlW*, ULONG, ULONG, ULONG*); + ULONG ldap_search_ext_sA(LDAP*, PCHAR, ULONG, PCHAR, PCHAR[], ULONG, + PLDAPControlA*, PLDAPControlA*, LDAP_TIMEVAL*, ULONG, LDAPMessage**); + ULONG ldap_search_ext_sW(LDAP*, PWCHAR, ULONG, PWCHAR, PWCHAR[], ULONG, + PLDAPControlW*, PLDAPControlW*, LDAP_TIMEVAL*, ULONG, LDAPMessage**); + ULONG ldap_searchA(LDAP*, PCHAR, ULONG, PCHAR, PCHAR[], ULONG); + ULONG ldap_searchW(LDAP*, PWCHAR, ULONG, PWCHAR, PWCHAR[], ULONG); + ULONG ldap_search_sA(LDAP*, PCHAR, ULONG, PCHAR, PCHAR[], ULONG, + LDAPMessage**); + ULONG ldap_search_sW(LDAP*, PWCHAR, ULONG, PWCHAR, PWCHAR[], ULONG, + LDAPMessage**); + ULONG ldap_search_stA(LDAP*, PCHAR, ULONG, PCHAR, PCHAR[], ULONG, + LDAP_TIMEVAL*, LDAPMessage**); + ULONG ldap_search_stW(LDAP*, PWCHAR, ULONG, PWCHAR, PWCHAR[], ULONG, + LDAP_TIMEVAL*, LDAPMessage**); + ULONG ldap_compare_extA(LDAP*, PCHAR, PCHAR, PCHAR, BerValue*, + PLDAPControlA*, PLDAPControlA*, ULONG*); + ULONG ldap_compare_extW(LDAP*, PWCHAR, PWCHAR, PWCHAR, BerValue*, + PLDAPControlW*, PLDAPControlW*, ULONG*); + ULONG ldap_compare_ext_sA(LDAP*, PCHAR, PCHAR, PCHAR, BerValue*, + PLDAPControlA*, PLDAPControlA*); + ULONG ldap_compare_ext_sW(LDAP*, PWCHAR, PWCHAR, PWCHAR, BerValue*, + PLDAPControlW*, PLDAPControlW*); + ULONG ldap_compareA(LDAP*, PCHAR, PCHAR, PCHAR); + ULONG ldap_compareW(LDAP*, PWCHAR, PWCHAR, PWCHAR); + ULONG ldap_compare_sA(LDAP*, PCHAR, PCHAR, PCHAR); + ULONG ldap_compare_sW(LDAP*, PWCHAR, PWCHAR, PWCHAR); + ULONG ldap_modify_extA(LDAP*, PCHAR, LDAPModA*[], PLDAPControlA*, + PLDAPControlA*, ULONG*); + ULONG ldap_modify_extW(LDAP*, PWCHAR, LDAPModW*[], PLDAPControlW*, + PLDAPControlW*, ULONG*); + ULONG ldap_modify_ext_sA(LDAP*, PCHAR, LDAPModA*[], PLDAPControlA*, + PLDAPControlA*); + ULONG ldap_modify_ext_sW(LDAP*, PWCHAR, LDAPModW*[], PLDAPControlW*, + PLDAPControlW*); + ULONG ldap_modifyA(LDAP*, PCHAR, LDAPModA*[]); + ULONG ldap_modifyW(LDAP*, PWCHAR, LDAPModW*[]); + ULONG ldap_modify_sA(LDAP*, PCHAR, LDAPModA*[]); + ULONG ldap_modify_sW(LDAP*, PWCHAR, LDAPModW*[]); + ULONG ldap_rename_extA(LDAP*, PCHAR, PCHAR, PCHAR, INT, PLDAPControlA*, + PLDAPControlA*, ULONG*); + ULONG ldap_rename_extW(LDAP*, PWCHAR, PWCHAR, PWCHAR, INT, PLDAPControlW*, + PLDAPControlW*, ULONG*); + ULONG ldap_rename_ext_sA(LDAP*, PCHAR, PCHAR, PCHAR, INT, + PLDAPControlA*, PLDAPControlA*); + ULONG ldap_rename_ext_sW(LDAP*, PWCHAR, PWCHAR, PWCHAR, INT, + PLDAPControlW*, PLDAPControlW*); + ULONG ldap_add_extA(LDAP*, PCHAR, LDAPModA*[], PLDAPControlA*, + PLDAPControlA*, ULONG*); + ULONG ldap_add_extW(LDAP*, PWCHAR, LDAPModW*[], PLDAPControlW*, + PLDAPControlW*, ULONG*); + ULONG ldap_add_ext_sA(LDAP*, PCHAR, LDAPModA*[], PLDAPControlA*, + PLDAPControlA*); + ULONG ldap_add_ext_sW(LDAP*, PWCHAR, LDAPModW*[], PLDAPControlW*, + PLDAPControlW*); + ULONG ldap_addA(LDAP*, PCHAR, LDAPModA*[]); + ULONG ldap_addW(LDAP*, PWCHAR, LDAPModW*[]); + ULONG ldap_add_sA(LDAP*, PCHAR, LDAPModA*[]); + ULONG ldap_add_sW(LDAP*, PWCHAR, LDAPModW*[]); + ULONG ldap_delete_extA(LDAP*, PCHAR, PLDAPControlA*, PLDAPControlA*, + ULONG*); + ULONG ldap_delete_extW(LDAP*, PWCHAR, PLDAPControlW*, PLDAPControlW*, + ULONG*); + ULONG ldap_delete_ext_sA(LDAP*, PCHAR, PLDAPControlA*, PLDAPControlA*); + ULONG ldap_delete_ext_sW(LDAP*, PWCHAR, PLDAPControlW*, PLDAPControlW*); + ULONG ldap_deleteA(LDAP*, PCHAR); + ULONG ldap_deleteW(LDAP*, PWCHAR); + ULONG ldap_delete_sA(LDAP*, PCHAR); + ULONG ldap_delete_sW(LDAP*, PWCHAR); + ULONG ldap_extended_operationA(LDAP*, PCHAR, BerValue*, PLDAPControlA*, + PLDAPControlA*, ULONG*); + ULONG ldap_extended_operationW(LDAP*, PWCHAR, BerValue*, PLDAPControlW*, + PLDAPControlW*, ULONG*); + ULONG ldap_extended_operation_sA(LDAP*, PCHAR, BerValue*, PLDAPControlA*, + PLDAPControlA*, PCHAR*, BerValue**); + ULONG ldap_extended_operation_sW(LDAP*, PWCHAR, BerValue*, PLDAPControlW*, + PLDAPControlW*, PWCHAR*, BerValue**); + ULONG ldap_close_extended_op(LDAP*, ULONG); + ULONG ldap_abandon(LDAP*, ULONG); + ULONG ldap_result(LDAP*, ULONG, ULONG, LDAP_TIMEVAL*, LDAPMessage**); + ULONG ldap_msgfree(LDAPMessage*); + ULONG ldap_parse_resultA(LDAP*, LDAPMessage*, ULONG*, PCHAR*, PCHAR*, + PCHAR**, PLDAPControlA**, BOOLEAN); + ULONG ldap_parse_resultW(LDAP*, LDAPMessage*, ULONG*, PWCHAR*, PWCHAR*, + PWCHAR**, PLDAPControlW**, BOOLEAN); + ULONG ldap_parse_extended_resultA(LDAP, LDAPMessage*, PCHAR*, BerValue**, + BOOLEAN); + ULONG ldap_parse_extended_resultW(LDAP, LDAPMessage*, PWCHAR*, BerValue**, + BOOLEAN); + PCHAR ldap_err2stringA(ULONG); + PWCHAR ldap_err2stringW(ULONG); + ULONG LdapGetLastError(); + ULONG LdapMapErrorToWin32(ULONG); + ULONG ldap_result2error(LDAP*, LDAPMessage*, ULONG); + PLDAPMessage ldap_first_entry(LDAP*, LDAPMessage*); + PLDAPMessage ldap_next_entry(LDAP*, LDAPMessage*); + PLDAPMessage ldap_first_reference(LDAP*, LDAPMessage*); + PLDAPMessage ldap_next_reference(LDAP*, LDAPMessage*); + ULONG ldap_count_entries(LDAP*, LDAPMessage*); + ULONG ldap_count_references(LDAP*, LDAPMessage*); + PCHAR ldap_first_attributeA(LDAP*, LDAPMessage*, BerElement**); + PWCHAR ldap_first_attributeW(LDAP*, LDAPMessage*, BerElement**); + PCHAR ldap_next_attributeA(LDAP*, LDAPMessage*, BerElement*); + PWCHAR ldap_next_attributeW(LDAP*, LDAPMessage*, BerElement*); + VOID ldap_memfreeA(PCHAR); + VOID ldap_memfreeW(PWCHAR); + PCHAR* ldap_get_valuesA(LDAP*, LDAPMessage*, PCHAR); + PWCHAR* ldap_get_valuesW(LDAP*, LDAPMessage*, PWCHAR); + BerValue** ldap_get_values_lenA(LDAP*, LDAPMessage*, PCHAR); + BerValue** ldap_get_values_lenW(LDAP*, LDAPMessage*, PWCHAR); + ULONG ldap_count_valuesA(PCHAR*); + ULONG ldap_count_valuesW(PWCHAR*); + ULONG ldap_count_values_len(BerValue**); + ULONG ldap_value_freeA(PCHAR*); + ULONG ldap_value_freeW(PWCHAR*); + ULONG ldap_value_free_len(BerValue**); + PCHAR ldap_get_dnA(LDAP*, LDAPMessage*); + PWCHAR ldap_get_dnW(LDAP*, LDAPMessage*); + PCHAR ldap_explode_dnA(PCHAR, ULONG); + PWCHAR ldap_explode_dnW(PWCHAR, ULONG); + PCHAR ldap_dn2ufnA(PCHAR); + PWCHAR ldap_dn2ufnW(PWCHAR); + ULONG ldap_ufn2dnA(PCHAR, PCHAR*); + ULONG ldap_ufn2dnW(PWCHAR, PWCHAR*); + ULONG ldap_parse_referenceA(LDAP*, LDAPMessage*, PCHAR**); + ULONG ldap_parse_referenceW(LDAP*, LDAPMessage*, PWCHAR**); + ULONG ldap_check_filterA(LDAP*, PCHAR); + ULONG ldap_check_filterW(LDAP*, PWCHAR); + ULONG ldap_create_page_controlA(PLDAP, ULONG, BerValue*, UCHAR, + PLDAPControlA*); + ULONG ldap_create_page_controlW(PLDAP, ULONG, BerValue*, UCHAR, + PLDAPControlW*); + ULONG ldap_create_sort_controlA(PLDAP, PLDAPSortKeyA*, UCHAR, + PLDAPControlA*); + ULONG ldap_create_sort_controlW(PLDAP, PLDAPSortKeyW*, UCHAR, + PLDAPControlW*); + INT ldap_create_vlv_controlA(LDAP*, LDAPVLVInfo*, UCHAR, LDAPControlA**); + INT ldap_create_vlv_controlW(LDAP*, LDAPVLVInfo*, UCHAR, LDAPControlW**); + ULONG ldap_encode_sort_controlA(PLDAP, PLDAPSortKeyA*, PLDAPControlA, + BOOLEAN); + ULONG ldap_encode_sort_controlW(PLDAP, PLDAPSortKeyW*, PLDAPControlW, + BOOLEAN); + ULONG ldap_escape_filter_elementA(PCHAR, ULONG, PCHAR, ULONG); + ULONG ldap_escape_filter_elementW(PWCHAR, ULONG, PWCHAR, ULONG); + ULONG ldap_get_next_page(PLDAP, PLDAPSearch, ULONG, ULONG*); + ULONG ldap_get_next_page_s(PLDAP, PLDAPSearch, LDAP_TIMEVAL*, ULONG, + ULONG*, LDAPMessage**); + ULONG ldap_get_paged_count(PLDAP, PLDAPSearch, ULONG*, PLDAPMessage); + ULONG ldap_parse_page_controlA(PLDAP, PLDAPControlA*, ULONG*, BerValue**); + ULONG ldap_parse_page_controlW(PLDAP, PLDAPControlW*, ULONG*, BerValue**); + ULONG ldap_parse_sort_controlA(PLDAP, PLDAPControlA*, ULONG*, PCHAR*); + ULONG ldap_parse_sort_controlW(PLDAP, PLDAPControlW*, ULONG*, PWCHAR*); + INT ldap_parse_vlv_controlA(LDAP*, LDAPControlA**, uint*, uint*, + BerValue**, int*); + INT ldap_parse_vlv_controlW(LDAP*, LDAPControlW**, uint*, uint*, + BerValue**, int*); + PLDAPSearch ldap_search_init_pageA(PLDAP, PCHAR, ULONG, PCHAR, PCHAR[], + ULONG, PLDAPControlA*, PLDAPControlA*, ULONG, ULONG, PLDAPSortKeyA*); + PLDAPSearch ldap_search_init_pageW(PLDAP, PWCHAR, ULONG, PWCHAR, PWCHAR[], + ULONG, PLDAPControlW*, PLDAPControlW*, ULONG, ULONG, PLDAPSortKeyW*); + ULONG ldap_search_abandon_page(PLDAP, PLDAPSearch); + LDAP ldap_conn_from_msg(LDAP*, LDAPMessage*); + INT LdapUnicodeToUTF8(LPCWSTR, int, LPSTR, int); + INT LdapUTF8ToUnicode(LPCSTR, int, LPWSTR, int); + deprecated { + ULONG ldap_bindA(LDAP*, PCHAR, PCHAR, ULONG); + ULONG ldap_bindW(LDAP*, PWCHAR, PWCHAR, ULONG); + ULONG ldap_bind_sA(LDAP*, PCHAR, PCHAR, ULONG); + ULONG ldap_bind_sW(LDAP*, PWCHAR, PWCHAR, ULONG); + ULONG ldap_modrdnA(LDAP*, PCHAR, PCHAR); + ULONG ldap_modrdnW(LDAP*, PWCHAR, PWCHAR); + ULONG ldap_modrdn_sA(LDAP*, PCHAR, PCHAR); + ULONG ldap_modrdn_sW(LDAP*, PWCHAR, PWCHAR); + ULONG ldap_modrdn2A(LDAP*, PCHAR, PCHAR, INT); + ULONG ldap_modrdn2W(LDAP*, PWCHAR, PWCHAR, INT); + ULONG ldap_modrdn2_sA(LDAP*, PCHAR, PCHAR, INT); + ULONG ldap_modrdn2_sW(LDAP*, PWCHAR, PWCHAR, INT); + } +} + +version (Unicode) { + alias LDAPControlW LDAPControl; + alias PLDAPControlW PLDAPControl; + alias LDAPModW LDAPMod; + alias LDAPModW PLDAPMod; + alias LDAPSortKeyW LDAPSortKey; + alias PLDAPSortKeyW PLDAPSortKey; + alias LDAPAPIInfoW LDAPAPIInfo; + alias PLDAPAPIInfoW PLDAPAPIInfo; + alias LDAPAPIFeatureInfoW LDAPAPIFeatureInfo; + alias PLDAPAPIFeatureInfoW PLDAPAPIFeatureInfo; + alias cldap_openW cldap_open; + alias ldap_openW ldap_open; + alias ldap_simple_bindW ldap_simple_bind; + alias ldap_simple_bind_sW ldap_simple_bind_s; + alias ldap_sasl_bindW ldap_sasl_bind; + alias ldap_sasl_bind_sW ldap_sasl_bind_s; + alias ldap_initW ldap_init; + alias ldap_sslinitW ldap_sslinit; + alias ldap_get_optionW ldap_get_option; + alias ldap_set_optionW ldap_set_option; + alias ldap_start_tls_sW ldap_start_tls_s; + alias ldap_addW ldap_add; + alias ldap_add_extW ldap_add_ext; + alias ldap_add_sW ldap_add_s; + alias ldap_add_ext_sW ldap_add_ext_s; + alias ldap_compareW ldap_compare; + alias ldap_compare_extW ldap_compare_ext; + alias ldap_compare_sW ldap_compare_s; + alias ldap_compare_ext_sW ldap_compare_ext_s; + alias ldap_deleteW ldap_delete; + alias ldap_delete_extW ldap_delete_ext; + alias ldap_delete_sW ldap_delete_s; + alias ldap_delete_ext_sW ldap_delete_ext_s; + alias ldap_extended_operation_sW ldap_extended_operation_s; + alias ldap_extended_operationW ldap_extended_operation; + alias ldap_modifyW ldap_modify; + alias ldap_modify_extW ldap_modify_ext; + alias ldap_modify_sW ldap_modify_s; + alias ldap_modify_ext_sW ldap_modify_ext_s; + alias ldap_check_filterW ldap_check_filter; + alias ldap_count_valuesW ldap_count_values; + alias ldap_create_page_controlW ldap_create_page_control; + alias ldap_create_sort_controlW ldap_create_sort_control; + alias ldap_create_vlv_controlW ldap_create_vlv_control; + alias ldap_encode_sort_controlW ldap_encode_sort_control; + alias ldap_escape_filter_elementW ldap_escape_filter_element; + alias ldap_first_attributeW ldap_first_attribute; + alias ldap_next_attributeW ldap_next_attribute; + alias ldap_get_valuesW ldap_get_values; + alias ldap_get_values_lenW ldap_get_values_len; + alias ldap_parse_extended_resultW ldap_parse_extended_result; + alias ldap_parse_page_controlW ldap_parse_page_control; + alias ldap_parse_referenceW ldap_parse_reference; + alias ldap_parse_resultW ldap_parse_result; + alias ldap_parse_sort_controlW ldap_parse_sort_control; + alias ldap_parse_vlv_controlW ldap_parse_vlv_control; + alias ldap_searchW ldap_search; + alias ldap_search_sW ldap_search_s; + alias ldap_search_stW ldap_search_st; + alias ldap_search_extW ldap_search_ext; + alias ldap_search_ext_sW ldap_search_ext_s; + alias ldap_search_init_pageW ldap_search_init_page; + alias ldap_err2stringW ldap_err2string; + alias ldap_control_freeW ldap_control_free; + alias ldap_controls_freeW ldap_controls_free; + alias ldap_free_controlsW ldap_free_controls; + alias ldap_memfreeW ldap_memfree; + alias ldap_value_freeW ldap_value_free; + alias ldap_dn2ufnW ldap_dn2ufn; + alias ldap_ufn2dnW ldap_ufn2dn; + alias ldap_explode_dnW ldap_explode_dn; + alias ldap_get_dnW ldap_get_dn; + alias ldap_rename_extW ldap_rename; + alias ldap_rename_ext_sW ldap_rename_s; + alias ldap_rename_extW ldap_rename_ext; + alias ldap_rename_ext_sW ldap_rename_ext_s; + deprecated { + alias ldap_bindW ldap_bind; + alias ldap_bind_sW ldap_bind_s; + alias ldap_modrdnW ldap_modrdn; + alias ldap_modrdn_sW ldap_modrdn_s; + alias ldap_modrdn2W ldap_modrdn2; + alias ldap_modrdn2_sW ldap_modrdn2_s; + } +} else { + alias LDAPControlA LDAPControl; + alias PLDAPControlA PLDAPControl; + alias LDAPModA LDAPMod; + alias LDAPModA PLDAPMod; + alias LDAPSortKeyA LDAPSortKey; + alias PLDAPSortKeyA PLDAPSortKey; + alias LDAPAPIInfoA LDAPAPIInfo; + alias PLDAPAPIInfoA PLDAPAPIInfo; + alias LDAPAPIFeatureInfoA LDAPAPIFeatureInfo; + alias PLDAPAPIFeatureInfoA PLDAPAPIFeatureInfo; + alias cldap_openA cldap_open; + alias ldap_openA ldap_open; + alias ldap_simple_bindA ldap_simple_bind; + alias ldap_simple_bind_sA ldap_simple_bind_s; + alias ldap_sasl_bindA ldap_sasl_bind; + alias ldap_sasl_bind_sA ldap_sasl_bind_s; + alias ldap_initA ldap_init; + alias ldap_sslinitA ldap_sslinit; + alias ldap_get_optionA ldap_get_option; + alias ldap_set_optionA ldap_set_option; + alias ldap_start_tls_sA ldap_start_tls_s; + alias ldap_addA ldap_add; + alias ldap_add_extA ldap_add_ext; + alias ldap_add_sA ldap_add_s; + alias ldap_add_ext_sA ldap_add_ext_s; + alias ldap_compareA ldap_compare; + alias ldap_compare_extA ldap_compare_ext; + alias ldap_compare_sA ldap_compare_s; + alias ldap_compare_ext_sA ldap_compare_ext_s; + alias ldap_deleteA ldap_delete; + alias ldap_delete_extA ldap_delete_ext; + alias ldap_delete_sA ldap_delete_s; + alias ldap_delete_ext_sA ldap_delete_ext_s; + alias ldap_extended_operation_sA ldap_extended_operation_s; + alias ldap_extended_operationA ldap_extended_operation; + alias ldap_modifyA ldap_modify; + alias ldap_modify_extA ldap_modify_ext; + alias ldap_modify_sA ldap_modify_s; + alias ldap_modify_ext_sA ldap_modify_ext_s; + alias ldap_check_filterA ldap_check_filter; + alias ldap_count_valuesA ldap_count_values; + alias ldap_create_page_controlA ldap_create_page_control; + alias ldap_create_sort_controlA ldap_create_sort_control; + alias ldap_create_vlv_controlA ldap_create_vlv_control; + alias ldap_encode_sort_controlA ldap_encode_sort_control; + alias ldap_escape_filter_elementA ldap_escape_filter_element; + alias ldap_first_attributeA ldap_first_attribute; + alias ldap_next_attributeA ldap_next_attribute; + alias ldap_get_valuesA ldap_get_values; + alias ldap_get_values_lenA ldap_get_values_len; + alias ldap_parse_extended_resultA ldap_parse_extended_result; + alias ldap_parse_page_controlA ldap_parse_page_control; + alias ldap_parse_referenceA ldap_parse_reference; + alias ldap_parse_resultA ldap_parse_result; + alias ldap_parse_sort_controlA ldap_parse_sort_control; + alias ldap_parse_vlv_controlA ldap_parse_vlv_control; + alias ldap_searchA ldap_search; + alias ldap_search_sA ldap_search_s; + alias ldap_search_stA ldap_search_st; + alias ldap_search_extA ldap_search_ext; + alias ldap_search_ext_sA ldap_search_ext_s; + alias ldap_search_init_pageA ldap_search_init_page; + alias ldap_err2stringA ldap_err2string; + alias ldap_control_freeA ldap_control_free; + alias ldap_controls_freeA ldap_controls_free; + alias ldap_free_controlsA ldap_free_controls; + alias ldap_memfreeA ldap_memfree; + alias ldap_value_freeA ldap_value_free; + alias ldap_dn2ufnA ldap_dn2ufn; + alias ldap_ufn2dnA ldap_ufn2dn; + alias ldap_explode_dnA ldap_explode_dn; + alias ldap_get_dnA ldap_get_dn; + alias ldap_rename_extA ldap_rename; + alias ldap_rename_ext_sA ldap_rename_s; + alias ldap_rename_extA ldap_rename_ext; + alias ldap_rename_ext_sA ldap_rename_ext_s; + deprecated { + alias ldap_bindA ldap_bind; + alias ldap_bind_sA ldap_bind_s; + alias ldap_modrdnA ldap_modrdn; + alias ldap_modrdn_sA ldap_modrdn_s; + alias ldap_modrdn2A ldap_modrdn2; + alias ldap_modrdn2_sA ldap_modrdn2_s; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winnetwk.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winnetwk.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,438 @@ +/***********************************************************************\ +* winnetwk.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winnetwk; +pragma(lib, "mpr.lib"); + +private import win32.winbase, win32.winerror, win32.winnt; + +enum : DWORD { + WNNC_NET_MSNET = 0x00010000, + WNNC_NET_LANMAN = 0x00020000, + WNNC_NET_NETWARE = 0x00030000, + WNNC_NET_VINES = 0x00040000, + WNNC_NET_10NET = 0x00050000, + WNNC_NET_LOCUS = 0x00060000, + WNNC_NET_SUN_PC_NFS = 0x00070000, + WNNC_NET_LANSTEP = 0x00080000, + WNNC_NET_9TILES = 0x00090000, + WNNC_NET_LANTASTIC = 0x000A0000, + WNNC_NET_AS400 = 0x000B0000, + WNNC_NET_FTP_NFS = 0x000C0000, + WNNC_NET_PATHWORKS = 0x000D0000, + WNNC_NET_LIFENET = 0x000E0000, + WNNC_NET_POWERLAN = 0x000F0000, + WNNC_NET_BWNFS = 0x00100000, + WNNC_NET_COGENT = 0x00110000, + WNNC_NET_FARALLON = 0x00120000, + WNNC_NET_APPLETALK = 0x00130000, + WNNC_NET_INTERGRAPH = 0x00140000, + WNNC_NET_SYMFONET = 0x00150000, + WNNC_NET_CLEARCASE = 0x00160000, + WNNC_NET_FRONTIER = 0x00170000, + WNNC_NET_BMC = 0x00180000, + WNNC_NET_DCE = 0x00190000, + WNNC_NET_AVID = 0x001A0000, + WNNC_NET_DOCUSPACE = 0x001B0000, + WNNC_NET_MANGOSOFT = 0x001C0000, + WNNC_NET_SERNET = 0x001D0000, + WNNC_NET_DECORB = 0x00200000, + WNNC_NET_PROTSTOR = 0x00210000, + WNNC_NET_FJ_REDIR = 0x00220000, + WNNC_NET_DISTINCT = 0x00230000, + WNNC_NET_TWINS = 0x00240000, + WNNC_NET_RDR2SAMPLE = 0x00250000, + WNNC_NET_CSC = 0x00260000, + WNNC_NET_3IN1 = 0x00270000, + WNNC_NET_EXTENDNET = 0x00290000, + WNNC_NET_OBJECT_DIRE = 0x00300000, + WNNC_NET_MASFAX = 0x00310000, + WNNC_NET_HOB_NFS = 0x00320000, + WNNC_NET_SHIVA = 0x00330000, + WNNC_NET_IBMAL = 0x00340000, + WNNC_CRED_MANAGER = 0xFFFF0000 +} + +enum : DWORD { + RESOURCE_CONNECTED = 1, + RESOURCE_GLOBALNET = 2, + RESOURCE_REMEMBERED = 3, + RESOURCE_RECENT = 4, + RESOURCE_CONTEXT = 5 +} + +const DWORD + RESOURCETYPE_ANY = 0, + RESOURCETYPE_DISK = 1, + RESOURCETYPE_PRINT = 2, + RESOURCETYPE_RESERVED = 8, + RESOURCETYPE_UNKNOWN = 0xFFFFFFFF; + +const DWORD + RESOURCEUSAGE_CONNECTABLE = 0x00000001, + RESOURCEUSAGE_CONTAINER = 0x00000002, + RESOURCEUSAGE_NOLOCALDEVICE = 0x00000004, + RESOURCEUSAGE_SIBLING = 0x00000008, + RESOURCEUSAGE_ATTACHED = 0x00000010, + RESOURCEUSAGE_ALL = (RESOURCEUSAGE_CONNECTABLE + | RESOURCEUSAGE_CONTAINER + | RESOURCEUSAGE_ATTACHED), + RESOURCEUSAGE_RESERVED = 0x80000000; + +enum : DWORD { + RESOURCEDISPLAYTYPE_GENERIC, + RESOURCEDISPLAYTYPE_DOMAIN, + RESOURCEDISPLAYTYPE_SERVER, + RESOURCEDISPLAYTYPE_SHARE, + RESOURCEDISPLAYTYPE_FILE, + RESOURCEDISPLAYTYPE_GROUP, + RESOURCEDISPLAYTYPE_NETWORK, + RESOURCEDISPLAYTYPE_ROOT, + RESOURCEDISPLAYTYPE_SHAREADMIN, + RESOURCEDISPLAYTYPE_DIRECTORY, + RESOURCEDISPLAYTYPE_TREE // = 10 +} + +const NETPROPERTY_PERSISTENT = 1; + +const DWORD + CONNECT_UPDATE_PROFILE = 1, + CONNECT_UPDATE_RECENT = 2, + CONNECT_TEMPORARY = 4, + CONNECT_INTERACTIVE = 8, + CONNECT_PROMPT = 16, + CONNECT_NEED_DRIVE = 32, + CONNECT_REFCOUNT = 64, + CONNECT_REDIRECT = 128, + CONNECT_LOCALDRIVE = 256, + CONNECT_CURRENT_MEDIA = 512; + +const DWORD + CONNDLG_RO_PATH = 1, + CONNDLG_CONN_POINT = 2, + CONNDLG_USE_MRU = 4, + CONNDLG_HIDE_BOX = 8, + CONNDLG_PERSIST = 16, + CONNDLG_NOT_PERSIST = 32; + +const DWORD + DISC_UPDATE_PROFILE = 1, + DISC_NO_FORCE = 64; + +const DWORD + WNFMT_MULTILINE = 1, + WNFMT_ABBREVIATED = 2, + WNFMT_INENUM = 16, + WNFMT_CONNECTION = 32; + +enum : DWORD { + WN_SUCCESS = NO_ERROR, + WN_NO_ERROR = NO_ERROR, + WN_NOT_SUPPORTED = ERROR_NOT_SUPPORTED, + WN_CANCEL = ERROR_CANCELLED, + WN_RETRY = ERROR_RETRY, + WN_NET_ERROR = ERROR_UNEXP_NET_ERR, + WN_MORE_DATA = ERROR_MORE_DATA, + WN_BAD_POINTER = ERROR_INVALID_ADDRESS, + WN_BAD_VALUE = ERROR_INVALID_PARAMETER, + WN_BAD_USER = ERROR_BAD_USERNAME, + WN_BAD_PASSWORD = ERROR_INVALID_PASSWORD, + WN_ACCESS_DENIED = ERROR_ACCESS_DENIED, + WN_FUNCTION_BUSY = ERROR_BUSY, + WN_WINDOWS_ERROR = ERROR_UNEXP_NET_ERR, + WN_OUT_OF_MEMORY = ERROR_NOT_ENOUGH_MEMORY, + WN_NO_NETWORK = ERROR_NO_NETWORK, + WN_EXTENDED_ERROR = ERROR_EXTENDED_ERROR, + WN_BAD_LEVEL = ERROR_INVALID_LEVEL, + WN_BAD_HANDLE = ERROR_INVALID_HANDLE, + WN_NOT_INITIALIZING = ERROR_ALREADY_INITIALIZED, + WN_NO_MORE_DEVICES = ERROR_NO_MORE_DEVICES, + WN_NOT_CONNECTED = ERROR_NOT_CONNECTED, + WN_OPEN_FILES = ERROR_OPEN_FILES, + WN_DEVICE_IN_USE = ERROR_DEVICE_IN_USE, + WN_BAD_NETNAME = ERROR_BAD_NET_NAME, + WN_BAD_LOCALNAME = ERROR_BAD_DEVICE, + WN_ALREADY_CONNECTED = ERROR_ALREADY_ASSIGNED, + WN_DEVICE_ERROR = ERROR_GEN_FAILURE, + WN_CONNECTION_CLOSED = ERROR_CONNECTION_UNAVAIL, + WN_NO_NET_OR_BAD_PATH = ERROR_NO_NET_OR_BAD_PATH, + WN_BAD_PROVIDER = ERROR_BAD_PROVIDER, + WN_CANNOT_OPEN_PROFILE = ERROR_CANNOT_OPEN_PROFILE, + WN_BAD_PROFILE = ERROR_BAD_PROFILE, + WN_BAD_DEV_TYPE = ERROR_BAD_DEV_TYPE, + WN_DEVICE_ALREADY_REMEMBERED = ERROR_DEVICE_ALREADY_REMEMBERED, + WN_NO_MORE_ENTRIES = ERROR_NO_MORE_ITEMS, + WN_NOT_CONTAINER = ERROR_NOT_CONTAINER, + WN_NOT_AUTHENTICATED = ERROR_NOT_AUTHENTICATED, + WN_NOT_LOGGED_ON = ERROR_NOT_LOGGED_ON, + WN_NOT_VALIDATED = ERROR_NO_LOGON_SERVERS +} + +enum : DWORD { + UNIVERSAL_NAME_INFO_LEVEL = 1, + REMOTE_NAME_INFO_LEVEL +} + +const DWORD + NETINFO_DLL16 = 1, + NETINFO_DISKRED = 4, + NETINFO_PRINTERRED = 8; + +const DWORD + RP_LOGON = 1, + RP_INIFILE = 2; + +const DWORD PP_DISPLAYERRORS = 1; + +const DWORD + WNCON_FORNETCARD = 1, + WNCON_NOTROUTED = 2, + WNCON_SLOWLINK = 4, + WNCON_DYNAMIC = 8; + +struct NETRESOURCEA { + DWORD dwScope; + DWORD dwType; + DWORD dwDisplayType; + DWORD dwUsage; + LPSTR lpLocalName; + LPSTR lpRemoteName; + LPSTR lpComment; + LPSTR lpProvider; +} +alias NETRESOURCEA* LPNETRESOURCEA; + +struct NETRESOURCEW { + DWORD dwScope; + DWORD dwType; + DWORD dwDisplayType; + DWORD dwUsage; + LPWSTR lpLocalName; + LPWSTR lpRemoteName; + LPWSTR lpComment ; + LPWSTR lpProvider; +} +alias NETRESOURCEW* LPNETRESOURCEW; + +struct CONNECTDLGSTRUCTA { + DWORD cbStructure; + HWND hwndOwner; + LPNETRESOURCEA lpConnRes; + DWORD dwFlags; + DWORD dwDevNum; +} +alias CONNECTDLGSTRUCTA* LPCONNECTDLGSTRUCTA; + +struct CONNECTDLGSTRUCTW { + DWORD cbStructure; + HWND hwndOwner; + LPNETRESOURCEW lpConnRes; + DWORD dwFlags; + DWORD dwDevNum; +} +alias CONNECTDLGSTRUCTW* LPCONNECTDLGSTRUCTW; + +struct DISCDLGSTRUCTA { + DWORD cbStructure; + HWND hwndOwner; + LPSTR lpLocalName; + LPSTR lpRemoteName; + DWORD dwFlags; +} +alias DISCDLGSTRUCTA* LPDISCDLGSTRUCTA; + +struct DISCDLGSTRUCTW { + DWORD cbStructure; + HWND hwndOwner; + LPWSTR lpLocalName; + LPWSTR lpRemoteName; + DWORD dwFlags; +} +alias DISCDLGSTRUCTW* LPDISCDLGSTRUCTW; + +struct UNIVERSAL_NAME_INFOA { + LPSTR lpUniversalName; +} +alias UNIVERSAL_NAME_INFOA* LPUNIVERSAL_NAME_INFOA; + +struct UNIVERSAL_NAME_INFOW { + LPWSTR lpUniversalName; +} +alias UNIVERSAL_NAME_INFOW* LPUNIVERSAL_NAME_INFOW; + +struct REMOTE_NAME_INFOA { + LPSTR lpUniversalName; + LPSTR lpConnectionName; + LPSTR lpRemainingPath; +} +alias REMOTE_NAME_INFOA* LPREMOTE_NAME_INFOA; + +struct REMOTE_NAME_INFOW { + LPWSTR lpUniversalName; + LPWSTR lpConnectionName; + LPWSTR lpRemainingPath; +} +alias REMOTE_NAME_INFOW* LPREMOTE_NAME_INFOW; + +struct NETINFOSTRUCT { + DWORD cbStructure; + DWORD dwProviderVersion; + DWORD dwStatus; + DWORD dwCharacteristics; + DWORD dwHandle; + WORD wNetType; + DWORD dwPrinters; + DWORD dwDrives; +} +alias NETINFOSTRUCT* LPNETINFOSTRUCT; + +extern (Pascal) { + alias UINT function(LPCSTR, LPSTR, UINT) PFNGETPROFILEPATHA; + alias UINT function(LPCWSTR, LPWSTR, UINT) PFNGETPROFILEPATHW; + alias UINT function(LPCSTR, LPCSTR, DWORD) PFNRECONCILEPROFILEA; + alias UINT function(LPCWSTR, LPCWSTR, DWORD) PFNRECONCILEPROFILEW; + alias BOOL function(HWND, LPCSTR, LPCSTR, LPCSTR, DWORD) + PFNPROCESSPOLICIESA; + alias BOOL function(HWND, LPCWSTR, LPCWSTR, LPCWSTR, DWORD) + PFNPROCESSPOLICIESW; +} + +struct NETCONNECTINFOSTRUCT { + DWORD cbStructure; + DWORD dwFlags; + DWORD dwSpeed; + DWORD dwDelay; + DWORD dwOptDataSize; +} +alias NETCONNECTINFOSTRUCT* LPNETCONNECTINFOSTRUCT; + +extern (Windows) { + DWORD WNetAddConnection2A(LPNETRESOURCEA, LPCSTR, LPCSTR, DWORD); + DWORD WNetAddConnection2W(LPNETRESOURCEW, LPCWSTR, LPCWSTR, DWORD); + DWORD WNetAddConnection3A(HWND, LPNETRESOURCEA, LPCSTR, LPCSTR, DWORD); + DWORD WNetAddConnection3W(HWND, LPNETRESOURCEW, LPCWSTR, LPCWSTR, DWORD); + DWORD WNetCancelConnection2A(LPCSTR, DWORD, BOOL); + DWORD WNetCancelConnection2W(LPCWSTR, DWORD, BOOL); + DWORD WNetGetConnectionA(LPCSTR, LPSTR, PDWORD); + DWORD WNetGetConnectionW(LPCWSTR, LPWSTR, PDWORD); + DWORD WNetUseConnectionA(HWND, LPNETRESOURCEA, LPCSTR, LPCSTR, DWORD, + LPSTR, PDWORD, PDWORD); + DWORD WNetUseConnectionW(HWND, LPNETRESOURCEW, LPCWSTR, LPCWSTR, DWORD, + LPWSTR, PDWORD, PDWORD); + DWORD WNetSetConnectionA(LPCSTR, DWORD, PVOID); + DWORD WNetSetConnectionW(LPCWSTR, DWORD, PVOID); + DWORD WNetConnectionDialog(HWND, DWORD); + DWORD WNetDisconnectDialog(HWND, DWORD); + DWORD WNetConnectionDialog1A(LPCONNECTDLGSTRUCTA); + DWORD WNetConnectionDialog1W(LPCONNECTDLGSTRUCTW); + DWORD WNetDisconnectDialog1A(LPDISCDLGSTRUCTA); + DWORD WNetDisconnectDialog1W(LPDISCDLGSTRUCTW); + DWORD WNetOpenEnumA(DWORD, DWORD, DWORD, LPNETRESOURCEA, LPHANDLE); + DWORD WNetOpenEnumW(DWORD, DWORD, DWORD, LPNETRESOURCEW, LPHANDLE); + DWORD WNetEnumResourceA(HANDLE, PDWORD, PVOID, PDWORD); + DWORD WNetEnumResourceW(HANDLE, PDWORD, PVOID, PDWORD); + DWORD WNetCloseEnum(HANDLE); + DWORD WNetGetUniversalNameA(LPCSTR, DWORD, PVOID, PDWORD); + DWORD WNetGetUniversalNameW(LPCWSTR, DWORD, PVOID, PDWORD); + DWORD WNetGetUserA(LPCSTR, LPSTR, PDWORD); + DWORD WNetGetUserW(LPCWSTR, LPWSTR, PDWORD); + DWORD WNetGetProviderNameA(DWORD, LPSTR, PDWORD); + DWORD WNetGetProviderNameW(DWORD, LPWSTR, PDWORD); + DWORD WNetGetNetworkInformationA(LPCSTR, LPNETINFOSTRUCT); + DWORD WNetGetNetworkInformationW(LPCWSTR, LPNETINFOSTRUCT); + DWORD WNetGetResourceInformationA(LPNETRESOURCEA, LPVOID, LPDWORD, + LPSTR*); + DWORD WNetGetResourceInformationW(LPNETRESOURCEA, LPVOID, LPDWORD, + LPWSTR*); + DWORD WNetGetResourceParentA(LPNETRESOURCEA, LPVOID, LPDWORD); + DWORD WNetGetResourceParentW(LPNETRESOURCEW, LPVOID, LPDWORD); + DWORD WNetGetLastErrorA(PDWORD, LPSTR, DWORD, LPSTR, DWORD); + DWORD WNetGetLastErrorW(PDWORD, LPWSTR, DWORD, LPWSTR, DWORD); + DWORD MultinetGetConnectionPerformanceA(LPNETRESOURCEA, + LPNETCONNECTINFOSTRUCT); + DWORD MultinetGetConnectionPerformanceW(LPNETRESOURCEW, + LPNETCONNECTINFOSTRUCT); + deprecated { + DWORD WNetAddConnectionA(LPCSTR, LPCSTR, LPCSTR); + DWORD WNetAddConnectionW(LPCWSTR, LPCWSTR, LPCWSTR); + DWORD WNetCancelConnectionA(LPCSTR, BOOL); + DWORD WNetCancelConnectionW(LPCWSTR, BOOL); + } +} + +version (Unicode) { + alias PFNGETPROFILEPATHW PFNGETPROFILEPATH; + alias PFNRECONCILEPROFILEW PFNRECONCILEPROFILE; + alias PFNPROCESSPOLICIESW PFNPROCESSPOLICIES; + alias NETRESOURCEW NETRESOURCE; + alias CONNECTDLGSTRUCTW CONNECTDLGSTRUCT; + alias DISCDLGSTRUCTW DISCDLGSTRUCT; + alias REMOTE_NAME_INFOW REMOTE_NAME_INFO; + alias UNIVERSAL_NAME_INFOW UNIVERSAL_NAME_INFO; + alias WNetAddConnection2W WNetAddConnection2; + alias WNetAddConnection3W WNetAddConnection3; + alias WNetCancelConnection2W WNetCancelConnection2; + alias WNetGetConnectionW WNetGetConnection; + alias WNetUseConnectionW WNetUseConnection; + alias WNetSetConnectionW WNetSetConnection; + alias WNetConnectionDialog1W WNetConnectionDialog1; + alias WNetDisconnectDialog1W WNetDisconnectDialog1; + alias WNetOpenEnumW WNetOpenEnum; + alias WNetEnumResourceW WNetEnumResource; + alias WNetGetUniversalNameW WNetGetUniversalName; + alias WNetGetUserW WNetGetUser; + alias WNetGetProviderNameW WNetGetProviderName; + alias WNetGetNetworkInformationW WNetGetNetworkInformation; + alias WNetGetResourceInformationW WNetGetResourceInformation; + alias WNetGetResourceParentW WNetGetResourceParent; + alias WNetGetLastErrorW WNetGetLastError; + alias MultinetGetConnectionPerformanceW MultinetGetConnectionPerformance; + deprecated { + alias WNetAddConnectionW WNetAddConnection; + alias WNetCancelConnectionW WNetCancelConnection; + } +} else { + alias PFNGETPROFILEPATHA PFNGETPROFILEPATH; + alias PFNRECONCILEPROFILEA PFNRECONCILEPROFILE; + alias PFNPROCESSPOLICIESA PFNPROCESSPOLICIES; + alias NETRESOURCEA NETRESOURCE; + alias CONNECTDLGSTRUCTA CONNECTDLGSTRUCT; + alias DISCDLGSTRUCTA DISCDLGSTRUCT; + alias REMOTE_NAME_INFOA REMOTE_NAME_INFO; + alias UNIVERSAL_NAME_INFOA UNIVERSAL_NAME_INFO; + alias WNetAddConnection2A WNetAddConnection2; + alias WNetAddConnection3A WNetAddConnection3; + alias WNetCancelConnection2A WNetCancelConnection2; + alias WNetGetConnectionA WNetGetConnection; + alias WNetUseConnectionA WNetUseConnection; + alias WNetSetConnectionA WNetSetConnection; + alias WNetConnectionDialog1A WNetConnectionDialog1; + alias WNetDisconnectDialog1A WNetDisconnectDialog1; + alias WNetOpenEnumA WNetOpenEnum; + alias WNetEnumResourceA WNetEnumResource; + alias WNetGetUniversalNameA WNetGetUniversalName; + alias WNetGetUserA WNetGetUser; + alias WNetGetProviderNameA WNetGetProviderName; + alias WNetGetNetworkInformationA WNetGetNetworkInformation; + alias WNetGetResourceInformationA WNetGetResourceInformation; + alias WNetGetResourceParentA WNetGetResourceParent; + alias WNetGetLastErrorA WNetGetLastError; + alias MultinetGetConnectionPerformanceA MultinetGetConnectionPerformance; + deprecated { + alias WNetAddConnectionA WNetAddConnection; + alias WNetCancelConnectionA WNetCancelConnection; + } +} + +alias NETRESOURCE* LPNETRESOURCE; +alias CONNECTDLGSTRUCT* LPCONNECTDLGSTRUCT; +alias DISCDLGSTRUCT* LPDISCDLGSTRUCT; +alias REMOTE_NAME_INFO* LPREMOTE_NAME_INFO; +alias UNIVERSAL_NAME_INFO* LPUNIVERSAL_NAME_INFO; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winnls.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winnls.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,811 @@ +/***********************************************************************\ +* winnls.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winnls; +pragma(lib, "kernel32.lib"); + +private import win32.basetsd, win32.w32api, win32.winbase, win32.windef; + +alias DWORD LCTYPE, CALTYPE, CALID, LGRPID, GEOID, GEOTYPE, GEOCLASS; + +const size_t + MAX_DEFAULTCHAR = 2, + MAX_LEADBYTES = 12; + +const LCTYPE + LOCALE_USE_CP_ACP = 0x40000000, + LOCALE_RETURN_NUMBER = 0x20000000; + +enum : LCTYPE { + LOCALE_ILANGUAGE = 1, + LOCALE_SLANGUAGE, + LOCALE_SABBREVLANGNAME, + LOCALE_SNATIVELANGNAME, + LOCALE_ICOUNTRY, + LOCALE_SCOUNTRY, + LOCALE_SABBREVCTRYNAME, + LOCALE_SNATIVECTRYNAME, + LOCALE_IDEFAULTLANGUAGE, + LOCALE_IDEFAULTCOUNTRY, + LOCALE_IDEFAULTCODEPAGE, + LOCALE_SLIST, + LOCALE_IMEASURE, + LOCALE_SDECIMAL, + LOCALE_STHOUSAND, + LOCALE_SGROUPING, + LOCALE_IDIGITS, + LOCALE_ILZERO, + LOCALE_SNATIVEDIGITS, + LOCALE_SCURRENCY, + LOCALE_SINTLSYMBOL, + LOCALE_SMONDECIMALSEP, + LOCALE_SMONTHOUSANDSEP, + LOCALE_SMONGROUPING, + LOCALE_ICURRDIGITS, + LOCALE_IINTLCURRDIGITS, + LOCALE_ICURRENCY, + LOCALE_INEGCURR, + LOCALE_SDATE, + LOCALE_STIME, + LOCALE_SSHORTDATE, + LOCALE_SLONGDATE, + LOCALE_IDATE, + LOCALE_ILDATE, + LOCALE_ITIME, + LOCALE_ICENTURY, + LOCALE_ITLZERO, + LOCALE_IDAYLZERO, + LOCALE_IMONLZERO, + LOCALE_S1159, + LOCALE_S2359, + LOCALE_SDAYNAME1, + LOCALE_SDAYNAME2, + LOCALE_SDAYNAME3, + LOCALE_SDAYNAME4, + LOCALE_SDAYNAME5, + LOCALE_SDAYNAME6, + LOCALE_SDAYNAME7, + LOCALE_SABBREVDAYNAME1, + LOCALE_SABBREVDAYNAME2, + LOCALE_SABBREVDAYNAME3, + LOCALE_SABBREVDAYNAME4, + LOCALE_SABBREVDAYNAME5, + LOCALE_SABBREVDAYNAME6, + LOCALE_SABBREVDAYNAME7, + LOCALE_SMONTHNAME1, + LOCALE_SMONTHNAME2, + LOCALE_SMONTHNAME3, + LOCALE_SMONTHNAME4, + LOCALE_SMONTHNAME5, + LOCALE_SMONTHNAME6, + LOCALE_SMONTHNAME7, + LOCALE_SMONTHNAME8, + LOCALE_SMONTHNAME9, + LOCALE_SMONTHNAME10, + LOCALE_SMONTHNAME11, + LOCALE_SMONTHNAME12, + LOCALE_SABBREVMONTHNAME1, + LOCALE_SABBREVMONTHNAME2, + LOCALE_SABBREVMONTHNAME3, + LOCALE_SABBREVMONTHNAME4, + LOCALE_SABBREVMONTHNAME5, + LOCALE_SABBREVMONTHNAME6, + LOCALE_SABBREVMONTHNAME7, + LOCALE_SABBREVMONTHNAME8, + LOCALE_SABBREVMONTHNAME9, + LOCALE_SABBREVMONTHNAME10, + LOCALE_SABBREVMONTHNAME11, + LOCALE_SABBREVMONTHNAME12, + LOCALE_SPOSITIVESIGN, + LOCALE_SNEGATIVESIGN, + LOCALE_IPOSSIGNPOSN, + LOCALE_INEGSIGNPOSN, + LOCALE_IPOSSYMPRECEDES, + LOCALE_IPOSSEPBYSPACE, + LOCALE_INEGSYMPRECEDES, + LOCALE_INEGSEPBYSPACE, + LOCALE_FONTSIGNATURE, + LOCALE_SISO639LANGNAME, + LOCALE_SISO3166CTRYNAME, // = 90 + LOCALE_SENGLANGUAGE = 0x1001, + LOCALE_SENGCOUNTRY = 0x1002, + LOCALE_IDEFAULTANSICODEPAGE = 0x1004, + LOCALE_INEGNUMBER = 0x1010, + LOCALE_STIMEFORMAT = 0x1003, + LOCALE_ITIMEMARKPOSN = 0x1005, + LOCALE_ICALENDARTYPE = 0x1009, + LOCALE_IOPTIONALCALENDAR = 0x100B, + LOCALE_IFIRSTDAYOFWEEK = 0x100C, + LOCALE_IFIRSTWEEKOFYEAR = 0x100D, + LOCALE_SMONTHNAME13 = 0x100E, + LOCALE_SABBREVMONTHNAME13 = 0x100F +} + +enum : LCID { + LOCALE_USER_DEFAULT = 0x400, + LOCALE_SYSTEM_DEFAULT = 0x800 +} + +const DWORD + NORM_IGNORECASE = 1, + NORM_IGNORENONSPACE = 2, + NORM_IGNORESYMBOLS = 4, + SORT_STRINGSORT = 0x01000, + NORM_IGNOREKANATYPE = 0x10000, + NORM_IGNOREWIDTH = 0x20000; + +const DWORD + LCMAP_LOWERCASE = 0x00000100, + LCMAP_UPPERCASE = 0x00000200, + LCMAP_SORTKEY = 0x00000400, + LCMAP_BYTEREV = 0x00000800, + LCMAP_HIRAGANA = 0x00100000, + LCMAP_KATAKANA = 0x00200000, + LCMAP_HALFWIDTH = 0x00400000, + LCMAP_FULLWIDTH = 0x00800000, + LCMAP_LINGUISTIC_CASING = 0x01000000, + LCMAP_SIMPLIFIED_CHINESE = 0x02000000, + LCMAP_TRADITIONAL_CHINESE = 0x04000000; + +const CALID ENUM_ALL_CALENDARS = -1; + +const DWORD + DATE_SHORTDATE = 1, + DATE_LONGDATE = 2, + DATE_USE_ALT_CALENDAR = 4, + LOCALE_NOUSEROVERRIDE = 0x80000000; + +enum : DWORD { + CP_INSTALLED = 1, + CP_SUPPORTED +} + +enum : DWORD { + LCID_INSTALLED = 1, + LCID_SUPPORTED = 2, + LCID_ALTERNATE_SORTS = 4 +} + +const DWORD + MAP_FOLDCZONE = 16, + MAP_PRECOMPOSED = 32, + MAP_COMPOSITE = 64, + MAP_FOLDDIGITS = 128; + +enum : UINT { + CP_ACP, + CP_OEMCP, + CP_MACCP, + CP_THREAD_ACP, // = 3 + CP_SYMBOL = 42, + CP_UTF7 = 65000, + CP_UTF8 = 65001 +} + +enum : DWORD { + CT_CTYPE1 = 1, + CT_CTYPE2 = 2, + CT_CTYPE3 = 4 +} + +const WORD + C1_UPPER = 1, + C1_LOWER = 2, + C1_DIGIT = 4, + C1_SPACE = 8, + C1_PUNCT = 16, + C1_CNTRL = 32, + C1_BLANK = 64, + C1_XDIGIT = 128, + C1_ALPHA = 256; + +enum : WORD { + C2_NOTAPPLICABLE, + C2_LEFTTORIGHT, + C2_RIGHTTOLEFT, + C2_EUROPENUMBER, + C2_EUROPESEPARATOR, + C2_EUROPETERMINATOR, + C2_ARABICNUMBER, + C2_COMMONSEPARATOR, + C2_BLOCKSEPARATOR, + C2_SEGMENTSEPARATOR, + C2_WHITESPACE, + C2_OTHERNEUTRAL // = 11 +} + +const WORD + C3_NOTAPPLICABLE = 0, + C3_NONSPACING = 1, + C3_DIACRITIC = 2, + C3_VOWELMARK = 4, + C3_SYMBOL = 8, + C3_KATAKANA = 0x0010, + C3_HIRAGANA = 0x0020, + C3_HALFWIDTH = 0x0040, + C3_FULLWIDTH = 0x0080, + C3_IDEOGRAPH = 0x0100, + C3_KASHIDA = 0x0200, + C3_LEXICAL = 0x0400, + C3_ALPHA = 0x8000; + +const DWORD + TIME_NOMINUTESORSECONDS = 1, + TIME_NOSECONDS = 2, + TIME_NOTIMEMARKER = 4, + TIME_FORCE24HOURFORMAT = 8; + +const DWORD + MB_PRECOMPOSED = 1, + MB_COMPOSITE = 2, + MB_USEGLYPHCHARS = 4, + MB_ERR_INVALID_CHARS = 8; + +const DWORD + WC_DISCARDNS = 16, + WC_SEPCHARS = 32, + WC_DEFAULTCHAR = 64, + WC_COMPOSITECHECK = 512; + +enum : LONG { + CTRY_DEFAULT = 0, + CTRY_DOMINICAN_REPUBLIC = 1, + CTRY_PUERTO_RICO = 1, + CTRY_CARIBBEAN = 1, + CTRY_JAMAICA = 1, + CTRY_UNITED_STATES = 1, + CTRY_TRINIDAD_Y_TOBAGO = 1, + CTRY_CANADA = 2, + CTRY_RUSSIA = 7, + CTRY_UZBEKISTAN = 7, + CTRY_KAZAKSTAN = 7, + CTRY_TATARSTAN = 7, + CTRY_EGYPT = 20, + CTRY_SOUTH_AFRICA = 27, + CTRY_GREECE = 30, + CTRY_NETHERLANDS = 31, + CTRY_BELGIUM = 32, + CTRY_FRANCE = 33, + CTRY_MONACO = 33, + CTRY_SPAIN = 34, + CTRY_HUNGARY = 36, + CTRY_ITALY = 39, + CTRY_ROMANIA = 40, + CTRY_SWITZERLAND = 41, + CTRY_LIECHTENSTEIN = 41, + CTRY_AUSTRIA = 43, + CTRY_UNITED_KINGDOM = 44, + CTRY_DENMARK = 45, + CTRY_SWEDEN = 46, + CTRY_NORWAY = 47, + CTRY_POLAND = 48, + CTRY_GERMANY = 49, + CTRY_PERU = 51, + CTRY_MEXICO = 52, + CTRY_ARGENTINA = 54, + CTRY_BRAZIL = 55, + CTRY_CHILE = 56, + CTRY_COLOMBIA = 57, + CTRY_VENEZUELA = 58, + CTRY_MALAYSIA = 60, + CTRY_AUSTRALIA = 61, + CTRY_INDONESIA = 62, + CTRY_PHILIPPINES = 63, + CTRY_NEW_ZEALAND = 64, + CTRY_SINGAPORE = 65, + CTRY_THAILAND = 66, + CTRY_JAPAN = 81, + CTRY_SOUTH_KOREA = 82, + CTRY_VIET_NAM = 84, + CTRY_PRCHINA = 86, + CTRY_TURKEY = 90, + CTRY_INDIA = 91, + CTRY_PAKISTAN = 92, + CTRY_MOROCCO = 212, + CTRY_ALGERIA = 213, + CTRY_TUNISIA = 216, + CTRY_LIBYA = 218, + CTRY_KENYA = 254, + CTRY_ZIMBABWE = 263, + CTRY_FAEROE_ISLANDS = 298, + CTRY_PORTUGAL = 351, + CTRY_LUXEMBOURG = 352, + CTRY_IRELAND = 353, + CTRY_ICELAND = 354, + CTRY_ALBANIA = 355, + CTRY_FINLAND = 358, + CTRY_BULGARIA = 359, + CTRY_LITHUANIA = 370, + CTRY_LATVIA = 371, + CTRY_ESTONIA = 372, + CTRY_ARMENIA = 374, + CTRY_BELARUS = 375, + CTRY_UKRAINE = 380, + CTRY_SERBIA = 381, + CTRY_CROATIA = 385, + CTRY_SLOVENIA = 386, + CTRY_MACEDONIA = 389, + CTRY_CZECH = 420, + CTRY_SLOVAK = 421, + CTRY_BELIZE = 501, + CTRY_GUATEMALA = 502, + CTRY_EL_SALVADOR = 503, + CTRY_HONDURAS = 504, + CTRY_NICARAGUA = 505, + CTRY_COSTA_RICA = 506, + CTRY_PANAMA = 507, + CTRY_BOLIVIA = 591, + CTRY_ECUADOR = 593, + CTRY_PARAGUAY = 595, + CTRY_URUGUAY = 598, + CTRY_BRUNEI_DARUSSALAM = 673, + CTRY_HONG_KONG = 852, + CTRY_MACAU = 853, + CTRY_TAIWAN = 886, + CTRY_MALDIVES = 960, + CTRY_LEBANON = 961, + CTRY_JORDAN = 962, + CTRY_SYRIA = 963, + CTRY_IRAQ = 964, + CTRY_KUWAIT = 965, + CTRY_SAUDI_ARABIA = 966, + CTRY_YEMEN = 967, + CTRY_OMAN = 968, + CTRY_UAE = 971, + CTRY_ISRAEL = 972, + CTRY_BAHRAIN = 973, + CTRY_QATAR = 974, + CTRY_MONGOLIA = 976, + CTRY_IRAN = 981, + CTRY_AZERBAIJAN = 994, + CTRY_GEORGIA = 995, + CTRY_KYRGYZSTAN = 996 +} + +enum : CALTYPE { + CAL_ICALINTVALUE = 1, + CAL_SCALNAME, + CAL_IYEAROFFSETRANGE, + CAL_SERASTRING, + CAL_SSHORTDATE, + CAL_SLONGDATE, + CAL_SDAYNAME1, + CAL_SDAYNAME2, + CAL_SDAYNAME3, + CAL_SDAYNAME4, + CAL_SDAYNAME5, + CAL_SDAYNAME6, + CAL_SDAYNAME7, + CAL_SABBREVDAYNAME1, + CAL_SABBREVDAYNAME2, + CAL_SABBREVDAYNAME3, + CAL_SABBREVDAYNAME4, + CAL_SABBREVDAYNAME5, + CAL_SABBREVDAYNAME6, + CAL_SABBREVDAYNAME7, + CAL_SMONTHNAME1, + CAL_SMONTHNAME2, + CAL_SMONTHNAME3, + CAL_SMONTHNAME4, + CAL_SMONTHNAME5, + CAL_SMONTHNAME6, + CAL_SMONTHNAME7, + CAL_SMONTHNAME8, + CAL_SMONTHNAME9, + CAL_SMONTHNAME10, + CAL_SMONTHNAME11, + CAL_SMONTHNAME12, + CAL_SMONTHNAME13, + CAL_SABBREVMONTHNAME1, + CAL_SABBREVMONTHNAME2, + CAL_SABBREVMONTHNAME3, + CAL_SABBREVMONTHNAME4, + CAL_SABBREVMONTHNAME5, + CAL_SABBREVMONTHNAME6, + CAL_SABBREVMONTHNAME7, + CAL_SABBREVMONTHNAME8, + CAL_SABBREVMONTHNAME9, + CAL_SABBREVMONTHNAME10, + CAL_SABBREVMONTHNAME11, + CAL_SABBREVMONTHNAME12, + CAL_SABBREVMONTHNAME13 // = 46 +} + + +enum : CALTYPE { + CAL_GREGORIAN = 1, + CAL_GREGORIAN_US, + CAL_JAPAN, + CAL_TAIWAN, + CAL_KOREA, + CAL_HIJRI, + CAL_THAI, + CAL_HEBREW, + CAL_GREGORIAN_ME_FRENCH, + CAL_GREGORIAN_ARABIC, + CAL_GREGORIAN_XLIT_ENGLISH, + CAL_GREGORIAN_XLIT_FRENCH // = 12 +} + +enum : int { + CSTR_LESS_THAN = 1, + CSTR_EQUAL, + CSTR_GREATER_THAN +} + +enum : DWORD { + LGRPID_INSTALLED = 1, + LGRPID_SUPPORTED +} + +enum : LGRPID { + LGRPID_WESTERN_EUROPE = 1, + LGRPID_CENTRAL_EUROPE, + LGRPID_BALTIC, + LGRPID_GREEK, + LGRPID_CYRILLIC, + LGRPID_TURKISH, + LGRPID_JAPANESE, + LGRPID_KOREAN, + LGRPID_TRADITIONAL_CHINESE, + LGRPID_SIMPLIFIED_CHINESE, + LGRPID_THAI, + LGRPID_HEBREW, + LGRPID_ARABIC, + LGRPID_VIETNAMESE, + LGRPID_INDIC, + LGRPID_GEORGIAN, + LGRPID_ARMENIAN // = 17 +} + +static if (WINVER >= 0x500) { + enum : LCTYPE { + LOCALE_SYEARMONTH = 0x1006, + LOCALE_SENGCURRNAME = 0x1007, + LOCALE_SNATIVECURRNAME = 0x1008, + LOCALE_IDEFAULTEBCDICCODEPAGE = 0x1012, + LOCALE_SSORTNAME = 0x1013, + LOCALE_IDIGITSUBSTITUTION = 0x1014, + LOCALE_IPAPERSIZE = 0x100A + } + + const DWORD + DATE_YEARMONTH = 8, + DATE_LTRREADING = 16, + DATE_RTLREADING = 32; + + const DWORD MAP_EXPAND_LIGATURES = 0x2000; + const DWORD WC_NO_BEST_FIT_CHARS = 1024; + + enum : CALTYPE { + CAL_SYEARMONTH = 47, + CAL_ITWODIGITYEARMAX = 48, + CAL_NOUSEROVERRIDE = LOCALE_NOUSEROVERRIDE, + CAL_RETURN_NUMBER = LOCALE_RETURN_NUMBER, + CAL_USE_CP_ACP = LOCALE_USE_CP_ACP + } +} // (WINVER >= 0x500) + +extern (Windows) { + alias BOOL function(LPSTR) CALINFO_ENUMPROCA; + alias BOOL function(LPWSTR) CALINFO_ENUMPROCW; + alias BOOL function(LPSTR, CALID) CALINFO_ENUMPROCEXA; + alias BOOL function(LPWSTR, CALID) CALINFO_ENUMPROCEXW; + alias BOOL function(LGRPID, LPSTR, LPSTR, DWORD, LONG_PTR) + LANGUAGEGROUP_ENUMPROCA; + alias BOOL function(LGRPID, LPWSTR, LPWSTR, DWORD, LONG_PTR) + LANGUAGEGROUP_ENUMPROCW; + alias BOOL function(LGRPID, LCID, LPSTR, LONG_PTR) + LANGGROUPLOCALE_ENUMPROCA; + alias BOOL function(LGRPID, LCID, LPWSTR, LONG_PTR) + LANGGROUPLOCALE_ENUMPROCW; + alias BOOL function(LPWSTR, LONG_PTR) UILANGUAGE_ENUMPROCW; + alias BOOL function(LPSTR, LONG_PTR) UILANGUAGE_ENUMPROCA; + alias BOOL function(LPSTR) LOCALE_ENUMPROCA; + alias BOOL function(LPWSTR) LOCALE_ENUMPROCW; + alias BOOL function(LPSTR) CODEPAGE_ENUMPROCA; + alias BOOL function(LPWSTR) CODEPAGE_ENUMPROCW; + alias BOOL function(LPSTR) DATEFMT_ENUMPROCA; + alias BOOL function(LPWSTR) DATEFMT_ENUMPROCW; + alias BOOL function(LPSTR, CALID) DATEFMT_ENUMPROCEXA; + alias BOOL function(LPWSTR, CALID) DATEFMT_ENUMPROCEXW; + alias BOOL function(LPSTR) TIMEFMT_ENUMPROCA; + alias BOOL function(LPWSTR) TIMEFMT_ENUMPROCW; + alias BOOL function(GEOID) GEO_ENUMPROC; +} + +enum NLS_FUNCTION { + COMPARE_STRING = 0x0001 +} + +enum SYSGEOCLASS { + GEOCLASS_NATION = 16, + GEOCLASS_REGION = 14 +} + +enum SYSGEOTYPE { + GEO_NATION = 0x0001, + GEO_LATITUDE = 0x0002, + GEO_LONGITUDE = 0x0003, + GEO_ISO2 = 0x0004, + GEO_ISO3 = 0x0005, + GEO_RFC1766 = 0x0006, + GEO_LCID = 0x0007, + GEO_FRIENDLYNAME = 0x0008, + GEO_OFFICIALNAME = 0x0009, + GEO_TIMEZONES = 0x000a, + GEO_OFFICIALLANGUAGES = 0x000a +} + +struct CPINFO { + UINT MaxCharSize; + BYTE[MAX_DEFAULTCHAR] DefaultChar; + BYTE[MAX_LEADBYTES] LeadByte; +} +alias CPINFO* LPCPINFO; + +struct CPINFOEXA { + UINT MaxCharSize; + BYTE[MAX_DEFAULTCHAR] DefaultChar; + BYTE[MAX_LEADBYTES] LeadByte; + WCHAR UnicodeDefaultChar; + UINT CodePage; + CHAR[MAX_PATH] CodePageName; +} +alias CPINFOEXA* LPCPINFOEXA; + +struct CPINFOEXW { + UINT MaxCharSize; + BYTE[MAX_DEFAULTCHAR] DefaultChar; + BYTE[MAX_LEADBYTES] LeadByte; + WCHAR UnicodeDefaultChar; + UINT CodePage; + WCHAR[MAX_PATH] CodePageName; +} +alias CPINFOEXW* LPCPINFOEXW; + +struct CURRENCYFMTA { + UINT NumDigits; + UINT LeadingZero; + UINT Grouping; + LPSTR lpDecimalSep; + LPSTR lpThousandSep; + UINT NegativeOrder; + UINT PositiveOrder; + LPSTR lpCurrencySymbol; +} +alias CURRENCYFMTA* LPCURRENCYFMTA; + +struct CURRENCYFMTW { + UINT NumDigits; + UINT LeadingZero; + UINT Grouping; + LPWSTR lpDecimalSep; + LPWSTR lpThousandSep; + UINT NegativeOrder; + UINT PositiveOrder; + LPWSTR lpCurrencySymbol; +} +alias CURRENCYFMTW* LPCURRENCYFMTW; + +struct NLSVERSIONINFO { + DWORD dwNLSVersionInfoSize; + DWORD dwNLSVersion; + DWORD dwDefinedVersion; +} +alias NLSVERSIONINFO* LPNLSVERSIONINFO; + +struct NUMBERFMTA { + UINT NumDigits; + UINT LeadingZero; + UINT Grouping; + LPSTR lpDecimalSep; + LPSTR lpThousandSep; + UINT NegativeOrder; +} +alias NUMBERFMTA* LPNUMBERFMTA; + +struct NUMBERFMTW { + UINT NumDigits; + UINT LeadingZero; + UINT Grouping; + LPWSTR lpDecimalSep; + LPWSTR lpThousandSep; + UINT NegativeOrder; +} +alias NUMBERFMTW* LPNUMBERFMTW; + +extern (Windows) { + int CompareStringA(LCID, DWORD, LPCSTR, int, LPCSTR, int); + int CompareStringW(LCID, DWORD, LPCWSTR, int, LPCWSTR, int); + LCID ConvertDefaultLocale(LCID); + BOOL EnumCalendarInfoA(CALINFO_ENUMPROCA, LCID, CALID, CALTYPE); + BOOL EnumCalendarInfoW(CALINFO_ENUMPROCW, LCID, CALID, CALTYPE); + BOOL EnumDateFormatsA(DATEFMT_ENUMPROCA, LCID, DWORD); + BOOL EnumDateFormatsW(DATEFMT_ENUMPROCW, LCID, DWORD); + BOOL EnumSystemCodePagesA(CODEPAGE_ENUMPROCA, DWORD); + BOOL EnumSystemCodePagesW(CODEPAGE_ENUMPROCW, DWORD); + BOOL EnumSystemGeoID(GEOCLASS, GEOID, GEO_ENUMPROC); + BOOL EnumSystemLocalesA(LOCALE_ENUMPROCA, DWORD); + BOOL EnumSystemLocalesW(LOCALE_ENUMPROCW, DWORD); + BOOL EnumTimeFormatsA(TIMEFMT_ENUMPROCA, LCID, DWORD); + BOOL EnumTimeFormatsW(TIMEFMT_ENUMPROCW, LCID, DWORD); + int FoldStringA(DWORD, LPCSTR, int, LPSTR, int); + int FoldStringW(DWORD, LPCWSTR, int, LPWSTR, int); + UINT GetACP(); + int GetCalendarInfoA(LCID, CALID, CALTYPE, LPSTR, int, LPDWORD); + int GetCalendarInfoW(LCID, CALID, CALTYPE, LPWSTR, int, LPDWORD); + BOOL GetCPInfo(UINT, LPCPINFO); + BOOL GetCPInfoExA(UINT, DWORD, LPCPINFOEXA); + BOOL GetCPInfoExW(UINT, DWORD, LPCPINFOEXW); + int GetCurrencyFormatA(LCID, DWORD, LPCSTR, CURRENCYFMTA*, LPSTR, int); + int GetCurrencyFormatW(LCID, DWORD, LPCWSTR, CURRENCYFMTW*, LPWSTR, + int); + int GetDateFormatA(LCID, DWORD, SYSTEMTIME*, LPCSTR, LPSTR, int); + int GetDateFormatW(LCID, DWORD, SYSTEMTIME*, LPCWSTR, LPWSTR, int); + int GetGeoInfoA(GEOID, GEOTYPE, LPSTR, int, LANGID); + int GetGeoInfoW(GEOID, GEOTYPE, LPWSTR, int, LANGID); + int GetLocaleInfoA(LCID, LCTYPE, LPSTR, int); + int GetLocaleInfoW(LCID, LCTYPE, LPWSTR, int); + BOOL GetNLSVersion(NLS_FUNCTION, LCID, LPNLSVERSIONINFO); + int GetNumberFormatA(LCID, DWORD, LPCSTR, NUMBERFMTA*, LPSTR, int); + int GetNumberFormatW(LCID, DWORD, LPCWSTR, NUMBERFMTW*, LPWSTR, int); + UINT GetOEMCP(); + BOOL GetStringTypeA(LCID, DWORD, LPCSTR, int, LPWORD); + BOOL GetStringTypeW(DWORD, LPCWSTR, int, LPWORD); + BOOL GetStringTypeExA(LCID, DWORD, LPCSTR, int, LPWORD); + BOOL GetStringTypeExW(LCID, DWORD, LPCWSTR, int, LPWORD); + LANGID GetSystemDefaultLangID(); + LCID GetSystemDefaultLCID(); + LCID GetThreadLocale(); + int GetTimeFormatA(LCID, DWORD, SYSTEMTIME*, LPCSTR, LPSTR, int); + int GetTimeFormatW(LCID, DWORD, SYSTEMTIME*, LPCWSTR, LPWSTR, int); + LANGID GetUserDefaultLangID(); + LCID GetUserDefaultLCID(); + GEOID GetUserGeoID(GEOCLASS); + BOOL IsDBCSLeadByte(BYTE); + BOOL IsDBCSLeadByteEx(UINT, BYTE); + BOOL IsNLSDefinedString(NLS_FUNCTION, DWORD, LPNLSVERSIONINFO, LPCWSTR, + int); + BOOL IsValidCodePage(UINT); + BOOL IsValidLocale(LCID, DWORD); + int LCMapStringA(LCID, DWORD, LPCSTR, int, LPSTR, int); + int LCMapStringW(LCID, DWORD, LPCWSTR, int, LPWSTR, int); + int MultiByteToWideChar(UINT, DWORD, LPCSTR, int, LPWSTR, int); + int SetCalendarInfoA(LCID, CALID, CALTYPE, LPCSTR); + int SetCalendarInfoW(LCID, CALID, CALTYPE, LPCWSTR); + BOOL SetLocaleInfoA(LCID, LCTYPE, LPCSTR); + BOOL SetLocaleInfoW(LCID, LCTYPE, LPCWSTR); + BOOL SetThreadLocale(LCID); + BOOL SetUserGeoID(GEOID); + int WideCharToMultiByte(UINT, DWORD, LPCWSTR, int, LPSTR, int, LPCSTR, + LPBOOL); + + static if (WINVER >= 0x410) { + BOOL EnumCalendarInfoExA(CALINFO_ENUMPROCEXA, LCID, CALID, CALTYPE); + BOOL EnumCalendarInfoExW(CALINFO_ENUMPROCEXW, LCID, CALID, CALTYPE); + BOOL EnumDateFormatsExA(DATEFMT_ENUMPROCEXA, LCID, DWORD); + BOOL EnumDateFormatsExW(DATEFMT_ENUMPROCEXW, LCID, DWORD); + BOOL IsValidLanguageGroup(LGRPID, DWORD); + } + + static if (WINVER >= 0x500) { + LANGID GetSystemDefaultUILanguage(); + LANGID GetUserDefaultUILanguage(); + + static if (_WIN32_WINNT_ONLY) { + BOOL EnumSystemLanguageGroupsA(LANGUAGEGROUP_ENUMPROCA, DWORD, + LONG_PTR); + BOOL EnumSystemLanguageGroupsW(LANGUAGEGROUP_ENUMPROCW, DWORD, + LONG_PTR); + BOOL EnumLanguageGroupLocalesA(LANGGROUPLOCALE_ENUMPROCA, LGRPID, + DWORD, LONG_PTR); + BOOL EnumLanguageGroupLocalesW(LANGGROUPLOCALE_ENUMPROCW, LGRPID, + DWORD, LONG_PTR); + BOOL EnumUILanguagesA(UILANGUAGE_ENUMPROCA, DWORD, LONG_PTR); + BOOL EnumUILanguagesW(UILANGUAGE_ENUMPROCW, DWORD, LONG_PTR); + } + } +} + +version (Unicode) { + alias CALINFO_ENUMPROCW CALINFO_ENUMPROC; + alias CALINFO_ENUMPROCEXW CALINFO_ENUMPROCEX; + alias LOCALE_ENUMPROCW LOCALE_ENUMPROC; + alias CODEPAGE_ENUMPROCW CODEPAGE_ENUMPROC; + alias DATEFMT_ENUMPROCW DATEFMT_ENUMPROC; + alias DATEFMT_ENUMPROCEXW DATEFMT_ENUMPROCEX; + alias TIMEFMT_ENUMPROCW TIMEFMT_ENUMPROC; + alias LANGUAGEGROUP_ENUMPROCW LANGUAGEGROUP_ENUMPROC; + alias LANGGROUPLOCALE_ENUMPROCW LANGGROUPLOCALE_ENUMPROC; + alias UILANGUAGE_ENUMPROCW UILANGUAGE_ENUMPROC; + alias CPINFOEXW CPINFOEX; + alias LPCPINFOEXW LPCPINFOEX; + alias CURRENCYFMTW CURRENCYFMT; + alias LPCURRENCYFMTW LPCURRENCYFMT; + alias NUMBERFMTW NUMBERFMT; + alias LPNUMBERFMTW LPNUMBERFMT; + alias CompareStringW CompareString; + alias EnumCalendarInfoW EnumCalendarInfo; + alias EnumSystemCodePagesW EnumSystemCodePages; + alias EnumSystemLocalesW EnumSystemLocales; + alias EnumTimeFormatsW EnumTimeFormats; + alias FoldStringW FoldString; + alias GetCalendarInfoW GetCalendarInfo; + alias GetCPInfoExW GetCPInfoEx; + alias GetCurrencyFormatW GetCurrencyFormat; + alias GetDateFormatW GetDateFormat; + alias GetGeoInfoW GetGeoInfo; + alias GetLocaleInfoW GetLocaleInfo; + alias GetNumberFormatW GetNumberFormat; + alias GetStringTypeExW GetStringTypeEx; + alias GetTimeFormatW GetTimeFormat; + alias LCMapStringW LCMapString; + alias SetCalendarInfoW SetCalendarInfo; + alias SetLocaleInfoW SetLocaleInfo; + + static if (WINVER >= 0x410) { + alias EnumCalendarInfoExW EnumCalendarInfoEx; + alias EnumDateFormatsExW EnumDateFormatsEx; + } + + static if (_WIN32_WINNT_ONLY && WINVER >= 0x500) { + alias EnumSystemLanguageGroupsW EnumSystemLanguageGroups; + alias EnumLanguageGroupLocalesW EnumLanguageGroupLocales; + alias EnumUILanguagesW EnumUILanguages; + } + +} else { + alias CALINFO_ENUMPROCA CALINFO_ENUMPROC; + alias CALINFO_ENUMPROCEXA CALINFO_ENUMPROCEX; + alias LOCALE_ENUMPROCA LOCALE_ENUMPROC; + alias CODEPAGE_ENUMPROCA CODEPAGE_ENUMPROC; + alias DATEFMT_ENUMPROCA DATEFMT_ENUMPROC; + alias DATEFMT_ENUMPROCEXA DATEFMT_ENUMPROCEX; + alias TIMEFMT_ENUMPROCA TIMEFMT_ENUMPROC; + alias LANGUAGEGROUP_ENUMPROCA LANGUAGEGROUP_ENUMPROC; + alias LANGGROUPLOCALE_ENUMPROCA LANGGROUPLOCALE_ENUMPROC; + alias UILANGUAGE_ENUMPROCA UILANGUAGE_ENUMPROC; + alias CPINFOEXA CPINFOEX; + alias LPCPINFOEXA LPCPINFOEX; + alias CURRENCYFMTA CURRENCYFMT; + alias LPCURRENCYFMTA LPCURRENCYFMT; + alias NUMBERFMTA NUMBERFMT; + alias LPNUMBERFMTA LPNUMBERFMT; + alias CompareStringA CompareString; + alias EnumCalendarInfoA EnumCalendarInfo; + alias EnumSystemCodePagesA EnumSystemCodePages; + alias EnumSystemLocalesA EnumSystemLocales; + alias EnumTimeFormatsA EnumTimeFormats; + alias FoldStringA FoldString; + alias GetCalendarInfoA GetCalendarInfo; + alias GetCPInfoExA GetCPInfoEx; + alias GetCurrencyFormatA GetCurrencyFormat; + alias GetDateFormatA GetDateFormat; + alias GetGeoInfoA GetGeoInfo; + alias GetLocaleInfoA GetLocaleInfo; + alias GetNumberFormatA GetNumberFormat; + alias GetStringTypeExA GetStringTypeEx; + alias GetTimeFormatA GetTimeFormat; + alias LCMapStringA LCMapString; + alias SetCalendarInfoA SetCalendarInfo; + alias SetLocaleInfoA SetLocaleInfo; + + static if (WINVER >= 0x410) { + alias EnumCalendarInfoExA EnumCalendarInfoEx; + alias EnumDateFormatsExA EnumDateFormatsEx; + } + + static if (_WIN32_WINNT_ONLY && WINVER >= 0x500) { + alias EnumSystemLanguageGroupsA EnumSystemLanguageGroups; + alias EnumLanguageGroupLocalesA EnumLanguageGroupLocales; + alias EnumUILanguagesA EnumUILanguages; + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winnt.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winnt.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,3980 @@ +/***********************************************************************\ +* winnt.d * +* * +* Windows API header module * +* * +* Translated from MinGW API for MS-Windows 3.12 * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winnt; + +public import win32.basetsd, win32.windef, win32.winerror; +private import win32.w32api; + +/* Translation Notes: +The following macros are unneeded for D: +FIELD_OFFSET(t,f), CONTAINING_RECORD(address, type, field) +*/ + +alias void VOID; +alias char CHAR, CCHAR; +alias wchar WCHAR; +alias bool BOOLEAN; +alias byte FCHAR; +alias ubyte UCHAR; +alias short SHORT; +alias ushort LANGID, FSHORT; +alias uint LCID, FLONG, ACCESS_MASK; +alias long LONGLONG, USN; +alias ulong DWORDLONG, ULONGLONG; + +alias void* PVOID, LPVOID; +alias char* PSZ, PCHAR, PCCHAR, LPCH, PCH, LPSTR, PSTR; +alias wchar* PWCHAR, LPWCH, PWCH, LPWSTR, PWSTR; +alias bool* PBOOLEAN; +alias ubyte* PUCHAR; +alias short* PSHORT; +alias int* PLONG; +alias uint* PLCID, PACCESS_MASK; +alias long* PLONGLONG; +alias ulong* PDWORDLONG, PULONGLONG; + +// FIXME(MinGW) for __WIN64 +alias void* PVOID64; + +// const versions +alias CPtr!(char) LPCCH, PCSTR, LPCSTR; +alias CPtr!(wchar) LPCWCH, PCWCH, LPCWSTR, PCWSTR; + +version (Unicode) { + alias WCHAR TCHAR, _TCHAR; +} else { + alias CHAR TCHAR, _TCHAR; +} + +alias TCHAR TBYTE; +alias TCHAR* PTCH, PTBYTE, LPTCH, PTSTR, LPTSTR, LP, PTCHAR; +alias CPtr!(TCHAR) LPCTSTR; + +const char ANSI_NULL = '\0'; +const wchar UNICODE_NULL = '\0'; + +const APPLICATION_ERROR_MASK = 0x20000000; +const ERROR_SEVERITY_SUCCESS = 0x00000000; +const ERROR_SEVERITY_INFORMATIONAL = 0x40000000; +const ERROR_SEVERITY_WARNING = 0x80000000; +const ERROR_SEVERITY_ERROR = 0xC0000000; + +// MinGW: also in ddk/ntifs.h +enum : USHORT { + COMPRESSION_FORMAT_NONE = 0x0000, + COMPRESSION_FORMAT_DEFAULT = 0x0001, + COMPRESSION_FORMAT_LZNT1 = 0x0002, + COMPRESSION_ENGINE_STANDARD = 0x0000, + COMPRESSION_ENGINE_MAXIMUM = 0x0100, + COMPRESSION_ENGINE_HIBER = 0x0200 +} + +// ACCESS_DENIED_OBJECT_ACE, etc +const DWORD + ACE_OBJECT_TYPE_PRESENT = 0x00000001, + ACE_INHERITED_OBJECT_TYPE_PRESENT = 0x00000002; + +// ACE_HEADER.AceType +// also in ddk/ntifs.h +enum : BYTE { + ACCESS_ALLOWED_ACE_TYPE, + ACCESS_DENIED_ACE_TYPE, + SYSTEM_AUDIT_ACE_TYPE, + SYSTEM_ALARM_ACE_TYPE +} + +// ACE_HEADER.AceFlags +const BYTE + OBJECT_INHERIT_ACE = 0x01, + CONTAINER_INHERIT_ACE = 0x02, + NO_PROPAGATE_INHERIT_ACE = 0x04, + INHERIT_ONLY_ACE = 0x08, + INHERITED_ACE = 0x10, + VALID_INHERIT_FLAGS = 0x1F, + SUCCESSFUL_ACCESS_ACE_FLAG = 0x40, + FAILED_ACCESS_ACE_FLAG = 0x80; + +// Access Mask Format +const ACCESS_MASK + DELETE = 0x00010000, + READ_CONTROL = 0x00020000, + WRITE_DAC = 0x00040000, + WRITE_OWNER = 0x00080000, + SYNCHRONIZE = 0x00100000, + ACCESS_SYSTEM_SECURITY = 0x01000000, + MAXIMUM_ALLOWED = 0x02000000, + GENERIC_READ = 0x80000000, + GENERIC_WRITE = 0x40000000, + GENERIC_EXECUTE = 0x20000000, + GENERIC_ALL = 0x10000000, + STANDARD_RIGHTS_REQUIRED = 0x000F0000, + STANDARD_RIGHTS_READ = 0x00020000, + STANDARD_RIGHTS_WRITE = 0x00020000, + STANDARD_RIGHTS_EXECUTE = 0x00020000, + STANDARD_RIGHTS_ALL = 0x001F0000, + SPECIFIC_RIGHTS_ALL = 0x0000FFFF; + + +const DWORD INVALID_FILE_ATTRIBUTES = -1; + +// MinGW: Also in ddk/winddk.h +const DWORD + FILE_LIST_DIRECTORY = 0x00000001, + FILE_READ_DATA = 0x00000001, + FILE_ADD_FILE = 0x00000002, + FILE_WRITE_DATA = 0x00000002, + FILE_ADD_SUBDIRECTORY = 0x00000004, + FILE_APPEND_DATA = 0x00000004, + FILE_CREATE_PIPE_INSTANCE = 0x00000004, + FILE_READ_EA = 0x00000008, + FILE_READ_PROPERTIES = 0x00000008, + FILE_WRITE_EA = 0x00000010, + FILE_WRITE_PROPERTIES = 0x00000010, + FILE_EXECUTE = 0x00000020, + FILE_TRAVERSE = 0x00000020, + FILE_DELETE_CHILD = 0x00000040, + FILE_READ_ATTRIBUTES = 0x00000080, + FILE_WRITE_ATTRIBUTES = 0x00000100; + +const DWORD + FILE_SHARE_READ = 0x00000001, + FILE_SHARE_WRITE = 0x00000002, + FILE_SHARE_DELETE = 0x00000004, + FILE_SHARE_VALID_FLAGS = 0x00000007; + +const DWORD + FILE_ATTRIBUTE_READONLY = 0x00000001, + FILE_ATTRIBUTE_HIDDEN = 0x00000002, + FILE_ATTRIBUTE_SYSTEM = 0x00000004, + FILE_ATTRIBUTE_DIRECTORY = 0x00000010, + FILE_ATTRIBUTE_ARCHIVE = 0x00000020, + FILE_ATTRIBUTE_DEVICE = 0x00000040, + FILE_ATTRIBUTE_NORMAL = 0x00000080, + FILE_ATTRIBUTE_TEMPORARY = 0x00000100, + FILE_ATTRIBUTE_SPARSE_FILE = 0x00000200, + FILE_ATTRIBUTE_REPARSE_POINT = 0x00000400, + FILE_ATTRIBUTE_COMPRESSED = 0x00000800, + FILE_ATTRIBUTE_OFFLINE = 0x00001000, + FILE_ATTRIBUTE_NOT_CONTENT_INDEXED = 0x00002000, + FILE_ATTRIBUTE_ENCRYPTED = 0x00004000, + FILE_ATTRIBUTE_VALID_FLAGS = 0x00007fb7, + FILE_ATTRIBUTE_VALID_SET_FLAGS = 0x000031a7; + +// These are not documented on MSDN +const FILE_COPY_STRUCTURED_STORAGE = 0x00000041; +const FILE_STRUCTURED_STORAGE = 0x00000441; + +// Nor are these +const FILE_VALID_OPTION_FLAGS = 0x00ffffff; +const FILE_VALID_PIPE_OPTION_FLAGS = 0x00000032; +const FILE_VALID_MAILSLOT_OPTION_FLAGS = 0x00000032; +const FILE_VALID_SET_FLAGS = 0x00000036; + +const ULONG + FILE_SUPERSEDE = 0x00000000, + FILE_OPEN = 0x00000001, + FILE_CREATE = 0x00000002, + FILE_OPEN_IF = 0x00000003, + FILE_OVERWRITE = 0x00000004, + FILE_OVERWRITE_IF = 0x00000005, + FILE_MAXIMUM_DISPOSITION = 0x00000005; + +const ULONG + FILE_DIRECTORY_FILE = 0x00000001, + FILE_WRITE_THROUGH = 0x00000002, + FILE_SEQUENTIAL_ONLY = 0x00000004, + FILE_NO_INTERMEDIATE_BUFFERING = 0x00000008, + FILE_SYNCHRONOUS_IO_ALERT = 0x00000010, + FILE_SYNCHRONOUS_IO_NONALERT = 0x00000020, + FILE_NON_DIRECTORY_FILE = 0x00000040, + FILE_CREATE_TREE_CONNECTION = 0x00000080, + FILE_COMPLETE_IF_OPLOCKED = 0x00000100, + FILE_NO_EA_KNOWLEDGE = 0x00000200, + FILE_OPEN_FOR_RECOVERY = 0x00000400, + FILE_RANDOM_ACCESS = 0x00000800, + FILE_DELETE_ON_CLOSE = 0x00001000, + FILE_OPEN_BY_FILE_ID = 0x00002000, + FILE_OPEN_FOR_BACKUP_INTENT = 0x00004000, + FILE_NO_COMPRESSION = 0x00008000, + FILE_RESERVE_OPFILTER = 0x00100000, + FILE_OPEN_REPARSE_POINT = 0x00200000, + FILE_OPEN_NO_RECALL = 0x00400000, + FILE_OPEN_FOR_FREE_SPACE_QUERY = 0x00800000; + + +const ACCESS_MASK + FILE_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x01FF, + FILE_GENERIC_EXECUTE = STANDARD_RIGHTS_EXECUTE | FILE_READ_ATTRIBUTES + | FILE_EXECUTE | SYNCHRONIZE, + FILE_GENERIC_READ = STANDARD_RIGHTS_READ | FILE_READ_DATA + | FILE_READ_ATTRIBUTES | FILE_READ_EA | SYNCHRONIZE, + FILE_GENERIC_WRITE = STANDARD_RIGHTS_WRITE | FILE_WRITE_DATA + | FILE_WRITE_ATTRIBUTES | FILE_WRITE_EA | FILE_APPEND_DATA + | SYNCHRONIZE; + +// MinGW: end winddk.h +// MinGW: also in ddk/ntifs.h +const DWORD + FILE_NOTIFY_CHANGE_FILE_NAME = 0x00000001, + FILE_NOTIFY_CHANGE_DIR_NAME = 0x00000002, + FILE_NOTIFY_CHANGE_NAME = 0x00000003, + FILE_NOTIFY_CHANGE_ATTRIBUTES = 0x00000004, + FILE_NOTIFY_CHANGE_SIZE = 0x00000008, + FILE_NOTIFY_CHANGE_LAST_WRITE = 0x00000010, + FILE_NOTIFY_CHANGE_LAST_ACCESS = 0x00000020, + FILE_NOTIFY_CHANGE_CREATION = 0x00000040, + FILE_NOTIFY_CHANGE_EA = 0x00000080, + FILE_NOTIFY_CHANGE_SECURITY = 0x00000100, + FILE_NOTIFY_CHANGE_STREAM_NAME = 0x00000200, + FILE_NOTIFY_CHANGE_STREAM_SIZE = 0x00000400, + FILE_NOTIFY_CHANGE_STREAM_WRITE = 0x00000800, + FILE_NOTIFY_VALID_MASK = 0x00000fff; + +const DWORD + FILE_CASE_SENSITIVE_SEARCH = 0x00000001, + FILE_CASE_PRESERVED_NAMES = 0x00000002, + FILE_UNICODE_ON_DISK = 0x00000004, + FILE_PERSISTENT_ACLS = 0x00000008, + FILE_FILE_COMPRESSION = 0x00000010, + FILE_VOLUME_QUOTAS = 0x00000020, + FILE_SUPPORTS_SPARSE_FILES = 0x00000040, + FILE_SUPPORTS_REPARSE_POINTS = 0x00000080, + FILE_SUPPORTS_REMOTE_STORAGE = 0x00000100, + FS_LFN_APIS = 0x00004000, + FILE_VOLUME_IS_COMPRESSED = 0x00008000, + FILE_SUPPORTS_OBJECT_IDS = 0x00010000, + FILE_SUPPORTS_ENCRYPTION = 0x00020000, + FILE_NAMED_STREAMS = 0x00040000, + FILE_READ_ONLY_VOLUME = 0x00080000, + FILE_SEQUENTIAL_WRITE_ONCE = 0x00100000, + FILE_SUPPORTS_TRANSACTIONS = 0x00200000; + +// These are not documented on MSDN +const ACCESS_MASK + IO_COMPLETION_QUERY_STATE = 1, + IO_COMPLETION_MODIFY_STATE = 2, + IO_COMPLETION_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 3; +// MinGW: end ntifs.h + +// MinGW: also in ddk/winddk.h +const DWORD + DUPLICATE_CLOSE_SOURCE = 1, + DUPLICATE_SAME_ACCESS = 2, + DUPLICATE_SAME_ATTRIBUTES = 4; +// MinGW: end winddk.k + +const DWORD + MAILSLOT_NO_MESSAGE = -1, + MAILSLOT_WAIT_FOREVER = -1; + +const ACCESS_MASK + PROCESS_TERMINATE = 0x0001, + PROCESS_CREATE_THREAD = 0x0002, + PROCESS_SET_SESSIONID = 0x0004, + PROCESS_VM_OPERATION = 0x0008, + PROCESS_VM_READ = 0x0010, + PROCESS_VM_WRITE = 0x0020, + PROCESS_DUP_HANDLE = 0x0040, + PROCESS_CREATE_PROCESS = 0x0080, + PROCESS_SET_QUOTA = 0x0100, + PROCESS_SET_INFORMATION = 0x0200, + PROCESS_QUERY_INFORMATION = 0x0400, + PROCESS_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x0FFF; + +const ACCESS_MASK + THREAD_TERMINATE = 0x0001, + THREAD_SUSPEND_RESUME = 0x0002, + THREAD_GET_CONTEXT = 0x0008, + THREAD_SET_CONTEXT = 0x0010, + THREAD_SET_INFORMATION = 0x0020, + THREAD_QUERY_INFORMATION = 0x0040, + THREAD_SET_THREAD_TOKEN = 0x0080, + THREAD_IMPERSONATE = 0x0100, + THREAD_DIRECT_IMPERSONATION = 0x0200, + THREAD_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3FF; + +// These are not documented on MSDN +const THREAD_BASE_PRIORITY_LOWRT = 15; +const THREAD_BASE_PRIORITY_MAX = 2; +const THREAD_BASE_PRIORITY_MIN = -2; +const THREAD_BASE_PRIORITY_IDLE = -15; + +const DWORD EXCEPTION_NONCONTINUABLE = 1; +const size_t EXCEPTION_MAXIMUM_PARAMETERS = 15; + +// These are not documented on MSDN +const ACCESS_MASK + MUTANT_QUERY_STATE = 1, + MUTANT_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | MUTANT_QUERY_STATE; + +const ACCESS_MASK + TIMER_QUERY_STATE = 1, + TIMER_MODIFY_STATE = 2, + TIMER_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | TIMER_QUERY_STATE + | TIMER_MODIFY_STATE; + +const SID_IDENTIFIER_AUTHORITY + SECURITY_NULL_SID_AUTHORITY = {[5: 0]}, + SECURITY_WORLD_SID_AUTHORITY = {[5: 1]}, + SECURITY_LOCAL_SID_AUTHORITY = {[5: 2]}, + SECURITY_CREATOR_SID_AUTHORITY = {[5: 3]}, + SECURITY_NON_UNIQUE_AUTHORITY = {[5: 4]}, + SECURITY_NT_AUTHORITY = {[5: 5]}, + SECURITY_MANDATORY_LABEL_AUTHORITY = {[5: 6]}; + +const DWORD + SECURITY_NULL_RID = 0, + SECURITY_WORLD_RID = 0, + SECURITY_LOCAL_RID = 0, + SECURITY_CREATOR_OWNER_RID = 0, + SECURITY_CREATOR_GROUP_RID = 1, + SECURITY_DIALUP_RID = 1, + SECURITY_NETWORK_RID = 2, + SECURITY_BATCH_RID = 3, + SECURITY_INTERACTIVE_RID = 4, + SECURITY_LOGON_IDS_RID = 5, + SECURITY_SERVICE_RID = 6, + SECURITY_LOCAL_SYSTEM_RID = 18, + SECURITY_BUILTIN_DOMAIN_RID = 32, + SECURITY_PRINCIPAL_SELF_RID = 10, + SECURITY_CREATOR_OWNER_SERVER_RID = 2, + SECURITY_CREATOR_GROUP_SERVER_RID = 3, + SECURITY_LOGON_IDS_RID_COUNT = 3, + SECURITY_ANONYMOUS_LOGON_RID = 7, + SECURITY_PROXY_RID = 8, + SECURITY_ENTERPRISE_CONTROLLERS_RID = 9, + SECURITY_SERVER_LOGON_RID = SECURITY_ENTERPRISE_CONTROLLERS_RID, + SECURITY_AUTHENTICATED_USER_RID = 11, + SECURITY_RESTRICTED_CODE_RID = 12, + SECURITY_NT_NON_UNIQUE_RID = 21, + SID_REVISION = 1; + +enum : DWORD { + DOMAIN_USER_RID_ADMIN = 0x01F4, + DOMAIN_USER_RID_GUEST = 0x01F5, + DOMAIN_GROUP_RID_ADMINS = 0x0200, + DOMAIN_GROUP_RID_USERS = 0x0201, + DOMAIN_ALIAS_RID_ADMINS = 0x0220, + DOMAIN_ALIAS_RID_USERS = 0x0221, + DOMAIN_ALIAS_RID_GUESTS = 0x0222, + DOMAIN_ALIAS_RID_POWER_USERS = 0x0223, + DOMAIN_ALIAS_RID_ACCOUNT_OPS = 0x0224, + DOMAIN_ALIAS_RID_SYSTEM_OPS = 0x0225, + DOMAIN_ALIAS_RID_PRINT_OPS = 0x0226, + DOMAIN_ALIAS_RID_BACKUP_OPS = 0x0227, + DOMAIN_ALIAS_RID_REPLICATOR = 0x0228 +} + +enum : WORD { + SECURITY_MANDATORY_UNTRUSTED_RID = 0, + SECURITY_MANDATORY_LOW_RID = 0x1000, + SECURITY_MANDATORY_MEDIUM_RID = 0x2000, + SECURITY_MANDATORY_HIGH_RID = 0x3000, + SECURITY_MANDATORY_SYSTEM_RID = 0x4000, + SECURITY_MANDATORY_PROTECTED_PROCESS_RID = 0x5000, + SECURITY_MANDATORY_MAXIMUM_USER_RID = SECURITY_MANDATORY_SYSTEM_RID +} + +const TCHAR[] + SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege", + SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege", + SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege", + SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege", + SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege", + SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege", + SE_TCB_NAME = "SeTcbPrivilege", + SE_SECURITY_NAME = "SeSecurityPrivilege", + SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege", + SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege", + SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege", + SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege", + SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege", + SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege", + SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege", + SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege", + SE_BACKUP_NAME = "SeBackupPrivilege", + SE_RESTORE_NAME = "SeRestorePrivilege", + SE_SHUTDOWN_NAME = "SeShutdownPrivilege", + SE_DEBUG_NAME = "SeDebugPrivilege", + SE_AUDIT_NAME = "SeAuditPrivilege", + SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege", + SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege", + SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege", + SE_CREATE_GLOBAL_NAME = "SeCreateGlobalPrivilege", + SE_UNDOCK_NAME = "SeUndockPrivilege", + SE_MANAGE_VOLUME_NAME = "SeManageVolumePrivilege", + SE_IMPERSONATE_NAME = "SeImpersonatePrivilege", + SE_ENABLE_DELEGATION_NAME = "SeEnableDelegationPrivilege", + SE_SYNC_AGENT_NAME = "SeSyncAgentPrivilege", + SE_TRUSTED_CREDMAN_ACCESS_NAME = "SeTrustedCredManAccessPrivilege", + SE_RELABEL_NAME = "SeRelabelPrivilege", + SE_INCREASE_WORKING_SET_NAME = "SeIncreaseWorkingSetPrivilege", + SE_TIME_ZONE_NAME = "SeTimeZonePrivilege", + SE_CREATE_SYMBOLIC_LINK_NAME = "SeCreateSymbolicLinkPrivilege"; + +const DWORD + SE_GROUP_MANDATORY = 0x00000001, + SE_GROUP_ENABLED_BY_DEFAULT = 0x00000002, + SE_GROUP_ENABLED = 0x00000004, + SE_GROUP_OWNER = 0x00000008, + SE_GROUP_USE_FOR_DENY_ONLY = 0x00000010, + SE_GROUP_INTEGRITY = 0x00000020, + SE_GROUP_INTEGRITY_ENABLED = 0x00000040, + SE_GROUP_RESOURCE = 0x20000000, + SE_GROUP_LOGON_ID = 0xC0000000; + +// Primary language identifiers +enum : USHORT { + LANG_NEUTRAL, + LANG_ARABIC, + LANG_BULGARIAN, + LANG_CATALAN, + LANG_CHINESE, + LANG_CZECH, + LANG_DANISH, + LANG_GERMAN, + LANG_GREEK, + LANG_ENGLISH, + LANG_SPANISH, + LANG_FINNISH, + LANG_FRENCH, + LANG_HEBREW, + LANG_HUNGARIAN, + LANG_ICELANDIC, + LANG_ITALIAN, + LANG_JAPANESE, + LANG_KOREAN, + LANG_DUTCH, + LANG_NORWEGIAN, + LANG_POLISH, + LANG_PORTUGUESE, // = 0x16 + LANG_ROMANIAN = 0x18, + LANG_RUSSIAN, + LANG_CROATIAN, // = 0x1A + LANG_SERBIAN = 0x1A, + LANG_BOSNIAN = 0x1A, + LANG_SLOVAK, + LANG_ALBANIAN, + LANG_SWEDISH, + LANG_THAI, + LANG_TURKISH, + LANG_URDU, + LANG_INDONESIAN, + LANG_UKRAINIAN, + LANG_BELARUSIAN, + LANG_SLOVENIAN, + LANG_ESTONIAN, + LANG_LATVIAN, + LANG_LITHUANIAN, // = 0x27 + LANG_FARSI = 0x29, + LANG_PERSIAN = 0x29, + LANG_VIETNAMESE, + LANG_ARMENIAN, + LANG_AZERI, + LANG_BASQUE, + LANG_LOWER_SORBIAN, // = 0x2E + LANG_UPPER_SORBIAN = 0x2E, + LANG_MACEDONIAN, // = 0x2F + LANG_TSWANA = 0x32, + LANG_XHOSA = 0x34, + LANG_ZULU, + LANG_AFRIKAANS, + LANG_GEORGIAN, + LANG_FAEROESE, + LANG_HINDI, + LANG_MALTESE, + LANG_SAMI, + LANG_IRISH, // = 0x3C + LANG_MALAY = 0x3E, + LANG_KAZAK, + LANG_KYRGYZ, + LANG_SWAHILI, // = 0x41 + LANG_UZBEK = 0x43, + LANG_TATAR, + LANG_BENGALI, + LANG_PUNJABI, + LANG_GUJARATI, + LANG_ORIYA, + LANG_TAMIL, + LANG_TELUGU, + LANG_KANNADA, + LANG_MALAYALAM, + LANG_ASSAMESE, + LANG_MARATHI, + LANG_SANSKRIT, + LANG_MONGOLIAN, + LANG_TIBETAN, + LANG_WELSH, + LANG_KHMER, + LANG_LAO, // = 0x54 + LANG_GALICIAN = 0x56, + LANG_KONKANI, + LANG_MANIPURI, + LANG_SINDHI, + LANG_SYRIAC, + LANG_SINHALESE, // = 0x5B + LANG_INUKTITUT = 0x5D, + LANG_AMHARIC, + LANG_TAMAZIGHT, + LANG_KASHMIRI, + LANG_NEPALI, + LANG_FRISIAN, + LANG_PASHTO, + LANG_FILIPINO, + LANG_DIVEHI, // = 0x65 + LANG_HAUSA = 0x68, + LANG_YORUBA = 0x6A, + LANG_QUECHUA, + LANG_SOTHO, + LANG_BASHKIR, + LANG_LUXEMBOURGISH, + LANG_GREENLANDIC, + LANG_IGBO, // = 0x70 + LANG_TIGRIGNA = 0x73, + LANG_YI = 0x78, + LANG_MAPUDUNGUN = 0x7A, + LANG_MOHAWK = 0x7C, + LANG_BRETON = 0x7E, + LANG_UIGHUR = 0x80, + LANG_MAORI, + LANG_OCCITAN, + LANG_CORSICAN, + LANG_ALSATIAN, + LANG_YAKUT, + LANG_KICHE, + LANG_KINYARWANDA, + LANG_WOLOF, // = 0x88 + LANG_DARI = 0x8C, + LANG_MALAGASY, // = 0x8D + + LANG_SERBIAN_NEUTRAL = 0x7C1A, + LANG_BOSNIAN_NEUTRAL = 0x781A, + + LANG_INVARIANT = 0x7F +} + + +// Sublanguage identifiers +enum : USHORT { + SUBLANG_NEUTRAL, + SUBLANG_DEFAULT, + SUBLANG_SYS_DEFAULT, + SUBLANG_CUSTOM_DEFAULT, // = 3 + SUBLANG_UI_CUSTOM_DEFAULT = 3, + SUBLANG_CUSTOM_UNSPECIFIED, // = 4 + + SUBLANG_AFRIKAANS_SOUTH_AFRICA = 1, + SUBLANG_ALBANIAN_ALBANIA = 1, + SUBLANG_ALSATIAN_FRANCE = 1, + SUBLANG_AMHARIC_ETHIOPIA = 1, + + SUBLANG_ARABIC_SAUDI_ARABIA = 1, + SUBLANG_ARABIC_IRAQ, + SUBLANG_ARABIC_EGYPT, + SUBLANG_ARABIC_LIBYA, + SUBLANG_ARABIC_ALGERIA, + SUBLANG_ARABIC_MOROCCO, + SUBLANG_ARABIC_TUNISIA, + SUBLANG_ARABIC_OMAN, + SUBLANG_ARABIC_YEMEN, + SUBLANG_ARABIC_SYRIA, + SUBLANG_ARABIC_JORDAN, + SUBLANG_ARABIC_LEBANON, + SUBLANG_ARABIC_KUWAIT, + SUBLANG_ARABIC_UAE, + SUBLANG_ARABIC_BAHRAIN, + SUBLANG_ARABIC_QATAR, // = 16 + + SUBLANG_ARMENIAN_ARMENIA = 1, + SUBLANG_ASSAMESE_INDIA = 1, + + SUBLANG_AZERI_LATIN = 1, + SUBLANG_AZERI_CYRILLIC, // = 2 + + SUBLANG_BASHKIR_RUSSIA = 1, + SUBLANG_BASQUE_BASQUE = 1, + SUBLANG_BELARUSIAN_BELARUS = 1, + SUBLANG_BENGALI_INDIA = 1, + + SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN = 5, + SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC = 8, + + SUBLANG_BRETON_FRANCE = 1, + SUBLANG_BULGARIAN_BULGARIA = 1, + SUBLANG_CATALAN_CATALAN = 1, + + SUBLANG_CHINESE_TRADITIONAL = 1, + SUBLANG_CHINESE_SIMPLIFIED, + SUBLANG_CHINESE_HONGKONG, + SUBLANG_CHINESE_SINGAPORE, + SUBLANG_CHINESE_MACAU, // = 5 + + SUBLANG_CORSICAN_FRANCE = 1, + + SUBLANG_CROATIAN_CROATIA = 1, + SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN = 4, + + SUBLANG_CZECH_CZECH_REPUBLIC = 1, + SUBLANG_DANISH_DENMARK = 1, + SUBLANG_DIVEHI_MALDIVES = 1, + + SUBLANG_DUTCH = 1, + SUBLANG_DUTCH_BELGIAN, // = 2 + + SUBLANG_ENGLISH_US = 1, + SUBLANG_ENGLISH_UK, + SUBLANG_ENGLISH_AUS, + SUBLANG_ENGLISH_CAN, + SUBLANG_ENGLISH_NZ, + SUBLANG_ENGLISH_EIRE, // = 6 + SUBLANG_ENGLISH_IRELAND = 6, + SUBLANG_ENGLISH_SOUTH_AFRICA, + SUBLANG_ENGLISH_JAMAICA, + SUBLANG_ENGLISH_CARIBBEAN, + SUBLANG_ENGLISH_BELIZE, + SUBLANG_ENGLISH_TRINIDAD, + SUBLANG_ENGLISH_ZIMBABWE, + SUBLANG_ENGLISH_PHILIPPINES, // = 13 + SUBLANG_ENGLISH_INDIA = 16, + SUBLANG_ENGLISH_MALAYSIA, + SUBLANG_ENGLISH_SINGAPORE, // = 18 + + SUBLANG_ESTONIAN_ESTONIA = 1, + SUBLANG_FAEROESE_FAROE_ISLANDS = 1, + SUBLANG_FILIPINO_PHILIPPINES = 1, + SUBLANG_FINNISH_FINLAND = 1, + + SUBLANG_FRENCH = 1, + SUBLANG_FRENCH_BELGIAN, + SUBLANG_FRENCH_CANADIAN, + SUBLANG_FRENCH_SWISS, + SUBLANG_FRENCH_LUXEMBOURG, + SUBLANG_FRENCH_MONACO, // = 6 + + SUBLANG_FRISIAN_NETHERLANDS = 1, + SUBLANG_GALICIAN_GALICIAN = 1, + SUBLANG_GEORGIAN_GEORGIA = 1, + + SUBLANG_GERMAN = 1, + SUBLANG_GERMAN_SWISS, + SUBLANG_GERMAN_AUSTRIAN, + SUBLANG_GERMAN_LUXEMBOURG, + SUBLANG_GERMAN_LIECHTENSTEIN, // = 5 + + SUBLANG_GREEK_GREECE = 1, + SUBLANG_GREENLANDIC_GREENLAND = 1, + SUBLANG_GUJARATI_INDIA = 1, + SUBLANG_HAUSA_NIGERIA = 1, + SUBLANG_HEBREW_ISRAEL = 1, + SUBLANG_HINDI_INDIA = 1, + SUBLANG_HUNGARIAN_HUNGARY = 1, + SUBLANG_ICELANDIC_ICELAND = 1, + SUBLANG_IGBO_NIGERIA = 1, + SUBLANG_INDONESIAN_INDONESIA = 1, + + SUBLANG_INUKTITUT_CANADA = 1, + SUBLANG_INUKTITUT_CANADA_LATIN = 1, + + SUBLANG_IRISH_IRELAND = 1, + + SUBLANG_ITALIAN = 1, + SUBLANG_ITALIAN_SWISS, // = 2 + + SUBLANG_JAPANESE_JAPAN = 1, + + SUBLANG_KASHMIRI_INDIA = 2, + SUBLANG_KASHMIRI_SASIA = 2, + + SUBLANG_KAZAK_KAZAKHSTAN = 1, + SUBLANG_KHMER_CAMBODIA = 1, + SUBLANG_KICHE_GUATEMALA = 1, + SUBLANG_KINYARWANDA_RWANDA = 1, + SUBLANG_KONKANI_INDIA = 1, + SUBLANG_KOREAN = 1, + SUBLANG_KYRGYZ_KYRGYZSTAN = 1, + SUBLANG_LAO_LAO_PDR = 1, + SUBLANG_LATVIAN_LATVIA = 1, + + SUBLANG_LITHUANIAN = 1, + SUBLANG_LITHUANIAN_LITHUANIA = 1, + + SUBLANG_LOWER_SORBIAN_GERMANY = 1, + SUBLANG_LUXEMBOURGISH_LUXEMBOURG = 1, + SUBLANG_MACEDONIAN_MACEDONIA = 1, + SUBLANG_MALAYALAM_INDIA = 1, + SUBLANG_MALTESE_MALTA = 1, + SUBLANG_MAORI_NEW_ZEALAND = 1, + SUBLANG_MAPUDUNGUN_CHILE = 1, + SUBLANG_MARATHI_INDIA = 1, + SUBLANG_MOHAWK_MOHAWK = 1, + + SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA = 1, + SUBLANG_MONGOLIAN_PRC, // = 2 + + SUBLANG_MALAY_MALAYSIA = 1, + SUBLANG_MALAY_BRUNEI_DARUSSALAM, // = 2 + + SUBLANG_NEPALI_NEPAL = 1, + SUBLANG_NEPALI_INDIA, // = 2 + + SUBLANG_NORWEGIAN_BOKMAL = 1, + SUBLANG_NORWEGIAN_NYNORSK, // = 2 + + SUBLANG_OCCITAN_FRANCE = 1, + SUBLANG_ORIYA_INDIA = 1, + SUBLANG_PASHTO_AFGHANISTAN = 1, + SUBLANG_PERSIAN_IRAN = 1, + SUBLANG_POLISH_POLAND = 1, + + SUBLANG_PORTUGUESE_BRAZILIAN = 1, + SUBLANG_PORTUGUESE = 2, + SUBLANG_PORTUGUESE_PORTUGAL, // = 2 + + SUBLANG_PUNJABI_INDIA = 1, + + SUBLANG_QUECHUA_BOLIVIA = 1, + SUBLANG_QUECHUA_ECUADOR, + SUBLANG_QUECHUA_PERU, // = 3 + + SUBLANG_ROMANIAN_ROMANIA = 1, + SUBLANG_ROMANSH_SWITZERLAND = 1, + SUBLANG_RUSSIAN_RUSSIA = 1, + + SUBLANG_SAMI_NORTHERN_NORWAY = 1, + SUBLANG_SAMI_NORTHERN_SWEDEN, + SUBLANG_SAMI_NORTHERN_FINLAND, // = 3 + SUBLANG_SAMI_SKOLT_FINLAND = 3, + SUBLANG_SAMI_INARI_FINLAND = 3, + SUBLANG_SAMI_LULE_NORWAY, + SUBLANG_SAMI_LULE_SWEDEN, + SUBLANG_SAMI_SOUTHERN_NORWAY, + SUBLANG_SAMI_SOUTHERN_SWEDEN, // = 7 + + SUBLANG_SANSKRIT_INDIA = 1, + + SUBLANG_SERBIAN_LATIN = 2, + SUBLANG_SERBIAN_CYRILLIC, // = 3 + SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_LATIN = 6, + SUBLANG_SERBIAN_BOSNIA_HERZEGOVINA_CYRILLIC = 7, + + SUBLANG_SINDHI_AFGHANISTAN = 2, + SUBLANG_SINHALESE_SRI_LANKA = 1, + SUBLANG_SOTHO_NORTHERN_SOUTH_AFRICA = 1, + SUBLANG_SLOVAK_SLOVAKIA = 1, + SUBLANG_SLOVENIAN_SLOVENIA = 1, + + SUBLANG_SPANISH = 1, + SUBLANG_SPANISH_MEXICAN, + SUBLANG_SPANISH_MODERN, + SUBLANG_SPANISH_GUATEMALA, + SUBLANG_SPANISH_COSTA_RICA, + SUBLANG_SPANISH_PANAMA, + SUBLANG_SPANISH_DOMINICAN_REPUBLIC, + SUBLANG_SPANISH_VENEZUELA, + SUBLANG_SPANISH_COLOMBIA, + SUBLANG_SPANISH_PERU, + SUBLANG_SPANISH_ARGENTINA, + SUBLANG_SPANISH_ECUADOR, + SUBLANG_SPANISH_CHILE, + SUBLANG_SPANISH_URUGUAY, + SUBLANG_SPANISH_PARAGUAY, + SUBLANG_SPANISH_BOLIVIA, + SUBLANG_SPANISH_EL_SALVADOR, + SUBLANG_SPANISH_HONDURAS, + SUBLANG_SPANISH_NICARAGUA, + SUBLANG_SPANISH_PUERTO_RICO, + SUBLANG_SPANISH_US, // = 21 + + SUBLANG_SWEDISH = 1, + SUBLANG_SWEDISH_SWEDEN = 1, + SUBLANG_SWEDISH_FINLAND, // = 2 + + SUBLANG_SYRIAC = 1, + SUBLANG_TAJIK_TAJIKISTAN = 1, + SUBLANG_TAMAZIGHT_ALGERIA_LATIN = 2, + SUBLANG_TAMIL_INDIA = 1, + SUBLANG_TATAR_RUSSIA = 1, + SUBLANG_TELUGU_INDIA = 1, + SUBLANG_THAI_THAILAND = 1, + SUBLANG_TIBETAN_PRC = 1, + SUBLANG_TIBETAN_BHUTAN = 2, + SUBLANG_TIGRIGNA_ERITREA = 1, + SUBLANG_TSWANA_SOUTH_AFRICA = 1, + SUBLANG_TURKISH_TURKEY = 1, + SUBLANG_TURKMEN_TURKMENISTAN = 1, + SUBLANG_UIGHUR_PRC = 1, + SUBLANG_UKRAINIAN_UKRAINE = 1, + SUBLANG_UPPER_SORBIAN_GERMANY = 1, + + SUBLANG_URDU_PAKISTAN = 1, + SUBLANG_URDU_INDIA, // = 2 + + SUBLANG_UZBEK_LATIN = 1, + SUBLANG_UZBEK_CYRILLIC, // = 2 + + SUBLANG_VIETNAMESE_VIETNAM = 1, + SUBLANG_WELSH_UNITED_KINGDOM = 1, + SUBLANG_WOLOF_SENEGAL = 1, + SUBLANG_YORUBA_NIGERIA = 1, + SUBLANG_XHOSA_SOUTH_AFRICA = 1, + SUBLANG_YAKUT_RUSSIA = 1, + SUBLANG_YI_PRC = 1, + SUBLANG_ZULU_SOUTH_AFRICA = 1 +} + +// This is not documented on MSDN +const NLS_VALID_LOCALE_MASK = 1048575; + +// Sorting identifiers +enum : WORD { + SORT_DEFAULT = 0, + SORT_JAPANESE_XJIS = 0, + SORT_JAPANESE_UNICODE = 1, + SORT_CHINESE_BIG5 = 0, + SORT_CHINESE_PRCP = 0, + SORT_CHINESE_UNICODE = 1, + SORT_CHINESE_PRC = 2, + SORT_CHINESE_BOPOMOFO = 3, + SORT_KOREAN_KSC = 0, + SORT_KOREAN_UNICODE = 1, + SORT_GERMAN_PHONE_BOOK = 1, + SORT_HUNGARIAN_DEFAULT = 0, + SORT_HUNGARIAN_TECHNICAL = 1, + SORT_GEORGIAN_TRADITIONAL = 0, + SORT_GEORGIAN_MODERN = 1 +} + +WORD MAKELANGID(USHORT p, USHORT s) { return cast(WORD)((s << 10) | p); } +WORD PRIMARYLANGID(WORD lgid) { return cast(WORD)(lgid & 0x3FF); } +WORD SUBLANGID(WORD lgid) { return cast(WORD)(lgid >>> 10); } + +DWORD MAKELCID(WORD lgid, WORD srtid) { return (cast(DWORD) srtid << 16) | cast(DWORD) lgid; } +// ??? +//DWORD MAKESORTLCID(WORD lgid, WORD srtid, WORD ver) { return (MAKELCID(lgid, srtid)) | ((cast(DWORD)ver) << 20); } +WORD LANGIDFROMLCID(LCID lcid) { return cast(WORD) lcid; } +WORD SORTIDFROMLCID(LCID lcid) { return cast(WORD) ((lcid >>> 16) & 0x0F); } +WORD SORTVERSIONFROMLCID(LCID lcid) { return cast(WORD) ((lcid >>> 20) & 0x0F); } + +const WORD LANG_SYSTEM_DEFAULT = (SUBLANG_SYS_DEFAULT << 10) | LANG_NEUTRAL; +const WORD LANG_USER_DEFAULT = (SUBLANG_DEFAULT << 10) | LANG_NEUTRAL; +const DWORD LOCALE_NEUTRAL = (SORT_DEFAULT << 16) + | (SUBLANG_NEUTRAL << 10) | LANG_NEUTRAL; + +// --- +enum : BYTE { + ACL_REVISION = 2, + ACL_REVISION_DS = 4 +} + +// These are not documented on MSDN +enum : BYTE { + ACL_REVISION1 = 1, + ACL_REVISION2, + ACL_REVISION3, + ACL_REVISION4 // = 4 +} + +const BYTE + MIN_ACL_REVISION = 2, + MAX_ACL_REVISION = 4; + +/+ +// These aren't necessary for D. +const MINCHAR=0x80; +const MAXCHAR=0x7f; +const MINSHORT=0x8000; +const MAXSHORT=0x7fff; +const MINLONG=0x80000000; +const MAXLONG=0x7fffffff; +const MAXBYTE=0xff; +const MAXWORD=0xffff; +const MAXDWORD=0xffffffff; ++/ + +// SYSTEM_INFO.dwProcessorType +enum : DWORD { + PROCESSOR_INTEL_386 = 386, + PROCESSOR_INTEL_486 = 486, + PROCESSOR_INTEL_PENTIUM = 586, + PROCESSOR_MIPS_R4000 = 4000, + PROCESSOR_ALPHA_21064 = 21064, + PROCESSOR_INTEL_IA64 = 2200 +} + +// SYSTEM_INFO.wProcessorArchitecture +enum : WORD { + PROCESSOR_ARCHITECTURE_INTEL, + PROCESSOR_ARCHITECTURE_MIPS, + PROCESSOR_ARCHITECTURE_ALPHA, + PROCESSOR_ARCHITECTURE_PPC, + PROCESSOR_ARCHITECTURE_SHX, + PROCESSOR_ARCHITECTURE_ARM, + PROCESSOR_ARCHITECTURE_IA64, + PROCESSOR_ARCHITECTURE_ALPHA64, + PROCESSOR_ARCHITECTURE_MSIL, + PROCESSOR_ARCHITECTURE_AMD64, + PROCESSOR_ARCHITECTURE_IA32_ON_WIN64, // = 10 + PROCESSOR_ARCHITECTURE_UNKNOWN = 0xFFFF +} + +// IsProcessorFeaturePresent() +enum : DWORD { + PF_FLOATING_POINT_PRECISION_ERRATA, + PF_FLOATING_POINT_EMULATED, + PF_COMPARE_EXCHANGE_DOUBLE, + PF_MMX_INSTRUCTIONS_AVAILABLE, + PF_PPC_MOVEMEM_64BIT_OK, + PF_ALPHA_BYTE_INSTRUCTIONS, + PF_XMMI_INSTRUCTIONS_AVAILABLE, + PF_3DNOW_INSTRUCTIONS_AVAILABLE, + PF_RDTSC_INSTRUCTION_AVAILABLE, + PF_PAE_ENABLED, + PF_XMMI64_INSTRUCTIONS_AVAILABLE +} + +// MinGW: also in ddk/ntifs.h +enum : DWORD { + FILE_ACTION_ADDED = 1, + FILE_ACTION_REMOVED, + FILE_ACTION_MODIFIED, + FILE_ACTION_RENAMED_OLD_NAME, + FILE_ACTION_RENAMED_NEW_NAME, + FILE_ACTION_ADDED_STREAM, + FILE_ACTION_REMOVED_STREAM, + FILE_ACTION_MODIFIED_STREAM, + FILE_ACTION_REMOVED_BY_DELETE, + FILE_ACTION_ID_NOT_TUNNELLED, + FILE_ACTION_TUNNELLED_ID_COLLISION // = 11 +} +// MinGW: end ntifs.h + +const DWORD + HEAP_NO_SERIALIZE = 0x01, + HEAP_GROWABLE = 0x02, + HEAP_GENERATE_EXCEPTIONS = 0x04, + HEAP_ZERO_MEMORY = 0x08, + HEAP_REALLOC_IN_PLACE_ONLY = 0x10, + HEAP_TAIL_CHECKING_ENABLED = 0x20, + HEAP_FREE_CHECKING_ENABLED = 0x40, + HEAP_DISABLE_COALESCE_ON_FREE = 0x80; + +// These are not documented on MSDN +const HEAP_CREATE_ALIGN_16 = 0; +const HEAP_CREATE_ENABLE_TRACING = 0x020000; +const HEAP_MAXIMUM_TAG = 0x000FFF; +const HEAP_PSEUDO_TAG_FLAG = 0x008000; +const HEAP_TAG_SHIFT = 16; +// ??? +//MACRO #define HEAP_MAKE_TAG_FLAGS(b,o) ((DWORD)((b)+(o)<<16))) + +const ACCESS_MASK + KEY_QUERY_VALUE = 0x000001, + KEY_SET_VALUE = 0x000002, + KEY_CREATE_SUB_KEY = 0x000004, + KEY_ENUMERATE_SUB_KEYS = 0x000008, + KEY_NOTIFY = 0x000010, + KEY_CREATE_LINK = 0x000020, + KEY_WRITE = 0x020006, + KEY_EXECUTE = 0x020019, + KEY_READ = 0x020019, + KEY_ALL_ACCESS = 0x0F003F; + +static if (WINVER >= 0x502) { + const ACCESS_MASK + KEY_WOW64_64KEY = 0x000100, + KEY_WOW64_32KEY = 0x000200; +} + +const DWORD + REG_WHOLE_HIVE_VOLATILE = 1, + REG_REFRESH_HIVE = 2, + REG_NO_LAZY_FLUSH = 4; + +const DWORD + REG_OPTION_RESERVED = 0, + REG_OPTION_NON_VOLATILE = 0, + REG_OPTION_VOLATILE = 1, + REG_OPTION_CREATE_LINK = 2, + REG_OPTION_BACKUP_RESTORE = 4, + REG_OPTION_OPEN_LINK = 8, + REG_LEGAL_OPTION = 15; + +const SECURITY_INFORMATION + OWNER_SECURITY_INFORMATION = 0x00000001, + GROUP_SECURITY_INFORMATION = 0x00000002, + DACL_SECURITY_INFORMATION = 0x00000004, + SACL_SECURITY_INFORMATION = 0x00000008, + LABEL_SECURITY_INFORMATION = 0x00000010, + UNPROTECTED_SACL_SECURITY_INFORMATION = 0x10000000, + UNPROTECTED_DACL_SECURITY_INFORMATION = 0x20000000, + PROTECTED_SACL_SECURITY_INFORMATION = 0x40000000, + PROTECTED_DACL_SECURITY_INFORMATION = 0x80000000; + +const DWORD MAXIMUM_PROCESSORS = 32; + +// VirtualAlloc(), etc +// ------------------- + +enum : DWORD { + PAGE_NOACCESS = 0x0001, + PAGE_READONLY = 0x0002, + PAGE_READWRITE = 0x0004, + PAGE_WRITECOPY = 0x0008, + PAGE_EXECUTE = 0x0010, + PAGE_EXECUTE_READ = 0x0020, + PAGE_EXECUTE_READWRITE = 0x0040, + PAGE_EXECUTE_WRITECOPY = 0x0080, + PAGE_GUARD = 0x0100, + PAGE_NOCACHE = 0x0200 +} + +enum : DWORD { + MEM_COMMIT = 0x00001000, + MEM_RESERVE = 0x00002000, + MEM_DECOMMIT = 0x00004000, + MEM_RELEASE = 0x00008000, + MEM_FREE = 0x00010000, + MEM_PRIVATE = 0x00020000, + MEM_MAPPED = 0x00040000, + MEM_RESET = 0x00080000, + MEM_TOP_DOWN = 0x00100000, + MEM_WRITE_WATCH = 0x00200000, // MinGW (???): 98/Me + MEM_PHYSICAL = 0x00400000, + MEM_4MB_PAGES = 0x80000000 +} + +// MinGW: also in ddk/ntifs.h +// CreateFileMapping() +const DWORD + SEC_BASED = 0x00200000, + SEC_NO_CHANGE = 0x00400000, + SEC_FILE = 0x00800000, + SEC_IMAGE = 0x01000000, + SEC_VLM = 0x02000000, + SEC_RESERVE = 0x04000000, + SEC_COMMIT = 0x08000000, + SEC_NOCACHE = 0x10000000, + MEM_IMAGE = SEC_IMAGE; +// MinGW: end ntifs.h + +// ??? +const ACCESS_MASK + SECTION_QUERY = 0x000001, + SECTION_MAP_WRITE = 0x000002, + SECTION_MAP_READ = 0x000004, + SECTION_MAP_EXECUTE = 0x000008, + SECTION_EXTEND_SIZE = 0x000010, + SECTION_ALL_ACCESS = 0x0F001F; + +// These are not documented on MSDN +const MESSAGE_RESOURCE_UNICODE = 1; +const RTL_CRITSECT_TYPE = 0; +const RTL_RESOURCE_TYPE = 1; + +// COFF file format +// ---------------- + +// IMAGE_FILE_HEADER.Characteristics +const WORD + IMAGE_FILE_RELOCS_STRIPPED = 0x0001, + IMAGE_FILE_EXECUTABLE_IMAGE = 0x0002, + IMAGE_FILE_LINE_NUMS_STRIPPED = 0x0004, + IMAGE_FILE_LOCAL_SYMS_STRIPPED = 0x0008, + IMAGE_FILE_AGGRESIVE_WS_TRIM = 0x0010, + IMAGE_FILE_LARGE_ADDRESS_AWARE = 0x0020, + IMAGE_FILE_BYTES_REVERSED_LO = 0x0080, + IMAGE_FILE_32BIT_MACHINE = 0x0100, + IMAGE_FILE_DEBUG_STRIPPED = 0x0200, + IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = 0x0400, + IMAGE_FILE_NET_RUN_FROM_SWAP = 0x0800, + IMAGE_FILE_SYSTEM = 0x1000, + IMAGE_FILE_DLL = 0x2000, + IMAGE_FILE_UP_SYSTEM_ONLY = 0x4000, + IMAGE_FILE_BYTES_REVERSED_HI = 0x8000; + +// IMAGE_FILE_HEADER.Machine +enum : WORD { + IMAGE_FILE_MACHINE_UNKNOWN = 0x0000, + IMAGE_FILE_MACHINE_I386 = 0x014C, + IMAGE_FILE_MACHINE_R3000 = 0x0162, + IMAGE_FILE_MACHINE_R4000 = 0x0166, + IMAGE_FILE_MACHINE_R10000 = 0x0168, + IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x0169, + IMAGE_FILE_MACHINE_ALPHA = 0x0184, + IMAGE_FILE_MACHINE_SH3 = 0x01A2, + IMAGE_FILE_MACHINE_SH3DSP = 0x01A3, + IMAGE_FILE_MACHINE_SH4 = 0x01A6, + IMAGE_FILE_MACHINE_SH5 = 0x01A8, + IMAGE_FILE_MACHINE_ARM = 0x01C0, + IMAGE_FILE_MACHINE_THUMB = 0x01C2, + IMAGE_FILE_MACHINE_AM33 = 0x01D3, + IMAGE_FILE_MACHINE_POWERPC = 0x01F0, + IMAGE_FILE_MACHINE_POWERPCFP = 0x01F1, + IMAGE_FILE_MACHINE_IA64 = 0x0200, + IMAGE_FILE_MACHINE_MIPS16 = 0x0266, + IMAGE_FILE_MACHINE_MIPSFPU = 0x0366, + IMAGE_FILE_MACHINE_MIPSFPU16 = 0x0466, + IMAGE_FILE_MACHINE_EBC = 0x0EBC, + IMAGE_FILE_MACHINE_AMD64 = 0x8664, + IMAGE_FILE_MACHINE_M32R = 0x9041 +} + +// ??? +enum { + IMAGE_DOS_SIGNATURE = 0x5A4D, + IMAGE_OS2_SIGNATURE = 0x454E, + IMAGE_OS2_SIGNATURE_LE = 0x454C, + IMAGE_VXD_SIGNATURE = 0x454C, + IMAGE_NT_SIGNATURE = 0x4550 +} + +// IMAGE_OPTIONAL_HEADER.Magic +enum : WORD { + IMAGE_NT_OPTIONAL_HDR32_MAGIC = 0x010B, + IMAGE_ROM_OPTIONAL_HDR_MAGIC = 0x0107, + IMAGE_NT_OPTIONAL_HDR64_MAGIC = 0x020B +} + +// IMAGE_OPTIONAL_HEADER.Subsystem +enum : WORD { + IMAGE_SUBSYSTEM_UNKNOWN = 0, + IMAGE_SUBSYSTEM_NATIVE, + IMAGE_SUBSYSTEM_WINDOWS_GUI, + IMAGE_SUBSYSTEM_WINDOWS_CUI, // = 3 + IMAGE_SUBSYSTEM_OS2_CUI = 5, + IMAGE_SUBSYSTEM_POSIX_CUI = 7, + IMAGE_SUBSYSTEM_NATIVE_WINDOWS, + IMAGE_SUBSYSTEM_WINDOWS_CE_GUI, + IMAGE_SUBSYSTEM_EFI_APPLICATION, + IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER, + IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER, + IMAGE_SUBSYSTEM_EFI_ROM, + IMAGE_SUBSYSTEM_XBOX, // = 14 + IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION = 16 +} + +// IMAGE_OPTIONAL_HEADER.DllCharacteristics +const WORD + IMAGE_DLL_CHARACTERISTICS_DYNAMIC_BASE = 0x0040, + IMAGE_DLL_CHARACTERISTICS_FORCE_INTEGRITY = 0x0080, + IMAGE_DLL_CHARACTERISTICS_NX_COMPAT = 0x0100, + IMAGE_DLLCHARACTERISTICS_NO_ISOLATION = 0x0200, + IMAGE_DLLCHARACTERISTICS_NO_SEH = 0x0400, + IMAGE_DLLCHARACTERISTICS_NO_BIND = 0x0800, + IMAGE_DLLCHARACTERISTICS_WDM_DRIVER = 0x2000, + IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000; + +// ??? +const IMAGE_SEPARATE_DEBUG_SIGNATURE = 0x4944; + +const size_t + IMAGE_NUMBEROF_DIRECTORY_ENTRIES = 16, + IMAGE_SIZEOF_ROM_OPTIONAL_HEADER = 56, + IMAGE_SIZEOF_STD_OPTIONAL_HEADER = 28, + IMAGE_SIZEOF_NT_OPTIONAL_HEADER = 224, + IMAGE_SIZEOF_SHORT_NAME = 8, + IMAGE_SIZEOF_SECTION_HEADER = 40, + IMAGE_SIZEOF_SYMBOL = 18, + IMAGE_SIZEOF_AUX_SYMBOL = 18, + IMAGE_SIZEOF_RELOCATION = 10, + IMAGE_SIZEOF_BASE_RELOCATION = 8, + IMAGE_SIZEOF_LINENUMBER = 6, + IMAGE_SIZEOF_ARCHIVE_MEMBER_HDR = 60, + SIZEOF_RFPO_DATA = 16; + +PIMAGE_SECTION_HEADER IMAGE_FIRST_SECTION(PIMAGE_NT_HEADERS h) { + return cast(PIMAGE_SECTION_HEADER) + (&h.OptionalHeader + h.FileHeader.SizeOfOptionalHeader); +} + +// ImageDirectoryEntryToDataEx() +enum : USHORT { + IMAGE_DIRECTORY_ENTRY_EXPORT = 0, + IMAGE_DIRECTORY_ENTRY_IMPORT, + IMAGE_DIRECTORY_ENTRY_RESOURCE, + IMAGE_DIRECTORY_ENTRY_EXCEPTION, + IMAGE_DIRECTORY_ENTRY_SECURITY, + IMAGE_DIRECTORY_ENTRY_BASERELOC, + IMAGE_DIRECTORY_ENTRY_DEBUG, + IMAGE_DIRECTORY_ENTRY_COPYRIGHT, // = 7 + IMAGE_DIRECTORY_ENTRY_ARCHITECTURE = 7, + IMAGE_DIRECTORY_ENTRY_GLOBALPTR, + IMAGE_DIRECTORY_ENTRY_TLS, + IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG, + IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT, + IMAGE_DIRECTORY_ENTRY_IAT, + IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT, + IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR, // = 14 +} + +// IMAGE_SECTION_HEADER.Characteristics +const DWORD + IMAGE_SCN_TYPE_REG = 0x00000000, + IMAGE_SCN_TYPE_DSECT = 0x00000001, + IMAGE_SCN_TYPE_NOLOAD = 0x00000002, + IMAGE_SCN_TYPE_GROUP = 0x00000004, + IMAGE_SCN_TYPE_NO_PAD = 0x00000008, + IMAGE_SCN_TYPE_COPY = 0x00000010, + IMAGE_SCN_CNT_CODE = 0x00000020, + IMAGE_SCN_CNT_INITIALIZED_DATA = 0x00000040, + IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x00000080, + IMAGE_SCN_LNK_OTHER = 0x00000100, + IMAGE_SCN_LNK_INFO = 0x00000200, + IMAGE_SCN_TYPE_OVER = 0x00000400, + IMAGE_SCN_LNK_REMOVE = 0x00000800, + IMAGE_SCN_LNK_COMDAT = 0x00001000, + IMAGE_SCN_MEM_FARDATA = 0x00008000, + IMAGE_SCN_GPREL = 0x00008000, + IMAGE_SCN_MEM_PURGEABLE = 0x00020000, + IMAGE_SCN_MEM_16BIT = 0x00020000, + IMAGE_SCN_MEM_LOCKED = 0x00040000, + IMAGE_SCN_MEM_PRELOAD = 0x00080000, + IMAGE_SCN_ALIGN_1BYTES = 0x00100000, + IMAGE_SCN_ALIGN_2BYTES = 0x00200000, + IMAGE_SCN_ALIGN_4BYTES = 0x00300000, + IMAGE_SCN_ALIGN_8BYTES = 0x00400000, + IMAGE_SCN_ALIGN_16BYTES = 0x00500000, + IMAGE_SCN_ALIGN_32BYTES = 0x00600000, + IMAGE_SCN_ALIGN_64BYTES = 0x00700000, + IMAGE_SCN_ALIGN_128BYTES = 0x00800000, + IMAGE_SCN_ALIGN_256BYTES = 0x00900000, + IMAGE_SCN_ALIGN_512BYTES = 0x00A00000, + IMAGE_SCN_ALIGN_1024BYTES = 0x00B00000, + IMAGE_SCN_ALIGN_2048BYTES = 0x00C00000, + IMAGE_SCN_ALIGN_4096BYTES = 0x00D00000, + IMAGE_SCN_ALIGN_8192BYTES = 0x00E00000, + IMAGE_SCN_LNK_NRELOC_OVFL = 0x01000000, + IMAGE_SCN_MEM_DISCARDABLE = 0x02000000, + IMAGE_SCN_MEM_NOT_CACHED = 0x04000000, + IMAGE_SCN_MEM_NOT_PAGED = 0x08000000, + IMAGE_SCN_MEM_SHARED = 0x10000000, + IMAGE_SCN_MEM_EXECUTE = 0x20000000, + IMAGE_SCN_MEM_READ = 0x40000000, + IMAGE_SCN_MEM_WRITE = 0x80000000; + +/* The following constants are mostlydocumented at + * http://download.microsoft.com/download/1/6/1/161ba512-40e2-4cc9-843a-923143f3456c/pecoff.doc + * but don't seem to be defined in the HTML docs. + */ +enum : SHORT { + IMAGE_SYM_UNDEFINED = 0, + IMAGE_SYM_ABSOLUTE = -1, + IMAGE_SYM_DEBUG = -2 +} + +enum : ubyte { + IMAGE_SYM_TYPE_NULL, + IMAGE_SYM_TYPE_VOID, + IMAGE_SYM_TYPE_CHAR, + IMAGE_SYM_TYPE_SHORT, + IMAGE_SYM_TYPE_INT, + IMAGE_SYM_TYPE_LONG, + IMAGE_SYM_TYPE_FLOAT, + IMAGE_SYM_TYPE_DOUBLE, + IMAGE_SYM_TYPE_STRUCT, + IMAGE_SYM_TYPE_UNION, + IMAGE_SYM_TYPE_ENUM, + IMAGE_SYM_TYPE_MOE, + IMAGE_SYM_TYPE_BYTE, + IMAGE_SYM_TYPE_WORD, + IMAGE_SYM_TYPE_UINT, + IMAGE_SYM_TYPE_DWORD // = 15 +} +const IMAGE_SYM_TYPE_PCODE = 32768; // ??? + +enum : ubyte { + IMAGE_SYM_DTYPE_NULL, + IMAGE_SYM_DTYPE_POINTER, + IMAGE_SYM_DTYPE_FUNCTION, + IMAGE_SYM_DTYPE_ARRAY +} + +enum : BYTE { + IMAGE_SYM_CLASS_END_OF_FUNCTION = 0xFF, + IMAGE_SYM_CLASS_NULL = 0, + IMAGE_SYM_CLASS_AUTOMATIC, + IMAGE_SYM_CLASS_EXTERNAL, + IMAGE_SYM_CLASS_STATIC, + IMAGE_SYM_CLASS_REGISTER, + IMAGE_SYM_CLASS_EXTERNAL_DEF, + IMAGE_SYM_CLASS_LABEL, + IMAGE_SYM_CLASS_UNDEFINED_LABEL, + IMAGE_SYM_CLASS_MEMBER_OF_STRUCT, + IMAGE_SYM_CLASS_ARGUMENT, + IMAGE_SYM_CLASS_STRUCT_TAG, + IMAGE_SYM_CLASS_MEMBER_OF_UNION, + IMAGE_SYM_CLASS_UNION_TAG, + IMAGE_SYM_CLASS_TYPE_DEFINITION, + IMAGE_SYM_CLASS_UNDEFINED_STATIC, + IMAGE_SYM_CLASS_ENUM_TAG, + IMAGE_SYM_CLASS_MEMBER_OF_ENUM, + IMAGE_SYM_CLASS_REGISTER_PARAM, + IMAGE_SYM_CLASS_BIT_FIELD, // = 18 + IMAGE_SYM_CLASS_FAR_EXTERNAL = 68, + IMAGE_SYM_CLASS_BLOCK = 100, + IMAGE_SYM_CLASS_FUNCTION, + IMAGE_SYM_CLASS_END_OF_STRUCT, + IMAGE_SYM_CLASS_FILE, + IMAGE_SYM_CLASS_SECTION, + IMAGE_SYM_CLASS_WEAK_EXTERNAL,// = 105 + IMAGE_SYM_CLASS_CLR_TOKEN = 107 +} + +enum : BYTE { + IMAGE_COMDAT_SELECT_NODUPLICATES = 1, + IMAGE_COMDAT_SELECT_ANY, + IMAGE_COMDAT_SELECT_SAME_SIZE, + IMAGE_COMDAT_SELECT_EXACT_MATCH, + IMAGE_COMDAT_SELECT_ASSOCIATIVE, + IMAGE_COMDAT_SELECT_LARGEST, + IMAGE_COMDAT_SELECT_NEWEST // = 7 +} + +enum : DWORD { + IMAGE_WEAK_EXTERN_SEARCH_NOLIBRARY = 1, + IMAGE_WEAK_EXTERN_SEARCH_LIBRARY, + IMAGE_WEAK_EXTERN_SEARCH_ALIAS +} + +enum : WORD { + IMAGE_REL_I386_ABSOLUTE = 0x0000, + IMAGE_REL_I386_DIR16 = 0x0001, + IMAGE_REL_I386_REL16 = 0x0002, + IMAGE_REL_I386_DIR32 = 0x0006, + IMAGE_REL_I386_DIR32NB = 0x0007, + IMAGE_REL_I386_SEG12 = 0x0009, + IMAGE_REL_I386_SECTION = 0x000A, + IMAGE_REL_I386_SECREL = 0x000B, + IMAGE_REL_I386_TOKEN = 0x000C, + IMAGE_REL_I386_SECREL7 = 0x000D, + IMAGE_REL_I386_REL32 = 0x0014 +} + +enum : WORD { + IMAGE_REL_AMD64_ABSOLUTE = 0x0000, + IMAGE_REL_AMD64_ADDR64 = 0x0001, + IMAGE_REL_AMD64_ADDR32 = 0x0002, + IMAGE_REL_AMD64_ADDR32NB = 0x0003, + IMAGE_REL_AMD64_REL32 = 0x0004, + IMAGE_REL_AMD64_REL32_1 = 0x0005, + IMAGE_REL_AMD64_REL32_2 = 0x0006, + IMAGE_REL_AMD64_REL32_3 = 0x0007, + IMAGE_REL_AMD64_REL32_4 = 0x0008, + IMAGE_REL_AMD64_REL32_5 = 0x0009, + IMAGE_REL_AMD64_SECTION = 0x000A, + IMAGE_REL_AMD64_SECREL = 0x000B, + IMAGE_REL_AMD64_SECREL7 = 0x000C, + IMAGE_REL_AMD64_TOKEN = 0x000D, + IMAGE_REL_AMD64_SREL32 = 0x000E, + IMAGE_REL_AMD64_PAIR = 0x000F, + IMAGE_REL_AMD64_SSPAN32 = 0x0010 +} + +enum : WORD { + IMAGE_REL_IA64_ABSOLUTE = 0x0000, + IMAGE_REL_IA64_IMM14 = 0x0001, + IMAGE_REL_IA64_IMM22 = 0x0002, + IMAGE_REL_IA64_IMM64 = 0x0003, + IMAGE_REL_IA64_DIR32 = 0x0004, + IMAGE_REL_IA64_DIR64 = 0x0005, + IMAGE_REL_IA64_PCREL21B = 0x0006, + IMAGE_REL_IA64_PCREL21M = 0x0007, + IMAGE_REL_IA64_PCREL21F = 0x0008, + IMAGE_REL_IA64_GPREL22 = 0x0009, + IMAGE_REL_IA64_LTOFF22 = 0x000A, + IMAGE_REL_IA64_SECTION = 0x000B, + IMAGE_REL_IA64_SECREL22 = 0x000C, + IMAGE_REL_IA64_SECREL64I = 0x000D, + IMAGE_REL_IA64_SECREL32 = 0x000E, + IMAGE_REL_IA64_DIR32NB = 0x0010, + IMAGE_REL_IA64_SREL14 = 0x0011, + IMAGE_REL_IA64_SREL22 = 0x0012, + IMAGE_REL_IA64_SREL32 = 0x0013, + IMAGE_REL_IA64_UREL32 = 0x0014, + IMAGE_REL_IA64_PCREL60X = 0x0015, + IMAGE_REL_IA64_PCREL60B = 0x0016, + IMAGE_REL_IA64_PCREL60F = 0x0017, + IMAGE_REL_IA64_PCREL60I = 0x0018, + IMAGE_REL_IA64_PCREL60M = 0x0019, + IMAGE_REL_IA64_IMMGPREL64 = 0x001A, + IMAGE_REL_IA64_TOKEN = 0x001B, + IMAGE_REL_IA64_GPREL32 = 0x001C, + IMAGE_REL_IA64_ADDEND = 0x001F +} + +enum : WORD { + IMAGE_REL_SH3_ABSOLUTE = 0x0000, + IMAGE_REL_SH3_DIRECT16 = 0x0001, + IMAGE_REL_SH3_DIRECT32 = 0x0002, + IMAGE_REL_SH3_DIRECT8 = 0x0003, + IMAGE_REL_SH3_DIRECT8_WORD = 0x0004, + IMAGE_REL_SH3_DIRECT8_LONG = 0x0005, + IMAGE_REL_SH3_DIRECT4 = 0x0006, + IMAGE_REL_SH3_DIRECT4_WORD = 0x0007, + IMAGE_REL_SH3_DIRECT4_LONG = 0x0008, + IMAGE_REL_SH3_PCREL8_WORD = 0x0009, + IMAGE_REL_SH3_PCREL8_LONG = 0x000A, + IMAGE_REL_SH3_PCREL12_WORD = 0x000B, + IMAGE_REL_SH3_STARTOF_SECTION = 0x000C, + IMAGE_REL_SH3_SIZEOF_SECTION = 0x000D, + IMAGE_REL_SH3_SECTION = 0x000E, + IMAGE_REL_SH3_SECREL = 0x000F, + IMAGE_REL_SH3_DIRECT32_NB = 0x0010, + IMAGE_REL_SH3_GPREL4_LONG = 0x0011, + IMAGE_REL_SH3_TOKEN = 0x0012, + IMAGE_REL_SHM_PCRELPT = 0x0013, + IMAGE_REL_SHM_REFLO = 0x0014, + IMAGE_REL_SHM_REFHALF = 0x0015, + IMAGE_REL_SHM_RELLO = 0x0016, + IMAGE_REL_SHM_RELHALF = 0x0017, + IMAGE_REL_SHM_PAIR = 0x0018, + IMAGE_REL_SHM_NOMODE = 0x8000 +} + +enum : WORD { + IMAGE_REL_M32R_ABSOLUTE = 0x0000, + IMAGE_REL_M32R_ADDR32 = 0x0001, + IMAGE_REL_M32R_ADDR32NB = 0x0002, + IMAGE_REL_M32R_ADDR24 = 0x0003, + IMAGE_REL_M32R_GPREL16 = 0x0004, + IMAGE_REL_M32R_PCREL24 = 0x0005, + IMAGE_REL_M32R_PCREL16 = 0x0006, + IMAGE_REL_M32R_PCREL8 = 0x0007, + IMAGE_REL_M32R_REFHALF = 0x0008, + IMAGE_REL_M32R_REFHI = 0x0009, + IMAGE_REL_M32R_REFLO = 0x000A, + IMAGE_REL_M32R_PAIR = 0x000B, + IMAGE_REL_M32R_SECTION = 0x000C, + IMAGE_REL_M32R_SECREL = 0x000D, + IMAGE_REL_M32R_TOKEN = 0x000E +} + +enum : WORD { + IMAGE_REL_MIPS_ABSOLUTE = 0x0000, + IMAGE_REL_MIPS_REFHALF = 0x0001, + IMAGE_REL_MIPS_REFWORD = 0x0002, + IMAGE_REL_MIPS_JMPADDR = 0x0003, + IMAGE_REL_MIPS_REFHI = 0x0004, + IMAGE_REL_MIPS_REFLO = 0x0005, + IMAGE_REL_MIPS_GPREL = 0x0006, + IMAGE_REL_MIPS_LITERAL = 0x0007, + IMAGE_REL_MIPS_SECTION = 0x000A, + IMAGE_REL_MIPS_SECREL = 0x000B, + IMAGE_REL_MIPS_SECRELLO = 0x000C, + IMAGE_REL_MIPS_SECRELHI = 0x000D, + IMAGE_REL_MIPS_JMPADDR16 = 0x0010, + IMAGE_REL_MIPS_REFWORDNB = 0x0022, + IMAGE_REL_MIPS_PAIR = 0x0025 +} + + +enum : WORD { + IMAGE_REL_ALPHA_ABSOLUTE, + IMAGE_REL_ALPHA_REFLONG, + IMAGE_REL_ALPHA_REFQUAD, + IMAGE_REL_ALPHA_GPREL32, + IMAGE_REL_ALPHA_LITERAL, + IMAGE_REL_ALPHA_LITUSE, + IMAGE_REL_ALPHA_GPDISP, + IMAGE_REL_ALPHA_BRADDR, + IMAGE_REL_ALPHA_HINT, + IMAGE_REL_ALPHA_INLINE_REFLONG, + IMAGE_REL_ALPHA_REFHI, + IMAGE_REL_ALPHA_REFLO, + IMAGE_REL_ALPHA_PAIR, + IMAGE_REL_ALPHA_MATCH, + IMAGE_REL_ALPHA_SECTION, + IMAGE_REL_ALPHA_SECREL, + IMAGE_REL_ALPHA_REFLONGNB, + IMAGE_REL_ALPHA_SECRELLO, + IMAGE_REL_ALPHA_SECRELHI // = 18 +} + +enum : WORD { + IMAGE_REL_PPC_ABSOLUTE, + IMAGE_REL_PPC_ADDR64, + IMAGE_REL_PPC_ADDR32, + IMAGE_REL_PPC_ADDR24, + IMAGE_REL_PPC_ADDR16, + IMAGE_REL_PPC_ADDR14, + IMAGE_REL_PPC_REL24, + IMAGE_REL_PPC_REL14, + IMAGE_REL_PPC_TOCREL16, + IMAGE_REL_PPC_TOCREL14, + IMAGE_REL_PPC_ADDR32NB, + IMAGE_REL_PPC_SECREL, + IMAGE_REL_PPC_SECTION, + IMAGE_REL_PPC_IFGLUE, + IMAGE_REL_PPC_IMGLUE, + IMAGE_REL_PPC_SECREL16, + IMAGE_REL_PPC_REFHI, + IMAGE_REL_PPC_REFLO, + IMAGE_REL_PPC_PAIR // = 18 +} + +// ??? +const IMAGE_REL_PPC_TYPEMASK = 0x00FF; +const IMAGE_REL_PPC_NEG = 0x0100; +const IMAGE_REL_PPC_BRTAKEN = 0x0200; +const IMAGE_REL_PPC_BRNTAKEN = 0x0400; +const IMAGE_REL_PPC_TOCDEFN = 0x0800; + +enum { + IMAGE_REL_BASED_ABSOLUTE, + IMAGE_REL_BASED_HIGH, + IMAGE_REL_BASED_LOW, + IMAGE_REL_BASED_HIGHLOW, + IMAGE_REL_BASED_HIGHADJ, + IMAGE_REL_BASED_MIPS_JMPADDR +} +// End of constants documented in pecoff.doc + +const size_t IMAGE_ARCHIVE_START_SIZE = 8; + +const TCHAR[] + IMAGE_ARCHIVE_START = "!\n", + IMAGE_ARCHIVE_END = "`\n", + IMAGE_ARCHIVE_PAD = "\n", + IMAGE_ARCHIVE_LINKER_MEMBER = "/ ", + IMAGE_ARCHIVE_LONGNAMES_MEMBER = "// "; + +const IMAGE_ORDINAL_FLAG32 = 0x80000000; + +ulong IMAGE_ORDINAL64(ulong Ordinal) { return Ordinal & 0xFFFF; } +uint IMAGE_ORDINAL32(uint Ordinal) { return Ordinal & 0xFFFF; } + +bool IMAGE_SNAP_BY_ORDINAL32(uint Ordinal) { + return (Ordinal & IMAGE_ORDINAL_FLAG32) != 0; +} + +const ulong IMAGE_ORDINAL_FLAG64 = 0x8000000000000000; + +bool IMAGE_SNAP_BY_ORDINAL64(ulong Ordinal) { + return (Ordinal & IMAGE_ORDINAL_FLAG64) != 0; +} + +// ??? +const IMAGE_RESOURCE_NAME_IS_STRING = 0x80000000; +const IMAGE_RESOURCE_DATA_IS_DIRECTORY = 0x80000000; + +enum : DWORD { + IMAGE_DEBUG_TYPE_UNKNOWN, + IMAGE_DEBUG_TYPE_COFF, + IMAGE_DEBUG_TYPE_CODEVIEW, + IMAGE_DEBUG_TYPE_FPO, + IMAGE_DEBUG_TYPE_MISC, + IMAGE_DEBUG_TYPE_EXCEPTION, + IMAGE_DEBUG_TYPE_FIXUP, + IMAGE_DEBUG_TYPE_OMAP_TO_SRC, + IMAGE_DEBUG_TYPE_OMAP_FROM_SRC, + IMAGE_DEBUG_TYPE_BORLAND // = 9 +} + +enum : ubyte { + FRAME_FPO, + FRAME_TRAP, + FRAME_TSS, + FRAME_NONFPO +} + +// ??? +const IMAGE_DEBUG_MISC_EXENAME = 1; + +// ??? +const N_BTMASK = 0x000F; +const N_TMASK = 0x0030; +const N_TMASK1 = 0x00C0; +const N_TMASK2 = 0x00F0; +const N_BTSHFT = 4; +const N_TSHIFT = 2; + +const int + IS_TEXT_UNICODE_ASCII16 = 0x0001, + IS_TEXT_UNICODE_STATISTICS = 0x0002, + IS_TEXT_UNICODE_CONTROLS = 0x0004, + IS_TEXT_UNICODE_SIGNATURE = 0x0008, + IS_TEXT_UNICODE_REVERSE_ASCII16 = 0x0010, + IS_TEXT_UNICODE_REVERSE_STATISTICS = 0x0020, + IS_TEXT_UNICODE_REVERSE_CONTROLS = 0x0040, + IS_TEXT_UNICODE_REVERSE_SIGNATURE = 0x0080, + IS_TEXT_UNICODE_ILLEGAL_CHARS = 0x0100, + IS_TEXT_UNICODE_ODD_LENGTH = 0x0200, + IS_TEXT_UNICODE_NULL_BYTES = 0x1000, + IS_TEXT_UNICODE_UNICODE_MASK = 0x000F, + IS_TEXT_UNICODE_REVERSE_MASK = 0x00F0, + IS_TEXT_UNICODE_NOT_UNICODE_MASK = 0x0F00, + IS_TEXT_UNICODE_NOT_ASCII_MASK = 0xF000; + +const DWORD + SERVICE_KERNEL_DRIVER = 0x0001, + SERVICE_FILE_SYSTEM_DRIVER = 0x0002, + SERVICE_ADAPTER = 0x0004, + SERVICE_RECOGNIZER_DRIVER = 0x0008, + SERVICE_WIN32_OWN_PROCESS = 0x0010, + SERVICE_WIN32_SHARE_PROCESS = 0x0020, + SERVICE_INTERACTIVE_PROCESS = 0x0100, + SERVICE_DRIVER = 0x000B, + SERVICE_WIN32 = 0x0030, + SERVICE_TYPE_ALL = 0x013F; + +enum : DWORD { + SERVICE_BOOT_START = 0, + SERVICE_SYSTEM_START = 1, + SERVICE_AUTO_START = 2, + SERVICE_DEMAND_START = 3, + SERVICE_DISABLED = 4 +} + +enum : DWORD { + SERVICE_ERROR_IGNORE = 0, + SERVICE_ERROR_NORMAL = 1, + SERVICE_ERROR_SEVERE = 2, + SERVICE_ERROR_CRITICAL = 3 +} + + +const uint + SE_OWNER_DEFAULTED = 0x0001, + SE_GROUP_DEFAULTED = 0x0002, + SE_DACL_PRESENT = 0x0004, + SE_DACL_DEFAULTED = 0x0008, + SE_SACL_PRESENT = 0x0010, + SE_SACL_DEFAULTED = 0x0020, + SE_DACL_AUTO_INHERIT_REQ = 0x0100, + SE_SACL_AUTO_INHERIT_REQ = 0x0200, + SE_DACL_AUTO_INHERITED = 0x0400, + SE_SACL_AUTO_INHERITED = 0x0800, + SE_DACL_PROTECTED = 0x1000, + SE_SACL_PROTECTED = 0x2000, + SE_SELF_RELATIVE = 0x8000; + +enum SECURITY_IMPERSONATION_LEVEL { + SecurityAnonymous, + SecurityIdentification, + SecurityImpersonation, + SecurityDelegation +} +alias SECURITY_IMPERSONATION_LEVEL* PSECURITY_IMPERSONATION_LEVEL; + +alias BOOLEAN SECURITY_CONTEXT_TRACKING_MODE; +alias BOOLEAN* PSECURITY_CONTEXT_TRACKING_MODE; + +const size_t SECURITY_DESCRIPTOR_MIN_LENGTH = 20; + +const DWORD + SECURITY_DESCRIPTOR_REVISION = 1, + SECURITY_DESCRIPTOR_REVISION1 = 1; + +const DWORD + SE_PRIVILEGE_ENABLED_BY_DEFAULT = 0x00000001, + SE_PRIVILEGE_ENABLED = 0x00000002, + SE_PRIVILEGE_USED_FOR_ACCESS = 0x80000000; + +const DWORD PRIVILEGE_SET_ALL_NECESSARY = 1; + +const SECURITY_IMPERSONATION_LEVEL + SECURITY_MAX_IMPERSONATION_LEVEL = SECURITY_IMPERSONATION_LEVEL.SecurityDelegation, + DEFAULT_IMPERSONATION_LEVEL = SECURITY_IMPERSONATION_LEVEL.SecurityImpersonation; + +const BOOLEAN + SECURITY_DYNAMIC_TRACKING = true, + SECURITY_STATIC_TRACKING = false; + +// also in ddk/ntifs.h +const DWORD + TOKEN_ASSIGN_PRIMARY = 0x0001, + TOKEN_DUPLICATE = 0x0002, + TOKEN_IMPERSONATE = 0x0004, + TOKEN_QUERY = 0x0008, + TOKEN_QUERY_SOURCE = 0x0010, + TOKEN_ADJUST_PRIVILEGES = 0x0020, + TOKEN_ADJUST_GROUPS = 0x0040, + TOKEN_ADJUST_DEFAULT = 0x0080, + + TOKEN_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED + | TOKEN_ASSIGN_PRIMARY + | TOKEN_DUPLICATE + | TOKEN_IMPERSONATE + | TOKEN_QUERY + | TOKEN_QUERY_SOURCE + | TOKEN_ADJUST_PRIVILEGES + | TOKEN_ADJUST_GROUPS + | TOKEN_ADJUST_DEFAULT, + TOKEN_READ = STANDARD_RIGHTS_READ | TOKEN_QUERY, + TOKEN_WRITE = STANDARD_RIGHTS_WRITE + | TOKEN_ADJUST_PRIVILEGES + | TOKEN_ADJUST_GROUPS + | TOKEN_ADJUST_DEFAULT, + TOKEN_EXECUTE = STANDARD_RIGHTS_EXECUTE; + +const size_t TOKEN_SOURCE_LENGTH = 8; +// end ddk/ntifs.h + +enum : DWORD { + DLL_PROCESS_DETACH, + DLL_PROCESS_ATTACH, + DLL_THREAD_ATTACH, + DLL_THREAD_DETACH +} + +enum : DWORD { + DBG_CONTINUE = 0x00010002, + DBG_TERMINATE_THREAD = 0x40010003, + DBG_TERMINATE_PROCESS = 0x40010004, + DBG_CONTROL_C = 0x40010005, + DBG_CONTROL_BREAK = 0x40010008, + DBG_EXCEPTION_NOT_HANDLED = 0x80010001 +} + +enum : DWORD { + TAPE_ABSOLUTE_POSITION, + TAPE_LOGICAL_POSITION, + TAPE_PSEUDO_LOGICAL_POSITION +} + +enum : DWORD { + TAPE_REWIND, + TAPE_ABSOLUTE_BLOCK, + TAPE_LOGICAL_BLOCK, + TAPE_PSEUDO_LOGICAL_BLOCK, + TAPE_SPACE_END_OF_DATA, + TAPE_SPACE_RELATIVE_BLOCKS, + TAPE_SPACE_FILEMARKS, + TAPE_SPACE_SEQUENTIAL_FMKS, + TAPE_SPACE_SETMARKS, + TAPE_SPACE_SEQUENTIAL_SMKS +} + +const DWORD + TAPE_DRIVE_FIXED = 0x00000001, + TAPE_DRIVE_SELECT = 0x00000002, + TAPE_DRIVE_INITIATOR = 0x00000004, + TAPE_DRIVE_ERASE_SHORT = 0x00000010, + TAPE_DRIVE_ERASE_LONG = 0x00000020, + TAPE_DRIVE_ERASE_BOP_ONLY = 0x00000040, + TAPE_DRIVE_ERASE_IMMEDIATE = 0x00000080, + TAPE_DRIVE_TAPE_CAPACITY = 0x00000100, + TAPE_DRIVE_TAPE_REMAINING = 0x00000200, + TAPE_DRIVE_FIXED_BLOCK = 0x00000400, + TAPE_DRIVE_VARIABLE_BLOCK = 0x00000800, + TAPE_DRIVE_WRITE_PROTECT = 0x00001000, + TAPE_DRIVE_EOT_WZ_SIZE = 0x00002000, + TAPE_DRIVE_ECC = 0x00010000, + TAPE_DRIVE_COMPRESSION = 0x00020000, + TAPE_DRIVE_PADDING = 0x00040000, + TAPE_DRIVE_REPORT_SMKS = 0x00080000, + TAPE_DRIVE_GET_ABSOLUTE_BLK = 0x00100000, + TAPE_DRIVE_GET_LOGICAL_BLK = 0x00200000, + TAPE_DRIVE_SET_EOT_WZ_SIZE = 0x00400000, + TAPE_DRIVE_EJECT_MEDIA = 0x01000000, + TAPE_DRIVE_CLEAN_REQUESTS = 0x02000000, + TAPE_DRIVE_SET_CMP_BOP_ONLY = 0x04000000, + TAPE_DRIVE_RESERVED_BIT = 0x80000000; + +const DWORD + TAPE_DRIVE_LOAD_UNLOAD = 0x80000001, + TAPE_DRIVE_TENSION = 0x80000002, + TAPE_DRIVE_LOCK_UNLOCK = 0x80000004, + TAPE_DRIVE_REWIND_IMMEDIATE = 0x80000008, + TAPE_DRIVE_SET_BLOCK_SIZE = 0x80000010, + TAPE_DRIVE_LOAD_UNLD_IMMED = 0x80000020, + TAPE_DRIVE_TENSION_IMMED = 0x80000040, + TAPE_DRIVE_LOCK_UNLK_IMMED = 0x80000080, + TAPE_DRIVE_SET_ECC = 0x80000100, + TAPE_DRIVE_SET_COMPRESSION = 0x80000200, + TAPE_DRIVE_SET_PADDING = 0x80000400, + TAPE_DRIVE_SET_REPORT_SMKS = 0x80000800, + TAPE_DRIVE_ABSOLUTE_BLK = 0x80001000, + TAPE_DRIVE_ABS_BLK_IMMED = 0x80002000, + TAPE_DRIVE_LOGICAL_BLK = 0x80004000, + TAPE_DRIVE_LOG_BLK_IMMED = 0x80008000, + TAPE_DRIVE_END_OF_DATA = 0x80010000, + TAPE_DRIVE_RELATIVE_BLKS = 0x80020000, + TAPE_DRIVE_FILEMARKS = 0x80040000, + TAPE_DRIVE_SEQUENTIAL_FMKS = 0x80080000, + TAPE_DRIVE_SETMARKS = 0x80100000, + TAPE_DRIVE_SEQUENTIAL_SMKS = 0x80200000, + TAPE_DRIVE_REVERSE_POSITION = 0x80400000, + TAPE_DRIVE_SPACE_IMMEDIATE = 0x80800000, + TAPE_DRIVE_WRITE_SETMARKS = 0x81000000, + TAPE_DRIVE_WRITE_FILEMARKS = 0x82000000, + TAPE_DRIVE_WRITE_SHORT_FMKS = 0x84000000, + TAPE_DRIVE_WRITE_LONG_FMKS = 0x88000000, + TAPE_DRIVE_WRITE_MARK_IMMED = 0x90000000, + TAPE_DRIVE_FORMAT = 0xA0000000, + TAPE_DRIVE_FORMAT_IMMEDIATE = 0xC0000000, + TAPE_DRIVE_HIGH_FEATURES = 0x80000000; + +enum : DWORD { + TAPE_FIXED_PARTITIONS = 0, + TAPE_SELECT_PARTITIONS = 1, + TAPE_INITIATOR_PARTITIONS = 2 +} + +enum : DWORD { + TAPE_SETMARKS, + TAPE_FILEMARKS, + TAPE_SHORT_FILEMARKS, + TAPE_LONG_FILEMARKS +} + +enum : DWORD { + TAPE_ERASE_SHORT, + TAPE_ERASE_LONG +} + +enum : DWORD { + TAPE_LOAD, + TAPE_UNLOAD, + TAPE_TENSION, + TAPE_LOCK, + TAPE_UNLOCK, + TAPE_FORMAT +} + +enum : ULONG32 { + VER_PLATFORM_WIN32s, + VER_PLATFORM_WIN32_WINDOWS, + VER_PLATFORM_WIN32_NT +} + +enum : UCHAR { + VER_NT_WORKSTATION = 1, + VER_NT_DOMAIN_CONTROLLER, + VER_NT_SERVER +} + +const USHORT + VER_SUITE_SMALLBUSINESS = 0x0001, + VER_SUITE_ENTERPRISE = 0x0002, + VER_SUITE_BACKOFFICE = 0x0004, + VER_SUITE_TERMINAL = 0x0010, + VER_SUITE_SMALLBUSINESS_RESTRICTED = 0x0020, + VER_SUITE_EMBEDDEDNT = 0x0040, + VER_SUITE_DATACENTER = 0x0080, + VER_SUITE_SINGLEUSERTS = 0x0100, + VER_SUITE_PERSONAL = 0x0200, + VER_SUITE_BLADE = 0x0400, + VER_SUITE_STORAGE_SERVER = 0x2000, + VER_SUITE_COMPUTE_SERVER = 0x4000; + +const ULONG + WT_EXECUTEDEFAULT = 0x00000000, + WT_EXECUTEINIOTHREAD = 0x00000001, + WT_EXECUTEINWAITTHREAD = 0x00000004, + WT_EXECUTEONLYONCE = 0x00000008, + WT_EXECUTELONGFUNCTION = 0x00000010, + WT_EXECUTEINTIMERTHREAD = 0x00000020, + WT_EXECUTEINPERSISTENTTHREAD = 0x00000080, + WT_TRANSFER_IMPERSONATION = 0x00000100; + +static if (_WIN32_WINNT_ONLY) { + static if (_WIN32_WINNT >= 0x500) { + const DWORD + VER_MINORVERSION = 0x01, + VER_MAJORVERSION = 0x02, + VER_BUILDNUMBER = 0x04, + VER_PLATFORMID = 0x08, + VER_SERVICEPACKMINOR = 0x10, + VER_SERVICEPACKMAJOR = 0x20, + VER_SUITENAME = 0x40, + VER_PRODUCT_TYPE = 0x80; + + enum : DWORD { + VER_EQUAL = 1, + VER_GREATER, + VER_GREATER_EQUAL, + VER_LESS, + VER_LESS_EQUAL, + VER_AND, + VER_OR // = 7 + } + } + + static if (_WIN32_WINNT >= 0x501) { + enum : ULONG { + ACTIVATION_CONTEXT_SECTION_ASSEMBLY_INFORMATION = 1, + ACTIVATION_CONTEXT_SECTION_DLL_REDIRECTION, + ACTIVATION_CONTEXT_SECTION_WINDOW_CLASS_REDIRECTION, + ACTIVATION_CONTEXT_SECTION_COM_SERVER_REDIRECTION, + ACTIVATION_CONTEXT_SECTION_COM_INTERFACE_REDIRECTION, + ACTIVATION_CONTEXT_SECTION_COM_TYPE_LIBRARY_REDIRECTION, + ACTIVATION_CONTEXT_SECTION_COM_PROGID_REDIRECTION, // = 7 + ACTIVATION_CONTEXT_SECTION_CLR_SURROGATES = 9 + } + } +} + +// Macros +BYTE BTYPE(BYTE x) { return cast(BYTE) (x & N_BTMASK); } +bool ISPTR(uint x) { return (x & N_TMASK) == (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT); } +bool ISFCN(uint x) { return (x & N_TMASK) == (IMAGE_SYM_DTYPE_FUNCTION << N_BTSHFT); } +bool ISARY(uint x) { return (x & N_TMASK) == (IMAGE_SYM_DTYPE_ARRAY << N_BTSHFT); } +bool ISTAG(uint x) { + return x == IMAGE_SYM_CLASS_STRUCT_TAG + || x == IMAGE_SYM_CLASS_UNION_TAG + || x == IMAGE_SYM_CLASS_ENUM_TAG; +} +uint INCREF(uint x) { + return ((x & ~N_BTMASK) << N_TSHIFT) | (IMAGE_SYM_DTYPE_POINTER << N_BTSHFT) + | (x & N_BTMASK); +} +uint DECREF(uint x) { return ((x >>> N_TSHIFT) & ~N_BTMASK) | (x & N_BTMASK); } + +const DWORD TLS_MINIMUM_AVAILABLE = 64; + +const ULONG + IO_REPARSE_TAG_RESERVED_ZERO = 0, + IO_REPARSE_TAG_RESERVED_ONE = 1, + IO_REPARSE_TAG_RESERVED_RANGE = IO_REPARSE_TAG_RESERVED_ONE, + IO_REPARSE_TAG_SYMBOLIC_LINK = IO_REPARSE_TAG_RESERVED_ZERO, + IO_REPARSE_TAG_MOUNT_POINT = 0xA0000003, + IO_REPARSE_TAG_SYMLINK = 0xA000000C, + IO_REPARSE_TAG_VALID_VALUES = 0xE000FFFF; + +/* Although these are semantically boolean, they are documented and + * implemented to return ULONG; this behaviour is preserved for compatibility + */ +ULONG IsReparseTagMicrosoft(ULONG x) { return x & 0x80000000; } +ULONG IsReparseTagHighLatency(ULONG x) { return x & 0x40000000; } +ULONG IsReparseTagNameSurrogate(ULONG x) { return x & 0x20000000; } + +bool IsReparseTagValid(ULONG x) { + return !(x & ~IO_REPARSE_TAG_VALID_VALUES) && (x > IO_REPARSE_TAG_RESERVED_RANGE); +} + +// Doesn't seem to make sense, but anyway.... +ULONG WT_SET_MAX_THREADPOOL_THREADS(inout ULONG Flags, ushort Limit) { + return Flags |= Limit << 16; +} + +import win32.basetyps; +/* also in win32.basetyps +struct GUID { + uint Data1; + ushort Data2; + ushort Data3; + ubyte Data4[8]; +} +alias GUID* REFGUID, LPGUID; +*/ + +struct GENERIC_MAPPING { + ACCESS_MASK GenericRead; + ACCESS_MASK GenericWrite; + ACCESS_MASK GenericExecute; + ACCESS_MASK GenericAll; +} +alias GENERIC_MAPPING* PGENERIC_MAPPING; + +struct ACE_HEADER { + BYTE AceType; + BYTE AceFlags; + WORD AceSize; +} +alias ACE_HEADER* PACE_HEADER; + +struct ACCESS_ALLOWED_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD SidStart; +} +alias ACCESS_ALLOWED_ACE* PACCESS_ALLOWED_ACE; + +struct ACCESS_DENIED_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD SidStart; +} +alias ACCESS_DENIED_ACE* PACCESS_DENIED_ACE; + +struct SYSTEM_AUDIT_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD SidStart; +} +alias SYSTEM_AUDIT_ACE *PSYSTEM_AUDIT_ACE; + +struct SYSTEM_ALARM_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD SidStart; +} +alias SYSTEM_ALARM_ACE* PSYSTEM_ALARM_ACE; + +struct ACCESS_ALLOWED_OBJECT_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD Flags; + GUID ObjectType; + GUID InheritedObjectType; + DWORD SidStart; +} +alias ACCESS_ALLOWED_OBJECT_ACE* PACCESS_ALLOWED_OBJECT_ACE; + +struct ACCESS_DENIED_OBJECT_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD Flags; + GUID ObjectType; + GUID InheritedObjectType; + DWORD SidStart; +} +alias ACCESS_DENIED_OBJECT_ACE* PACCESS_DENIED_OBJECT_ACE; + +struct SYSTEM_AUDIT_OBJECT_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD Flags; + GUID ObjectType; + GUID InheritedObjectType; + DWORD SidStart; +} +alias SYSTEM_AUDIT_OBJECT_ACE* PSYSTEM_AUDIT_OBJECT_ACE; + +struct SYSTEM_ALARM_OBJECT_ACE { + ACE_HEADER Header; + ACCESS_MASK Mask; + DWORD Flags; + GUID ObjectType; + GUID InheritedObjectType; + DWORD SidStart; +} +alias SYSTEM_ALARM_OBJECT_ACE* PSYSTEM_ALARM_OBJECT_ACE; + +struct ACL { + BYTE AclRevision; + BYTE Sbz1; + WORD AclSize; + WORD AceCount; + WORD Sbz2; +} +alias ACL* PACL; + +struct ACL_REVISION_INFORMATION { + DWORD AclRevision; +} + +struct ACL_SIZE_INFORMATION { + DWORD AceCount; + DWORD AclBytesInUse; + DWORD AclBytesFree; +} + +version (X86) { + // ??? + const SIZE_OF_80387_REGISTERS = 80; + const CONTEXT_i386 = 0x010000; + const CONTEXT_i486 = 0x010000; + const CONTEXT_CONTROL = CONTEXT_i386 | 0x01; + const CONTEXT_INTEGER = CONTEXT_i386 | 0x02; + const CONTEXT_SEGMENTS = CONTEXT_i386 | 0x04; + const CONTEXT_FLOATING_POINT = CONTEXT_i386 | 0x08; + const CONTEXT_DEBUG_REGISTERS = CONTEXT_i386 | 0x10; + const CONTEXT_EXTENDED_REGISTERS = CONTEXT_i386 | 0x20; + const CONTEXT_FULL = CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS; + const MAXIMUM_SUPPORTED_EXTENSION = 512; + + struct FLOATING_SAVE_AREA { + DWORD ControlWord; + DWORD StatusWord; + DWORD TagWord; + DWORD ErrorOffset; + DWORD ErrorSelector; + DWORD DataOffset; + DWORD DataSelector; + BYTE[80] RegisterArea; + DWORD Cr0NpxState; + } + + struct CONTEXT { + DWORD ContextFlags; + DWORD Dr0; + DWORD Dr1; + DWORD Dr2; + DWORD Dr3; + DWORD Dr6; + DWORD Dr7; + FLOATING_SAVE_AREA FloatSave; + DWORD SegGs; + DWORD SegFs; + DWORD SegEs; + DWORD SegDs; + DWORD Edi; + DWORD Esi; + DWORD Ebx; + DWORD Edx; + DWORD Ecx; + DWORD Eax; + DWORD Ebp; + DWORD Eip; + DWORD SegCs; + DWORD EFlags; + DWORD Esp; + DWORD SegSs; + BYTE[MAXIMUM_SUPPORTED_EXTENSION] ExtendedRegisters; + } + +} else { + static assert(false, "Unsupported CPU"); + // Versions for PowerPC, Alpha, SHX, and MIPS removed. +} + +alias CONTEXT* PCONTEXT, LPCONTEXT; + +struct EXCEPTION_RECORD { + DWORD ExceptionCode; + DWORD ExceptionFlags; + EXCEPTION_RECORD* ExceptionRecord; + PVOID ExceptionAddress; + DWORD NumberParameters; + DWORD[EXCEPTION_MAXIMUM_PARAMETERS] ExceptionInformation; +} +alias EXCEPTION_RECORD* PEXCEPTION_RECORD, LPEXCEPTION_RECORD; + +struct EXCEPTION_POINTERS { + PEXCEPTION_RECORD ExceptionRecord; + PCONTEXT ContextRecord; +} +alias EXCEPTION_POINTERS* PEXCEPTION_POINTERS, LPEXCEPTION_POINTERS; + +union LARGE_INTEGER { + struct { + uint LowPart; + int HighPart; + } + long QuadPart; +} +alias LARGE_INTEGER* PLARGE_INTEGER; + +union ULARGE_INTEGER { + struct { + uint LowPart; + uint HighPart; + } + ulong QuadPart; +} +alias ULARGE_INTEGER* PULARGE_INTEGER; + +alias LARGE_INTEGER LUID; +alias LUID* PLUID; + +const LUID SYSTEM_LUID = { QuadPart:999 }; + +align(4) struct LUID_AND_ATTRIBUTES { + LUID Luid; + DWORD Attributes; +} +alias LUID_AND_ATTRIBUTES* PLUID_AND_ATTRIBUTES; + +struct PRIVILEGE_SET { + DWORD PrivilegeCount; + DWORD Control; + LUID_AND_ATTRIBUTES _Privilege; + + LUID_AND_ATTRIBUTES* Privilege() { return &_Privilege; } +} +alias PRIVILEGE_SET* PPRIVILEGE_SET; + +struct SECURITY_ATTRIBUTES { + DWORD nLength; + LPVOID lpSecurityDescriptor; + BOOL bInheritHandle; +} +alias SECURITY_ATTRIBUTES* PSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES; + +struct SECURITY_QUALITY_OF_SERVICE { + DWORD Length; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; + BOOLEAN EffectiveOnly; +} +alias SECURITY_QUALITY_OF_SERVICE* PSECURITY_QUALITY_OF_SERVICE; + +alias PVOID PACCESS_TOKEN; + +struct SE_IMPERSONATION_STATE { + PACCESS_TOKEN Token; + BOOLEAN CopyOnOpen; + BOOLEAN EffectiveOnly; + SECURITY_IMPERSONATION_LEVEL Level; +} +alias SE_IMPERSONATION_STATE* PSE_IMPERSONATION_STATE; + +struct SID_IDENTIFIER_AUTHORITY { + BYTE[6] Value; +} +alias SID_IDENTIFIER_AUTHORITY* PSID_IDENTIFIER_AUTHORITY, LPSID_IDENTIFIER_AUTHORITY; + +alias PVOID PSID; + +struct SID { + BYTE Revision; + BYTE SubAuthorityCount; + SID_IDENTIFIER_AUTHORITY IdentifierAuthority; + DWORD _SubAuthority; + + DWORD* SubAuthority() { return &_SubAuthority; } +} +alias SID* PISID; + +struct SID_AND_ATTRIBUTES { + PSID Sid; + DWORD Attributes; +} +alias SID_AND_ATTRIBUTES* PSID_AND_ATTRIBUTES; + +struct TOKEN_SOURCE { + CHAR[TOKEN_SOURCE_LENGTH] SourceName; + LUID SourceIdentifier; +} +alias TOKEN_SOURCE* PTOKEN_SOURCE; + +struct TOKEN_CONTROL { + LUID TokenId; + LUID AuthenticationId; + LUID ModifiedId; + TOKEN_SOURCE TokenSource; +} +alias TOKEN_CONTROL* PTOKEN_CONTROL; + +struct TOKEN_DEFAULT_DACL { + PACL DefaultDacl; +} +alias TOKEN_DEFAULT_DACL* PTOKEN_DEFAULT_DACL; + +struct TOKEN_GROUPS { + DWORD GroupCount; + SID_AND_ATTRIBUTES _Groups; + + SID_AND_ATTRIBUTES* Groups() { return &_Groups; } +} +alias TOKEN_GROUPS* PTOKEN_GROUPS, LPTOKEN_GROUPS; + +struct TOKEN_OWNER { + PSID Owner; +} +alias TOKEN_OWNER* PTOKEN_OWNER; + +struct TOKEN_PRIMARY_GROUP { + PSID PrimaryGroup; +} +alias TOKEN_PRIMARY_GROUP* PTOKEN_PRIMARY_GROUP; + +struct TOKEN_PRIVILEGES { + DWORD PrivilegeCount; + LUID_AND_ATTRIBUTES _Privileges; + + LUID_AND_ATTRIBUTES* Privileges() { return &_Privileges; } +} +alias TOKEN_PRIVILEGES* PTOKEN_PRIVILEGES, LPTOKEN_PRIVILEGES; + +enum TOKEN_TYPE { + TokenPrimary = 1, + TokenImpersonation +} +alias TOKEN_TYPE* PTOKEN_TYPE; + +struct TOKEN_STATISTICS { + LUID TokenId; + LUID AuthenticationId; + LARGE_INTEGER ExpirationTime; + TOKEN_TYPE TokenType; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + DWORD DynamicCharged; + DWORD DynamicAvailable; + DWORD GroupCount; + DWORD PrivilegeCount; + LUID ModifiedId; +} +alias TOKEN_STATISTICS* PTOKEN_STATISTICS; + +struct TOKEN_USER { + SID_AND_ATTRIBUTES User; +} +alias TOKEN_USER* PTOKEN_USER; + +alias DWORD SECURITY_INFORMATION; +alias SECURITY_INFORMATION* PSECURITY_INFORMATION; +alias WORD SECURITY_DESCRIPTOR_CONTROL; +alias SECURITY_DESCRIPTOR_CONTROL* PSECURITY_DESCRIPTOR_CONTROL; + +struct SECURITY_DESCRIPTOR { + BYTE Revision; + BYTE Sbz1; + SECURITY_DESCRIPTOR_CONTROL Control; + PSID Owner; + PSID Group; + PACL Sacl; + PACL Dacl; +} +alias SECURITY_DESCRIPTOR* PSECURITY_DESCRIPTOR, PISECURITY_DESCRIPTOR; + +enum TOKEN_INFORMATION_CLASS { + TokenUser = 1, + TokenGroups, + TokenPrivileges, + TokenOwner, + TokenPrimaryGroup, + TokenDefaultDacl, + TokenSource, + TokenType, + TokenImpersonationLevel, + TokenStatistics, + TokenRestrictedSids, + TokenSessionId, + TokenGroupsAndPrivileges, + TokenSessionReference, + TokenSandBoxInert, + TokenAuditPolicy, + TokenOrigin +} + +enum SID_NAME_USE { + SidTypeUser = 1, + SidTypeGroup, + SidTypeDomain, + SidTypeAlias, + SidTypeWellKnownGroup, + SidTypeDeletedAccount, + SidTypeInvalid, + SidTypeUnknown, + SidTypeComputer +} +alias SID_NAME_USE* PSID_NAME_USE; + +struct QUOTA_LIMITS { + SIZE_T PagedPoolLimit; + SIZE_T NonPagedPoolLimit; + SIZE_T MinimumWorkingSetSize; + SIZE_T MaximumWorkingSetSize; + SIZE_T PagefileLimit; + LARGE_INTEGER TimeLimit; +} +alias QUOTA_LIMITS* PQUOTA_LIMITS; + +struct IO_COUNTERS { + ULONGLONG ReadOperationCount; + ULONGLONG WriteOperationCount; + ULONGLONG OtherOperationCount; + ULONGLONG ReadTransferCount; + ULONGLONG WriteTransferCount; + ULONGLONG OtherTransferCount; +} +alias IO_COUNTERS* PIO_COUNTERS; + +struct FILE_NOTIFY_INFORMATION { + DWORD NextEntryOffset; + DWORD Action; + DWORD FileNameLength; + WCHAR _FileName; + + WCHAR* FileName() { return &_FileName; } +} +alias FILE_NOTIFY_INFORMATION* PFILE_NOTIFY_INFORMATION; + +struct TAPE_ERASE { + DWORD Type; + BOOLEAN Immediate; +} +alias TAPE_ERASE* PTAPE_ERASE; + +struct TAPE_GET_DRIVE_PARAMETERS { + BOOLEAN ECC; + BOOLEAN Compression; + BOOLEAN DataPadding; + BOOLEAN ReportSetmarks; + DWORD DefaultBlockSize; + DWORD MaximumBlockSize; + DWORD MinimumBlockSize; + DWORD MaximumPartitionCount; + DWORD FeaturesLow; + DWORD FeaturesHigh; + DWORD EOTWarningZoneSize; +} +alias TAPE_GET_DRIVE_PARAMETERS* PTAPE_GET_DRIVE_PARAMETERS; + +struct TAPE_GET_MEDIA_PARAMETERS { + LARGE_INTEGER Capacity; + LARGE_INTEGER Remaining; + DWORD BlockSize; + DWORD PartitionCount; + BOOLEAN WriteProtected; +} +alias TAPE_GET_MEDIA_PARAMETERS* PTAPE_GET_MEDIA_PARAMETERS; + +struct TAPE_GET_POSITION { + ULONG Type; + ULONG Partition; + ULONG OffsetLow; + ULONG OffsetHigh; +} +alias TAPE_GET_POSITION* PTAPE_GET_POSITION; + +struct TAPE_PREPARE { + DWORD Operation; + BOOLEAN Immediate; +} +alias TAPE_PREPARE* PTAPE_PREPARE; + +struct TAPE_SET_DRIVE_PARAMETERS { + BOOLEAN ECC; + BOOLEAN Compression; + BOOLEAN DataPadding; + BOOLEAN ReportSetmarks; + ULONG EOTWarningZoneSize; +} +alias TAPE_SET_DRIVE_PARAMETERS* PTAPE_SET_DRIVE_PARAMETERS; + +struct TAPE_SET_MEDIA_PARAMETERS { + ULONG BlockSize; +} +alias TAPE_SET_MEDIA_PARAMETERS* PTAPE_SET_MEDIA_PARAMETERS; + +struct TAPE_SET_POSITION { + DWORD Method; + DWORD Partition; + LARGE_INTEGER Offset; + BOOLEAN Immediate; +} +alias TAPE_SET_POSITION* PTAPE_SET_POSITION; + +struct TAPE_WRITE_MARKS { + DWORD Type; + DWORD Count; + BOOLEAN Immediate; +} +alias TAPE_WRITE_MARKS* PTAPE_WRITE_MARKS; + +struct TAPE_CREATE_PARTITION { + DWORD Method; + DWORD Count; + DWORD Size; +} +alias TAPE_CREATE_PARTITION* PTAPE_CREATE_PARTITION; + +struct MEMORY_BASIC_INFORMATION { + PVOID BaseAddress; + PVOID AllocationBase; + DWORD AllocationProtect; + DWORD RegionSize; + DWORD State; + DWORD Protect; + DWORD Type; +} +alias MEMORY_BASIC_INFORMATION* PMEMORY_BASIC_INFORMATION; + +struct MESSAGE_RESOURCE_ENTRY { + WORD Length; + WORD Flags; + BYTE _Text; + + BYTE* Text() { return &_Text; } +} +alias MESSAGE_RESOURCE_ENTRY* PMESSAGE_RESOURCE_ENTRY; + +struct MESSAGE_RESOURCE_BLOCK { + DWORD LowId; + DWORD HighId; + DWORD OffsetToEntries; +} +alias MESSAGE_RESOURCE_BLOCK* PMESSAGE_RESOURCE_BLOCK; + +struct MESSAGE_RESOURCE_DATA { + DWORD NumberOfBlocks; + MESSAGE_RESOURCE_BLOCK _Blocks; + + MESSAGE_RESOURCE_BLOCK* Blocks() { return &_Blocks; } +} +alias MESSAGE_RESOURCE_DATA* PMESSAGE_RESOURCE_DATA; + +struct LIST_ENTRY { + LIST_ENTRY* Flink; + LIST_ENTRY* Blink; +} +alias LIST_ENTRY* PLIST_ENTRY; + +struct SINGLE_LIST_ENTRY { + SINGLE_LIST_ENTRY* Next; +} +alias SINGLE_LIST_ENTRY SLIST_ENTRY; +alias SINGLE_LIST_ENTRY* PSINGLE_LIST_ENTRY, PSLIST_ENTRY; + +union SLIST_HEADER { + ULONGLONG Alignment; + struct { + SLIST_ENTRY Next; + WORD Depth; + WORD Sequence; + } +} +alias SLIST_HEADER* PSLIST_HEADER; + +struct RTL_CRITICAL_SECTION_DEBUG { + WORD Type; + WORD CreatorBackTraceIndex; + RTL_CRITICAL_SECTION* CriticalSection; + LIST_ENTRY ProcessLocksList; + DWORD EntryCount; + DWORD ContentionCount; + DWORD[2] Spare; +} +alias RTL_CRITICAL_SECTION_DEBUG* PRTL_CRITICAL_SECTION_DEBUG; + +struct RTL_CRITICAL_SECTION { + PRTL_CRITICAL_SECTION_DEBUG DebugInfo; + LONG LockCount; + LONG RecursionCount; + HANDLE OwningThread; + HANDLE LockSemaphore; + DWORD Reserved; +} +alias RTL_CRITICAL_SECTION* PRTL_CRITICAL_SECTION; + +struct EVENTLOGRECORD { + DWORD Length; + DWORD Reserved; + DWORD RecordNumber; + DWORD TimeGenerated; + DWORD TimeWritten; + DWORD EventID; + WORD EventType; + WORD NumStrings; + WORD EventCategory; + WORD ReservedFlags; + DWORD ClosingRecordNumber; + DWORD StringOffset; + DWORD UserSidLength; + DWORD UserSidOffset; + DWORD DataLength; + DWORD DataOffset; +} +alias EVENTLOGRECORD* PEVENTLOGRECORD; + +struct OSVERSIONINFOA { + DWORD dwOSVersionInfoSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformId; + CHAR[128] szCSDVersion; +} +alias OSVERSIONINFOA* POSVERSIONINFOA, LPOSVERSIONINFOA; + +struct OSVERSIONINFOW { + DWORD dwOSVersionInfoSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformId; + WCHAR[128] szCSDVersion; +} +alias OSVERSIONINFOW* POSVERSIONINFOW, LPOSVERSIONINFOW; + +struct OSVERSIONINFOEXA { + DWORD dwOSVersionInfoSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformId; + CHAR[128] szCSDVersion; + WORD wServicePackMajor; + WORD wServicePackMinor; + WORD wSuiteMask; + BYTE wProductType; + BYTE wReserved; +} +alias OSVERSIONINFOEXA* POSVERSIONINFOEXA, LPOSVERSIONINFOEXA; + +struct OSVERSIONINFOEXW { + DWORD dwOSVersionInfoSize; + DWORD dwMajorVersion; + DWORD dwMinorVersion; + DWORD dwBuildNumber; + DWORD dwPlatformId; + WCHAR[128] szCSDVersion; + WORD wServicePackMajor; + WORD wServicePackMinor; + WORD wSuiteMask; + BYTE wProductType; + BYTE wReserved; +} +alias OSVERSIONINFOEXW* POSVERSIONINFOEXW, LPOSVERSIONINFOEXW; + +align(2) struct IMAGE_VXD_HEADER { + WORD e32_magic; + BYTE e32_border; + BYTE e32_worder; + DWORD e32_level; + WORD e32_cpu; + WORD e32_os; + DWORD e32_ver; + DWORD e32_mflags; + DWORD e32_mpages; + DWORD e32_startobj; + DWORD e32_eip; + DWORD e32_stackobj; + DWORD e32_esp; + DWORD e32_pagesize; + DWORD e32_lastpagesize; + DWORD e32_fixupsize; + DWORD e32_fixupsum; + DWORD e32_ldrsize; + DWORD e32_ldrsum; + DWORD e32_objtab; + DWORD e32_objcnt; + DWORD e32_objmap; + DWORD e32_itermap; + DWORD e32_rsrctab; + DWORD e32_rsrccnt; + DWORD e32_restab; + DWORD e32_enttab; + DWORD e32_dirtab; + DWORD e32_dircnt; + DWORD e32_fpagetab; + DWORD e32_frectab; + DWORD e32_impmod; + DWORD e32_impmodcnt; + DWORD e32_impproc; + DWORD e32_pagesum; + DWORD e32_datapage; + DWORD e32_preload; + DWORD e32_nrestab; + DWORD e32_cbnrestab; + DWORD e32_nressum; + DWORD e32_autodata; + DWORD e32_debuginfo; + DWORD e32_debuglen; + DWORD e32_instpreload; + DWORD e32_instdemand; + DWORD e32_heapsize; + BYTE[12] e32_res3; + DWORD e32_winresoff; + DWORD e32_winreslen; + WORD e32_devid; + WORD e32_ddkver; +} +alias IMAGE_VXD_HEADER* PIMAGE_VXD_HEADER; + +align(4): +struct IMAGE_FILE_HEADER { + WORD Machine; + WORD NumberOfSections; + DWORD TimeDateStamp; + DWORD PointerToSymbolTable; + DWORD NumberOfSymbols; + WORD SizeOfOptionalHeader; + WORD Characteristics; +} +alias IMAGE_FILE_HEADER* PIMAGE_FILE_HEADER; +// const IMAGE_SIZEOF_FILE_HEADER = IMAGE_FILE_HEADER.sizeof; + +struct IMAGE_DATA_DIRECTORY { + DWORD VirtualAddress; + DWORD Size; +} +alias IMAGE_DATA_DIRECTORY* PIMAGE_DATA_DIRECTORY; + +struct IMAGE_OPTIONAL_HEADER32 { + WORD Magic; + BYTE MajorLinkerVersion; + BYTE MinorLinkerVersion; + DWORD SizeOfCode; + DWORD SizeOfInitializedData; + DWORD SizeOfUninitializedData; + DWORD AddressOfEntryPoint; + DWORD BaseOfCode; + DWORD BaseOfData; + DWORD ImageBase; + DWORD SectionAlignment; + DWORD FileAlignment; + WORD MajorOperatingSystemVersion; + WORD MinorOperatingSystemVersion; + WORD MajorImageVersion; + WORD MinorImageVersion; + WORD MajorSubsystemVersion; + WORD MinorSubsystemVersion; + DWORD Win32VersionValue; + DWORD SizeOfImage; + DWORD SizeOfHeaders; + DWORD CheckSum; + WORD Subsystem; + WORD DllCharacteristics; + DWORD SizeOfStackReserve; + DWORD SizeOfStackCommit; + DWORD SizeOfHeapReserve; + DWORD SizeOfHeapCommit; + DWORD LoaderFlags; + DWORD NumberOfRvaAndSizes; + IMAGE_DATA_DIRECTORY[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] DataDirectory; +} +alias IMAGE_OPTIONAL_HEADER32* PIMAGE_OPTIONAL_HEADER32; + +struct IMAGE_OPTIONAL_HEADER64 { + WORD Magic; + BYTE MajorLinkerVersion; + BYTE MinorLinkerVersion; + DWORD SizeOfCode; + DWORD SizeOfInitializedData; + DWORD SizeOfUninitializedData; + DWORD AddressOfEntryPoint; + DWORD BaseOfCode; + ULONGLONG ImageBase; + DWORD SectionAlignment; + DWORD FileAlignment; + WORD MajorOperatingSystemVersion; + WORD MinorOperatingSystemVersion; + WORD MajorImageVersion; + WORD MinorImageVersion; + WORD MajorSubsystemVersion; + WORD MinorSubsystemVersion; + DWORD Win32VersionValue; + DWORD SizeOfImage; + DWORD SizeOfHeaders; + DWORD CheckSum; + WORD Subsystem; + WORD DllCharacteristics; + ULONGLONG SizeOfStackReserve; + ULONGLONG SizeOfStackCommit; + ULONGLONG SizeOfHeapReserve; + ULONGLONG SizeOfHeapCommit; + DWORD LoaderFlags; + DWORD NumberOfRvaAndSizes; + IMAGE_DATA_DIRECTORY[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] DataDirectory; +} +alias IMAGE_OPTIONAL_HEADER64* PIMAGE_OPTIONAL_HEADER64; + +struct IMAGE_ROM_OPTIONAL_HEADER { + WORD Magic; + BYTE MajorLinkerVersion; + BYTE MinorLinkerVersion; + DWORD SizeOfCode; + DWORD SizeOfInitializedData; + DWORD SizeOfUninitializedData; + DWORD AddressOfEntryPoint; + DWORD BaseOfCode; + DWORD BaseOfData; + DWORD BaseOfBss; + DWORD GprMask; + DWORD[4] CprMask; + DWORD GpValue; +} +alias IMAGE_ROM_OPTIONAL_HEADER* PIMAGE_ROM_OPTIONAL_HEADER; + +align(2): +struct IMAGE_DOS_HEADER { + WORD e_magic; + WORD e_cblp; + WORD e_cp; + WORD e_crlc; + WORD e_cparhdr; + WORD e_minalloc; + WORD e_maxalloc; + WORD e_ss; + WORD e_sp; + WORD e_csum; + WORD e_ip; + WORD e_cs; + WORD e_lfarlc; + WORD e_ovno; + WORD[4] e_res; + WORD e_oemid; + WORD e_oeminfo; + WORD[10] e_res2; + LONG e_lfanew; +} +alias IMAGE_DOS_HEADER* PIMAGE_DOS_HEADER; + +struct IMAGE_OS2_HEADER { + WORD ne_magic; + CHAR ne_ver; + CHAR ne_rev; + WORD ne_enttab; + WORD ne_cbenttab; + LONG ne_crc; + WORD ne_flags; + WORD ne_autodata; + WORD ne_heap; + WORD ne_stack; + LONG ne_csip; + LONG ne_sssp; + WORD ne_cseg; + WORD ne_cmod; + WORD ne_cbnrestab; + WORD ne_segtab; + WORD ne_rsrctab; + WORD ne_restab; + WORD ne_modtab; + WORD ne_imptab; + LONG ne_nrestab; + WORD ne_cmovent; + WORD ne_align; + WORD ne_cres; + BYTE ne_exetyp; + BYTE ne_flagsothers; + WORD ne_pretthunks; + WORD ne_psegrefbytes; + WORD ne_swaparea; + WORD ne_expver; +} +alias IMAGE_OS2_HEADER* PIMAGE_OS2_HEADER; + +align(4) struct IMAGE_NT_HEADERS32 { + DWORD Signature; + IMAGE_FILE_HEADER FileHeader; + IMAGE_OPTIONAL_HEADER OptionalHeader; +} +alias IMAGE_NT_HEADERS32* PIMAGE_NT_HEADERS32; + +align(4) struct IMAGE_NT_HEADERS64 { + DWORD Signature; + IMAGE_FILE_HEADER FileHeader; + IMAGE_OPTIONAL_HEADER OptionalHeader; +} +alias IMAGE_NT_HEADERS64* PIMAGE_NT_HEADERS64; + +struct IMAGE_ROM_HEADERS { + IMAGE_FILE_HEADER FileHeader; + IMAGE_ROM_OPTIONAL_HEADER OptionalHeader; +} +alias IMAGE_ROM_HEADERS* PIMAGE_ROM_HEADERS; + +struct IMAGE_SECTION_HEADER { + BYTE[IMAGE_SIZEOF_SHORT_NAME] Name; + union _Misc { + DWORD PhysicalAddress; + DWORD VirtualSize; + } + _Misc Misc; + DWORD VirtualAddress; + DWORD SizeOfRawData; + DWORD PointerToRawData; + DWORD PointerToRelocations; + DWORD PointerToLinenumbers; + WORD NumberOfRelocations; + WORD NumberOfLinenumbers; + DWORD Characteristics; +} +alias IMAGE_SECTION_HEADER* PIMAGE_SECTION_HEADER; + +struct IMAGE_SYMBOL { + union _N { + BYTE[8] ShortName; + struct Name { + DWORD Short; + DWORD Long; + } + PBYTE[2] LongName; + } + _N N; + DWORD Value; + SHORT SectionNumber; + WORD Type; + BYTE StorageClass; + BYTE NumberOfAuxSymbols; +} +alias IMAGE_SYMBOL* PIMAGE_SYMBOL; + +union IMAGE_AUX_SYMBOL { + struct _Sym { + DWORD TagIndex; + union _Misc { + struct _LnSz { + WORD Linenumber; + WORD Size; + } + _LnSz LnSz; + DWORD TotalSize; + } + _Misc Misc; + union _FcnAry { + struct _Function { + DWORD PointerToLinenumber; + DWORD PointerToNextFunction; + } + _Function Function; + struct _Array { + WORD[4] Dimension; + } + _Array Array; + } + _FcnAry FcnAry; + WORD TvIndex; + } + _Sym Sym; + struct _File { + BYTE[IMAGE_SIZEOF_SYMBOL] Name; + } + _File File; + struct _Section { + DWORD Length; + WORD NumberOfRelocations; + WORD NumberOfLinenumbers; + DWORD CheckSum; + SHORT Number; + BYTE Selection; + } + _Section Section; +} +alias IMAGE_AUX_SYMBOL* PIMAGE_AUX_SYMBOL; + +struct IMAGE_COFF_SYMBOLS_HEADER { + DWORD NumberOfSymbols; + DWORD LvaToFirstSymbol; + DWORD NumberOfLinenumbers; + DWORD LvaToFirstLinenumber; + DWORD RvaToFirstByteOfCode; + DWORD RvaToLastByteOfCode; + DWORD RvaToFirstByteOfData; + DWORD RvaToLastByteOfData; +} +alias IMAGE_COFF_SYMBOLS_HEADER* PIMAGE_COFF_SYMBOLS_HEADER; + +struct IMAGE_RELOCATION { + union { + DWORD VirtualAddress; + DWORD RelocCount; + } + DWORD SymbolTableIndex; + WORD Type; +} +alias IMAGE_RELOCATION* PIMAGE_RELOCATION; + +align(4) struct IMAGE_BASE_RELOCATION { + DWORD VirtualAddress; + DWORD SizeOfBlock; +} +alias IMAGE_BASE_RELOCATION* PIMAGE_BASE_RELOCATION; + +align(2) struct IMAGE_LINENUMBER { + union _Type { + DWORD SymbolTableIndex; + DWORD VirtualAddress; + } + _Type Type; + WORD Linenumber; +} +alias IMAGE_LINENUMBER* PIMAGE_LINENUMBER; + +align(4): +struct IMAGE_ARCHIVE_MEMBER_HEADER { + BYTE[16] Name; + BYTE[12] Date; + BYTE[6] UserID; + BYTE[6] GroupID; + BYTE[8] Mode; + BYTE[10] Size; + BYTE[2] EndHeader; +} +alias IMAGE_ARCHIVE_MEMBER_HEADER* PIMAGE_ARCHIVE_MEMBER_HEADER; + +struct IMAGE_EXPORT_DIRECTORY { + DWORD Characteristics; + DWORD TimeDateStamp; + WORD MajorVersion; + WORD MinorVersion; + DWORD Name; + DWORD Base; + DWORD NumberOfFunctions; + DWORD NumberOfNames; + DWORD AddressOfFunctions; + DWORD AddressOfNames; + DWORD AddressOfNameOrdinals; +} +alias IMAGE_EXPORT_DIRECTORY* PIMAGE_EXPORT_DIRECTORY; + +struct IMAGE_IMPORT_BY_NAME { + WORD Hint; + BYTE _Name; + + BYTE* Name() { + return &_Name; + } +} +alias IMAGE_IMPORT_BY_NAME* PIMAGE_IMPORT_BY_NAME; + +struct IMAGE_THUNK_DATA32 { + union _u1 { + DWORD ForwarderString; + DWORD Function; + DWORD Ordinal; + DWORD AddressOfData; + } + _u1 u1; +} +alias IMAGE_THUNK_DATA32* PIMAGE_THUNK_DATA32; + +struct IMAGE_THUNK_DATA64 { + union _u1 { + ULONGLONG ForwarderString; + ULONGLONG Function; + ULONGLONG Ordinal; + ULONGLONG AddressOfData; + } + _u1 u1; +} +alias IMAGE_THUNK_DATA64* PIMAGE_THUNK_DATA64; + +struct IMAGE_IMPORT_DESCRIPTOR { + union { + DWORD Characteristics; + DWORD OriginalFirstThunk; + } + DWORD TimeDateStamp; + DWORD ForwarderChain; + DWORD Name; + DWORD FirstThunk; +} +alias IMAGE_IMPORT_DESCRIPTOR* PIMAGE_IMPORT_DESCRIPTOR; + +struct IMAGE_BOUND_IMPORT_DESCRIPTOR { + DWORD TimeDateStamp; + WORD OffsetModuleName; + WORD NumberOfModuleForwarderRefs; +} +alias IMAGE_BOUND_IMPORT_DESCRIPTOR* PIMAGE_BOUND_IMPORT_DESCRIPTOR; + +struct IMAGE_BOUND_FORWARDER_REF { + DWORD TimeDateStamp; + WORD OffsetModuleName; + WORD Reserved; +} +alias IMAGE_BOUND_FORWARDER_REF* PIMAGE_BOUND_FORWARDER_REF; + +struct IMAGE_TLS_DIRECTORY32 { + DWORD StartAddressOfRawData; + DWORD EndAddressOfRawData; + DWORD AddressOfIndex; + DWORD AddressOfCallBacks; + DWORD SizeOfZeroFill; + DWORD Characteristics; +} +alias IMAGE_TLS_DIRECTORY32* PIMAGE_TLS_DIRECTORY32; + +struct IMAGE_TLS_DIRECTORY64 { + ULONGLONG StartAddressOfRawData; + ULONGLONG EndAddressOfRawData; + ULONGLONG AddressOfIndex; + ULONGLONG AddressOfCallBacks; + DWORD SizeOfZeroFill; + DWORD Characteristics; +} +alias IMAGE_TLS_DIRECTORY64* PIMAGE_TLS_DIRECTORY64; + +struct IMAGE_RESOURCE_DIRECTORY { + DWORD Characteristics; + DWORD TimeDateStamp; + WORD MajorVersion; + WORD MinorVersion; + WORD NumberOfNamedEntries; + WORD NumberOfIdEntries; +} +alias IMAGE_RESOURCE_DIRECTORY* PIMAGE_RESOURCE_DIRECTORY; + +struct IMAGE_RESOURCE_DIRECTORY_ENTRY { + union { + /+struct { + DWORD NameOffset:31; + DWORD NameIsString:1; + }+/ + DWORD Name; + WORD Id; + } + DWORD OffsetToData; + /+struct { + DWORD OffsetToDirectory:31; + DWORD DataIsDirectory:1; + }+/ + + uint NameOffset() { return Name & 0x7FFFFFFF; } + bool NameIsString() { return cast(bool)(Name & 0x80000000); } + uint OffsetToDirectory() { return OffsetToData & 0x7FFFFFFF; } + bool DataIsDirectory() { return cast(bool)(OffsetToData & 0x80000000); } + + uint NameOffset(uint n) { + Name = (Name & 0x80000000) | (n & 0x7FFFFFFF); + return n & 0x7FFFFFFF; + } + + bool NameIsString(bool n) { + Name = (Name & 0x7FFFFFFF) | (n << 31); return n; + } + + uint OffsetToDirectory(uint o) { + OffsetToData = (OffsetToData & 0x80000000) | (o & 0x7FFFFFFF); + return o & 0x7FFFFFFF; + } + + bool DataIsDirectory(bool d) { + OffsetToData = (OffsetToData & 0x7FFFFFFF) | (d << 31); return d; + } +} +alias IMAGE_RESOURCE_DIRECTORY_ENTRY* PIMAGE_RESOURCE_DIRECTORY_ENTRY; + +struct IMAGE_RESOURCE_DIRECTORY_STRING { + WORD Length; + CHAR _NameString; + + CHAR* NameString() { return &_NameString; } +} +alias IMAGE_RESOURCE_DIRECTORY_STRING* PIMAGE_RESOURCE_DIRECTORY_STRING; + +struct IMAGE_RESOURCE_DIR_STRING_U { + WORD Length; + WCHAR _NameString; + + WCHAR* NameString() { return &_NameString; } +} +alias IMAGE_RESOURCE_DIR_STRING_U* PIMAGE_RESOURCE_DIR_STRING_U; + +struct IMAGE_RESOURCE_DATA_ENTRY { + DWORD OffsetToData; + DWORD Size; + DWORD CodePage; + DWORD Reserved; +} +alias IMAGE_RESOURCE_DATA_ENTRY* PIMAGE_RESOURCE_DATA_ENTRY; + +struct IMAGE_LOAD_CONFIG_DIRECTORY { + DWORD Characteristics; + DWORD TimeDateStamp; + WORD MajorVersion; + WORD MinorVersion; + DWORD GlobalFlagsClear; + DWORD GlobalFlagsSet; + DWORD CriticalSectionDefaultTimeout; + DWORD DeCommitFreeBlockThreshold; + DWORD DeCommitTotalFreeThreshold; + PVOID LockPrefixTable; + DWORD MaximumAllocationSize; + DWORD VirtualMemoryThreshold; + DWORD ProcessHeapFlags; + DWORD[4] Reserved; +} +alias IMAGE_LOAD_CONFIG_DIRECTORY* PIMAGE_LOAD_CONFIG_DIRECTORY; + +struct IMAGE_LOAD_CONFIG_DIRECTORY64 { + DWORD Characteristics; + DWORD TimeDateStamp; + WORD MajorVersion; + WORD MinorVersion; + DWORD GlobalFlagsClear; + DWORD GlobalFlagsSet; + DWORD CriticalSectionDefaultTimeout; + ULONGLONG DeCommitFreeBlockThreshold; + ULONGLONG DeCommitTotalFreeThreshold; + ULONGLONG LockPrefixTable; + ULONGLONG MaximumAllocationSize; + ULONGLONG VirtualMemoryThreshold; + ULONGLONG ProcessAffinityMask; + DWORD ProcessHeapFlags; + WORD CSDFlags; + WORD Reserved1; + ULONGLONG EditList; + DWORD[2] Reserved; +} +alias IMAGE_LOAD_CONFIG_DIRECTORY64* PIMAGE_LOAD_CONFIG_DIRECTORY64; + +struct IMAGE_RUNTIME_FUNCTION_ENTRY { + DWORD BeginAddress; + DWORD EndAddress; + PVOID ExceptionHandler; + PVOID HandlerData; + DWORD PrologEndAddress; +} +alias IMAGE_RUNTIME_FUNCTION_ENTRY* PIMAGE_RUNTIME_FUNCTION_ENTRY; + +struct IMAGE_CE_RUNTIME_FUNCTION_ENTRY { + uint FuncStart; + union { + ubyte PrologLen; + uint _bf; + } +/+ + unsigned int FuncLen:22; + unsigned int ThirtyTwoBit:1; + unsigned int ExceptionFlag:1; ++/ + uint FuncLen() { return (_bf >> 8) & 0x3FFFFF; } + bool ThirtyTwoBit() { return cast(bool)(_bf & 0x40000000); } + bool ExceptionFlag() { return cast(bool)(_bf & 0x80000000); } + + uint FuncLen(uint f) { + _bf = (_bf & ~0x3FFFFF00) | ((f & 0x3FFFFF) << 8); return f & 0x3FFFFF; + } + + bool ThirtyTwoBit(bool t) { + _bf = (_bf & ~0x40000000) | (t << 30); return t; + } + + bool ExceptionFlag(bool e) { + _bf = (_bf & ~0x80000000) | (e << 31); return e; + } +} +alias IMAGE_CE_RUNTIME_FUNCTION_ENTRY* PIMAGE_CE_RUNTIME_FUNCTION_ENTRY; + +struct IMAGE_DEBUG_DIRECTORY { + DWORD Characteristics; + DWORD TimeDateStamp; + WORD MajorVersion; + WORD MinorVersion; + DWORD Type; + DWORD SizeOfData; + DWORD AddressOfRawData; + DWORD PointerToRawData; +} +alias IMAGE_DEBUG_DIRECTORY* PIMAGE_DEBUG_DIRECTORY; + +struct FPO_DATA { + DWORD ulOffStart; + DWORD cbProcSize; + DWORD cdwLocals; + WORD cdwParams; + ubyte cbProlog; + ubyte _bf; +/+ + WORD cbRegs:3; + WORD fHasSEH:1; + WORD fUseBP:1; + WORD reserved:1; + WORD cbFrame:2; ++/ + ubyte cbRegs() { return cast(ubyte)(_bf & 0x07); } + bool fHasSEH() { return cast(bool)(_bf & 0x08); } + bool fUseBP() { return cast(bool)(_bf & 0x10); } + bool reserved() { return cast(bool)(_bf & 0x20); } + ubyte cbFrame() { return cast(ubyte)(_bf >> 6); } + + ubyte cbRegs(ubyte c) { + _bf = cast(ubyte) ((_bf & ~0x07) | (c & 0x07)); + return cast(ubyte)(c & 0x07); + } + + bool fHasSEH(bool f) { _bf = cast(ubyte)((_bf & ~0x08) | (f << 3)); return f; } + bool fUseBP(bool f) { _bf = cast(ubyte)((_bf & ~0x10) | (f << 4)); return f; } + bool reserved(bool r) { _bf = cast(ubyte)((_bf & ~0x20) | (r << 5)); return r; } + + ubyte cbFrame(ubyte c) { + _bf = cast(ubyte) ((_bf & ~0xC0) | ((c & 0x03) << 6)); + return cast(ubyte)(c & 0x03); + } +} +alias FPO_DATA* PFPO_DATA; + +struct IMAGE_DEBUG_MISC { + DWORD DataType; + DWORD Length; + BOOLEAN Unicode; + BYTE[3] Reserved; + BYTE _Data; + + BYTE* Data() { return &_Data; } +} +alias IMAGE_DEBUG_MISC* PIMAGE_DEBUG_MISC; + +struct IMAGE_FUNCTION_ENTRY { + DWORD StartingAddress; + DWORD EndingAddress; + DWORD EndOfPrologue; +} +alias IMAGE_FUNCTION_ENTRY* PIMAGE_FUNCTION_ENTRY; + +struct IMAGE_FUNCTION_ENTRY64 { + ULONGLONG StartingAddress; + ULONGLONG EndingAddress; + union { + ULONGLONG EndOfPrologue; + ULONGLONG UnwindInfoAddress; + } +} +alias IMAGE_FUNCTION_ENTRY64* PIMAGE_FUNCTION_ENTRY64; + +struct IMAGE_SEPARATE_DEBUG_HEADER { + WORD Signature; + WORD Flags; + WORD Machine; + WORD Characteristics; + DWORD TimeDateStamp; + DWORD CheckSum; + DWORD ImageBase; + DWORD SizeOfImage; + DWORD NumberOfSections; + DWORD ExportedNamesSize; + DWORD DebugDirectorySize; + DWORD SectionAlignment; + DWORD[2] Reserved; +} +alias IMAGE_SEPARATE_DEBUG_HEADER* PIMAGE_SEPARATE_DEBUG_HEADER; + +enum SERVICE_NODE_TYPE { + DriverType = SERVICE_KERNEL_DRIVER, + FileSystemType = SERVICE_FILE_SYSTEM_DRIVER, + Win32ServiceOwnProcess = SERVICE_WIN32_OWN_PROCESS, + Win32ServiceShareProcess = SERVICE_WIN32_SHARE_PROCESS, + AdapterType = SERVICE_ADAPTER, + RecognizerType = SERVICE_RECOGNIZER_DRIVER +} + +enum SERVICE_LOAD_TYPE { + BootLoad = SERVICE_BOOT_START, + SystemLoad = SERVICE_SYSTEM_START, + AutoLoad = SERVICE_AUTO_START, + DemandLoad = SERVICE_DEMAND_START, + DisableLoad = SERVICE_DISABLED +} + +enum SERVICE_ERROR_TYPE { + IgnoreError = SERVICE_ERROR_IGNORE, + NormalError = SERVICE_ERROR_NORMAL, + SevereError = SERVICE_ERROR_SEVERE, + CriticalError = SERVICE_ERROR_CRITICAL +} +alias SERVICE_ERROR_TYPE _CM_ERROR_CONTROL_TYPE; + +//DAC: According to MSJ, 'UnderTheHood', May 1996, this +// structure is not documented in any official Microsoft header file. +alias void EXCEPTION_REGISTRATION_RECORD; + +align: +struct NT_TIB { + EXCEPTION_REGISTRATION_RECORD *ExceptionList; + PVOID StackBase; + PVOID StackLimit; + PVOID SubSystemTib; + union { + PVOID FiberData; + DWORD Version; + } + PVOID ArbitraryUserPointer; + NT_TIB *Self; +} +alias NT_TIB* PNT_TIB; + +struct REPARSE_DATA_BUFFER { + DWORD ReparseTag; + WORD ReparseDataLength; + WORD Reserved; + union { + struct _GenericReparseBuffer { + BYTE _DataBuffer; + + BYTE* DataBuffer() { return &_DataBuffer; } + } + _GenericReparseBuffer GenericReparseBuffer; + struct _SymbolicLinkReparseBuffer { + WORD SubstituteNameOffset; + WORD SubstituteNameLength; + WORD PrintNameOffset; + WORD PrintNameLength; + // ??? This is in MinGW, but absent in MSDN docs + ULONG Flags; + WCHAR _PathBuffer; + + WCHAR* PathBuffer() { return &_PathBuffer; } + } + _SymbolicLinkReparseBuffer SymbolicLinkReparseBuffer; + struct _MountPointReparseBuffer { + WORD SubstituteNameOffset; + WORD SubstituteNameLength; + WORD PrintNameOffset; + WORD PrintNameLength; + WCHAR _PathBuffer; + + WCHAR* PathBuffer() { return &_PathBuffer; } + } + _MountPointReparseBuffer MountPointReparseBuffer; + } +} +alias REPARSE_DATA_BUFFER *PREPARSE_DATA_BUFFER; + +struct REPARSE_GUID_DATA_BUFFER { + DWORD ReparseTag; + WORD ReparseDataLength; + WORD Reserved; + GUID ReparseGuid; + struct _GenericReparseBuffer { + BYTE _DataBuffer; + + BYTE* DataBuffer() { return &_DataBuffer; } + } + _GenericReparseBuffer GenericReparseBuffer; +} +alias REPARSE_GUID_DATA_BUFFER* PREPARSE_GUID_DATA_BUFFER; + +const size_t + REPARSE_DATA_BUFFER_HEADER_SIZE = REPARSE_DATA_BUFFER.GenericReparseBuffer.offsetof, + REPARSE_GUID_DATA_BUFFER_HEADER_SIZE = REPARSE_GUID_DATA_BUFFER.GenericReparseBuffer.offsetof, + MAXIMUM_REPARSE_DATA_BUFFER_SIZE = 16384; + + +struct REPARSE_POINT_INFORMATION { + WORD ReparseDataLength; + WORD UnparsedNameLength; +} +alias REPARSE_POINT_INFORMATION* PREPARSE_POINT_INFORMATION; + +union FILE_SEGMENT_ELEMENT { + PVOID64 Buffer; + ULONGLONG Alignment; +} +alias FILE_SEGMENT_ELEMENT* PFILE_SEGMENT_ELEMENT; + +// JOBOBJECT_BASIC_LIMIT_INFORMATION.LimitFlags constants +const DWORD + JOB_OBJECT_LIMIT_WORKINGSET = 0x0001, + JOB_OBJECT_LIMIT_PROCESS_TIME = 0x0002, + JOB_OBJECT_LIMIT_JOB_TIME = 0x0004, + JOB_OBJECT_LIMIT_ACTIVE_PROCESS = 0x0008, + JOB_OBJECT_LIMIT_AFFINITY = 0x0010, + JOB_OBJECT_LIMIT_PRIORITY_CLASS = 0x0020, + JOB_OBJECT_LIMIT_PRESERVE_JOB_TIME = 0x0040, + JOB_OBJECT_LIMIT_SCHEDULING_CLASS = 0x0080, + JOB_OBJECT_LIMIT_PROCESS_MEMORY = 0x0100, + JOB_OBJECT_LIMIT_JOB_MEMORY = 0x0200, + JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION = 0x0400, + JOB_OBJECT_BREAKAWAY_OK = 0x0800, + JOB_OBJECT_SILENT_BREAKAWAY = 0x1000; + +// JOBOBJECT_BASIC_UI_RESTRICTIONS.UIRestrictionsClass constants +const DWORD + JOB_OBJECT_UILIMIT_HANDLES = 0x0001, + JOB_OBJECT_UILIMIT_READCLIPBOARD = 0x0002, + JOB_OBJECT_UILIMIT_WRITECLIPBOARD = 0x0004, + JOB_OBJECT_UILIMIT_SYSTEMPARAMETERS = 0x0008, + JOB_OBJECT_UILIMIT_DISPLAYSETTINGS = 0x0010, + JOB_OBJECT_UILIMIT_GLOBALATOMS = 0x0020, + JOB_OBJECT_UILIMIT_DESKTOP = 0x0040, + JOB_OBJECT_UILIMIT_EXITWINDOWS = 0x0080; + +// JOBOBJECT_SECURITY_LIMIT_INFORMATION.SecurityLimitFlags constants +const DWORD + JOB_OBJECT_SECURITY_NO_ADMIN = 0x0001, + JOB_OBJECT_SECURITY_RESTRICTED_TOKEN = 0x0002, + JOB_OBJECT_SECURITY_ONLY_TOKEN = 0x0004, + JOB_OBJECT_SECURITY_FILTER_TOKENS = 0x0008; + +// JOBOBJECT_END_OF_JOB_TIME_INFORMATION.EndOfJobTimeAction constants +enum : DWORD { + JOB_OBJECT_TERMINATE_AT_END_OF_JOB, + JOB_OBJECT_POST_AT_END_OF_JOB +} + +enum : DWORD { + JOB_OBJECT_MSG_END_OF_JOB_TIME = 1, + JOB_OBJECT_MSG_END_OF_PROCESS_TIME, + JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT, + JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO, + JOB_OBJECT_MSG_NEW_PROCESS, + JOB_OBJECT_MSG_EXIT_PROCESS, + JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS, + JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT, + JOB_OBJECT_MSG_JOB_MEMORY_LIMIT +} + +enum JOBOBJECTINFOCLASS { + JobObjectBasicAccountingInformation = 1, + JobObjectBasicLimitInformation, + JobObjectBasicProcessIdList, + JobObjectBasicUIRestrictions, + JobObjectSecurityLimitInformation, + JobObjectEndOfJobTimeInformation, + JobObjectAssociateCompletionPortInformation, + JobObjectBasicAndIoAccountingInformation, + JobObjectExtendedLimitInformation, + JobObjectJobSetInformation, + MaxJobObjectInfoClass +} + +struct JOBOBJECT_BASIC_ACCOUNTING_INFORMATION { + LARGE_INTEGER TotalUserTime; + LARGE_INTEGER TotalKernelTime; + LARGE_INTEGER ThisPeriodTotalUserTime; + LARGE_INTEGER ThisPeriodTotalKernelTime; + DWORD TotalPageFaultCount; + DWORD TotalProcesses; + DWORD ActiveProcesses; + DWORD TotalTerminatedProcesses; +} +alias JOBOBJECT_BASIC_ACCOUNTING_INFORMATION* PJOBOBJECT_BASIC_ACCOUNTING_INFORMATION; + +struct JOBOBJECT_BASIC_LIMIT_INFORMATION { + LARGE_INTEGER PerProcessUserTimeLimit; + LARGE_INTEGER PerJobUserTimeLimit; + DWORD LimitFlags; + SIZE_T MinimumWorkingSetSize; + SIZE_T MaximumWorkingSetSize; + DWORD ActiveProcessLimit; + ULONG_PTR Affinity; + DWORD PriorityClass; + DWORD SchedulingClass; +} +alias JOBOBJECT_BASIC_LIMIT_INFORMATION* PJOBOBJECT_BASIC_LIMIT_INFORMATION; + +struct JOBOBJECT_BASIC_PROCESS_ID_LIST { + DWORD NumberOfAssignedProcesses; + DWORD NumberOfProcessIdsInList; + ULONG_PTR _ProcessIdList; + + ULONG_PTR* ProcessIdList() { return &_ProcessIdList; } +} +alias JOBOBJECT_BASIC_PROCESS_ID_LIST* PJOBOBJECT_BASIC_PROCESS_ID_LIST; + +struct JOBOBJECT_BASIC_UI_RESTRICTIONS { + DWORD UIRestrictionsClass; +} +alias JOBOBJECT_BASIC_UI_RESTRICTIONS* PJOBOBJECT_BASIC_UI_RESTRICTIONS; + +struct JOBOBJECT_SECURITY_LIMIT_INFORMATION { + DWORD SecurityLimitFlags; + HANDLE JobToken; + PTOKEN_GROUPS SidsToDisable; + PTOKEN_PRIVILEGES PrivilegesToDelete; + PTOKEN_GROUPS RestrictedSids; +} +alias JOBOBJECT_SECURITY_LIMIT_INFORMATION* PJOBOBJECT_SECURITY_LIMIT_INFORMATION; + +struct JOBOBJECT_END_OF_JOB_TIME_INFORMATION { + DWORD EndOfJobTimeAction; +} +alias JOBOBJECT_END_OF_JOB_TIME_INFORMATION* PJOBOBJECT_END_OF_JOB_TIME_INFORMATION; + +struct JOBOBJECT_ASSOCIATE_COMPLETION_PORT { + PVOID CompletionKey; + HANDLE CompletionPort; +} +alias JOBOBJECT_ASSOCIATE_COMPLETION_PORT* PJOBOBJECT_ASSOCIATE_COMPLETION_PORT; + +struct JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION { + JOBOBJECT_BASIC_ACCOUNTING_INFORMATION BasicInfo; + IO_COUNTERS IoInfo; +} +alias JOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION *PJOBOBJECT_BASIC_AND_IO_ACCOUNTING_INFORMATION; + +struct JOBOBJECT_EXTENDED_LIMIT_INFORMATION { + JOBOBJECT_BASIC_LIMIT_INFORMATION BasicLimitInformation; + IO_COUNTERS IoInfo; + SIZE_T ProcessMemoryLimit; + SIZE_T JobMemoryLimit; + SIZE_T PeakProcessMemoryUsed; + SIZE_T PeakJobMemoryUsed; +} +alias JOBOBJECT_EXTENDED_LIMIT_INFORMATION* PJOBOBJECT_EXTENDED_LIMIT_INFORMATION; + +struct JOBOBJECT_JOBSET_INFORMATION { + DWORD MemberLevel; +} +alias JOBOBJECT_JOBSET_INFORMATION* PJOBOBJECT_JOBSET_INFORMATION; + +// MinGW: Making these defines conditional on WINVER will break ddk includes +//static if (WINVER >= 0x0500) { + +const DWORD + ES_SYSTEM_REQUIRED = 0x00000001, + ES_DISPLAY_REQUIRED = 0x00000002, + ES_USER_PRESENT = 0x00000004, + ES_CONTINUOUS = 0x80000000; + +enum LATENCY_TIME { + LT_DONT_CARE, + LT_LOWEST_LATENCY +} +alias LATENCY_TIME* PLATENCY_TIME; + +enum SYSTEM_POWER_STATE { + PowerSystemUnspecified, + PowerSystemWorking, + PowerSystemSleeping1, + PowerSystemSleeping2, + PowerSystemSleeping3, + PowerSystemHibernate, + PowerSystemShutdown, + PowerSystemMaximum +} +alias SYSTEM_POWER_STATE* PSYSTEM_POWER_STATE; + +const POWER_SYSTEM_MAXIMUM = SYSTEM_POWER_STATE.PowerSystemMaximum; + +enum POWER_ACTION { + PowerActionNone, + PowerActionReserved, + PowerActionSleep, + PowerActionHibernate, + PowerActionShutdown, + PowerActionShutdownReset, + PowerActionShutdownOff, + PowerActionWarmEject +} +alias POWER_ACTION* PPOWER_ACTION; + +static if (WINVER >= 0x600) { + enum SYSTEM_POWER_CONDITION { + PoAc, + PoDc, + PoHot, + PoConditionMaximum + } + alias SYSTEM_POWER_CONDITION* PSYSTEM_POWER_CONDITION; +} + +enum DEVICE_POWER_STATE { + PowerDeviceUnspecified, + PowerDeviceD0, + PowerDeviceD1, + PowerDeviceD2, + PowerDeviceD3, + PowerDeviceMaximum +} +alias DEVICE_POWER_STATE* PDEVICE_POWER_STATE; + +align(4): +struct BATTERY_REPORTING_SCALE { + DWORD Granularity; + DWORD Capacity; +} +alias BATTERY_REPORTING_SCALE* PBATTERY_REPORTING_SCALE; + +struct POWER_ACTION_POLICY { + POWER_ACTION Action; + ULONG Flags; + ULONG EventCode; +} +alias POWER_ACTION_POLICY* PPOWER_ACTION_POLICY; + +// POWER_ACTION_POLICY.Flags constants +const ULONG + POWER_ACTION_QUERY_ALLOWED = 0x00000001, + POWER_ACTION_UI_ALLOWED = 0x00000002, + POWER_ACTION_OVERRIDE_APPS = 0x00000004, + POWER_ACTION_LIGHTEST_FIRST = 0x10000000, + POWER_ACTION_LOCK_CONSOLE = 0x20000000, + POWER_ACTION_DISABLE_WAKES = 0x40000000, + POWER_ACTION_CRITICAL = 0x80000000; + +// POWER_ACTION_POLICY.EventCode constants +const ULONG + POWER_LEVEL_USER_NOTIFY_TEXT = 0x00000001, + POWER_LEVEL_USER_NOTIFY_SOUND = 0x00000002, + POWER_LEVEL_USER_NOTIFY_EXEC = 0x00000004, + POWER_USER_NOTIFY_BUTTON = 0x00000008, + POWER_USER_NOTIFY_SHUTDOWN = 0x00000010, + POWER_FORCE_TRIGGER_RESET = 0x80000000; + +const size_t + DISCHARGE_POLICY_CRITICAL = 0, + DISCHARGE_POLICY_LOW = 1, + NUM_DISCHARGE_POLICIES = 4; + +enum : BYTE { + PO_THROTTLE_NONE, + PO_THROTTLE_CONSTANT, + PO_THROTTLE_DEGRADE, + PO_THROTTLE_ADAPTIVE, + PO_THROTTLE_MAXIMUM +} + +struct SYSTEM_POWER_LEVEL { + BOOLEAN Enable; + UCHAR[3] Spare; + ULONG BatteryLevel; + POWER_ACTION_POLICY PowerPolicy; + SYSTEM_POWER_STATE MinSystemState; +} +alias SYSTEM_POWER_LEVEL* PSYSTEM_POWER_LEVEL; + +struct SYSTEM_POWER_POLICY { + ULONG Revision; + POWER_ACTION_POLICY PowerButton; + POWER_ACTION_POLICY SleepButton; + POWER_ACTION_POLICY LidClose; + SYSTEM_POWER_STATE LidOpenWake; + ULONG Reserved; + POWER_ACTION_POLICY Idle; + ULONG IdleTimeout; + UCHAR IdleSensitivity; + UCHAR DynamicThrottle; + UCHAR[2] Spare2; + SYSTEM_POWER_STATE MinSleep; + SYSTEM_POWER_STATE MaxSleep; + SYSTEM_POWER_STATE ReducedLatencySleep; + ULONG WinLogonFlags; + ULONG Spare3; + ULONG DozeS4Timeout; + ULONG BroadcastCapacityResolution; + SYSTEM_POWER_LEVEL[NUM_DISCHARGE_POLICIES] DischargePolicy; + ULONG VideoTimeout; + BOOLEAN VideoDimDisplay; + ULONG[3] VideoReserved; + ULONG SpindownTimeout; + BOOLEAN OptimizeForPower; + UCHAR FanThrottleTolerance; + UCHAR ForcedThrottle; + UCHAR MinThrottle; + POWER_ACTION_POLICY OverThrottled; +} +alias SYSTEM_POWER_POLICY* PSYSTEM_POWER_POLICY; + +struct SYSTEM_POWER_CAPABILITIES { + BOOLEAN PowerButtonPresent; + BOOLEAN SleepButtonPresent; + BOOLEAN LidPresent; + BOOLEAN SystemS1; + BOOLEAN SystemS2; + BOOLEAN SystemS3; + BOOLEAN SystemS4; + BOOLEAN SystemS5; + BOOLEAN HiberFilePresent; + BOOLEAN FullWake; + BOOLEAN VideoDimPresent; + BOOLEAN ApmPresent; + BOOLEAN UpsPresent; + BOOLEAN ThermalControl; + BOOLEAN ProcessorThrottle; + UCHAR ProcessorMinThrottle; + UCHAR ProcessorMaxThrottle; + UCHAR[4] spare2; + BOOLEAN DiskSpinDown; + UCHAR[8] spare3; + BOOLEAN SystemBatteriesPresent; + BOOLEAN BatteriesAreShortTerm; + BATTERY_REPORTING_SCALE[3] BatteryScale; + SYSTEM_POWER_STATE AcOnLineWake; + SYSTEM_POWER_STATE SoftLidWake; + SYSTEM_POWER_STATE RtcWake; + SYSTEM_POWER_STATE MinDeviceWakeState; + SYSTEM_POWER_STATE DefaultLowLatencyWake; +} +alias SYSTEM_POWER_CAPABILITIES* PSYSTEM_POWER_CAPABILITIES; + +struct SYSTEM_BATTERY_STATE { + BOOLEAN AcOnLine; + BOOLEAN BatteryPresent; + BOOLEAN Charging; + BOOLEAN Discharging; + BOOLEAN[4] Spare1; + ULONG MaxCapacity; + ULONG RemainingCapacity; + ULONG Rate; + ULONG EstimatedTime; + ULONG DefaultAlert1; + ULONG DefaultAlert2; +} +alias SYSTEM_BATTERY_STATE* PSYSTEM_BATTERY_STATE; + +enum POWER_INFORMATION_LEVEL { + SystemPowerPolicyAc, + SystemPowerPolicyDc, + VerifySystemPolicyAc, + VerifySystemPolicyDc, + SystemPowerCapabilities, + SystemBatteryState, + SystemPowerStateHandler, + ProcessorStateHandler, + SystemPowerPolicyCurrent, + AdministratorPowerPolicy, + SystemReserveHiberFile, + ProcessorInformation, + SystemPowerInformation, + ProcessorStateHandler2, + LastWakeTime, + LastSleepTime, + SystemExecutionState, + SystemPowerStateNotifyHandler, + ProcessorPowerPolicyAc, + ProcessorPowerPolicyDc, + VerifyProcessorPowerPolicyAc, + VerifyProcessorPowerPolicyDc, + ProcessorPowerPolicyCurrent +} + +//#if 1 /* (WIN32_WINNT >= 0x0500) */ +struct SYSTEM_POWER_INFORMATION { + ULONG MaxIdlenessAllowed; + ULONG Idleness; + ULONG TimeRemaining; + UCHAR CoolingMode; +} +alias SYSTEM_POWER_INFORMATION* PSYSTEM_POWER_INFORMATION; +//#endif + +struct PROCESSOR_POWER_POLICY_INFO { + ULONG TimeCheck; + ULONG DemoteLimit; + ULONG PromoteLimit; + UCHAR DemotePercent; + UCHAR PromotePercent; + UCHAR[2] Spare; + uint _bf; + + bool AllowDemotion() { return cast(bool)(_bf & 1); } + bool AllowPromotion() { return cast(bool)(_bf & 2); } + + bool AllowDemotion(bool a) { _bf = (_bf & ~1) | a; return a; } + bool AllowPromotion(bool a) { _bf = (_bf & ~2) | (a << 1); return a; } +/+ + ULONG AllowDemotion : 1; + ULONG AllowPromotion : 1; + ULONG Reserved : 30; ++/ +} +alias PROCESSOR_POWER_POLICY_INFO* PPROCESSOR_POWER_POLICY_INFO; + +struct PROCESSOR_POWER_POLICY { + ULONG Revision; + UCHAR DynamicThrottle; + UCHAR[3] Spare; + ULONG Reserved; + ULONG PolicyCount; + PROCESSOR_POWER_POLICY_INFO[3] Policy; +} +alias PROCESSOR_POWER_POLICY* PPROCESSOR_POWER_POLICY; + +struct ADMINISTRATOR_POWER_POLICY { + SYSTEM_POWER_STATE MinSleep; + SYSTEM_POWER_STATE MaxSleep; + ULONG MinVideoTimeout; + ULONG MaxVideoTimeout; + ULONG MinSpindownTimeout; + ULONG MaxSpindownTimeout; +} +alias ADMINISTRATOR_POWER_POLICY* PADMINISTRATOR_POWER_POLICY; + +//}//#endif /* WINVER >= 0x0500 */ + +extern (Windows) { + alias void function(PVOID, DWORD, PVOID) PIMAGE_TLS_CALLBACK; + + static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + alias LONG function(PEXCEPTION_POINTERS) PVECTORED_EXCEPTION_HANDLER; + alias void function(PVOID, BOOLEAN) WAITORTIMERCALLBACKFUNC; + } +} + +static if (WINVER >= 0x501) { + enum HEAP_INFORMATION_CLASS { + HeapCompatibilityInformation + } + + enum ACTIVATION_CONTEXT_INFO_CLASS { + ActivationContextBasicInformation = 1, + ActivationContextDetailedInformation, + AssemblyDetailedInformationInActivationContext, + FileInformationInAssemblyOfAssemblyInActivationContext + } + + struct ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION { + DWORD ulFlags; + DWORD ulEncodedAssemblyIdentityLength; + DWORD ulManifestPathType; + DWORD ulManifestPathLength; + LARGE_INTEGER liManifestLastWriteTime; + DWORD ulPolicyPathType; + DWORD ulPolicyPathLength; + LARGE_INTEGER liPolicyLastWriteTime; + DWORD ulMetadataSatelliteRosterIndex; + DWORD ulManifestVersionMajor; + DWORD ulManifestVersionMinor; + DWORD ulPolicyVersionMajor; + DWORD ulPolicyVersionMinor; + DWORD ulAssemblyDirectoryNameLength; + PCWSTR lpAssemblyEncodedAssemblyIdentity; + PCWSTR lpAssemblyManifestPath; + PCWSTR lpAssemblyPolicyPath; + PCWSTR lpAssemblyDirectoryName; + } + alias ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION* + PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION; + alias CPtr!(ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION) + PCACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION; + + struct ACTIVATION_CONTEXT_DETAILED_INFORMATION { + DWORD dwFlags; + DWORD ulFormatVersion; + DWORD ulAssemblyCount; + DWORD ulRootManifestPathType; + DWORD ulRootManifestPathChars; + DWORD ulRootConfigurationPathType; + DWORD ulRootConfigurationPathChars; + DWORD ulAppDirPathType; + DWORD ulAppDirPathChars; + PCWSTR lpRootManifestPath; + PCWSTR lpRootConfigurationPath; + PCWSTR lpAppDirPath; + } + alias ACTIVATION_CONTEXT_DETAILED_INFORMATION* + PACTIVATION_CONTEXT_DETAILED_INFORMATION; + alias CPtr!(ACTIVATION_CONTEXT_DETAILED_INFORMATION) + PCACTIVATION_CONTEXT_DETAILED_INFORMATION; + + struct ACTIVATION_CONTEXT_QUERY_INDEX { + ULONG ulAssemblyIndex; + ULONG ulFileIndexInAssembly; + } + alias ACTIVATION_CONTEXT_QUERY_INDEX* PACTIVATION_CONTEXT_QUERY_INDEX; + alias CPtr!(ACTIVATION_CONTEXT_QUERY_INDEX) PCACTIVATION_CONTEXT_QUERY_INDEX; + + struct ASSEMBLY_FILE_DETAILED_INFORMATION { + DWORD ulFlags; + DWORD ulFilenameLength; + DWORD ulPathLength; + PCWSTR lpFileName; + PCWSTR lpFilePath; + } + alias ASSEMBLY_FILE_DETAILED_INFORMATION* + PASSEMBLY_FILE_DETAILED_INFORMATION; + alias CPtr!(ASSEMBLY_FILE_DETAILED_INFORMATION) + PCASSEMBLY_FILE_DETAILED_INFORMATION; +} + +version (Unicode) { + alias OSVERSIONINFOW OSVERSIONINFO; + alias OSVERSIONINFOEXW OSVERSIONINFOEX; +} else { + alias OSVERSIONINFOA OSVERSIONINFO; + alias OSVERSIONINFOEXA OSVERSIONINFOEX; +} + +alias OSVERSIONINFO* POSVERSIONINFO, LPOSVERSIONINFO; +alias OSVERSIONINFOEX* POSVERSIONINFOEX, LPOSVERSIONINFOEX; + + +static if (_WIN32_WINNT_ONLY && _WIN32_WINNT >= 0x500) { + extern (Windows) ULONGLONG VerSetConditionMask(ULONGLONG, DWORD, BYTE); +} + +version (Win64) { + const WORD IMAGE_NT_OPTIONAL_HDR_MAGIC = IMAGE_NT_OPTIONAL_HDR64_MAGIC; + + alias IMAGE_ORDINAL_FLAG64 IMAGE_ORDINAL_FLAG; + alias IMAGE_SNAP_BY_ORDINAL64 IMAGE_SNAP_BY_ORDINAL; + alias IMAGE_ORDINAL64 IMAGE_ORDINAL; + alias IMAGE_OPTIONAL_HEADER64 IMAGE_OPTIONAL_HEADER; + alias IMAGE_NT_HEADERS64 IMAGE_NT_HEADERS; + alias IMAGE_THUNK_DATA64 IMAGE_THUNK_DATA; + alias IMAGE_TLS_DIRECTORY64 IMAGE_TLS_DIRECTORY; +} else { + const WORD IMAGE_NT_OPTIONAL_HDR_MAGIC = IMAGE_NT_OPTIONAL_HDR32_MAGIC; + + alias IMAGE_ORDINAL_FLAG32 IMAGE_ORDINAL_FLAG; + alias IMAGE_ORDINAL32 IMAGE_ORDINAL; + alias IMAGE_SNAP_BY_ORDINAL32 IMAGE_SNAP_BY_ORDINAL; + alias IMAGE_OPTIONAL_HEADER32 IMAGE_OPTIONAL_HEADER; + alias IMAGE_NT_HEADERS32 IMAGE_NT_HEADERS; + alias IMAGE_THUNK_DATA32 IMAGE_THUNK_DATA; + alias IMAGE_TLS_DIRECTORY32 IMAGE_TLS_DIRECTORY; +} + +alias IMAGE_OPTIONAL_HEADER* PIMAGE_OPTIONAL_HEADER; +alias IMAGE_NT_HEADERS* PIMAGE_NT_HEADERS; +alias IMAGE_THUNK_DATA* PIMAGE_THUNK_DATA; +alias IMAGE_TLS_DIRECTORY* PIMAGE_TLS_DIRECTORY; + +// TODO: MinGW implements these in assembly. How to translate? +PVOID GetCurrentFiber(); +PVOID GetFiberData(); diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winperf.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winperf.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,152 @@ +/***********************************************************************\ +* winperf.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winperf; + +import win32.windef; +import win32.winbase; // for SYSTEMTIME + +const PERF_DATA_VERSION=1; +const PERF_DATA_REVISION=1; +const PERF_NO_INSTANCES=-1; +const PERF_SIZE_DWORD=0; +const PERF_SIZE_LARGE=256; +const PERF_SIZE_ZERO=512; +const PERF_SIZE_VARIABLE_LEN=768; +const PERF_TYPE_NUMBER=0; +const PERF_TYPE_COUNTER=1024; +const PERF_TYPE_TEXT=2048; +const PERF_TYPE_ZERO=0xC00; +const PERF_NUMBER_HEX=0; +const PERF_NUMBER_DECIMAL=0x10000; +const PERF_NUMBER_DEC_1000=0x20000; +const PERF_COUNTER_VALUE=0; +const PERF_COUNTER_RATE=0x10000; +const PERF_COUNTER_FRACTION=0x20000; +const PERF_COUNTER_BASE=0x30000; +const PERF_COUNTER_ELAPSED=0x40000; +const PERF_COUNTER_QUEUELEN=0x50000; +const PERF_COUNTER_HISTOGRAM=0x60000; +const PERF_TEXT_UNICODE=0; +const PERF_TEXT_ASCII=0x10000; +const PERF_TIMER_TICK=0; +const PERF_TIMER_100NS=0x100000; +const PERF_OBJECT_TIMER=0x200000; +const PERF_DELTA_COUNTER=0x400000; +const PERF_DELTA_BASE=0x800000; +const PERF_INVERSE_COUNTER=0x1000000; +const PERF_MULTI_COUNTER=0x2000000; +const PERF_DISPLAY_NO_SUFFIX=0; +const PERF_DISPLAY_PER_SEC=0x10000000; +const PERF_DISPLAY_PERCENT=0x20000000; +const PERF_DISPLAY_SECONDS=0x30000000; +const PERF_DISPLAY_NOSHOW=0x40000000; +const PERF_COUNTER_HISTOGRAM_TYPE=0x80000000; +const PERF_NO_UNIQUE_ID=(-1); +const PERF_DETAIL_NOVICE=100; +const PERF_DETAIL_ADVANCED=200; +const PERF_DETAIL_EXPERT=300; +const PERF_DETAIL_WIZARD=400; +const PERF_COUNTER_COUNTER=(PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PER_SEC); +const PERF_COUNTER_TIMER=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PERCENT); +const PERF_COUNTER_QUEUELEN_TYPE=(PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_QUEUELEN|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_NO_SUFFIX); +const PERF_COUNTER_BULK_COUNT=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_PER_SEC); +const PERF_COUNTER_TEXT=(PERF_SIZE_VARIABLE_LEN|PERF_TYPE_TEXT|PERF_TEXT_UNICODE|PERF_DISPLAY_NO_SUFFIX); +const PERF_COUNTER_RAWCOUNT=(PERF_SIZE_DWORD|PERF_TYPE_NUMBER|PERF_NUMBER_DECIMAL|PERF_DISPLAY_NO_SUFFIX); +const PERF_COUNTER_LARGE_RAWCOUNT=(PERF_SIZE_LARGE|PERF_TYPE_NUMBER|PERF_NUMBER_DECIMAL|PERF_DISPLAY_NO_SUFFIX); +const PERF_COUNTER_RAWCOUNT_HEX=(PERF_SIZE_DWORD|PERF_TYPE_NUMBER|PERF_NUMBER_HEX|PERF_DISPLAY_NO_SUFFIX); +const PERF_COUNTER_LARGE_RAWCOUNT_HEX=(PERF_SIZE_LARGE|PERF_TYPE_NUMBER|PERF_NUMBER_HEX|PERF_DISPLAY_NO_SUFFIX); +const PERF_SAMPLE_FRACTION=(PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DELTA_COUNTER|PERF_DELTA_BASE|PERF_DISPLAY_PERCENT); +const PERF_SAMPLE_COUNTER=(PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_DISPLAY_NO_SUFFIX); +const PERF_COUNTER_NODATA=(PERF_SIZE_ZERO|PERF_DISPLAY_NOSHOW); +const PERF_COUNTER_TIMER_INV=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_TICK|PERF_DELTA_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT); +const PERF_SAMPLE_BASE=(PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|1); +const PERF_AVERAGE_TIMER=(PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_SECONDS); +const PERF_AVERAGE_BASE=(PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|2); +const PERF_AVERAGE_BULK=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_NOSHOW); +const PERF_100NSEC_TIMER=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_DELTA_COUNTER|PERF_DISPLAY_PERCENT); +const PERF_100NSEC_TIMER_INV=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_DELTA_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT); +const PERF_COUNTER_MULTI_TIMER=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_DELTA_COUNTER|PERF_TIMER_TICK|PERF_MULTI_COUNTER|PERF_DISPLAY_PERCENT); +const PERF_COUNTER_MULTI_TIMER_INV=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_RATE|PERF_DELTA_COUNTER|PERF_MULTI_COUNTER|PERF_TIMER_TICK|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT); +const PERF_COUNTER_MULTI_BASE=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_MULTI_COUNTER|PERF_DISPLAY_NOSHOW); +const PERF_100NSEC_MULTI_TIMER=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_DELTA_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_MULTI_COUNTER|PERF_DISPLAY_PERCENT); +const PERF_100NSEC_MULTI_TIMER_INV=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_DELTA_COUNTER|PERF_COUNTER_RATE|PERF_TIMER_100NS|PERF_MULTI_COUNTER|PERF_INVERSE_COUNTER|PERF_DISPLAY_PERCENT); +const PERF_RAW_FRACTION=(PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_FRACTION|PERF_DISPLAY_PERCENT); +const PERF_RAW_BASE=(PERF_SIZE_DWORD|PERF_TYPE_COUNTER|PERF_COUNTER_BASE|PERF_DISPLAY_NOSHOW|3); +const PERF_ELAPSED_TIME=(PERF_SIZE_LARGE|PERF_TYPE_COUNTER|PERF_COUNTER_ELAPSED|PERF_OBJECT_TIMER|PERF_DISPLAY_SECONDS); + +struct PERF_DATA_BLOCK { + WCHAR Signature[4]; + DWORD LittleEndian; + DWORD Version; + DWORD Revision; + DWORD TotalByteLength; + DWORD HeaderLength; + DWORD NumObjectTypes; + LONG DefaultObject; + SYSTEMTIME SystemTime; + LARGE_INTEGER PerfTime; + LARGE_INTEGER PerfFreq; + LARGE_INTEGER PerfTime100nSec; + DWORD SystemNameLength; + DWORD SystemNameOffset; +} +alias PERF_DATA_BLOCK * PPERF_DATA_BLOCK; + +struct PERF_OBJECT_TYPE { + DWORD TotalByteLength; + DWORD DefinitionLength; + DWORD HeaderLength; + DWORD ObjectNameTitleIndex; + LPWSTR ObjectNameTitle; + DWORD ObjectHelpTitleIndex; + LPWSTR ObjectHelpTitle; + DWORD DetailLevel; + DWORD NumCounters; + LONG DefaultCounter; + LONG NumInstances; + DWORD CodePage; + LARGE_INTEGER PerfTime; + LARGE_INTEGER PerfFreq; +} +alias PERF_OBJECT_TYPE * PPERF_OBJECT_TYPE; + +struct PERF_COUNTER_DEFINITION { + DWORD ByteLength; + DWORD CounterNameTitleIndex; + LPWSTR CounterNameTitle; + DWORD CounterHelpTitleIndex; + LPWSTR CounterHelpTitle; + LONG DefaultScale; + DWORD DetailLevel; + DWORD CounterType; + DWORD CounterSize; + DWORD CounterOffset; +} +alias PERF_COUNTER_DEFINITION * PPERF_COUNTER_DEFINITION; + +struct PERF_INSTANCE_DEFINITION { + DWORD ByteLength; + DWORD ParentObjectTitleIndex; + DWORD ParentObjectInstance; + LONG UniqueID; + DWORD NameOffset; + DWORD NameLength; +} +alias PERF_INSTANCE_DEFINITION * PPERF_INSTANCE_DEFINITION; + +struct PERF_COUNTER_BLOCK { + DWORD ByteLength; +} +alias PERF_COUNTER_BLOCK * PPERF_COUNTER_BLOCK; + +extern (Windows): +alias DWORD function (LPWSTR) PM_OPEN_PROC; +alias DWORD function (LPWSTR,PVOID*,PDWORD,PDWORD) PM_COLLECT_PROC; +alias DWORD function () PM_CLOSE_PROC; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winreg.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winreg.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,258 @@ +/***********************************************************************\ +* winreg.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winreg; +pragma(lib, "advapi32.lib"); + +private import win32.w32api, win32.winbase, win32.windef; + +const HKEY + HKEY_CLASSES_ROOT = cast(HKEY) 0x80000000, + HKEY_CURRENT_USER = cast(HKEY) 0x80000001, + HKEY_LOCAL_MACHINE = cast(HKEY) 0x80000002, + HKEY_USERS = cast(HKEY) 0x80000003, + HKEY_PERFORMANCE_DATA = cast(HKEY) 0x80000004, + HKEY_CURRENT_CONFIG = cast(HKEY) 0x80000005, + HKEY_DYN_DATA = cast(HKEY) 0x80000006; + +enum : DWORD { + REG_OPTION_NON_VOLATILE, + REG_OPTION_VOLATILE +} + +enum : DWORD { + REG_CREATED_NEW_KEY = 1, + REG_OPENED_EXISTING_KEY +} + +enum : DWORD { + REG_NONE = 0, + REG_SZ, + REG_EXPAND_SZ, + REG_BINARY, + REG_DWORD_LITTLE_ENDIAN, + REG_DWORD = REG_DWORD_LITTLE_ENDIAN, + REG_DWORD_BIG_ENDIAN, + REG_LINK, + REG_MULTI_SZ, + REG_RESOURCE_LIST, + REG_FULL_RESOURCE_DESCRIPTOR, + REG_RESOURCE_REQUIREMENTS_LIST, + REG_QWORD_LITTLE_ENDIAN, + REG_QWORD = REG_QWORD_LITTLE_ENDIAN +} + +const DWORD + REG_NOTIFY_CHANGE_NAME = 1, + REG_NOTIFY_CHANGE_ATTRIBUTES = 2, + REG_NOTIFY_CHANGE_LAST_SET = 4, + REG_NOTIFY_CHANGE_SECURITY = 8; + +alias ACCESS_MASK REGSAM; + +struct VALENTA { + LPSTR ve_valuename; + DWORD ve_valuelen; + DWORD ve_valueptr; + DWORD ve_type; +} +alias VALENTA* PVALENTA; + +struct VALENTW { + LPWSTR ve_valuename; + DWORD ve_valuelen; + DWORD ve_valueptr; + DWORD ve_type; +} +alias VALENTW* PVALENTW; + +// RRF - Registry Routine Flags (for RegGetValue) +static if (WINVER >= 0x600) { + enum : DWORD { + RRF_RT_REG_NONE = 0x00000001, + RRF_RT_REG_SZ = 0x00000002, + RRF_RT_REG_EXPAND_SZ = 0x00000004, + RRF_RT_REG_BINARY = 0x00000008, + RRF_RT_REG_DWORD = 0x00000010, + RRF_RT_REG_MULTI_SZ = 0x00000020, + RRF_RT_REG_QWORD = 0x00000040, + RRF_RT_DWORD = RRF_RT_REG_BINARY | RRF_RT_REG_DWORD, + RRF_RT_QWORD = RRF_RT_REG_BINARY | RRF_RT_REG_QWORD, + RRF_RT_ANY = 0x0000FFFF, + RRF_NOEXPAND = 0x10000000, + RRF_ZEROONFAILURE = 0x20000000 + } +} + +extern (Windows) { + LONG RegCloseKey(HKEY); + LONG RegConnectRegistryA(LPCSTR, HKEY, PHKEY); + LONG RegConnectRegistryW(LPCWSTR, HKEY, PHKEY); + LONG RegCreateKeyExA(HKEY, LPCSTR, DWORD, LPSTR, DWORD, REGSAM, + LPSECURITY_ATTRIBUTES, PHKEY, PDWORD); + LONG RegCreateKeyExW(HKEY, LPCWSTR, DWORD, LPWSTR, DWORD, REGSAM, + LPSECURITY_ATTRIBUTES, PHKEY, PDWORD); + LONG RegDeleteKeyA(HKEY, LPCSTR); + LONG RegDeleteKeyW(HKEY, LPCWSTR); + LONG RegDeleteValueA(HKEY, LPCSTR); + LONG RegDeleteValueW(HKEY, LPCWSTR); + LONG RegEnumKeyExA(HKEY, DWORD, LPSTR, PDWORD, PDWORD, LPSTR, PDWORD, + PFILETIME); + LONG RegEnumKeyExW(HKEY, DWORD, LPWSTR, PDWORD, PDWORD, LPWSTR, PDWORD, + PFILETIME); + LONG RegEnumValueA(HKEY, DWORD, LPSTR, PDWORD, PDWORD, PDWORD, LPBYTE, + PDWORD); + LONG RegEnumValueW(HKEY, DWORD, LPWSTR, PDWORD, PDWORD, PDWORD, LPBYTE, + PDWORD); + LONG RegFlushKey(HKEY); + LONG RegLoadKeyA(HKEY, LPCSTR, LPCSTR); + LONG RegLoadKeyW(HKEY, LPCWSTR, LPCWSTR); + LONG RegOpenKeyExA(HKEY, LPCSTR, DWORD, REGSAM, PHKEY); + LONG RegOpenKeyExW(HKEY, LPCWSTR, DWORD, REGSAM, PHKEY); + LONG RegQueryInfoKeyA(HKEY, LPSTR, PDWORD, PDWORD, PDWORD, PDWORD, + PDWORD, PDWORD, PDWORD, PDWORD, PDWORD, PFILETIME); + LONG RegQueryInfoKeyW(HKEY, LPWSTR, PDWORD, PDWORD, PDWORD, PDWORD, + PDWORD, PDWORD, PDWORD, PDWORD, PDWORD, PFILETIME); + LONG RegQueryMultipleValuesA(HKEY, PVALENTA, DWORD, LPSTR, LPDWORD); + LONG RegQueryMultipleValuesW(HKEY, PVALENTW, DWORD, LPWSTR, LPDWORD); + LONG RegQueryValueExA(HKEY, LPCSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD); + LONG RegQueryValueExW(HKEY, LPCWSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD); + LONG RegReplaceKeyA(HKEY, LPCSTR, LPCSTR, LPCSTR); + LONG RegReplaceKeyW(HKEY, LPCWSTR, LPCWSTR, LPCWSTR); + LONG RegSaveKeyA(HKEY, LPCSTR, LPSECURITY_ATTRIBUTES); + LONG RegSaveKeyW(HKEY, LPCWSTR, LPSECURITY_ATTRIBUTES); + LONG RegSetKeySecurity(HKEY, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR); + LONG RegSetValueExA(HKEY, LPCSTR, DWORD, DWORD, BYTE*, DWORD); + LONG RegSetValueExW(HKEY, LPCWSTR, DWORD, DWORD, BYTE*, DWORD); + LONG RegUnLoadKeyA(HKEY, LPCSTR); + LONG RegUnLoadKeyW(HKEY, LPCWSTR); + static if (_WIN32_WINDOWS >= 0x410) { + LONG RegNotifyChangeKeyValue(HKEY, BOOL, DWORD, HANDLE, BOOL); + } + + static if (_WIN32_WINNT_ONLY) { + BOOL AbortSystemShutdownA(LPCSTR); + BOOL AbortSystemShutdownW(LPCWSTR); + BOOL InitiateSystemShutdownA(LPSTR, LPSTR, DWORD, BOOL, BOOL); + BOOL InitiateSystemShutdownW(LPWSTR, LPWSTR, DWORD, BOOL, BOOL); + LONG RegGetKeySecurity(HKEY, SECURITY_INFORMATION, + PSECURITY_DESCRIPTOR, PDWORD); + LONG RegRestoreKeyA(HKEY, LPCSTR, DWORD); + LONG RegRestoreKeyW(HKEY, LPCWSTR, DWORD); + LONG RegSetKeySecurity(HKEY, SECURITY_INFORMATION, + PSECURITY_DESCRIPTOR); + + static if (_WIN32_WINNT >= 0x500) { + LONG RegDisablePredefinedCache(); + LONG RegOpenCurrentUser(REGSAM, PHKEY); + LONG RegOpenUserClassesRoot(HANDLE, DWORD, REGSAM, PHKEY); + } + + static if (_WIN32_WINNT >= 0x501) { + LONG RegSaveKeyExA(HKEY, LPCSTR, LPSECURITY_ATTRIBUTES, DWORD); + LONG RegSaveKeyExW(HKEY, LPCWSTR, LPSECURITY_ATTRIBUTES, DWORD); + } + + static if (_WIN32_WINNT >= 0x600) { + LONG RegGetValueA(HKEY hkey, LPCSTR lpSubKey, LPCSTR lpValue, + DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData); + LONG RegGetValueW(HKEY hkey, LPCWSTR lpSubKey, LPCWSTR lpValue, + DWORD dwFlags, LPDWORD pdwType, PVOID pvData, LPDWORD pcbData); + } + } + + deprecated { + LONG RegCreateKeyA(HKEY, LPCSTR, PHKEY); + LONG RegCreateKeyW(HKEY, LPCWSTR, PHKEY); + LONG RegEnumKeyA(HKEY, DWORD, LPSTR, DWORD); + LONG RegEnumKeyW(HKEY, DWORD, LPWSTR, DWORD); + LONG RegOpenKeyA(HKEY, LPCSTR, PHKEY); + LONG RegOpenKeyW(HKEY, LPCWSTR, PHKEY); + LONG RegQueryValueA(HKEY, LPCSTR, LPSTR, PLONG); + LONG RegQueryValueW(HKEY, LPCWSTR, LPWSTR, PLONG); + LONG RegSetValueA(HKEY, LPCSTR, DWORD, LPCSTR, DWORD); + LONG RegSetValueW(HKEY, LPCWSTR, DWORD, LPCWSTR, DWORD); + } +} + +version (Unicode) { + alias VALENTW VALENT; + alias RegConnectRegistryW RegConnectRegistry; + alias RegCreateKeyExW RegCreateKeyEx; + alias RegDeleteKeyW RegDeleteKey; + alias RegDeleteValueW RegDeleteValue; + alias RegEnumKeyExW RegEnumKeyEx; + alias RegEnumValueW RegEnumValue; + alias RegLoadKeyW RegLoadKey; + alias RegOpenKeyExW RegOpenKeyEx; + alias RegQueryInfoKeyW RegQueryInfoKey; + alias RegQueryMultipleValuesW RegQueryMultipleValues; + alias RegQueryValueExW RegQueryValueEx; + alias RegReplaceKeyW RegReplaceKey; + alias RegSaveKeyW RegSaveKey; + alias RegSetValueExW RegSetValueEx; + alias RegUnLoadKeyW RegUnLoadKey; + + static if (_WIN32_WINNT_ONLY) { + alias AbortSystemShutdownW AbortSystemShutdown; + alias InitiateSystemShutdownW InitiateSystemShutdown; + alias RegRestoreKeyW RegRestoreKey; + static if (_WIN32_WINNT >= 0x501) { + alias RegSaveKeyExA RegSaveKeyEx; + } + static if (_WIN32_WINNT >= 0x600) { + alias RegGetValueW RegGetValue; + } + } + deprecated { + alias RegCreateKeyW RegCreateKey; + alias RegEnumKeyW RegEnumKey; + alias RegOpenKeyW RegOpenKey; + alias RegQueryValueW RegQueryValue; + alias RegSetValueW RegSetValue; + } +} else { + alias VALENTA VALENT; + alias RegConnectRegistryA RegConnectRegistry; + alias RegCreateKeyExA RegCreateKeyEx; + alias RegDeleteKeyA RegDeleteKey; + alias RegDeleteValueA RegDeleteValue; + alias RegEnumKeyExA RegEnumKeyEx; + alias RegEnumValueA RegEnumValue; + alias RegLoadKeyA RegLoadKey; + alias RegOpenKeyExA RegOpenKeyEx; + alias RegQueryInfoKeyA RegQueryInfoKey; + alias RegQueryMultipleValuesA RegQueryMultipleValues; + alias RegQueryValueExA RegQueryValueEx; + alias RegReplaceKeyA RegReplaceKey; + alias RegSaveKeyA RegSaveKey; + alias RegSetValueExA RegSetValueEx; + alias RegUnLoadKeyA RegUnLoadKey; + static if (_WIN32_WINNT_ONLY) { + alias AbortSystemShutdownA AbortSystemShutdown; + alias InitiateSystemShutdownA InitiateSystemShutdown; + alias RegRestoreKeyW RegRestoreKey; + static if (_WIN32_WINNT >= 0x501) { + alias RegSaveKeyExA RegSaveKeyEx; + } + static if (_WIN32_WINNT >= 0x600) { + alias RegGetValueA RegGetValue; + } + } + deprecated { + alias RegCreateKeyA RegCreateKey; + alias RegEnumKeyA RegEnumKey; + alias RegOpenKeyA RegOpenKey; + alias RegQueryValueA RegQueryValue; + alias RegSetValueA RegSetValue; + } +} + +alias VALENT* PVALENT; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winsock.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winsock.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,583 @@ +/***********************************************************************\ +* winsock.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +\***********************************************************************/ +module win32.winsock; + +/* + Definitions for winsock 1.1 + + Portions Copyright (c) 1980, 1983, 1988, 1993 + The Regents of the University of California. All rights reserved. + + Portions Copyright (c) 1993 by Digital Equipment Corporation. + */ + +/* DRK: This module should not be included if -version=Win32_Winsock2 has + * been set. If it has, assert. I think it's better that way than letting + * the user believe that it's worked. + * + * SG: It has now been changed so that winsock2 is the default, and + * -version=Win32_Winsock1 must be set to use winsock. + */ +version(Win32_Winsock1) {} +else { + pragma(msg, "Cannot use win32.winsock without " + ~ "Win32_Winsock1 defined."); + static assert(false); +} + +import win32.windef; + +alias char u_char; +alias ushort u_short; +alias uint u_int, u_long, SOCKET; + +const size_t FD_SETSIZE = 64; + +// shutdown() how types +enum : int { + SD_RECEIVE, + SD_SEND, + SD_BOTH +} + +struct FD_SET { + u_int fd_count; + SOCKET[FD_SETSIZE] fd_array; + + static void opCall(SOCKET fd, FD_SET* set) { + if (set.fd_count < FD_SETSIZE) set.fd_array[set.fd_count++] = fd; + } +} +alias FD_SET* PFD_SET, LPFD_SET; + +extern(Pascal) int __WSAFDIsSet(SOCKET, FD_SET*); +alias __WSAFDIsSet FD_ISSET; + +void FD_CLR(SOCKET fd, FD_SET* set) { + for (u_int i = 0; i < set.fd_count; i++) { + if (set.fd_array[i] == fd) { + while (i < set.fd_count - 1) { + set.fd_array[i] = set.fd_array[i+1]; + i++; + } + set.fd_count--; + break; + } + } +} + +/+void FD_SET(SOCKET fd, FD_SET* set) { + if (set.fd_count < FD_SETSIZE) set.fd_array[set.fd_count++] = fd; +}+/ + +void FD_ZERO(FD_SET* set) { + set.fd_count = 0; +} + + +struct TIMEVAL { + int tv_sec; + int tv_usec; + + int opCmp(TIMEVAL tv) { + if (tv_sec < tv.tv_sec) return -1; + if (tv_sec > tv.tv_sec) return 1; + if (tv_usec < tv.tv_usec) return -1; + if (tv_usec > tv.tv_usec) return 1; + return 0; + } +} +alias TIMEVAL* PTIMEVAL, LPTIMEVAL; + +bool timerisset(TIMEVAL tvp) { + return tvp.tv_sec || tvp.tv_usec; +} + +void timerclear(inout TIMEVAL tvp) { + tvp.tv_sec = tvp.tv_usec = 0; +} + +struct HOSTENT { + char* h_name; + char** h_aliases; + short h_addrtype; + short h_length; + char** h_addr_list; + + char* h_addr() { return h_addr_list[0]; } + char* h_addr(char* h) { return h_addr_list[0] = h; } +} +alias HOSTENT* PHOSTENT, LPHOSTENT; + +struct LINGER { + u_short l_onoff; + u_short l_linger; +} +alias LINGER* PLINGER, LPLINGER; + +// TOTHINKABOUT: do we need these, or are they just for internal use? +/+ +#define IOCPARM_MASK 0x7f +#define IOC_VOID 0x20000000 +#define IOC_OUT 0x40000000 +#define IOC_IN 0x80000000 +#define IOC_INOUT (IOC_IN|IOC_OUT) + +#define _IO(x,y) (IOC_VOID|((x)<<8)|(y)) +#define _IOR(x,y,t) (IOC_OUT|(((int)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) +#define _IOW(x,y,t) (IOC_IN|(((int)sizeof(t)&IOCPARM_MASK)<<16)|((x)<<8)|(y)) + +#define FIONBIO _IOW('f', 126, u_long) +#define FIONREAD _IOR('f', 127, u_long) +#define FIOASYNC _IOW('f', 125, u_long) +#define SIOCSHIWAT _IOW('s', 0, u_long) +#define SIOCGHIWAT _IOR('s', 1, u_long) +#define SIOCSLOWAT _IOW('s', 2, u_long) +#define SIOCGLOWAT _IOR('s', 3, u_long) +#define SIOCATMARK _IOR('s', 7, u_long) ++/ + +enum : DWORD { + FIONBIO = 0x8004667E, + FIONREAD = 0x4004667F, + FIOASYNC = 0x8004667D, + SIOCSHIWAT = 0x80047300, + SIOCGHIWAT = 0x40047301, + SIOCSLOWAT = 0x80047302, + SIOCGLOWAT = 0x40047303, + SIOCATMARK = 0x40047307 +} + +struct netent { + char* n_name; + char** n_aliases; + short n_addrtype; + u_long n_net; +} + +struct SERVENT { + char* s_name; + char** s_aliases; + short s_port; + char* s_proto; +} +alias SERVENT* PSERVENT, LPSERVENT; + +struct PROTOENT { + char* p_name; + char** p_aliases; + short p_proto; +} +alias PROTOENT* PPROTOENT, LPPROTOENT; + +enum : int { + IPPROTO_IP = 0, + IPPROTO_ICMP = 1, + IPPROTO_IGMP = 2, + IPPROTO_GGP = 3, + IPPROTO_TCP = 6, + IPPROTO_PUP = 12, + IPPROTO_UDP = 17, + IPPROTO_IDP = 22, + IPPROTO_ND = 77, + IPPROTO_RAW = 255, + IPPROTO_MAX = 256 +} + +// These are not documented on the MSDN site +enum { + IPPORT_ECHO = 7, + IPPORT_DISCARD = 9, + IPPORT_SYSTAT = 11, + IPPORT_DAYTIME = 13, + IPPORT_NETSTAT = 15, + IPPORT_FTP = 21, + IPPORT_TELNET = 23, + IPPORT_SMTP = 25, + IPPORT_TIMESERVER = 37, + IPPORT_NAMESERVER = 42, + IPPORT_WHOIS = 43, + IPPORT_MTP = 57, + IPPORT_TFTP = 69, + IPPORT_RJE = 77, + IPPORT_FINGER = 79, + IPPORT_TTYLINK = 87, + IPPORT_SUPDUP = 95, + IPPORT_EXECSERVER = 512, + IPPORT_LOGINSERVER = 513, + IPPORT_CMDSERVER = 514, + IPPORT_EFSSERVER = 520, + IPPORT_BIFFUDP = 512, + IPPORT_WHOSERVER = 513, + IPPORT_ROUTESERVER = 520, + IPPORT_RESERVED = 1024 +} + +// These are not documented on the MSDN site +enum { + IMPLINK_IP = 155, + IMPLINK_LOWEXPER = 156, + IMPLINK_HIGHEXPER = 158 +} + +struct IN_ADDR { + union { + struct { u_char s_net, s_host, s_lh, s_impno; } + struct { u_short s_w1, s_imp; } + u_long s_addr; + } +} +alias IN_ADDR* PIN_ADDR, LPIN_ADDR; + +// IN_CLASSx are not used anywhere or documented on MSDN. +bool IN_CLASSA(int i) { + return (i & 0x80000000) == 0; +} + +const IN_CLASSA_NET = 0xff000000; +const IN_CLASSA_NSHIFT = 24; +const IN_CLASSA_HOST = 0x00ffffff; +const IN_CLASSA_MAX = 128; + +bool IN_CLASSB(int i) { + return (i & 0xC0000000) == 0x80000000; +} + +const IN_CLASSB_NET = 0xffff0000; +const IN_CLASSB_NSHIFT = 16; +const IN_CLASSB_HOST = 0x0000ffff; +const IN_CLASSB_MAX = 65536; + +bool IN_CLASSC(int i) { + return (i & 0xE0000000) == 0xC0000000; +} + +const IN_CLASSC_NET = 0xffffff00; +const IN_CLASSC_NSHIFT = 8; +const IN_CLASSC_HOST = 0x000000ff; + +const u_long + INADDR_ANY = 0, + INADDR_LOOPBACK = 0x7F000001, + INADDR_BROADCAST = 0xFFFFFFFF, + INADDR_NONE = 0xFFFFFFFF; + +struct SOCKADDR_IN { + short sin_family; + u_short sin_port; + IN_ADDR sin_addr; + char[8] sin_zero; +} +alias SOCKADDR_IN* PSOCKADDR_IN, LPSOCKADDR_IN; + +const size_t + WSADESCRIPTION_LEN = 256, + WSASYS_STATUS_LEN = 128; + +struct WSADATA { + WORD wVersion; + WORD wHighVersion; + char[WSADESCRIPTION_LEN+1] szDescription; + char[WSASYS_STATUS_LEN+1] szSystemStatus; + ushort iMaxSockets; + ushort iMaxUdpDg; + char* lpVendorInfo; +} +alias WSADATA* LPWSADATA; + +// This is not documented on the MSDN site +const IP_OPTIONS = 1; + +const int + SO_DEBUG = 1, + SO_ACCEPTCONN = 2, + SO_REUSEADDR = 4, + SO_KEEPALIVE = 8, + SO_DONTROUTE = 16, + SO_BROADCAST = 32, + SO_USELOOPBACK = 64, + SO_LINGER = 128, + SO_OOBINLINE = 256, + SO_DONTLINGER = ~SO_LINGER; + +enum : int { + SO_SNDBUF = 0x1001, + SO_RCVBUF, + SO_SNDLOWAT, + SO_RCVLOWAT, + SO_SNDTIMEO, + SO_RCVTIMEO, + SO_ERROR, + SO_TYPE // = 0x1008 +} + +/* + * Note that the next 5 IP defines are specific to WinSock 1.1 (wsock32.dll). + * They will cause errors or unexpected results if used with the + * (gs)etsockopts exported from the WinSock 2 lib, ws2_32.dll. Refer ws2tcpip.h. + */ +enum : int { + IP_MULTICAST_IF = 2, + IP_MULTICAST_TTL, + IP_MULTICAST_LOOP, + IP_ADD_MEMBERSHIP, + IP_DROP_MEMBERSHIP +} + +// These are not documented on the MSDN site +const IP_DEFAULT_MULTICAST_TTL = 1; +const IP_DEFAULT_MULTICAST_LOOP = 1; +const IP_MAX_MEMBERSHIPS = 20; + +struct ip_mreq { + IN_ADDR imr_multiaddr; + IN_ADDR imr_interface; +} + +const SOCKET INVALID_SOCKET = uint.max; +const int SOCKET_ERROR = -1; + +enum : int { + SOCK_STREAM = 1, + SOCK_DGRAM, + SOCK_RAW, + SOCK_RDM, + SOCK_SEQPACKET +} + +const int TCP_NODELAY = 1; + +enum : int { + AF_UNSPEC, + AF_UNIX, + AF_INET, + AF_IMPLINK, + AF_PUP, + AF_CHAOS, + AF_IPX, // = 6 + AF_NS = 6, + AF_ISO, + AF_OSI = AF_ISO, + AF_ECMA, + AF_DATAKIT, + AF_CCITT, + AF_SNA, + AF_DECnet, + AF_DLI, + AF_LAT, + AF_HYLINK, + AF_APPLETALK, + AF_NETBIOS, + AF_VOICEVIEW, + AF_FIREFOX, + AF_UNKNOWN1, + AF_BAN, + AF_ATM, + AF_INET6, + AF_MAX // = 24 +} + +struct SOCKADDR { + u_short sa_family; + char[14] sa_data; +} +alias SOCKADDR* PSOCKADDR, LPSOCKADDR; + +struct sockproto { + u_short sp_family; + u_short sp_protocol; +} + +enum : int { + PF_UNSPEC = AF_UNSPEC, + PF_UNIX = AF_UNIX, + PF_INET = AF_INET, + PF_IMPLINK = AF_IMPLINK, + PF_PUP = AF_PUP, + PF_CHAOS = AF_CHAOS, + PF_NS = AF_NS, + PF_IPX = AF_IPX, + PF_ISO = AF_ISO, + PF_OSI = AF_OSI, + PF_ECMA = AF_ECMA, + PF_DATAKIT = AF_DATAKIT, + PF_CCITT = AF_CCITT, + PF_SNA = AF_SNA, + PF_DECnet = AF_DECnet, + PF_DLI = AF_DLI, + PF_LAT = AF_LAT, + PF_HYLINK = AF_HYLINK, + PF_APPLETALK = AF_APPLETALK, + PF_VOICEVIEW = AF_VOICEVIEW, + PF_FIREFOX = AF_FIREFOX, + PF_UNKNOWN1 = AF_UNKNOWN1, + PF_BAN = AF_BAN, + PF_ATM = AF_ATM, + PF_INET6 = AF_INET6, + PF_MAX = AF_MAX +} + +const int SOL_SOCKET = 0xFFFF; + +const int SOMAXCONN = 5; + +const int + MSG_OOB = 1, + MSG_PEEK = 2, + MSG_DONTROUTE = 4, + MSG_MAXIOVLEN = 16, + MSG_PARTIAL = 0x8000; + +const size_t MAXGETHOSTSTRUCT = 1024; + +const int + FD_READ = 1, + FD_WRITE = 2, + FD_OOB = 4, + FD_ACCEPT = 8, + FD_CONNECT = 16, + FD_CLOSE = 32; + +enum : int { + WSABASEERR = 10000, + WSAEINTR = 10004, + WSAEBADF = 10009, + WSAEACCES = 10013, + WSAEFAULT = 10014, + WSAEINVAL = 10022, + WSAEMFILE = 10024, + WSAEWOULDBLOCK = 10035, + WSAEINPROGRESS = 10036, + WSAEALREADY = 10037, + WSAENOTSOCK = 10038, + WSAEDESTADDRREQ = 10039, + WSAEMSGSIZE = 10040, + WSAEPROTOTYPE = 10041, + WSAENOPROTOOPT = 10042, + WSAEPROTONOSUPPORT = 10043, + WSAESOCKTNOSUPPORT = 10044, + WSAEOPNOTSUPP = 10045, + WSAEPFNOSUPPORT = 10046, + WSAEAFNOSUPPORT = 10047, + WSAEADDRINUSE = 10048, + WSAEADDRNOTAVAIL = 10049, + WSAENETDOWN = 10050, + WSAENETUNREACH = 10051, + WSAENETRESET = 10052, + WSAECONNABORTED = 10053, + WSAECONNRESET = 10054, + WSAENOBUFS = 10055, + WSAEISCONN = 10056, + WSAENOTCONN = 10057, + WSAESHUTDOWN = 10058, + WSAETOOMANYREFS = 10059, + WSAETIMEDOUT = 10060, + WSAECONNREFUSED = 10061, + WSAELOOP = 10062, + WSAENAMETOOLONG = 10063, + WSAEHOSTDOWN = 10064, + WSAEHOSTUNREACH = 10065, + WSAENOTEMPTY = 10066, + WSAEPROCLIM = 10067, + WSAEUSERS = 10068, + WSAEDQUOT = 10069, + WSAESTALE = 10070, + WSAEREMOTE = 10071, + WSAEDISCON = 10101, + WSASYSNOTREADY = 10091, + WSAVERNOTSUPPORTED = 10092, + WSANOTINITIALISED = 10093, + WSAHOST_NOT_FOUND = 11001, + WSATRY_AGAIN = 11002, + WSANO_RECOVERY = 11003, + WSANO_DATA = 11004, + WSANO_ADDRESS = WSANO_DATA +} + +alias WSAGetLastError h_errno; + +enum : int { + HOST_NOT_FOUND = WSAHOST_NOT_FOUND, + TRY_AGAIN = WSATRY_AGAIN, + NO_RECOVERY = WSANO_RECOVERY, + NO_DATA = WSANO_DATA, + NO_ADDRESS = WSANO_ADDRESS +} + +extern (Pascal) { + SOCKET accept(SOCKET, SOCKADDR*, int*); + int bind(SOCKET, SOCKADDR*, int); + int closesocket(SOCKET); + int connect(SOCKET, SOCKADDR*, int); + int ioctlsocket(SOCKET, int, u_long*); + int getpeername(SOCKET, SOCKADDR*, int*); + int getsockname(SOCKET, SOCKADDR*, int*); + int getsockopt(SOCKET, int, int, char*, int*); + uint inet_addr(char*); + int listen(SOCKET, int); + int recv(SOCKET, char*, int, int); + int recvfrom(SOCKET, char*, int, int, SOCKADDR*, int*); + int send(SOCKET, char*, int, int); + int sendto(SOCKET, char*, int, int, SOCKADDR*, int); + int setsockopt(SOCKET, int, int, char*, int); + int shutdown(SOCKET, int); + SOCKET socket(int, int, int); + int WSAStartup(WORD, LPWSADATA); + int WSACleanup(); + void WSASetLastError(int); + int WSAGetLastError(); + BOOL WSAIsBlocking(); + int WSAUnhookBlockingHook(); + FARPROC WSASetBlockingHook(FARPROC); + int WSACancelBlockingCall(); + HANDLE WSAAsyncGetServByName(HWND, u_int, char*, char*, char*, int); + HANDLE WSAAsyncGetServByPort(HWND, u_int, int, char*, char*, int); + HANDLE WSAAsyncGetProtoByName(HWND, u_int, char*, char*, int); + HANDLE WSAAsyncGetProtoByNumber(HWND, u_int, int, char*, int); + HANDLE WSAAsyncGetHostByName(HWND, u_int, char*, char*, int); + HANDLE WSAAsyncGetHostByAddr(HWND, u_int, char*, int, int, char*, int); + int WSACancelAsyncRequest(HANDLE); + int WSAAsyncSelect(SOCKET, HWND, u_int, int); + u_long htonl(u_long); + u_long ntohl(u_long); + u_short htons(u_short); + u_short ntohs(u_short); + int select(int nfds, FD_SET*, FD_SET*, FD_SET*, TIMEVAL*); + int gethostname(char*, int); +} + +extern (Windows) { + char* inet_ntoa(IN_ADDR); + HOSTENT* gethostbyaddr(char*, int, int); + HOSTENT* gethostbyname(char*); + SERVENT* getservbyport(int, char*); + SERVENT* getservbyname(char*, char*); + PROTOENT* getprotobynumber(int); + PROTOENT* getprotobyname(char*); +} + +alias MAKELONG WSAMAKEASYNCREPLY, WSAMAKESELECTREPLY; +alias LOWORD WSAGETASYNCBUFLEN, WSAGETSELECTEVENT; +alias HIWORD WSAGETASYNCERROR, WSAGETSELECTERROR; + + +/* + * Recent MSDN docs indicate that the MS-specific extensions exported from + * mswsock.dll (AcceptEx, TransmitFile. WSARecEx and GetAcceptExSockaddrs) are + * declared in mswsock.h. These extensions are not supported on W9x or WinCE. + * However, code using WinSock 1.1 API may expect the declarations and + * associated defines to be in this header. Thus we include mswsock.h here. + * + * When linking against the WinSock 1.1 lib, wsock32.dll, the mswsock functions + * are automatically routed to mswsock.dll (on platforms with support). + * The WinSock 2 lib, ws2_32.dll, does not contain any references to + * the mswsock extensions. + */ + +import win32.mswsock; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winsock2.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winsock2.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,1464 @@ +/***********************************************************************\ +* winsock2.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Daniel Keep * +\***********************************************************************/ +module win32.winsock2; +pragma(lib, "Ws2_32.lib"); + +/* + Definitions for winsock 2 + + Contributed by the WINE project. + + Portions Copyright (c) 1980, 1983, 1988, 1993 + The Regents of the University of California. All rights reserved. + + Portions Copyright (c) 1993 by Digital Equipment Corporation. + */ + +/* DRK: This module should not be included if -version=Win32_Winsock2 has + * not been set. If it has, assert. I think it's better this way than + * letting the user believe that it's worked. + * + * SG: It has now been changed so that winsock2 is the default, and + * -version=Win32_Winsock1 must be set to use winsock. + */ +version(Win32_Winsock1) { + pragma(msg, "Cannot use win32.winsock2 with Win32_Winsock1 defined."); + static assert(false); +} + +import win32.winbase; +import win32.windef; +import win32.basetyps; + +alias char u_char; +alias ushort u_short; +alias uint u_int, u_long, SOCKET; + +const size_t FD_SETSIZE = 64; + +/* shutdown() how types */ +enum : int { + SD_RECEIVE, + SD_SEND, + SD_BOTH +} + +/* Good grief this is stupid... is it a struct? A preprocessor macro? A + struct tag? Who the hell knows!? */ +struct FD_SET { + u_int fd_count; + SOCKET[FD_SETSIZE] fd_array; + + /* this differs from the define in winsock.h and in cygwin sys/types.h */ + static void opCall(SOCKET fd, FD_SET set) { + u_int i; + for (i = 0; i < set.fd_count; i++) + if (set.fd_array[i] == fd) + break; + if (i == set.fd_count) + if (set.fd_count < FD_SETSIZE) { + set.fd_array[i] = fd; + set.fd_count++; + } + } +} +alias FD_SET* PFD_SET, LPFD_SET; + +// Keep this alias, since fd_set isn't a tag name in the original header. +alias FD_SET fd_set; + +extern(Windows) int __WSAFDIsSet(SOCKET, FD_SET*); +alias __WSAFDIsSet FD_ISSET; + +void FD_CLR(SOCKET fd, FD_SET* set) { + for (u_int i = 0; i < set.fd_count; i++) { + if (set.fd_array[i] == fd) { + while (i < set.fd_count - 1) { + set.fd_array[i] = set.fd_array[i+1]; + i++; + } + set.fd_count--; + break; + } + } +} + +void FD_ZERO(FD_SET* set) { + set.fd_count = 0; +} + + +struct TIMEVAL { + int tv_sec; + int tv_usec; + + int opCmp(TIMEVAL tv) { + if (tv_sec < tv.tv_sec) return -1; + if (tv_sec > tv.tv_sec) return 1; + if (tv_usec < tv.tv_usec) return -1; + if (tv_usec > tv.tv_usec) return 1; + return 0; + } +} +alias TIMEVAL* PTIMEVAL, LPTIMEVAL; + +bool timerisset(TIMEVAL* tvp) { + return tvp.tv_sec || tvp.tv_usec; +} + +/+ +/* DRK: These have been commented out because it was felt that using + * omCmp on the TIMEVAL struct was cleaner. Still, perhaps these should + * be enabled under a version tag for compatibility's sake? + * If it is decided that it's just ugly and unwanted, then feel free to + * delete this section :) + */ +int timercmp(TIMEVAL* tvp, TIMEVAL* uvp) { + return tvp.tv_sec != uvp.tv_sec ? + (tvp.tv_sec < uvp.tv_sec ? -1 : + (tvp.tv_sec > uvp.tv_sec ? 1 : 0)) : + (tvp.tv_usec < uvp.tv_usec ? -1 : + (tvp.tv_usec > uvp.tv_usec ? 1 : 0)); +} + +int timercmp(TIMEVAL* tvp, TIMEVAL* uvp, int function(long,long) cmp) { + return tvp.tv_sec != uvp.tv_sec ? + cmp(tvp.tv_sec, uvp.tv_sec) : + cmp(tvp.tv_usec, uvp.tv_usec); +}+/ + +void timerclear(inout TIMEVAL tvp) { + tvp.tv_sec = tvp.tv_usec = 0; +} + +struct HOSTENT { + char* h_name; + char** h_aliases; + short h_addrtype; + short h_length; + char** h_addr_list; + + char* h_addr() { return h_addr_list[0]; } + char* h_addr(char* h) { return h_addr_list[0] = h; } +} +alias HOSTENT* PHOSTENT, LPHOSTENT; + +struct LINGER { + u_short l_onoff; + u_short l_linger; +} +alias LINGER* PLINGER, LPLINGER; + +enum : DWORD { + IOCPARAM_MASK = 0x7f, + IOC_VOID = 0x20000000, + IOC_OUT = 0x40000000, + IOC_IN = 0x80000000, + IOC_INOUT = IOC_IN|IOC_OUT +} + +// NOTE: This isn't even used anywhere... +private template _IO(char x, ubyte y) { + const DWORD _IO = IOC_VOID | (cast(ubyte)x<<8) | y; +} + +private template _IOR(char x, ubyte y, t) { + const DWORD _IOR = IOC_OUT | ((t.sizeof & IOCPARAM_MASK)<<16) + | (cast(ubyte)x<<8) | y; +} + +private template _IOW(char x, ubyte y, t) { + const DWORD _IOW = IOC_IN | ((t.sizeof & IOCPARAM_MASK)<<16) + | (cast(ubyte)x<<8) | y; +} + +enum : DWORD { + FIONBIO = _IOW!('f', 126, u_long), + FIONREAD = _IOR!('f', 127, u_long), + FIOASYNC = _IOW!('f', 125, u_long), + SIOCSHIWAT = _IOW!('s', 0, u_long), + SIOCGHIWAT = _IOR!('s', 1, u_long), + SIOCSLOWAT = _IOW!('s', 2, u_long), + SIOCGLOWAT = _IOR!('s', 3, u_long), + SIOCATMARK = _IOR!('s', 7, u_long) +} + +struct netent { + char* n_name; + char** n_aliases; + short n_addrtype; + u_long n_net; +} + +struct SERVENT { + char* s_name; + char** s_aliases; + short s_port; + char* s_proto; +} +alias SERVENT* PSERVENT, LPSERVENT; + +struct PROTOENT { + char* p_name; + char** p_aliases; + short p_proto; +} +alias PROTOENT* PPROTOENT, LPPROTOENT; + +enum : int { + IPPROTO_IP = 0, + IPPROTO_ICMP = 1, + IPPROTO_IGMP = 2, + IPPROTO_GGP = 3, + IPPROTO_TCP = 6, + IPPROTO_PUP = 12, + IPPROTO_UDP = 17, + IPPROTO_IDP = 22, + IPPROTO_ND = 77, + IPPROTO_RAW = 255, + IPPROTO_MAX = 256, + + // IPv6 options + IPPROTO_HOPOPTS = 0, // IPv6 Hop-by-Hop options + IPPROTO_IPV6 = 41, // IPv6 header + IPPROTO_ROUTING = 43, // IPv6 Routing header + IPPROTO_FRAGMENT = 44, // IPv6 fragmentation header + IPPROTO_ESP = 50, // encapsulating security payload + IPPROTO_AH = 51, // authentication header + IPPROTO_ICMPV6 = 58, // ICMPv6 + IPPROTO_NONE = 59, // IPv6 no next header + IPPROTO_DSTOPTS = 60 // IPv6 Destination options +} + +enum { + IPPORT_ECHO = 7, + IPPORT_DISCARD = 9, + IPPORT_SYSTAT = 11, + IPPORT_DAYTIME = 13, + IPPORT_NETSTAT = 15, + IPPORT_FTP = 21, + IPPORT_TELNET = 23, + IPPORT_SMTP = 25, + IPPORT_TIMESERVER = 37, + IPPORT_NAMESERVER = 42, + IPPORT_WHOIS = 43, + IPPORT_MTP = 57, + IPPORT_TFTP = 69, + IPPORT_RJE = 77, + IPPORT_FINGER = 79, + IPPORT_TTYLINK = 87, + IPPORT_SUPDUP = 95, + IPPORT_EXECSERVER = 512, + IPPORT_LOGINSERVER = 513, + IPPORT_CMDSERVER = 514, + IPPORT_EFSSERVER = 520, + IPPORT_BIFFUDP = 512, + IPPORT_WHOSERVER = 513, + IPPORT_ROUTESERVER = 520, + IPPORT_RESERVED = 1024 +} + +enum { + IMPLINK_IP = 155, + IMPLINK_LOWEXPER = 156, + IMPLINK_HIGHEXPER = 158 +} + +struct IN_ADDR { + union { + struct { u_char s_b1, s_b2, s_b3, s_b4; } + struct { u_char s_net, s_host, s_lh, s_impno; } + struct { u_short s_w1, s_w2; } + struct { u_short s_w_, s_imp; } // Can I get rid of s_w_ using alignment tricks? + u_long S_addr; + u_long s_addr; + } +} +alias IN_ADDR* PIN_ADDR, LPIN_ADDR; + +// IN_CLASSx are not used anywhere or documented on MSDN. +bool IN_CLASSA(int i) { return (i & 0x80000000) == 0; } + +const IN_CLASSA_NET = 0xff000000; +const IN_CLASSA_NSHIFT = 24; +const IN_CLASSA_HOST = 0x00ffffff; +const IN_CLASSA_MAX = 128; + +bool IN_CLASSB(int i) { return (i & 0xc0000000) == 0x80000000; } + +const IN_CLASSB_NET = 0xffff0000; +const IN_CLASSB_NSHIFT = 16; +const IN_CLASSB_HOST = 0x0000ffff; +const IN_CLASSB_MAX = 65536; + +bool IN_CLASSC(int i) { return (i & 0xe0000000) == 0xc0000000; } + +const IN_CLASSC_NET = 0xffffff00; +const IN_CLASSC_NSHIFT = 8; +const IN_CLASSC_HOST = 0x000000ff; + +const u_long + INADDR_ANY = 0, + INADDR_LOOPBACK = 0x7F000001, + INADDR_BROADCAST = 0xFFFFFFFF, + INADDR_NONE = 0xFFFFFFFF; + +struct SOCKADDR_IN { + short sin_family; + u_short sin_port; + IN_ADDR sin_addr; + char[8] sin_zero; +} +alias SOCKADDR_IN* PSOCKADDR_IN, LPSOCKADDR_IN; + +const size_t + WSADESCRIPTION_LEN = 256, + WSASYS_STATUS_LEN = 128; + +struct WSADATA { + WORD wVersion; + WORD wHighVersion; + char[WSADESCRIPTION_LEN+1] szDescription; + char[WSASYS_STATUS_LEN+1] szSystemStatus; + ushort iMaxSockets; + ushort iMaxUdpDg; + char* lpVendorInfo; +} +alias WSADATA* LPWSADATA; + +// This is not documented on the MSDN site +const IP_OPTIONS = 1; + +const int + SO_OPTIONS = 1, + SO_DEBUG = 1, + SO_ACCEPTCONN = 2, + SO_REUSEADDR = 4, + SO_KEEPALIVE = 8, + SO_DONTROUTE = 16, + SO_BROADCAST = 32, + SO_USELOOPBACK = 64, + SO_LINGER = 128, + SO_OOBINLINE = 256, + SO_DONTLINGER = ~SO_LINGER, + SO_EXCLUSIVEADDRUSE= ~SO_REUSEADDR; + +enum : int { + SO_SNDBUF = 0x1001, + SO_RCVBUF, + SO_SNDLOWAT, + SO_RCVLOWAT, + SO_SNDTIMEO, + SO_RCVTIMEO, + SO_ERROR, + SO_TYPE // = 0x1008 +} + +const SOCKET INVALID_SOCKET = cast(SOCKET)(~0); +const int SOCKET_ERROR = -1; + +enum : int { + SOCK_STREAM = 1, + SOCK_DGRAM, + SOCK_RAW, + SOCK_RDM, + SOCK_SEQPACKET +} + +const int TCP_NODELAY = 0x0001; + +enum : int { + AF_UNSPEC, + AF_UNIX, + AF_INET, + AF_IMPLINK, + AF_PUP, + AF_CHAOS, + AF_IPX, // = 6 + AF_NS = 6, + AF_ISO, + AF_OSI = AF_ISO, + AF_ECMA, + AF_DATAKIT, + AF_CCITT, + AF_SNA, + AF_DECnet, + AF_DLI, + AF_LAT, + AF_HYLINK, + AF_APPLETALK, + AF_NETBIOS, + AF_VOICEVIEW, + AF_FIREFOX, + AF_UNKNOWN1, + AF_BAN, + AF_ATM, + AF_INET6, + // AF_CLUSTER, AF_12844 nad AF_NETDES are not documented on MSDN + AF_CLUSTER, + AF_12844, + AF_IRDA, // = 26 + AF_NETDES = 28, + AF_MAX // = 29 +} + +struct SOCKADDR { + u_short sa_family; + char[14] sa_data; +} +alias SOCKADDR* PSOCKADDR, LPSOCKADDR; + +/* Portable IPv6/IPv4 version of sockaddr. + Uses padding to force 8 byte alignment + and maximum size of 128 bytes */ +struct SOCKADDR_STORAGE { + short ss_family; + char[6] __ss_pad1; // pad to 8 + long __ss_align; // force alignment + char[112] __ss_pad2; // pad to 128 +} +alias SOCKADDR_STORAGE* PSOCKADDR_STORAGE; + +struct sockproto { + u_short sp_family; + u_short sp_protocol; +} + +enum : int { + PF_UNSPEC = AF_UNSPEC, + PF_UNIX = AF_UNIX, + PF_INET = AF_INET, + PF_IMPLINK = AF_IMPLINK, + PF_PUP = AF_PUP, + PF_CHAOS = AF_CHAOS, + PF_NS = AF_NS, + PF_IPX = AF_IPX, + PF_ISO = AF_ISO, + PF_OSI = AF_OSI, + PF_ECMA = AF_ECMA, + PF_DATAKIT = AF_DATAKIT, + PF_CCITT = AF_CCITT, + PF_SNA = AF_SNA, + PF_DECnet = AF_DECnet, + PF_DLI = AF_DLI, + PF_LAT = AF_LAT, + PF_HYLINK = AF_HYLINK, + PF_APPLETALK = AF_APPLETALK, + PF_VOICEVIEW = AF_VOICEVIEW, + PF_FIREFOX = AF_FIREFOX, + PF_UNKNOWN1 = AF_UNKNOWN1, + PF_BAN = AF_BAN, + PF_ATM = AF_ATM, + PF_INET6 = AF_INET6, + PF_MAX = AF_MAX +} + +const int SOL_SOCKET = 0xFFFF; + +const int SOMAXCONN = 5; + +const int + MSG_OOB = 1, + MSG_PEEK = 2, + MSG_DONTROUTE = 4, + MSG_MAXIOVLEN = 16, + MSG_PARTIAL = 0x8000; + +const size_t MAXGETHOSTSTRUCT = 1024; + +// Not documented on MSDN +enum { + FD_READ_BIT, + FD_WRITE_BIT, + FD_OOB_BIT, + FD_ACCEPT_BIT, + FD_CONNECT_BIT, + FD_CLOSE_BIT, + FD_QOS_BIT, + FD_GROUP_QOS_BIT, + FD_ROUTING_INTERFACE_CHANGE_BIT, + FD_ADDRESS_LIST_CHANGE_BIT, + FD_MAX_EVENTS // = 10 +} + +const int + FD_READ = 1 << FD_READ_BIT, + FD_WRITE = 1 << FD_WRITE_BIT, + FD_OOB = 1 << FD_OOB_BIT, + FD_ACCEPT = 1 << FD_ACCEPT_BIT, + FD_CONNECT = 1 << FD_CONNECT_BIT, + FD_CLOSE = 1 << FD_CLOSE_BIT, + FD_QOS = 1 << FD_QOS_BIT, + FD_GROUP_QOS = 1 << FD_GROUP_QOS_BIT, + FD_ROUTING_INTERFACE_CHANGE = 1 << FD_ROUTING_INTERFACE_CHANGE_BIT, + FD_ADDRESS_LIST_CHANGE = 1 << FD_ADDRESS_LIST_CHANGE_BIT, + FD_ALL_EVENTS = (1 << FD_MAX_EVENTS) - 1; + +enum : int { + WSABASEERR = 10000, + WSAEINTR = WSABASEERR + 4, + WSAEBADF = WSABASEERR + 9, + WSAEACCES = WSABASEERR + 13, + WSAEFAULT = WSABASEERR + 14, + WSAEINVAL = WSABASEERR + 22, + WSAEMFILE = WSABASEERR + 24, + WSAEWOULDBLOCK = WSABASEERR + 35, + WSAEINPROGRESS = WSABASEERR + 36, // deprecated on WinSock2 + WSAEALREADY = WSABASEERR + 37, + WSAENOTSOCK = WSABASEERR + 38, + WSAEDESTADDRREQ = WSABASEERR + 39, + WSAEMSGSIZE = WSABASEERR + 40, + WSAEPROTOTYPE = WSABASEERR + 41, + WSAENOPROTOOPT = WSABASEERR + 42, + WSAEPROTONOSUPPORT = WSABASEERR + 43, + WSAESOCKTNOSUPPORT = WSABASEERR + 44, + WSAEOPNOTSUPP = WSABASEERR + 45, + WSAEPFNOSUPPORT = WSABASEERR + 46, + WSAEAFNOSUPPORT = WSABASEERR + 47, + WSAEADDRINUSE = WSABASEERR + 48, + WSAEADDRNOTAVAIL = WSABASEERR + 49, + WSAENETDOWN = WSABASEERR + 50, + WSAENETUNREACH = WSABASEERR + 51, + WSAENETRESET = WSABASEERR + 52, + WSAECONNABORTED = WSABASEERR + 53, + WSAECONNRESET = WSABASEERR + 54, + WSAENOBUFS = WSABASEERR + 55, + WSAEISCONN = WSABASEERR + 56, + WSAENOTCONN = WSABASEERR + 57, + WSAESHUTDOWN = WSABASEERR + 58, + WSAETOOMANYREFS = WSABASEERR + 59, + WSAETIMEDOUT = WSABASEERR + 60, + WSAECONNREFUSED = WSABASEERR + 61, + WSAELOOP = WSABASEERR + 62, + WSAENAMETOOLONG = WSABASEERR + 63, + WSAEHOSTDOWN = WSABASEERR + 64, + WSAEHOSTUNREACH = WSABASEERR + 65, + WSAENOTEMPTY = WSABASEERR + 66, + WSAEPROCLIM = WSABASEERR + 67, + WSAEUSERS = WSABASEERR + 68, + WSAEDQUOT = WSABASEERR + 69, + WSAESTALE = WSABASEERR + 70, + WSAEREMOTE = WSABASEERR + 71, + WSAEDISCON = WSABASEERR + 101, + WSASYSNOTREADY = WSABASEERR + 91, + WSAVERNOTSUPPORTED = WSABASEERR + 92, + WSANOTINITIALISED = WSABASEERR + 93, + WSAHOST_NOT_FOUND = WSABASEERR + 1001, + WSATRY_AGAIN = WSABASEERR + 1002, + WSANO_RECOVERY = WSABASEERR + 1003, + WSANO_DATA = WSABASEERR + 1004, + WSANO_ADDRESS = WSANO_DATA, + + // WinSock2 specific error codes + WSAENOMORE = WSABASEERR + 102, + WSAECANCELLED = WSABASEERR + 103, + WSAEINVALIDPROCTABLE = WSABASEERR + 104, + WSAEINVALIDPROVIDER = WSABASEERR + 105, + WSAEPROVIDERFAILEDINIT = WSABASEERR + 106, + WSASYSCALLFAILURE = WSABASEERR + 107, + WSASERVICE_NOT_FOUND = WSABASEERR + 108, + WSATYPE_NOT_FOUND = WSABASEERR + 109, + WSA_E_NO_MORE = WSABASEERR + 110, + WSA_E_CANCELLED = WSABASEERR + 111, + WSAEREFUSED = WSABASEERR + 112, + + // WS QualityofService errors + WSA_QOS_RECEIVERS = WSABASEERR + 1005, + WSA_QOS_SENDERS = WSABASEERR + 1006, + WSA_QOS_NO_SENDERS = WSABASEERR + 1007, + WSA_QOS_NO_RECEIVERS = WSABASEERR + 1008, + WSA_QOS_REQUEST_CONFIRMED = WSABASEERR + 1009, + WSA_QOS_ADMISSION_FAILURE = WSABASEERR + 1010, + WSA_QOS_POLICY_FAILURE = WSABASEERR + 1011, + WSA_QOS_BAD_STYLE = WSABASEERR + 1012, + WSA_QOS_BAD_OBJECT = WSABASEERR + 1013, + WSA_QOS_TRAFFIC_CTRL_ERROR = WSABASEERR + 1014, + WSA_QOS_GENERIC_ERROR = WSABASEERR + 1015, + WSA_QOS_ESERVICETYPE = WSABASEERR + 1016, + WSA_QOS_EFLOWSPEC = WSABASEERR + 1017, + WSA_QOS_EPROVSPECBUF = WSABASEERR + 1018, + WSA_QOS_EFILTERSTYLE = WSABASEERR + 1019, + WSA_QOS_EFILTERTYPE = WSABASEERR + 1020, + WSA_QOS_EFILTERCOUNT = WSABASEERR + 1021, + WSA_QOS_EOBJLENGTH = WSABASEERR + 1022, + WSA_QOS_EFLOWCOUNT = WSABASEERR + 1023, + WSA_QOS_EUNKOWNPSOBJ = WSABASEERR + 1024, + WSA_QOS_EPOLICYOBJ = WSABASEERR + 1025, + WSA_QOS_EFLOWDESC = WSABASEERR + 1026, + WSA_QOS_EPSFLOWSPEC = WSABASEERR + 1027, + WSA_QOS_EPSFILTERSPEC = WSABASEERR + 1028, + WSA_QOS_ESDMODEOBJ = WSABASEERR + 1029, + WSA_QOS_ESHAPERATEOBJ = WSABASEERR + 1030, + WSA_QOS_RESERVED_PETYPE = WSABASEERR + 1031 +} + +alias WSAGetLastError h_errno; + +enum : int { + HOST_NOT_FOUND = WSAHOST_NOT_FOUND, + TRY_AGAIN = WSATRY_AGAIN, + NO_RECOVERY = WSANO_RECOVERY, + NO_DATA = WSANO_DATA, + NO_ADDRESS = WSANO_ADDRESS +} + +extern (Windows) { + SOCKET accept(SOCKET, SOCKADDR*, int*); + int bind(SOCKET, SOCKADDR*, int); + int closesocket(SOCKET); + int connect(SOCKET, SOCKADDR*, int); + int ioctlsocket(SOCKET, int, u_long*); + int getpeername(SOCKET, SOCKADDR*, int*); + int getsockname(SOCKET, SOCKADDR*, int*); + int getsockopt(SOCKET, int, int, void*, int*); + uint inet_addr(char*); + int listen(SOCKET, int); + int recv(SOCKET, ubyte*, int, int); + int recvfrom(SOCKET, ubyte*, int, int, SOCKADDR*, int*); + int send(SOCKET, ubyte*, int, int); + int sendto(SOCKET, ubyte*, int, int, SOCKADDR*, int); + int setsockopt(SOCKET, int, int, void*, int); + int shutdown(SOCKET, int); + SOCKET socket(int, int, int); + + alias typeof(&accept) LPFN_ACCEPT; + alias typeof(&bind) LPFN_BIND; + alias typeof(&closesocket) LPFN_CLOSESOCKET; + alias typeof(&connect) LPFN_CONNECT; + alias typeof(&ioctlsocket) LPFN_IOCTLSOCKET; + alias typeof(&getpeername) LPFN_GETPEERNAME; + alias typeof(&getsockname) LPFN_GETSOCKNAME; + alias typeof(&getsockopt) LPFN_GETSOCKOPT; + alias typeof(&inet_addr) LPFN_INET_ADDR; + alias typeof(&listen) LPFN_LISTEN; + alias typeof(&recv) LPFN_RECV; + alias typeof(&recvfrom) LPFN_RECVFROM; + alias typeof(&send) LPFN_SEND; + alias typeof(&sendto) LPFN_SENDTO; + alias typeof(&setsockopt) LPFN_SETSOCKOPT; + alias typeof(&shutdown) LPFN_SHUTDOWN; + alias typeof(&socket) LPFN_SOCKET; +} + +extern(Windows) { + char* inet_ntoa(IN_ADDR); + HOSTENT* gethostbyaddr(char*, int, int); + HOSTENT* gethostbyname(char*); + SERVENT* getservbyport(int, char*); + SERVENT* getservbyname(char*, char*); + PROTOENT* getprotobynumber(int); + PROTOENT* getprotobyname(char*); + + /* NOTE: DK: in the original headers, these were declared with + PASCAL linkage. Since this is at odds with the definition + of the functions themselves, and also since MinGW seems to + treat the two interchangably, I have moved them here. */ + alias typeof(&inet_ntoa) LPFN_INET_NTOA; + alias typeof(&gethostbyaddr) LPFN_GETHOSTBYADDR; + alias typeof(&gethostbyname) LPFN_GETHOSTBYNAME; + alias typeof(&getservbyport) LPFN_GETSERVBYPORT; + alias typeof(&getservbyname) LPFN_GETSERVBYNAME; + alias typeof(&getprotobynumber) LPFN_GETPROTOBYNUMBER; + alias typeof(&getprotobyname) LPFN_GETPROTOBYNAME; +} + +extern(Windows) { + int WSAStartup(WORD, LPWSADATA); + int WSACleanup(); + void WSASetLastError(int); + int WSAGetLastError(); + + alias typeof(&WSAStartup) LPFN_WSASTARTUP; + alias typeof(&WSACleanup) LPFN_WSACLEANUP; + alias typeof(&WSASetLastError) LPFN_WSASETLASTERROR; + alias typeof(&WSAGetLastError) LPFN_WSAGETLASTERROR; +} + +/* + * Pseudo-blocking functions are deprecated in WinSock2 + * spec. Use threads instead. + */ +deprecated extern(Windows) { + BOOL WSAIsBlocking(); + int WSAUnhookBlockingHook(); + FARPROC WSASetBlockingHook(FARPROC); + int WSACancelBlockingCall(); + + alias typeof(&WSAIsBlocking) LPFN_WSAISBLOCKING; + alias typeof(&WSAUnhookBlockingHook) LPFN_WSAUNHOOKBLOCKINGHOOK; + alias typeof(&WSASetBlockingHook) LPFN_WSASETBLOCKINGHOOK; + alias typeof(&WSACancelBlockingCall) LPFN_WSACANCELBLOCKINGCALL; +} + +extern(Windows) { + HANDLE WSAAsyncGetServByName(HWND, u_int, char*, char*, char*, int); + HANDLE WSAAsyncGetServByPort(HWND, u_int, int, char*, char*, int); + HANDLE WSAAsyncGetProtoByName(HWND, u_int, char*, char*, int); + HANDLE WSAAsyncGetProtoByNumber(HWND, u_int, int, char*, int); + HANDLE WSAAsyncGetHostByName(HWND, u_int, char*, char*, int); + HANDLE WSAAsyncGetHostByAddr(HWND, u_int, char*, int, int, char*, int); + int WSACancelAsyncRequest(HANDLE); + int WSAAsyncSelect(SOCKET, HWND, u_int, long); + + alias typeof(&WSAAsyncGetServByName) LPFN_WSAAsyncGetServByName; + alias typeof(&WSAAsyncGetServByPort) LPFN_WSAASYNCGETSERVBYPORT; + alias typeof(&WSAAsyncGetProtoByName) LPFN_WSAASYNCGETPROTOBYNAME; + alias typeof(&WSAAsyncGetProtoByNumber) LPFN_WSAASYNCGETPROTOBYNUMBER; + alias typeof(&WSAAsyncGetHostByName) LPFN_WSAASYNCGETHOSTBYNAME; + alias typeof(&WSAAsyncGetHostByAddr) LPFN_WSAASYNCGETHOSTBYADDR; + alias typeof(&WSACancelAsyncRequest) LPFN_WSACANCELASYNCREQUEST; + alias typeof(&WSAAsyncSelect) LPFN_WSAASYNCSELECT; +} + +extern(Windows) { + u_long htonl(u_long); + u_long ntohl(u_long); + u_short htons(u_short); + u_short ntohs(u_short); + int select(int nfds, fd_set*, fd_set*, fd_set*, TIMEVAL*); + + alias typeof(&htonl) LPFN_HTONL; + alias typeof(&ntohl) LPFN_NTOHL; + alias typeof(&htons) LPFN_HTONS; + alias typeof(&ntohs) LPFN_NTOHS; + alias typeof(&select) LPFN_SELECT; + + int gethostname(char*, int); + alias typeof(&gethostname) LPFN_GETHOSTNAME; +} + +alias MAKELONG WSAMAKEASYNCREPLY, WSAMAKESELECTREPLY; +alias LOWORD WSAGETASYNCBUFLEN, WSAGETSELECTEVENT; +alias HIWORD WSAGETASYNCERROR, WSAGETSELECTERROR; + + +alias INADDR_ANY ADDR_ANY; + +bool IN_CLASSD(int i) { return (i & 0xf0000000) == 0xe0000000; } + +const IN_CLASSD_NET = 0xf0000000; +const IN_CLASSD_NSHIFT = 28; +const IN_CLASSD_HOST = 0x0fffffff; + +alias IN_CLASSD IN_MULTICAST; + +const FROM_PROTOCOL_INFO = -1; + +enum : int { + SO_GROUP_ID = 0x2001, + SO_GROUP_PRIORITY, + SO_MAX_MSG_SIZE, + SO_PROTOCOL_INFOA, + SO_PROTOCOL_INFOW +} +// NOTE: These are logically part of the previous enum, but you can't +// have version statements in an enum body... +version(Unicode) + const int SO_PROTOCOL_INFO = SO_PROTOCOL_INFOW; +else + const int SO_PROTOCOL_INFO = SO_PROTOCOL_INFOA; + +const PVD_CONFIG = 0x3001; + +const MSG_INTERRUPT = 0x10; +//const MSG_MAXIOVLEN = 16; // Already declared above + +alias HANDLE WSAEVENT; +alias LPHANDLE LPWSAEVENT; +alias OVERLAPPED WSAOVERLAPPED; +alias OVERLAPPED* LPWSAOVERLAPPED; + +private import win32.winerror; +private import win32.winbase; + +enum { + WSA_IO_PENDING = ERROR_IO_PENDING, + WSA_IO_INCOMPLETE = ERROR_IO_INCOMPLETE, + WSA_INVALID_HANDLE = ERROR_INVALID_HANDLE, + WSA_INVALID_PARAMETER = ERROR_INVALID_PARAMETER, + WSA_NOT_ENOUGH_MEMORY = ERROR_NOT_ENOUGH_MEMORY, + WSA_OPERATION_ABORTED = ERROR_OPERATION_ABORTED +} + +const WSA_INVALID_EVENT = cast(WSAEVENT)null; +const WSA_MAXIMUM_WAIT_EVENTS = MAXIMUM_WAIT_OBJECTS; +const WSA_WAIT_FAILED = cast(DWORD)-1; +const WSA_WAIT_EVENT_0 = WAIT_OBJECT_0; +const WSA_WAIT_IO_COMPLETION = WAIT_IO_COMPLETION; +const WSA_WAIT_TIMEOUT = WAIT_TIMEOUT; +const WSA_INFINITE = INFINITE; + +struct WSABUF { + uint len; + char* buf; +} + +alias WSABUF* LPWSABUF; + +enum GUARANTEE { + BestEffortService, + ControlledLoadService, + PredictiveService, + GuaranteedDelayService, + GuaranteedService +} + +/* TODO: FLOWSPEC and related definitions belong in qos.h */ + +/* + Windows Sockets 2 Application Programming Interface, + revision 2.2.2 (1997) uses the type uint32 for SERVICETYPE + and the elements of _flowspec, but the type uint32 is not defined + or used anywhere else in the w32api. For now, just use + unsigned int, which is 32 bits on _WIN32 and _WIN64. +*/ + +alias uint SERVICETYPE; + +struct FLOWSPEC { + uint TokenRate; + uint TokenBucketSize; + uint PeakBandwidth; + uint Latency; + uint DelayVariation; + SERVICETYPE ServiceType; + uint MaxSduSize; + uint MinimumPolicedSize; +} + +alias FLOWSPEC* PFLOWSPEC, LPFLOWSPEC; + +struct QOS +{ + FLOWSPEC SendingFlowspec; + FLOWSPEC ReceivingFlowspec; + WSABUF ProviderSpecific; +} + +alias QOS* LPQOS; + +enum { + CF_ACCEPT, + CF_REJECT, + CF_DEFER +} + +// REM: Already defined above +/*enum { + SD_RECEIVE, + SD_SEND, + SD_BOTH +}*/ + +alias uint GROUP; + +enum { + SG_UNCONSTRAINED_GROUP = 0x01, + SG_CONSTRAINED_GROUP +} + +struct WSANETWORKEVENTS { + int lNetworkEvents; + int[FD_MAX_EVENTS] iErrorCode; +} + +alias WSANETWORKEVENTS* LPWSANETWORKEVENTS; + +const MAX_PROTOCOL_CHAIN = 7; + +const BASE_PROTOCOL = 1; +const LAYERED_PROTOCOL = 0; + +enum WSAESETSERVICEOP +{ + RNRSERVICE_REGISTER = 0, + RNRSERVICE_DEREGISTER, + RNRSERVICE_DELETE +} + +alias WSAESETSERVICEOP* PWSAESETSERVICEOP, LPWSAESETSERVICEOP; + +struct AFPROTOCOLS { + INT iAddressFamily; + INT iProtocol; +} + +alias AFPROTOCOLS* PAFPROTOCOLS, LPAFPROTOCOLS; + +enum WSAECOMPARATOR +{ + COMP_EQUAL = 0, + COMP_NOTLESS +} + +alias WSAECOMPARATOR* PWSAECOMPARATOR, LPWSAECOMPARATOR; + +struct WSAVERSION +{ + DWORD dwVersion; + WSAECOMPARATOR ecHow; +} + +alias WSAVERSION* PWSAVERSION, LPWSAVERSION; + +// Import for SOCKET_ADDRESS, CSADDR_INFO +// import win32.nspapi; +//#ifndef __CSADDR_T_DEFINED /* also in nspapi.h */ +//#define __CSADDR_T_DEFINED + +struct SOCKET_ADDRESS { + LPSOCKADDR lpSockaddr; + INT iSockaddrLength; +} + +alias SOCKET_ADDRESS* PSOCKET_ADDRESS, LPSOCKET_ADDRESS; + +struct CSADDR_INFO { + SOCKET_ADDRESS LocalAddr; + SOCKET_ADDRESS RemoteAddr; + INT iSocketType; + INT iProtocol; +} + +alias CSADDR_INFO* PCSADDR_INFO, LPCSADDR_INFO; + +//#endif + +struct SOCKET_ADDRESS_LIST { + INT iAddressCount; + SOCKET_ADDRESS[1] _Address; + SOCKET_ADDRESS* Address() { return _Address.ptr; } +} + +alias SOCKET_ADDRESS_LIST* LPSOCKET_ADDRESS_LIST; + +// TODO: Import wtypes/nspapi? +//#ifndef __BLOB_T_DEFINED /* also in wtypes.h and nspapi.h */ +//#define __BLOB_T_DEFINED +struct BLOB { + ULONG cbSize; + BYTE* pBlobData; +} + +alias BLOB* PBLOB, LPBLOB; +//#endif + +struct WSAQUERYSETA +{ + DWORD dwSize; + LPSTR lpszServiceInstanceName; + LPGUID lpServiceClassId; + LPWSAVERSION lpVersion; + LPSTR lpszComment; + DWORD dwNameSpace; + LPGUID lpNSProviderId; + LPSTR lpszContext; + DWORD dwNumberOfProtocols; + LPAFPROTOCOLS lpafpProtocols; + LPSTR lpszQueryString; + DWORD dwNumberOfCsAddrs; + LPCSADDR_INFO lpcsaBuffer; + DWORD dwOutputFlags; + LPBLOB lpBlob; +} + +alias WSAQUERYSETA* PWSAQUERYSETA, LPWSAQUERYSETA; + +struct WSAQUERYSETW +{ + DWORD dwSize; + LPWSTR lpszServiceInstanceName; + LPGUID lpServiceClassId; + LPWSAVERSION lpVersion; + LPWSTR lpszComment; + DWORD dwNameSpace; + LPGUID lpNSProviderId; + LPWSTR lpszContext; + DWORD dwNumberOfProtocols; + LPAFPROTOCOLS lpafpProtocols; + LPWSTR lpszQueryString; + DWORD dwNumberOfCsAddrs; + LPCSADDR_INFO lpcsaBuffer; + DWORD dwOutputFlags; + LPBLOB lpBlob; +} + + +alias WSAQUERYSETW* PWSAQUERYSETW, LPWSAQUERYSETW; + +version(Unicode) { + alias WSAQUERYSETW WSAQUERYSET; + alias PWSAQUERYSETW PWSAQUERYSET; + alias LPWSAQUERYSETW LPWSAQUERYSET; +} else { + alias WSAQUERYSETA WSAQUERYSET; + alias PWSAQUERYSETA PWSAQUERYSET; + alias LPWSAQUERYSETA LPWSAQUERYSET; +} + +const int + LUP_DEEP = 0x0001, + LUP_CONTAINERS = 0x0002, + LUP_NOCONTAINERS = 0x0004, + LUP_NEAREST = 0x0008, + LUP_RETURN_NAME = 0x0010, + LUP_RETURN_TYPE = 0x0020, + LUP_RETURN_VERSION = 0x0040, + LUP_RETURN_COMMENT = 0x0080, + LUP_RETURN_ADDR = 0x0100, + LUP_RETURN_BLOB = 0x0200, + LUP_RETURN_ALIASES = 0x0400, + LUP_RETURN_QUERY_STRING = 0x0800, + LUP_RETURN_ALL = 0x0FF0, + LUP_RES_SERVICE = 0x8000, + LUP_FLUSHCACHE = 0x1000, + LUP_FLUSHPREVIOUS = 0x2000; + +struct WSANSCLASSINFOA +{ + LPSTR lpszName; + DWORD dwNameSpace; + DWORD dwValueType; + DWORD dwValueSize; + LPVOID lpValue; +} + +alias WSANSCLASSINFOA* PWSANSCLASSINFOA, LPWSANSCLASSINFOA; + +struct WSANSCLASSINFOW +{ + LPWSTR lpszName; + DWORD dwNameSpace; + DWORD dwValueType; + DWORD dwValueSize; + LPVOID lpValue; +} + +alias WSANSCLASSINFOW* PWSANSCLASSINFOW, LPWSANSCLASSINFOW; + +version(Unicode) { + alias WSANSCLASSINFOW WSANSCLASSINFO; + alias PWSANSCLASSINFOW PWSANSCLASSINFO; + alias LPWSANSCLASSINFOW LPWSANSCLASSINFO; +} else { + alias WSANSCLASSINFOA WSANSCLASSINFO; + alias PWSANSCLASSINFOA PWSANSCLASSINFO; + alias LPWSANSCLASSINFOA LPWSANSCLASSINFO; +} + +struct WSASERVICECLASSINFOA +{ + LPGUID lpServiceClassId; + LPSTR lpszServiceClassName; + DWORD dwCount; + LPWSANSCLASSINFOA lpClassInfos; +} + +alias WSASERVICECLASSINFOA* PWSASERVICECLASSINFOA, LPWSASERVICECLASSINFOA; + +struct WSASERVICECLASSINFOW +{ + LPGUID lpServiceClassId; + LPWSTR lpszServiceClassName; + DWORD dwCount; + LPWSANSCLASSINFOW lpClassInfos; +} + +alias WSASERVICECLASSINFOW* PWSASERVICECLASSINFOW, LPWSASERVICECLASSINFOW; + +version(Unicode) { + alias WSASERVICECLASSINFOW WSASERVICECLASSINFO; + alias PWSASERVICECLASSINFOW PWSASERVICECLASSINFO; + alias LPWSASERVICECLASSINFOW LPWSASERVICECLASSINFO; +} else { + alias WSASERVICECLASSINFOA WSASERVICECLASSINFO; + alias PWSASERVICECLASSINFOA PWSASERVICECLASSINFO; + alias LPWSASERVICECLASSINFOA LPWSASERVICECLASSINFO; +} + +struct WSANAMESPACE_INFOA { + GUID NSProviderId; + DWORD dwNameSpace; + BOOL fActive; + DWORD dwVersion; + LPSTR lpszIdentifier; +} + +alias WSANAMESPACE_INFOA* PWSANAMESPACE_INFOA, LPWSANAMESPACE_INFOA; + +struct WSANAMESPACE_INFOW { + GUID NSProviderId; + DWORD dwNameSpace; + BOOL fActive; + DWORD dwVersion; + LPWSTR lpszIdentifier; +} + +alias WSANAMESPACE_INFOW* PWSANAMESPACE_INFOW, LPWSANAMESPACE_INFOW; + +version(Unicode) { + alias WSANAMESPACE_INFOW WSANAMESPACE_INFO; + alias PWSANAMESPACE_INFOW PWSANAMESPACE_INFO; + alias LPWSANAMESPACE_INFOW LPWSANAMESPACE_INFO; +} else { + alias WSANAMESPACE_INFOA WSANAMESPACE_INFO; + alias PWSANAMESPACE_INFOA PWSANAMESPACE_INFO; + alias LPWSANAMESPACE_INFOA LPWSANAMESPACE_INFO; +} + +struct WSAPROTOCOLCHAIN { + int ChainLen; + DWORD[MAX_PROTOCOL_CHAIN] ChainEntries; +} + +alias WSAPROTOCOLCHAIN* LPWSAPROTOCOLCHAIN; + +const WSAPROTOCOL_LEN = 255; + +struct WSAPROTOCOL_INFOA { + DWORD dwServiceFlags1; + DWORD dwServiceFlags2; + DWORD dwServiceFlags3; + DWORD dwServiceFlags4; + DWORD dwProviderFlags; + GUID ProviderId; + DWORD dwCatalogEntryId; + WSAPROTOCOLCHAIN ProtocolChain; + int iVersion; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + int iProtocolMaxOffset; + int iNetworkByteOrder; + int iSecurityScheme; + DWORD dwMessageSize; + DWORD dwProviderReserved; + CHAR[WSAPROTOCOL_LEN+1] szProtocol; +} + +alias WSAPROTOCOL_INFOA* LPWSAPROTOCOL_INFOA; + +struct WSAPROTOCOL_INFOW { + DWORD dwServiceFlags1; + DWORD dwServiceFlags2; + DWORD dwServiceFlags3; + DWORD dwServiceFlags4; + DWORD dwProviderFlags; + GUID ProviderId; + DWORD dwCatalogEntryId; + WSAPROTOCOLCHAIN ProtocolChain; + int iVersion; + int iAddressFamily; + int iMaxSockAddr; + int iMinSockAddr; + int iSocketType; + int iProtocol; + int iProtocolMaxOffset; + int iNetworkByteOrder; + int iSecurityScheme; + DWORD dwMessageSize; + DWORD dwProviderReserved; + WCHAR[WSAPROTOCOL_LEN+1] szProtocol; +} + +alias WSAPROTOCOL_INFOW* LPWSAPROTOCOL_INFOW; + +// TODO: Below fptr was defined as "CALLBACK" for linkage; is this right? +extern(C) { + alias int function(LPWSABUF, LPWSABUF, LPQOS, LPQOS, LPWSABUF, LPWSABUF, GROUP *, DWORD) LPCONDITIONPROC; +} + +extern(Windows) { + alias void function(DWORD, DWORD, LPWSAOVERLAPPED, DWORD) LPWSAOVERLAPPED_COMPLETION_ROUTINE; +} + +version(Unicode) { + alias WSAPROTOCOL_INFOW WSAPROTOCOL_INFO; + alias LPWSAPROTOCOL_INFOW LPWSAPROTOCOL_INFO; +} else { + alias WSAPROTOCOL_INFOA WSAPROTOCOL_INFO; + alias LPWSAPROTOCOL_INFOA LPWSAPROTOCOL_INFO; +} + +/* Needed for XP & .NET Server function WSANSPIoctl. */ +enum WSACOMPLETIONTYPE { + NSP_NOTIFY_IMMEDIATELY = 0, + NSP_NOTIFY_HWND, + NSP_NOTIFY_EVENT, + NSP_NOTIFY_PORT, + NSP_NOTIFY_APC +} + +alias WSACOMPLETIONTYPE* PWSACOMPLETIONTYPE, LPWSACOMPLETIONTYPE; + +struct WSACOMPLETION { + WSACOMPLETIONTYPE Type; + union WSACOMPLETION_PARAMETERS { + struct WSACOMPLETION_WINDOWMESSAGE { + HWND hWnd; + UINT uMsg; + WPARAM context; + } + WSACOMPLETION_WINDOWMESSAGE WindowMessage; + struct WSACOMPLETION_EVENT { + LPWSAOVERLAPPED lpOverlapped; + } + WSACOMPLETION_EVENT Event; + struct WSACOMPLETION_APC { + LPWSAOVERLAPPED lpOverlapped; + LPWSAOVERLAPPED_COMPLETION_ROUTINE lpfnCompletionProc; + } + WSACOMPLETION_APC Apc; + struct WSACOMPLETION_PORT { + LPWSAOVERLAPPED lpOverlapped; + HANDLE hPort; + ULONG_PTR Key; + } + WSACOMPLETION_PORT Port; + } + WSACOMPLETION_PARAMETERS Parameters; +} + +alias WSACOMPLETION* PWSACOMPLETION, LPWSACOMPLETION; + +const int + PFL_MULTIPLE_PROTO_ENTRIES = 0x00000001, + PFL_RECOMMENDED_PROTO_ENTRY = 0x00000002, + PFL_HIDDEN = 0x00000004, + PFL_MATCHES_PROTOCOL_ZERO = 0x00000008; + +const int + XP1_CONNECTIONLESS = 0x00000001, + XP1_GUARANTEED_DELIVERY = 0x00000002, + XP1_GUARANTEED_ORDER = 0x00000004, + XP1_MESSAGE_ORIENTED = 0x00000008, + XP1_PSEUDO_STREAM = 0x00000010, + XP1_GRACEFUL_CLOSE = 0x00000020, + XP1_EXPEDITED_DATA = 0x00000040, + XP1_CONNECT_DATA = 0x00000080, + XP1_DISCONNECT_DATA = 0x00000100, + XP1_SUPPORT_BROADCAST = 0x00000200, + XP1_SUPPORT_MULTIPOINT = 0x00000400, + XP1_MULTIPOINT_CONTROL_PLANE = 0x00000800, + XP1_MULTIPOINT_DATA_PLANE = 0x00001000, + XP1_QOS_SUPPORTED = 0x00002000, + XP1_INTERRUPT = 0x00004000, + XP1_UNI_SEND = 0x00008000, + XP1_UNI_RECV = 0x00010000, + XP1_IFS_HANDLES = 0x00020000, + XP1_PARTIAL_MESSAGE = 0x00040000; + +enum : int { + BIGENDIAN = 0x0000, + LITTLEENDIAN = 0x0001 +} + +const SECURITY_PROTOCOL_NONE = 0x0000; + +const JL_SENDER_ONLY = 0x01; +const JL_RECEIVER_ONLY = 0x02; +const JL_BOTH = 0x04; + +const WSA_FLAG_OVERLAPPED = 0x01; +const WSA_FLAG_MULTIPOINT_C_ROOT = 0x02; +const WSA_FLAG_MULTIPOINT_C_LEAF = 0x04; +const WSA_FLAG_MULTIPOINT_D_ROOT = 0x08; +const WSA_FLAG_MULTIPOINT_D_LEAF = 0x10; + +const int IOC_UNIX = 0x00000000; +const int IOC_WS2 = 0x08000000; +const int IOC_PROTOCOL = 0x10000000; +const int IOC_VENDOR = 0x18000000; + +template _WSAIO(int x, int y) { const int _WSAIO = IOC_VOID | x | y; } +template _WSAIOR(int x, int y) { const int _WSAIOR = IOC_OUT | x | y; } +template _WSAIOW(int x, int y) { const int _WSAIOW = IOC_IN | x | y; } +template _WSAIORW(int x, int y) { const int _WSAIORW = IOC_INOUT | x | y; } + +const int SIO_ASSOCIATE_HANDLE = _WSAIOW!(IOC_WS2,1); +const int SIO_ENABLE_CIRCULAR_QUEUEING = _WSAIO!(IOC_WS2,2); +const int SIO_FIND_ROUTE = _WSAIOR!(IOC_WS2,3); +const int SIO_FLUSH = _WSAIO!(IOC_WS2,4); +const int SIO_GET_BROADCAST_ADDRESS = _WSAIOR!(IOC_WS2,5); +const int SIO_GET_EXTENSION_FUNCTION_POINTER = _WSAIORW!(IOC_WS2,6); +const int SIO_GET_QOS = _WSAIORW!(IOC_WS2,7); +const int SIO_GET_GROUP_QOS = _WSAIORW!(IOC_WS2,8); +const int SIO_MULTIPOINT_LOOPBACK = _WSAIOW!(IOC_WS2,9); +const int SIO_MULTICAST_SCOPE = _WSAIOW!(IOC_WS2,10); +const int SIO_SET_QOS = _WSAIOW!(IOC_WS2,11); +const int SIO_SET_GROUP_QOS = _WSAIOW!(IOC_WS2,12); +const int SIO_TRANSLATE_HANDLE = _WSAIORW!(IOC_WS2,13); +const int SIO_ROUTING_INTERFACE_QUERY = _WSAIORW!(IOC_WS2,20); +const int SIO_ROUTING_INTERFACE_CHANGE = _WSAIOW!(IOC_WS2,21); +const int SIO_ADDRESS_LIST_QUERY = _WSAIOR!(IOC_WS2,22); +const int SIO_ADDRESS_LIST_CHANGE = _WSAIO!(IOC_WS2,23); +const int SIO_QUERY_TARGET_PNP_HANDLE = _WSAIOR!(IOC_WS2,24); +const int SIO_NSP_NOTIFY_CHANGE = _WSAIOW!(IOC_WS2,25); + +const int TH_NETDEV = 1; +const int TH_TAPI = 2; + + +extern(Windows) { + SOCKET WSAAccept(SOCKET, SOCKADDR*, LPINT, LPCONDITIONPROC, DWORD); + INT WSAAddressToStringA(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOA, LPSTR, LPDWORD); + INT WSAAddressToStringW(LPSOCKADDR, DWORD, LPWSAPROTOCOL_INFOW, LPWSTR, LPDWORD); + BOOL WSACloseEvent(WSAEVENT); + int WSAConnect(SOCKET, SOCKADDR*, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS); + WSAEVENT WSACreateEvent(); + int WSADuplicateSocketA(SOCKET, DWORD, LPWSAPROTOCOL_INFOA); + int WSADuplicateSocketW(SOCKET, DWORD, LPWSAPROTOCOL_INFOW); + INT WSAEnumNameSpaceProvidersA(LPDWORD, LPWSANAMESPACE_INFOA); + INT WSAEnumNameSpaceProvidersW(LPDWORD, LPWSANAMESPACE_INFOW); + int WSAEnumNetworkEvents(SOCKET, WSAEVENT, LPWSANETWORKEVENTS); + int WSAEnumProtocolsA(LPINT, LPWSAPROTOCOL_INFOA, LPDWORD); + int WSAEnumProtocolsW(LPINT, LPWSAPROTOCOL_INFOW, LPDWORD); + int WSAEventSelect(SOCKET, WSAEVENT, int); + BOOL WSAGetOverlappedResult(SOCKET, LPWSAOVERLAPPED, LPDWORD, BOOL, LPDWORD); + BOOL WSAGetQOSByName(SOCKET, LPWSABUF, LPQOS); + INT WSAGetServiceClassInfoA(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOA); + INT WSAGetServiceClassInfoW(LPGUID, LPGUID, LPDWORD, LPWSASERVICECLASSINFOW); + INT WSAGetServiceClassNameByClassIdA(LPGUID, LPSTR, LPDWORD); + INT WSAGetServiceClassNameByClassIdW(LPGUID, LPWSTR, LPDWORD); + int WSAHtonl(SOCKET, uint, uint*); + int WSAHtons(SOCKET, ushort, ushort*); + INT WSAInstallServiceClassA(LPWSASERVICECLASSINFOA); + INT WSAInstallServiceClassW(LPWSASERVICECLASSINFOW); + int WSAIoctl(SOCKET, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); + SOCKET WSAJoinLeaf(SOCKET, SOCKADDR*, int, LPWSABUF, LPWSABUF, LPQOS, LPQOS, DWORD); + INT WSALookupServiceBeginA(LPWSAQUERYSETA, DWORD, LPHANDLE); + INT WSALookupServiceBeginW(LPWSAQUERYSETW lpqsRestrictions, DWORD, LPHANDLE); + INT WSALookupServiceNextA(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETA); + INT WSALookupServiceNextW(HANDLE, DWORD, LPDWORD, LPWSAQUERYSETW); + INT WSALookupServiceEnd(HANDLE); + int WSANSPIoctl(HANDLE,DWORD,LPVOID,DWORD,LPVOID,DWORD,LPDWORD,LPWSACOMPLETION); /* XP or .NET Server */ + int WSANtohl(SOCKET, uint, uint*); + int WSANtohs(SOCKET, ushort, ushort*); + int WSARecv(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); + int WSARecvDisconnect(SOCKET, LPWSABUF); + int WSARecvFrom(SOCKET, LPWSABUF, DWORD, LPDWORD, LPDWORD, SOCKADDR*, LPINT, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); + INT WSARemoveServiceClass(LPGUID); + BOOL WSAResetEvent(WSAEVENT); + int WSASend(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); + int WSASendDisconnect(SOCKET, LPWSABUF); + int WSASendTo(SOCKET, LPWSABUF, DWORD, LPDWORD, DWORD, SOCKADDR*, int, LPWSAOVERLAPPED, LPWSAOVERLAPPED_COMPLETION_ROUTINE); + BOOL WSASetEvent(WSAEVENT); + INT WSASetServiceA(LPWSAQUERYSETA, WSAESETSERVICEOP, DWORD); // NB: was declared with "WSAAPI" linkage + INT WSASetServiceW(LPWSAQUERYSETW, WSAESETSERVICEOP, DWORD); + SOCKET WSASocketA(int, int, int, LPWSAPROTOCOL_INFOA, GROUP, DWORD); + SOCKET WSASocketW(int, int, int, LPWSAPROTOCOL_INFOW, GROUP, DWORD); + INT WSAStringToAddressA(LPSTR, INT, LPWSAPROTOCOL_INFOA, LPSOCKADDR, LPINT); + INT WSAStringToAddressW(LPWSTR, INT, LPWSAPROTOCOL_INFOW, LPSOCKADDR, LPINT); + DWORD WSAWaitForMultipleEvents(DWORD, WSAEVENT*, BOOL, DWORD, BOOL); + + alias typeof(&WSAAccept) LPFN_WSAACCEPT; + alias typeof(&WSAAddressToStringA) LPFN_WSAADDRESSTOSTRINGA; + alias typeof(&WSAAddressToStringW) LPFN_WSAADDRESSTOSTRINGW; + alias typeof(&WSACloseEvent) LPFN_WSACLOSEEVENT; + alias typeof(&WSAConnect) LPFN_WSACONNECT; + alias typeof(&WSACreateEvent) LPFN_WSACREATEEVENT; + alias typeof(&WSADuplicateSocketA) LPFN_WSADUPLICATESOCKETA; + alias typeof(&WSADuplicateSocketW) LPFN_WSADUPLICATESOCKETW; + alias typeof(&WSAEnumNameSpaceProvidersA) LPFN_WSAENUMNAMESPACEPROVIDERSA; + alias typeof(&WSAEnumNameSpaceProvidersW) LPFN_WSAENUMNAMESPACEPROVIDERSW; + alias typeof(&WSAEnumNetworkEvents) LPFN_WSAENUMNETWORKEVENTS; + alias typeof(&WSAEnumProtocolsA) LPFN_WSAENUMPROTOCOLSA; + alias typeof(&WSAEnumProtocolsW) LPFN_WSAENUMPROTOCOLSW; + alias typeof(&WSAEventSelect) LPFN_WSAEVENTSELECT; + alias typeof(&WSAGetOverlappedResult) LPFN_WSAGETOVERLAPPEDRESULT; + alias typeof(&WSAGetQOSByName) LPFN_WSAGETQOSBYNAME; + alias typeof(&WSAGetServiceClassInfoA) LPFN_WSAGETSERVICECLASSINFOA; + alias typeof(&WSAGetServiceClassInfoW) LPFN_WSAGETSERVICECLASSINFOW; + alias typeof(&WSAGetServiceClassNameByClassIdA) LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA; + alias typeof(&WSAGetServiceClassNameByClassIdW) LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW; + alias typeof(&WSAHtonl) LPFN_WSAHTONL; + alias typeof(&WSAHtons) LPFN_WSAHTONS; + alias typeof(&WSAInstallServiceClassA) LPFN_WSAINSTALLSERVICECLASSA; + alias typeof(&WSAInstallServiceClassW) LPFN_WSAINSTALLSERVICECLASSW; + alias typeof(&WSAIoctl) LPFN_WSAIOCTL; + alias typeof(&WSAJoinLeaf) LPFN_WSAJOINLEAF; + alias typeof(&WSALookupServiceBeginA) LPFN_WSALOOKUPSERVICEBEGINA; + alias typeof(&WSALookupServiceBeginW) LPFN_WSALOOKUPSERVICEBEGINW; + alias typeof(&WSALookupServiceNextA) LPFN_WSALOOKUPSERVICENEXTA; + alias typeof(&WSALookupServiceNextW) LPFN_WSALOOKUPSERVICENEXTW; + alias typeof(&WSALookupServiceEnd) LPFN_WSALOOKUPSERVICEEND; + alias typeof(&WSANSPIoctl) LPFN_WSANSPIoctl; + alias typeof(&WSANtohl) LPFN_WSANTOHL; + alias typeof(&WSANtohs) LPFN_WSANTOHS; + alias typeof(&WSARecv) LPFN_WSARECV; + alias typeof(&WSARecvDisconnect) LPFN_WSARECVDISCONNECT; + alias typeof(&WSARecvFrom) LPFN_WSARECVFROM; + alias typeof(&WSARemoveServiceClass) LPFN_WSAREMOVESERVICECLASS; + alias typeof(&WSAResetEvent) LPFN_WSARESETEVENT; + alias typeof(&WSASend) LPFN_WSASEND; + alias typeof(&WSASendDisconnect) LPFN_WSASENDDISCONNECT; + alias typeof(&WSASendTo) LPFN_WSASENDTO; + alias typeof(&WSASetEvent) LPFN_WSASETEVENT; + alias typeof(&WSASetServiceA) LPFN_WSASETSERVICEA; + alias typeof(&WSASetServiceW) LPFN_WSASETSERVICEW; + alias typeof(&WSASocketA) LPFN_WSASOCKETA; + alias typeof(&WSASocketW) LPFN_WSASOCKETW; + alias typeof(&WSAStringToAddressA) LPFN_WSASTRINGTOADDRESSA; + alias typeof(&WSAStringToAddressW) LPFN_WSASTRINGTOADDRESSW; + alias typeof(&WSAWaitForMultipleEvents) LPFN_WSAWAITFORMULTIPLEEVENTS; +} + +version(Unicode) { + alias LPFN_WSAADDRESSTOSTRINGW LPFN_WSAADDRESSTOSTRING; + alias LPFN_WSADUPLICATESOCKETW LPFN_WSADUPLICATESOCKET; + alias LPFN_WSAENUMNAMESPACEPROVIDERSW LPFN_WSAENUMNAMESPACEPROVIDERS; + alias LPFN_WSAENUMPROTOCOLSW LPFN_WSAENUMPROTOCOLS; + alias LPFN_WSAGETSERVICECLASSINFOW LPFN_WSAGETSERVICECLASSINFO; + alias LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDW LPFN_WSAGETSERVICECLASSNAMEBYCLASSID; + alias LPFN_WSAINSTALLSERVICECLASSW LPFN_WSAINSTALLSERVICECLASS; + alias LPFN_WSALOOKUPSERVICEBEGINW LPFN_WSALOOKUPSERVICEBEGIN; + alias LPFN_WSALOOKUPSERVICENEXTW LPFN_WSALOOKUPSERVICENEXT; + alias LPFN_WSASETSERVICEW LPFN_WSASETSERVICE; + alias LPFN_WSASOCKETW LPFN_WSASOCKET; + alias LPFN_WSASTRINGTOADDRESSW LPFN_WSASTRINGTOADDRESS; + alias WSAAddressToStringW WSAAddressToString; + alias WSADuplicateSocketW WSADuplicateSocket; + alias WSAEnumNameSpaceProvidersW WSAEnumNameSpaceProviders; + alias WSAEnumProtocolsW WSAEnumProtocols; + alias WSAGetServiceClassInfoW WSAGetServiceClassInfo; + alias WSAGetServiceClassNameByClassIdW WSAGetServiceClassNameByClassId; + alias WSASetServiceW WSASetService; + alias WSASocketW WSASocket; + alias WSAStringToAddressW WSAStringToAddress; + alias WSALookupServiceBeginW WSALookupServiceBegin; + alias WSALookupServiceNextW WSALookupServiceNext; + alias WSAInstallServiceClassW WSAInstallServiceClass; +} else { + alias LPFN_WSAADDRESSTOSTRINGA LPFN_WSAADDRESSTOSTRING; + alias LPFN_WSADUPLICATESOCKETW LPFN_WSADUPLICATESOCKET; + alias LPFN_WSAENUMNAMESPACEPROVIDERSA LPFN_WSAENUMNAMESPACEPROVIDERS; + alias LPFN_WSAENUMPROTOCOLSA LPFN_WSAENUMPROTOCOLS; + alias LPFN_WSAGETSERVICECLASSINFOA LPFN_WSAGETSERVICECLASSINFO; + alias LPFN_WSAGETSERVICECLASSNAMEBYCLASSIDA LPFN_WSAGETSERVICECLASSNAMEBYCLASSID; + alias LPFN_WSAINSTALLSERVICECLASSA LPFN_WSAINSTALLSERVICECLASS; + alias LPFN_WSALOOKUPSERVICEBEGINA LPFN_WSALOOKUPSERVICEBEGIN; + alias LPFN_WSALOOKUPSERVICENEXTA LPFN_WSALOOKUPSERVICENEXT; + alias LPFN_WSASETSERVICEA LPFN_WSASETSERVICE; + alias LPFN_WSASOCKETA LPFN_WSASOCKET; + alias LPFN_WSASTRINGTOADDRESSA LPFN_WSASTRINGTOADDRESS; + alias WSAAddressToStringA WSAAddressToString; + alias WSADuplicateSocketA WSADuplicateSocket; + alias WSAEnumNameSpaceProvidersA WSAEnumNameSpaceProviders; + alias WSAEnumProtocolsA WSAEnumProtocols; + alias WSAGetServiceClassInfoA WSAGetServiceClassInfo; + alias WSAGetServiceClassNameByClassIdA WSAGetServiceClassNameByClassId; + alias WSAInstallServiceClassA WSAInstallServiceClass; + alias WSALookupServiceBeginA WSALookupServiceBegin; + alias WSALookupServiceNextA WSALookupServiceNext; + alias WSASocketA WSASocket; + alias WSAStringToAddressA WSAStringToAddress; + alias WSASetServiceA WSASetService; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winspool.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winspool.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,961 @@ +/***********************************************************************\ +* winspool.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winspool; +pragma(lib, "winspool.lib"); + +private import win32.w32api, win32.windef, win32.wingdi; +private import win32.winbase; // for SYSTEMTIME + +// FIXME: clean up Windows version support + +const DI_CHANNEL=1; +const DI_CHANNEL_WRITE=2; +const DI_READ_SPOOL_JOB=3; + +const FORM_BUILTIN=1; + +const JOB_CONTROL_PAUSE=1; +const JOB_CONTROL_RESUME=2; +const JOB_CONTROL_CANCEL=3; +const JOB_CONTROL_RESTART=4; +const JOB_CONTROL_DELETE=5; +const JOB_STATUS_PAUSED=1; +const JOB_STATUS_ERROR=2; +const JOB_STATUS_DELETING=4; +const JOB_STATUS_SPOOLING=8; +const JOB_STATUS_PRINTING=16; +const JOB_STATUS_OFFLINE=32; +const JOB_STATUS_PAPEROUT=0x40; +const JOB_STATUS_PRINTED=0x80; +const JOB_STATUS_DELETED=0x100; +const JOB_STATUS_BLOCKED_DEVQ=0x200; +const JOB_STATUS_USER_INTERVENTION=0x400; + +const JOB_POSITION_UNSPECIFIED=0; + +const JOB_NOTIFY_TYPE=1; + +const JOB_NOTIFY_FIELD_PRINTER_NAME=0; +const JOB_NOTIFY_FIELD_MACHINE_NAME=1; +const JOB_NOTIFY_FIELD_PORT_NAME=2; +const JOB_NOTIFY_FIELD_USER_NAME=3; +const JOB_NOTIFY_FIELD_NOTIFY_NAME=4; +const JOB_NOTIFY_FIELD_DATATYPE=5; +const JOB_NOTIFY_FIELD_PRINT_PROCESSOR=6; +const JOB_NOTIFY_FIELD_PARAMETERS=7; +const JOB_NOTIFY_FIELD_DRIVER_NAME=8; +const JOB_NOTIFY_FIELD_DEVMODE=9; +const JOB_NOTIFY_FIELD_STATUS=10; +const JOB_NOTIFY_FIELD_STATUS_STRING=11; +const JOB_NOTIFY_FIELD_SECURITY_DESCRIPTOR=12; +const JOB_NOTIFY_FIELD_DOCUMENT=13; +const JOB_NOTIFY_FIELD_PRIORITY=14; +const JOB_NOTIFY_FIELD_POSITION=15; +const JOB_NOTIFY_FIELD_SUBMITTED=16; +const JOB_NOTIFY_FIELD_START_TIME=17; +const JOB_NOTIFY_FIELD_UNTIL_TIME=18; +const JOB_NOTIFY_FIELD_TIME=19; +const JOB_NOTIFY_FIELD_TOTAL_PAGES=20; +const JOB_NOTIFY_FIELD_PAGES_PRINTED=21; +const JOB_NOTIFY_FIELD_TOTAL_BYTES=22; +const JOB_NOTIFY_FIELD_BYTES_PRINTED=23; + +const JOB_ACCESS_ADMINISTER = 16; +const JOB_ALL_ACCESS = STANDARD_RIGHTS_REQUIRED | JOB_ACCESS_ADMINISTER; +const JOB_READ = STANDARD_RIGHTS_READ | JOB_ACCESS_ADMINISTER; +const JOB_WRITE = STANDARD_RIGHTS_WRITE | JOB_ACCESS_ADMINISTER; +const JOB_EXECUTE = STANDARD_RIGHTS_EXECUTE | JOB_ACCESS_ADMINISTER; + +const PRINTER_NOTIFY_OPTIONS_REFRESH=1; +const PRINTER_ACCESS_ADMINISTER=4; +const PRINTER_ACCESS_USE=8; + +const PRINTER_ERROR_INFORMATION=0x80000000; +const PRINTER_ERROR_WARNING=0x40000000; +const PRINTER_ERROR_SEVERE=0x20000000; +const PRINTER_ERROR_OUTOFPAPER=1; +const PRINTER_ERROR_JAM=2; +const PRINTER_ERROR_OUTOFTONER=4; + +const PRINTER_CONTROL_PAUSE=1; +const PRINTER_CONTROL_RESUME=2; +const PRINTER_CONTROL_PURGE=3; +const PRINTER_CONTROL_SET_STATUS=4; + +const PRINTER_STATUS_PAUSED = 1; +const PRINTER_STATUS_ERROR = 2; +const PRINTER_STATUS_PENDING_DELETION = 4; +const PRINTER_STATUS_PAPER_JAM = 8; +const PRINTER_STATUS_PAPER_OUT = 0x10; +const PRINTER_STATUS_MANUAL_FEED = 0x20; +const PRINTER_STATUS_PAPER_PROBLEM = 0x40; +const PRINTER_STATUS_OFFLINE = 0x80; +const PRINTER_STATUS_IO_ACTIVE = 0x100; +const PRINTER_STATUS_BUSY = 0x200; +const PRINTER_STATUS_PRINTING = 0x400; +const PRINTER_STATUS_OUTPUT_BIN_FULL = 0x800; +const PRINTER_STATUS_NOT_AVAILABLE = 0x1000; +const PRINTER_STATUS_WAITING = 0x2000; +const PRINTER_STATUS_PROCESSING = 0x4000; +const PRINTER_STATUS_INITIALIZING = 0x8000; +const PRINTER_STATUS_WARMING_UP = 0x10000; +const PRINTER_STATUS_TONER_LOW = 0x20000; +const PRINTER_STATUS_NO_TONER = 0x40000; +const PRINTER_STATUS_PAGE_PUNT = 0x80000; +const PRINTER_STATUS_USER_INTERVENTION = 0x100000; +const PRINTER_STATUS_OUT_OF_MEMORY = 0x200000; +const PRINTER_STATUS_DOOR_OPEN = 0x400000; +const PRINTER_STATUS_SERVER_UNKNOWN = 0x800000; +const PRINTER_STATUS_POWER_SAVE = 0x1000000; + +const PRINTER_ATTRIBUTE_QUEUED=1; +const PRINTER_ATTRIBUTE_DIRECT=2; +const PRINTER_ATTRIBUTE_DEFAULT=4; +const PRINTER_ATTRIBUTE_SHARED=8; +const PRINTER_ATTRIBUTE_NETWORK=0x10; +const PRINTER_ATTRIBUTE_HIDDEN=0x20; +const PRINTER_ATTRIBUTE_LOCAL=0x40; +const PRINTER_ATTRIBUTE_ENABLE_DEVQ=0x80; +const PRINTER_ATTRIBUTE_KEEPPRINTEDJOBS=0x100; +const PRINTER_ATTRIBUTE_DO_COMPLETE_FIRST=0x200; +const PRINTER_ATTRIBUTE_WORK_OFFLINE=0x400; +const PRINTER_ATTRIBUTE_ENABLE_BIDI=0x800; +const PRINTER_ATTRIBUTE_RAW_ONLY=0x1000; +const PRINTER_ATTRIBUTE_PUBLISHED=0x2000; + +const PRINTER_ENUM_DEFAULT=1; +const PRINTER_ENUM_LOCAL=2; +const PRINTER_ENUM_CONNECTIONS=4; +const PRINTER_ENUM_FAVORITE=4; +const PRINTER_ENUM_NAME=8; +const PRINTER_ENUM_REMOTE=16; +const PRINTER_ENUM_SHARED=32; +const PRINTER_ENUM_NETWORK=0x40; +const PRINTER_ENUM_EXPAND=0x4000; +const PRINTER_ENUM_CONTAINER=0x8000; +const PRINTER_ENUM_ICONMASK=0xff0000; +const PRINTER_ENUM_ICON1=0x10000; +const PRINTER_ENUM_ICON2=0x20000; +const PRINTER_ENUM_ICON3=0x40000; +const PRINTER_ENUM_ICON4=0x80000; +const PRINTER_ENUM_ICON5=0x100000; +const PRINTER_ENUM_ICON6=0x200000; +const PRINTER_ENUM_ICON7=0x400000; +const PRINTER_ENUM_ICON8=0x800000; + +const PRINTER_NOTIFY_TYPE=0; + +const PRINTER_NOTIFY_FIELD_SERVER_NAME=0; +const PRINTER_NOTIFY_FIELD_PRINTER_NAME=1; +const PRINTER_NOTIFY_FIELD_SHARE_NAME=2; +const PRINTER_NOTIFY_FIELD_PORT_NAME=3; +const PRINTER_NOTIFY_FIELD_DRIVER_NAME=4; +const PRINTER_NOTIFY_FIELD_COMMENT=5; +const PRINTER_NOTIFY_FIELD_LOCATION=6; +const PRINTER_NOTIFY_FIELD_DEVMODE=7; +const PRINTER_NOTIFY_FIELD_SEPFILE=8; +const PRINTER_NOTIFY_FIELD_PRINT_PROCESSOR=9; +const PRINTER_NOTIFY_FIELD_PARAMETERS=10; +const PRINTER_NOTIFY_FIELD_DATATYPE=11; +const PRINTER_NOTIFY_FIELD_SECURITY_DESCRIPTOR=12; +const PRINTER_NOTIFY_FIELD_ATTRIBUTES=13; +const PRINTER_NOTIFY_FIELD_PRIORITY=14; +const PRINTER_NOTIFY_FIELD_DEFAULT_PRIORITY=15; +const PRINTER_NOTIFY_FIELD_START_TIME=16; +const PRINTER_NOTIFY_FIELD_UNTIL_TIME=17; +const PRINTER_NOTIFY_FIELD_STATUS=18; +const PRINTER_NOTIFY_FIELD_STATUS_STRING=19; +const PRINTER_NOTIFY_FIELD_CJOBS=20; +const PRINTER_NOTIFY_FIELD_AVERAGE_PPM=21; +const PRINTER_NOTIFY_FIELD_TOTAL_PAGES=22; +const PRINTER_NOTIFY_FIELD_PAGES_PRINTED=23; +const PRINTER_NOTIFY_FIELD_TOTAL_BYTES=24; +const PRINTER_NOTIFY_FIELD_BYTES_PRINTED=25; + +const PRINTER_CHANGE_ADD_PRINTER=1; +const PRINTER_CHANGE_SET_PRINTER=2; +const PRINTER_CHANGE_DELETE_PRINTER=4; +const PRINTER_CHANGE_FAILED_CONNECTION_PRINTER=8; +const PRINTER_CHANGE_PRINTER=0xFF; +const PRINTER_CHANGE_ADD_JOB=0x100; +const PRINTER_CHANGE_SET_JOB=0x200; +const PRINTER_CHANGE_DELETE_JOB=0x400; +const PRINTER_CHANGE_WRITE_JOB=0x800; +const PRINTER_CHANGE_JOB=0xFF00; +const PRINTER_CHANGE_ADD_FORM=0x10000; +const PRINTER_CHANGE_SET_FORM=0x20000; +const PRINTER_CHANGE_DELETE_FORM=0x40000; +const PRINTER_CHANGE_FORM=0x70000; +const PRINTER_CHANGE_ADD_PORT=0x100000; +const PRINTER_CHANGE_CONFIGURE_PORT=0x200000; +const PRINTER_CHANGE_DELETE_PORT=0x400000; +const PRINTER_CHANGE_PORT=0x700000; +const PRINTER_CHANGE_ADD_PRINT_PROCESSOR=0x1000000; +const PRINTER_CHANGE_DELETE_PRINT_PROCESSOR=0x4000000; +const PRINTER_CHANGE_PRINT_PROCESSOR=0x7000000; +const PRINTER_CHANGE_ADD_PRINTER_DRIVER=0x10000000; +const PRINTER_CHANGE_SET_PRINTER_DRIVER=0x20000000; +const PRINTER_CHANGE_DELETE_PRINTER_DRIVER=0x40000000; +const PRINTER_CHANGE_PRINTER_DRIVER=0x70000000; +const PRINTER_CHANGE_TIMEOUT=0x80000000; +const PRINTER_CHANGE_ALL=0x7777FFFF; + +const PRINTER_NOTIFY_INFO_DISCARDED=1; +const PRINTER_ALL_ACCESS=(STANDARD_RIGHTS_REQUIRED|PRINTER_ACCESS_ADMINISTER|PRINTER_ACCESS_USE); +const PRINTER_READ=(STANDARD_RIGHTS_READ|PRINTER_ACCESS_USE); +const PRINTER_WRITE=(STANDARD_RIGHTS_WRITE|PRINTER_ACCESS_USE); +const PRINTER_EXECUTE=(STANDARD_RIGHTS_EXECUTE|PRINTER_ACCESS_USE); +const NO_PRIORITY=0; +const MAX_PRIORITY=99; +const MIN_PRIORITY=1; +const DEF_PRIORITY=1; +const PORT_TYPE_WRITE=1; +const PORT_TYPE_READ=2; +const PORT_TYPE_REDIRECTED=4; +const PORT_TYPE_NET_ATTACHED=8; +const SERVER_ACCESS_ADMINISTER=1; +const SERVER_ACCESS_ENUMERATE=2; + +const SERVER_ALL_ACCESS=(STANDARD_RIGHTS_REQUIRED|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE); +const SERVER_READ=(STANDARD_RIGHTS_READ|SERVER_ACCESS_ENUMERATE); +const SERVER_WRITE=(STANDARD_RIGHTS_WRITE|SERVER_ACCESS_ADMINISTER|SERVER_ACCESS_ENUMERATE); +const SERVER_EXECUTE=(STANDARD_RIGHTS_EXECUTE|SERVER_ACCESS_ENUMERATE); + +const PORT_STATUS_TYPE_ERROR=1; +const PORT_STATUS_TYPE_WARNING=2; +const PORT_STATUS_TYPE_INFO=3; + +const PORT_STATUS_OFFLINE=1; +const PORT_STATUS_PAPER_JAM=2; +const PORT_STATUS_PAPER_OUT=3; +const PORT_STATUS_OUTPUT_BIN_FULL=4; +const PORT_STATUS_PAPER_PROBLEM=5; +const PORT_STATUS_NO_TONER=6; +const PORT_STATUS_DOOR_OPEN=7; +const PORT_STATUS_USER_INTERVENTION=8; +const PORT_STATUS_OUT_OF_MEMORY=9; +const PORT_STATUS_TONER_LOW=10; +const PORT_STATUS_WARMING_UP=11; +const PORT_STATUS_POWER_SAVE=12; + +struct ADDJOB_INFO_1A { + LPSTR Path; + DWORD JobId; +} +alias ADDJOB_INFO_1A* PADDJOB_INFO_1A, LPADDJOB_INFO_1A; + +struct ADDJOB_INFO_1W { + LPWSTR Path; + DWORD JobId; +} +alias ADDJOB_INFO_1W* PADDJOB_INFO_1W, LPADDJOB_INFO_1W; + +struct DATATYPES_INFO_1A { + LPSTR pName; +} +alias DATATYPES_INFO_1A* PDATATYPES_INFO_1A, LPDATATYPES_INFO_1A; + +struct DATATYPES_INFO_1W { + LPWSTR pName; +} +alias DATATYPES_INFO_1W* PDATATYPES_INFO_1W, LPDATATYPES_INFO_1W; + +struct JOB_INFO_1A { + DWORD JobId; + LPSTR pPrinterName; + LPSTR pMachineName; + LPSTR pUserName; + LPSTR pDocument; + LPSTR pDatatype; + LPSTR pStatus; + DWORD Status; + DWORD Priority; + DWORD Position; + DWORD TotalPages; + DWORD PagesPrinted; + SYSTEMTIME Submitted; +} +alias JOB_INFO_1A* PJOB_INFO_1A, LPJOB_INFO_1A; + +struct JOB_INFO_1W { + DWORD JobId; + LPWSTR pPrinterName; + LPWSTR pMachineName; + LPWSTR pUserName; + LPWSTR pDocument; + LPWSTR pDatatype; + LPWSTR pStatus; + DWORD Status; + DWORD Priority; + DWORD Position; + DWORD TotalPages; + DWORD PagesPrinted; + SYSTEMTIME Submitted; +} +alias JOB_INFO_1W* PJOB_INFO_1W, LPJOB_INFO_1W; + +struct JOB_INFO_2A { + DWORD JobId; + LPSTR pPrinterName; + LPSTR pMachineName; + LPSTR pUserName; + LPSTR pDocument; + LPSTR pNotifyName; + LPSTR pDatatype; + LPSTR pPrintProcessor; + LPSTR pParameters; + LPSTR pDriverName; + LPDEVMODEA pDevMode; + LPSTR pStatus; + PSECURITY_DESCRIPTOR pSecurityDescriptor; + DWORD Status; + DWORD Priority; + DWORD Position; + DWORD StartTime; + DWORD UntilTime; + DWORD TotalPages; + DWORD Size; + SYSTEMTIME Submitted; + DWORD Time; + DWORD PagesPrinted; +} +alias JOB_INFO_2A* PJOB_INFO_2A, LPJOB_INFO_2A; + +struct JOB_INFO_2W { + DWORD JobId; + LPWSTR pPrinterName; + LPWSTR pMachineName; + LPWSTR pUserName; + LPWSTR pDocument; + LPWSTR pNotifyName; + LPWSTR pDatatype; + LPWSTR pPrintProcessor; + LPWSTR pParameters; + LPWSTR pDriverName; + LPDEVMODEW pDevMode; + LPWSTR pStatus; + PSECURITY_DESCRIPTOR pSecurityDescriptor; + DWORD Status; + DWORD Priority; + DWORD Position; + DWORD StartTime; + DWORD UntilTime; + DWORD TotalPages; + DWORD Size; + SYSTEMTIME Submitted; + DWORD Time; + DWORD PagesPrinted; +} +alias JOB_INFO_2W* PJOB_INFO_2W, LPJOB_INFO_2W; + +struct DOC_INFO_1A { + LPSTR pDocName; + LPSTR pOutputFile; + LPSTR pDatatype; +} +alias DOC_INFO_1A* PDOC_INFO_1A, LPDOC_INFO_1A; + +struct DOC_INFO_1W { + LPWSTR pDocName; + LPWSTR pOutputFile; + LPWSTR pDatatype; +} +alias DOC_INFO_1W* PDOC_INFO_1W, LPDOC_INFO_1W; + +struct DOC_INFO_2A { + LPSTR pDocName; + LPSTR pOutputFile; + LPSTR pDatatype; + DWORD dwMode; + DWORD JobId; +} +alias DOC_INFO_2A* PDOC_INFO_2A, LPDOC_INFO_2A; + +struct DOC_INFO_2W { + LPWSTR pDocName; + LPWSTR pOutputFile; + LPWSTR pDatatype; + DWORD dwMode; + DWORD JobId; +} +alias DOC_INFO_2W* PDOC_INFO_2W, LPDOC_INFO_2W; + +struct DRIVER_INFO_1A { + LPSTR pName; +} +alias DRIVER_INFO_1A* PDRIVER_INFO_1A, LPDRIVER_INFO_1A; + +struct DRIVER_INFO_1W { + LPWSTR pName; +} +alias DRIVER_INFO_1W* PDRIVER_INFO_1W, LPDRIVER_INFO_1W; + +struct DRIVER_INFO_2A { + DWORD cVersion; + LPSTR pName; + LPSTR pEnvironment; + LPSTR pDriverPath; + LPSTR pDataFile; + LPSTR pConfigFile; +} +alias DRIVER_INFO_2A* PDRIVER_INFO_2A, LPDRIVER_INFO_2A; + +struct DRIVER_INFO_2W { + DWORD cVersion; + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDriverPath; + LPWSTR pDataFile; + LPWSTR pConfigFile; +} +alias DRIVER_INFO_2W* PDRIVER_INFO_2W, LPDRIVER_INFO_2W; + +struct DRIVER_INFO_3A { + DWORD cVersion; + LPSTR pName; + LPSTR pEnvironment; + LPSTR pDriverPath; + LPSTR pDataFile; + LPSTR pConfigFile; + LPSTR pHelpFile; + LPSTR pDependentFiles; + LPSTR pMonitorName; + LPSTR pDefaultDataType; +} +alias DRIVER_INFO_3A* PDRIVER_INFO_3A, LPDRIVER_INFO_3A; + +struct DRIVER_INFO_3W { + DWORD cVersion; + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDriverPath; + LPWSTR pDataFile; + LPWSTR pConfigFile; + LPWSTR pHelpFile; + LPWSTR pDependentFiles; + LPWSTR pMonitorName; + LPWSTR pDefaultDataType; +} +alias DRIVER_INFO_3W* PDRIVER_INFO_3W, LPDRIVER_INFO_3W; + +struct MONITOR_INFO_1A { + LPSTR pName; +} +alias MONITOR_INFO_1A* PMONITOR_INFO_1A, LPMONITOR_INFO_1A; + +struct MONITOR_INFO_1W { + LPWSTR pName; +} +alias MONITOR_INFO_1W* PMONITOR_INFO_1W, LPMONITOR_INFO_1W; + +struct PORT_INFO_1A { + LPSTR pName; +} +alias PORT_INFO_1A* PPORT_INFO_1A, LPPORT_INFO_1A; + +struct PORT_INFO_1W { + LPWSTR pName; +} +alias PORT_INFO_1W* PPORT_INFO_1W, LPPORT_INFO_1W; + +struct MONITOR_INFO_2A { + LPSTR pName; + LPSTR pEnvironment; + LPSTR pDLLName; +} +alias MONITOR_INFO_2A* PMONITOR_INFO_2A, LPMONITOR_INFO_2A; + +struct MONITOR_INFO_2W { + LPWSTR pName; + LPWSTR pEnvironment; + LPWSTR pDLLName; +} +alias MONITOR_INFO_2W* PMONITOR_INFO_2W, LPMONITOR_INFO_2W; + +struct PORT_INFO_2A { + LPSTR pPortName; + LPSTR pMonitorName; + LPSTR pDescription; + DWORD fPortType; + DWORD Reserved; +} +alias PORT_INFO_2A* PPORT_INFO_2A, LPPORT_INFO_2A; + +struct PORT_INFO_2W { + LPWSTR pPortName; + LPWSTR pMonitorName; + LPWSTR pDescription; + DWORD fPortType; + DWORD Reserved; +} +alias PORT_INFO_2W* PPORT_INFO_2W, LPPORT_INFO_2W; + +struct PORT_INFO_3A { + DWORD dwStatus; + LPSTR pszStatus; + DWORD dwSeverity; +} +alias PORT_INFO_3A* PPORT_INFO_3A, LPPORT_INFO_3A; + +struct PORT_INFO_3W { + DWORD dwStatus; + LPWSTR pszStatus; + DWORD dwSeverity; +} +alias PORT_INFO_3W* PPORT_INFO_3W, LPPORT_INFO_3W; + +struct PRINTER_INFO_1A { + DWORD Flags; + LPSTR pDescription; + LPSTR pName; + LPSTR pComment; +} +alias PRINTER_INFO_1A* PPRINTER_INFO_1A, LPPRINTER_INFO_1A; + +struct PRINTER_INFO_1W { + DWORD Flags; + LPWSTR pDescription; + LPWSTR pName; + LPWSTR pComment; +} +alias PRINTER_INFO_1W* PPRINTER_INFO_1W, LPPRINTER_INFO_1W; + +struct PRINTER_INFO_2A { + LPSTR pServerName; + LPSTR pPrinterName; + LPSTR pShareName; + LPSTR pPortName; + LPSTR pDriverName; + LPSTR pComment; + LPSTR pLocation; + LPDEVMODEA pDevMode; + LPSTR pSepFile; + LPSTR pPrintProcessor; + LPSTR pDatatype; + LPSTR pParameters; + PSECURITY_DESCRIPTOR pSecurityDescriptor; + DWORD Attributes; + DWORD Priority; + DWORD DefaultPriority; + DWORD StartTime; + DWORD UntilTime; + DWORD Status; + DWORD cJobs; + DWORD AveragePPM; +} +alias PRINTER_INFO_2A* PPRINTER_INFO_2A, LPPRINTER_INFO_2A; + +struct PRINTER_INFO_2W { + LPWSTR pServerName; + LPWSTR pPrinterName; + LPWSTR pShareName; + LPWSTR pPortName; + LPWSTR pDriverName; + LPWSTR pComment; + LPWSTR pLocation; + LPDEVMODEW pDevMode; + LPWSTR pSepFile; + LPWSTR pPrintProcessor; + LPWSTR pDatatype; + LPWSTR pParameters; + PSECURITY_DESCRIPTOR pSecurityDescriptor; + DWORD Attributes; + DWORD Priority; + DWORD DefaultPriority; + DWORD StartTime; + DWORD UntilTime; + DWORD Status; + DWORD cJobs; + DWORD AveragePPM; +} +alias PRINTER_INFO_2W* PPRINTER_INFO_2W, LPPRINTER_INFO_2W; + +struct PRINTER_INFO_3 { + PSECURITY_DESCRIPTOR pSecurityDescriptor; +} +alias PRINTER_INFO_3* PPRINTER_INFO_3, LPPRINTER_INFO_3; + +struct PRINTER_INFO_4A { + LPSTR pPrinterName; + LPSTR pServerName; + DWORD Attributes; +} +alias PRINTER_INFO_4A* PPRINTER_INFO_4A, LPPRINTER_INFO_4A; + +struct PRINTER_INFO_4W { + LPWSTR pPrinterName; + LPWSTR pServerName; + DWORD Attributes; +} +alias PRINTER_INFO_4W* PPRINTER_INFO_4W, LPPRINTER_INFO_4W; + +struct PRINTER_INFO_5A { + LPSTR pPrinterName; + LPSTR pPortName; + DWORD Attributes; + DWORD DeviceNotSelectedTimeout; + DWORD TransmissionRetryTimeout; +} +alias PRINTER_INFO_5A* PPRINTER_INFO_5A, LPPRINTER_INFO_5A; + +struct PRINTER_INFO_5W { + LPWSTR pPrinterName; + LPWSTR pPortName; + DWORD Attributes; + DWORD DeviceNotSelectedTimeout; + DWORD TransmissionRetryTimeout; +} +alias PRINTER_INFO_5W* PPRINTER_INFO_5W, LPPRINTER_INFO_5W; + +struct PRINTER_INFO_6 { + DWORD dwStatus; +} +alias PRINTER_INFO_6* PPRINTER_INFO_6, LPPRINTER_INFO_6; + +struct PRINTPROCESSOR_INFO_1A { + LPSTR pName; +} +alias PRINTPROCESSOR_INFO_1A* PPRINTPROCESSOR_INFO_1A, LPPRINTPROCESSOR_INFO_1A; + +struct PRINTPROCESSOR_INFO_1W { + LPWSTR pName; +} +alias PRINTPROCESSOR_INFO_1W* PPRINTPROCESSOR_INFO_1W, LPPRINTPROCESSOR_INFO_1W; + +struct PRINTER_NOTIFY_INFO_DATA { + WORD Type; + WORD Field; + DWORD Reserved; + DWORD Id; + union _NotifyData { + DWORD adwData[2]; + struct Data { + DWORD cbBuf; + PVOID pBuf; + } + } + _NotifyData NotifyData; +} +alias PRINTER_NOTIFY_INFO_DATA* PPRINTER_NOTIFY_INFO_DATA, LPPRINTER_NOTIFY_INFO_DATA; + +struct PRINTER_NOTIFY_INFO { + DWORD Version; + DWORD Flags; + DWORD Count; + PRINTER_NOTIFY_INFO_DATA aData[1]; +} +alias PRINTER_NOTIFY_INFO* PPRINTER_NOTIFY_INFO, LPPRINTER_NOTIFY_INFO; + +struct FORM_INFO_1A { + DWORD Flags; + LPSTR pName; + SIZEL Size; + RECTL ImageableArea; +} +alias FORM_INFO_1A* PFORM_INFO_1A, LPFORM_INFO_1A; + +struct FORM_INFO_1W { + DWORD Flags; + LPWSTR pName; + SIZEL Size; + RECTL ImageableArea; +} +alias FORM_INFO_1W* PFORM_INFO_1W, LPFORM_INFO_1W; + +struct PRINTER_DEFAULTSA { + LPSTR pDatatype; + LPDEVMODE pDevMode; + ACCESS_MASK DesiredAccess; +} +alias PRINTER_DEFAULTSA* PPRINTER_DEFAULTSA, LPPRINTER_DEFAULTSA; + +struct PRINTER_DEFAULTSW { + LPWSTR pDatatype; + LPDEVMODE pDevMode; + ACCESS_MASK DesiredAccess; +} +alias PRINTER_DEFAULTSW* PPRINTER_DEFAULTSW, LPPRINTER_DEFAULTSW; + +extern (Windows): +BOOL AbortPrinter(HANDLE); +BOOL AddFormA(HANDLE, DWORD, PBYTE); +BOOL AddFormW(HANDLE, DWORD, PBYTE); +BOOL AddJobA(HANDLE, DWORD, PBYTE, DWORD, PDWORD); +BOOL AddJobW(HANDLE, DWORD, PBYTE, DWORD, PDWORD); +BOOL AddMonitorA(LPSTR, DWORD, PBYTE); +BOOL AddMonitorW(LPWSTR, DWORD, PBYTE); +BOOL AddPortA(LPSTR, HWND, LPSTR); +BOOL AddPortW(LPWSTR, HWND, LPWSTR); +HANDLE AddPrinterA(LPSTR, DWORD, PBYTE); +HANDLE AddPrinterW(LPWSTR, DWORD, PBYTE); +BOOL AddPrinterConnectionA(LPSTR); +BOOL AddPrinterConnectionW(LPWSTR); +BOOL AddPrinterDriverA(LPSTR, DWORD, PBYTE); +BOOL AddPrinterDriverW(LPWSTR, DWORD, PBYTE); +BOOL AddPrintProcessorA(LPSTR, LPSTR, LPSTR, LPSTR); +BOOL AddPrintProcessorW(LPWSTR, LPWSTR, LPWSTR, LPWSTR); +BOOL AddPrintProvidorA(LPSTR, DWORD, PBYTE); +BOOL AddPrintProvidorW(LPWSTR, DWORD, PBYTE); +LONG AdvancedDocumentPropertiesA(HWND, HANDLE, LPSTR, PDEVMODE, PDEVMODEA); +LONG AdvancedDocumentPropertiesW(HWND, HANDLE, LPWSTR, PDEVMODE, PDEVMODEW); +BOOL ClosePrinter(HANDLE); +BOOL ConfigurePortA(LPSTR, HWND, LPSTR); +BOOL ConfigurePortW(LPWSTR, HWND, LPWSTR); +HANDLE ConnectToPrinterDlg(HWND, DWORD); +BOOL DeleteFormA(HANDLE, LPSTR); +BOOL DeleteFormW(HANDLE, LPWSTR); +BOOL DeleteMonitorA(LPSTR, LPSTR, LPSTR); +BOOL DeleteMonitorW(LPWSTR, LPWSTR, LPWSTR); +BOOL DeletePortA(LPSTR, HWND, LPSTR); +BOOL DeletePortW(LPWSTR, HWND, LPWSTR); +BOOL DeletePrinter(HANDLE); +BOOL DeletePrinterConnectionA(LPSTR); +BOOL DeletePrinterConnectionW(LPWSTR); +DWORD DeletePrinterDataA(HANDLE, LPSTR); +DWORD DeletePrinterDataW(HANDLE, LPWSTR); +BOOL DeletePrinterDriverA(LPSTR, LPSTR, LPSTR); +BOOL DeletePrinterDriverW(LPWSTR, LPWSTR, LPWSTR); +BOOL DeletePrintProcessorA(LPSTR, LPSTR, LPSTR); +BOOL DeletePrintProcessorW(LPWSTR, LPWSTR, LPWSTR); +BOOL DeletePrintProvidorA(LPSTR, LPSTR, LPSTR); +BOOL DeletePrintProvidorW(LPWSTR, LPWSTR, LPWSTR); +LONG DocumentPropertiesA(HWND, HANDLE, LPSTR, PDEVMODEA, PDEVMODEA, DWORD); +LONG DocumentPropertiesW(HWND, HANDLE, LPWSTR, PDEVMODEW, PDEVMODEW, DWORD); +BOOL EndDocPrinter(HANDLE); +BOOL EndPagePrinter(HANDLE); +BOOL EnumFormsA(HANDLE, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumFormsW(HANDLE, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumJobsA(HANDLE, DWORD, DWORD, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumJobsW(HANDLE, DWORD, DWORD, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumMonitorsA(LPSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumMonitorsW(LPWSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumPortsA(LPSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumPortsW(LPWSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +DWORD EnumPrinterDataA(HANDLE, DWORD, LPSTR, DWORD, PDWORD, PDWORD, PBYTE, DWORD, PDWORD); +DWORD EnumPrinterDataW(HANDLE, DWORD, LPWSTR, DWORD, PDWORD, PDWORD, PBYTE, DWORD, PDWORD); +BOOL EnumPrinterDriversA(LPSTR, LPSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumPrinterDriversW(LPWSTR, LPWSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumPrintersA(DWORD, LPSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumPrintersW(DWORD, LPWSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumPrintProcessorDatatypesA(LPSTR, LPSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumPrintProcessorDatatypesW(LPWSTR, LPWSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumPrintProcessorsA(LPSTR, LPSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL EnumPrintProcessorsW(LPWSTR, LPWSTR, DWORD, PBYTE, DWORD, PDWORD, PDWORD); +BOOL FindClosePrinterChangeNotification(HANDLE); +HANDLE FindFirstPrinterChangeNotification(HANDLE, DWORD, DWORD, PVOID); +HANDLE FindNextPrinterChangeNotification(HANDLE, PDWORD, PVOID, PVOID*); +BOOL FreePrinterNotifyInfo(PPRINTER_NOTIFY_INFO); + +static if (_WIN32_WINNT >= 0x0500) { +BOOL GetDefaultPrinterA(LPSTR, LPDWORD); +BOOL GetDefaultPrinterW(LPWSTR, LPDWORD); +} + +BOOL GetFormA(HANDLE, LPSTR, DWORD, PBYTE, DWORD, PDWORD); +BOOL GetFormW(HANDLE, LPWSTR, DWORD, PBYTE, DWORD, PDWORD); +BOOL GetJobA(HANDLE, DWORD, DWORD, PBYTE, DWORD, PDWORD); +BOOL GetJobW(HANDLE, DWORD, DWORD, PBYTE, DWORD, PDWORD); +BOOL GetPrinterA(HANDLE, DWORD, PBYTE, DWORD, PDWORD); +BOOL GetPrinterW(HANDLE, DWORD, PBYTE, DWORD, PDWORD); +DWORD GetPrinterDataA(HANDLE, LPSTR, PDWORD, PBYTE, DWORD, PDWORD); +DWORD GetPrinterDataW(HANDLE, LPWSTR, PDWORD, PBYTE, DWORD, PDWORD); +DWORD GetPrinterDriverA(HANDLE, LPSTR, DWORD, PBYTE, DWORD, PDWORD); +DWORD GetPrinterDriverW(HANDLE, LPWSTR, DWORD, PBYTE, DWORD, PDWORD); +DWORD GetPrinterDriverDirectoryA(LPSTR, LPSTR, DWORD, PBYTE, DWORD, PDWORD); +DWORD GetPrinterDriverDirectoryW(LPWSTR, LPWSTR, DWORD, PBYTE, DWORD, PDWORD); +DWORD GetPrintProcessorDirectoryA(LPSTR, LPSTR, DWORD, PBYTE, DWORD, PDWORD); +DWORD GetPrintProcessorDirectoryW(LPWSTR, LPWSTR, DWORD, PBYTE, DWORD, PDWORD); +BOOL OpenPrinterA(LPSTR, PHANDLE, LPPRINTER_DEFAULTSA); +BOOL OpenPrinterW(LPWSTR, PHANDLE, LPPRINTER_DEFAULTSW); +DWORD PrinterMessageBoxA(HANDLE, DWORD, HWND, LPSTR, LPSTR, DWORD); +DWORD PrinterMessageBoxW(HANDLE, DWORD, HWND, LPWSTR, LPWSTR, DWORD); +BOOL PrinterProperties(HWND, HANDLE); +BOOL ReadPrinter(HANDLE, PVOID, DWORD, PDWORD); +BOOL ResetPrinterA(HANDLE, LPPRINTER_DEFAULTSA); +BOOL ResetPrinterW(HANDLE, LPPRINTER_DEFAULTSW); +BOOL ScheduleJob(HANDLE, DWORD); +BOOL SetFormA(HANDLE, LPSTR, DWORD, PBYTE); +BOOL SetFormW(HANDLE, LPWSTR, DWORD, PBYTE); +BOOL SetJobA(HANDLE, DWORD, DWORD, PBYTE, DWORD); +BOOL SetJobW(HANDLE, DWORD, DWORD, PBYTE, DWORD); +BOOL SetPrinterA(HANDLE, DWORD, PBYTE, DWORD); +BOOL SetPrinterW(HANDLE, DWORD, PBYTE, DWORD); +BOOL SetPrinterDataA(HANDLE, LPSTR, DWORD, PBYTE, DWORD); +BOOL SetPrinterDataW(HANDLE, LPWSTR, DWORD, PBYTE, DWORD); +DWORD StartDocPrinterA(HANDLE, DWORD, PBYTE); +DWORD StartDocPrinterW(HANDLE, DWORD, PBYTE); +BOOL StartPagePrinter(HANDLE); +DWORD WaitForPrinterChange(HANDLE, DWORD); +BOOL WritePrinter(HANDLE, PVOID, DWORD, PDWORD); + +version(Unicode) { + +alias JOB_INFO_1W JOB_INFO_1; +alias JOB_INFO_2W JOB_INFO_2; +alias ADDJOB_INFO_1W ADDJOB_INFO_1; +alias DATATYPES_INFO_1W DATATYPES_INFO_1; +alias MONITOR_INFO_1W MONITOR_INFO_1; +alias MONITOR_INFO_2W MONITOR_INFO_2; +alias DOC_INFO_1W DOC_INFO_1; +alias DOC_INFO_2W DOC_INFO_2; +alias PORT_INFO_1W PORT_INFO_1; +alias PORT_INFO_2W PORT_INFO_2; +alias PORT_INFO_3W PORT_INFO_3; +alias DRIVER_INFO_2W DRIVER_INFO_2; +alias PRINTER_INFO_1W PRINTER_INFO_1; +alias PRINTER_INFO_2W PRINTER_INFO_2; +alias PRINTER_INFO_4W PRINTER_INFO_4; +alias PRINTER_INFO_5W PRINTER_INFO_5; +alias PRINTPROCESSOR_INFO_1W PRINTPROCESSOR_INFO_1; +alias FORM_INFO_1W FORM_INFO_1; +alias PRINTER_DEFAULTSW PRINTER_DEFAULTS; + +alias AddFormW AddForm; +alias AddJobW AddJob; +alias AddMonitorW AddMonitor; +alias AddPortW AddPort; +alias AddPrinterW AddPrinter; +alias AddPrinterConnectionW AddPrinterConnection; +alias AddPrinterDriverW AddPrinterDriver; +alias AddPrintProcessorW AddPrintProcessor; +alias AddPrintProvidorW AddPrintProvidor; +alias AdvancedDocumentPropertiesW AdvancedDocumentProperties; +alias ConfigurePortW ConfigurePort; +alias DeleteFormW DeleteForm; +alias DeleteMonitorW DeleteMonitor; +alias DeletePortW DeletePort; +alias DeletePrinterConnectionW DeletePrinterConnection; +alias DeletePrinterDataW DeletePrinterData; +alias DeletePrinterDriverW DeletePrinterDriver; +alias DeletePrintProcessorW DeletePrintProcessor; +alias DeletePrintProvidorW DeletePrintProvidor; +alias DocumentPropertiesW DocumentProperties; +alias EnumFormsW EnumForms; +alias EnumJobsW EnumJobs; +alias EnumMonitorsW EnumMonitors; +alias EnumPortsW EnumPorts; +alias EnumPrinterDataW EnumPrinterData; +alias EnumPrinterDriversW EnumPrinterDrivers; +alias EnumPrintersW EnumPrinters; +alias EnumPrintProcessorDatatypesW EnumPrintProcessorDatatypes; +alias EnumPrintProcessorsW EnumPrintProcessors; + +static if (_WIN32_WINNT >= 0x0500) { +alias GetDefaultPrinterW GetDefaultPrinter; +} + +alias GetFormW GetForm; +alias GetJobW GetJob; +alias GetPrinterW GetPrinter; +alias GetPrinterDataW GetPrinterData; +alias GetPrinterDriverW GetPrinterDriver; +alias GetPrinterDriverDirectoryW GetPrinterDriverDirectory; +alias GetPrintProcessorDirectoryW GetPrintProcessorDirectory; +alias OpenPrinterW OpenPrinter; +alias PrinterMessageBoxW PrinterMessageBox; +alias ResetPrinterW ResetPrinter; +alias SetFormW SetForm; +alias SetJobW SetJob; +alias SetPrinterW SetPrinter; +alias SetPrinterDataW SetPrinterData; +alias StartDocPrinterW StartDocPrinter; + +} else { + +alias JOB_INFO_1A JOB_INFO_1; +alias JOB_INFO_2A JOB_INFO_2; +alias ADDJOB_INFO_1A ADDJOB_INFO_1; +alias DATATYPES_INFO_1A DATATYPES_INFO_1; +alias MONITOR_INFO_1A MONITOR_INFO_1; +alias MONITOR_INFO_2A MONITOR_INFO_2; +alias DOC_INFO_1A DOC_INFO_1; +alias DOC_INFO_2A DOC_INFO_2; +alias PORT_INFO_1A PORT_INFO_1; +alias PORT_INFO_2A PORT_INFO_2; +alias PORT_INFO_3A PORT_INFO_3; +alias DRIVER_INFO_2A DRIVER_INFO_2; +alias PRINTER_INFO_1A PRINTER_INFO_1; +alias PRINTER_INFO_2A PRINTER_INFO_2; +alias PRINTER_INFO_4A PRINTER_INFO_4; +alias PRINTER_INFO_5A PRINTER_INFO_5; +alias PRINTPROCESSOR_INFO_1A PRINTPROCESSOR_INFO_1; +alias FORM_INFO_1A FORM_INFO_1; +alias PRINTER_DEFAULTSA PRINTER_DEFAULTS; + +alias AddFormA AddForm; +alias AddJobA AddJob; +alias AddMonitorA AddMonitor; +alias AddPortA AddPort; +alias AddPrinterA AddPrinter; +alias AddPrinterConnectionA AddPrinterConnection; +alias AddPrinterDriverA AddPrinterDriver; +alias AddPrintProcessorA AddPrintProcessor; +alias AddPrintProvidorA AddPrintProvidor; +alias AdvancedDocumentPropertiesA AdvancedDocumentProperties; +alias ConfigurePortA ConfigurePort; +alias DeleteFormA DeleteForm; +alias DeleteMonitorA DeleteMonitor; +alias DeletePortA DeletePort; +alias DeletePrinterConnectionA DeletePrinterConnection; +alias DeletePrinterDataA DeletePrinterData; +alias DeletePrinterDriverA DeletePrinterDriver; +alias DeletePrintProcessorA DeletePrintProcessor; +alias DeletePrintProvidorA DeletePrintProvidor; +alias DocumentPropertiesA DocumentProperties; +alias EnumFormsA EnumForms; +alias EnumJobsA EnumJobs; +alias EnumMonitorsA EnumMonitors; +alias EnumPortsA EnumPorts; +alias EnumPrinterDataA EnumPrinterData; +alias EnumPrinterDriversA EnumPrinterDrivers; +alias EnumPrintersA EnumPrinters; +alias EnumPrintProcessorDatatypesA EnumPrintProcessorDatatypes; +alias EnumPrintProcessorsA EnumPrintProcessors; + +static if (_WIN32_WINNT >= 0x0500) { +alias GetDefaultPrinterA GetDefaultPrinter; +} + +alias GetFormA GetForm; +alias GetJobA GetJob; +alias GetPrinterA GetPrinter; +alias GetPrinterDataA GetPrinterData; +alias GetPrinterDriverA GetPrinterDriver; +alias GetPrinterDriverDirectoryA GetPrinterDriverDirectory; +alias GetPrintProcessorDirectoryA GetPrintProcessorDirectory; +alias OpenPrinterA OpenPrinter; +alias PrinterMessageBoxA PrinterMessageBox; +alias ResetPrinterA ResetPrinter; +alias SetFormA SetForm; +alias SetJobA SetJob; +alias SetPrinterA SetPrinter; +alias SetPrinterDataA SetPrinterData; +alias StartDocPrinterA StartDocPrinter; +} + +alias JOB_INFO_1* PJOB_INFO_1, LPJOB_INFO_1; +alias JOB_INFO_2* PJOB_INFO_2, LPJOB_INFO_2; +alias ADDJOB_INFO_1* PADDJOB_INFO_1, LPADDJOB_INFO_1; +alias DATATYPES_INFO_1* PDATATYPES_INFO_1, LPDATATYPES_INFO_1; +alias MONITOR_INFO_1* PMONITOR_INFO_1, LPMONITOR_INFO_1; +alias MONITOR_INFO_2* PMONITOR_INFO_2, LPMONITOR_INFO_2; +alias DOC_INFO_1* PDOC_INFO_1, LPDOC_INFO_1; +alias DOC_INFO_2* PDOC_INFO_2, LPDOC_INFO_2; +alias PORT_INFO_1* PPORT_INFO_1, LPPORT_INFO_1; +alias PORT_INFO_2* PPORT_INFO_2, LPPORT_INFO_2; +alias PORT_INFO_3* PPORT_INFO_3, LPPORT_INFO_3; +alias DRIVER_INFO_2* PDRIVER_INFO_2, LPDRIVER_INFO_2; +alias PRINTER_INFO_1* PPRINTER_INFO_1, LPPRINTER_INFO_1; +alias PRINTER_INFO_2* PPRINTER_INFO_2, LPPRINTER_INFO_2; +alias PRINTER_INFO_4* PPRINTER_INFO_4, LPPRINTER_INFO_4; +alias PRINTER_INFO_5* PPRINTER_INFO_5, LPPRINTER_INFO_5; +alias PRINTPROCESSOR_INFO_1* PPRINTPROCESSOR_INFO_1, LPPRINTPROCESSOR_INFO_1; +alias FORM_INFO_1* PFORM_INFO_1, LPFORM_INFO_1; +alias PRINTER_DEFAULTS* PPRINTER_DEFAULTS, LPPRINTER_DEFAULTS; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winsvc.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winsvc.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,430 @@ +/***********************************************************************\ +* winsvc.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winsvc; +pragma(lib, "advapi32.lib"); + +private import win32.w32api, win32.windef; + +static assert (_WIN32_WINNT_ONLY, + "win32.winsvc is available only if version WindowsNTonly, WindowsXP, " + "Windows2003 or WindowsVista is set"); + + +// FIXME: check Windows version support + +const TCHAR[] + SERVICES_ACTIVE_DATABASE = "ServicesActive", + SERVICES_FAILED_DATABASE = "ServicesFailed"; + +const TCHAR SC_GROUP_IDENTIFIER = '+'; + +const DWORD + SC_MANAGER_ALL_ACCESS = 0xf003f, + SC_MANAGER_CONNECT = 1, + SC_MANAGER_CREATE_SERVICE = 2, + SC_MANAGER_ENUMERATE_SERVICE = 4, + SC_MANAGER_LOCK = 8, + SC_MANAGER_QUERY_LOCK_STATUS = 16, + SC_MANAGER_MODIFY_BOOT_CONFIG = 32; + +const DWORD SERVICE_NO_CHANGE = 0xffffffff; + +enum : DWORD { + SERVICE_STOPPED = 1, + SERVICE_START_PENDING, + SERVICE_STOP_PENDING, + SERVICE_RUNNING, + SERVICE_CONTINUE_PENDING, + SERVICE_PAUSE_PENDING, + SERVICE_PAUSED // = 7 +} + +const DWORD + SERVICE_ACCEPT_STOP = 1, + SERVICE_ACCEPT_PAUSE_CONTINUE = 2, + SERVICE_ACCEPT_SHUTDOWN = 4, + SERVICE_ACCEPT_PARAMCHANGE = 8, + SERVICE_ACCEPT_NETBINDCHANGE = 16, + SERVICE_ACCEPT_HARDWAREPROFILECHANGE = 32, + SERVICE_ACCEPT_POWEREVENT = 64, + SERVICE_ACCEPT_SESSIONCHANGE = 128; + +enum : DWORD { + SERVICE_CONTROL_STOP = 1, + SERVICE_CONTROL_PAUSE, + SERVICE_CONTROL_CONTINUE, + SERVICE_CONTROL_INTERROGATE, + SERVICE_CONTROL_SHUTDOWN, + SERVICE_CONTROL_PARAMCHANGE, + SERVICE_CONTROL_NETBINDADD, + SERVICE_CONTROL_NETBINDREMOVE, + SERVICE_CONTROL_NETBINDENABLE, + SERVICE_CONTROL_NETBINDDISABLE, + SERVICE_CONTROL_DEVICEEVENT, + SERVICE_CONTROL_HARDWAREPROFILECHANGE, + SERVICE_CONTROL_POWEREVENT, + SERVICE_CONTROL_SESSIONCHANGE, // = 14 +} + +enum : DWORD { + SERVICE_ACTIVE = 1, + SERVICE_INACTIVE, + SERVICE_STATE_ALL +} + +const DWORD + SERVICE_QUERY_CONFIG = 0x0001, + SERVICE_CHANGE_CONFIG = 0x0002, + SERVICE_QUERY_STATUS = 0x0004, + SERVICE_ENUMERATE_DEPENDENTS = 0x0008, + SERVICE_START = 0x0010, + SERVICE_STOP = 0x0020, + SERVICE_PAUSE_CONTINUE = 0x0040, + SERVICE_INTERROGATE = 0x0080, + SERVICE_USER_DEFINED_CONTROL = 0x0100, + SERVICE_ALL_ACCESS = 0x01FF | STANDARD_RIGHTS_REQUIRED; + +// This is not documented on the MSDN site +const SERVICE_RUNS_IN_SYSTEM_PROCESS = 1; + +enum : DWORD { + SERVICE_CONFIG_DESCRIPTION = 1, + SERVICE_CONFIG_FAILURE_ACTIONS, + SERVICE_CONFIG_DELAYED_AUTO_START_INFO, + SERVICE_CONFIG_FAILURE_ACTIONS_FLAG, + SERVICE_CONFIG_SERVICE_SID_INFO, + SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO, + SERVICE_CONFIG_PRESHUTDOWN_INFO // = 7 +} + +struct SERVICE_STATUS { + DWORD dwServiceType; + DWORD dwCurrentState; + DWORD dwControlsAccepted; + DWORD dwWin32ExitCode; + DWORD dwServiceSpecificExitCode; + DWORD dwCheckPoint; + DWORD dwWaitHint; +} +alias SERVICE_STATUS* LPSERVICE_STATUS; + +struct ENUM_SERVICE_STATUSA { + LPSTR lpServiceName; + LPSTR lpDisplayName; + SERVICE_STATUS ServiceStatus; +} +alias ENUM_SERVICE_STATUSA* LPENUM_SERVICE_STATUSA; + +struct ENUM_SERVICE_STATUSW { + LPWSTR lpServiceName; + LPWSTR lpDisplayName; + SERVICE_STATUS ServiceStatus; +} +alias ENUM_SERVICE_STATUSW* LPENUM_SERVICE_STATUSW; + +struct QUERY_SERVICE_CONFIGA { + DWORD dwServiceType; + DWORD dwStartType; + DWORD dwErrorControl; + LPSTR lpBinaryPathName; + LPSTR lpLoadOrderGroup; + DWORD dwTagId; + LPSTR lpDependencies; + LPSTR lpServiceStartName; + LPSTR lpDisplayName; +} +alias QUERY_SERVICE_CONFIGA* LPQUERY_SERVICE_CONFIGA; + +struct QUERY_SERVICE_CONFIGW { + DWORD dwServiceType; + DWORD dwStartType; + DWORD dwErrorControl; + LPWSTR lpBinaryPathName; + LPWSTR lpLoadOrderGroup; + DWORD dwTagId; + LPWSTR lpDependencies; + LPWSTR lpServiceStartName; + LPWSTR lpDisplayName; +} +alias QUERY_SERVICE_CONFIGW* LPQUERY_SERVICE_CONFIGW; + +struct QUERY_SERVICE_LOCK_STATUSA { + DWORD fIsLocked; + LPSTR lpLockOwner; + DWORD dwLockDuration; +} +alias QUERY_SERVICE_LOCK_STATUSA* LPQUERY_SERVICE_LOCK_STATUSA; + +struct QUERY_SERVICE_LOCK_STATUSW { + DWORD fIsLocked; + LPWSTR lpLockOwner; + DWORD dwLockDuration; +} +alias QUERY_SERVICE_LOCK_STATUSW* LPQUERY_SERVICE_LOCK_STATUSW; + +extern (Windows) { + alias void function(DWORD, LPSTR*) LPSERVICE_MAIN_FUNCTIONA; + alias void function(DWORD, LPWSTR*) LPSERVICE_MAIN_FUNCTIONW; +} + +struct SERVICE_TABLE_ENTRYA { + LPSTR lpServiceName; + LPSERVICE_MAIN_FUNCTIONA lpServiceProc; +} +alias SERVICE_TABLE_ENTRYA* LPSERVICE_TABLE_ENTRYA; + +struct SERVICE_TABLE_ENTRYW { + LPWSTR lpServiceName; + LPSERVICE_MAIN_FUNCTIONW lpServiceProc; +} +alias SERVICE_TABLE_ENTRYW* LPSERVICE_TABLE_ENTRYW; + +alias HANDLE SC_HANDLE; +alias HANDLE* LPSC_HANDLE; +alias void* SC_LOCK; +alias DWORD SERVICE_STATUS_HANDLE; + +extern (Windows) { + alias void function(DWORD) LPHANDLER_FUNCTION; + alias DWORD function(DWORD, DWORD, LPVOID, LPVOID) LPHANDLER_FUNCTION_EX; +} + +static if (_WIN32_WINNT >= 0x500) { + struct SERVICE_STATUS_PROCESS { + DWORD dwServiceType; + DWORD dwCurrentState; + DWORD dwControlsAccepted; + DWORD dwWin32ExitCode; + DWORD dwServiceSpecificExitCode; + DWORD dwCheckPoint; + DWORD dwWaitHint; + DWORD dwProcessId; + DWORD dwServiceFlags; + } + alias SERVICE_STATUS_PROCESS* LPSERVICE_STATUS_PROCESS; + + enum SC_STATUS_TYPE { + SC_STATUS_PROCESS_INFO = 0 + } + + enum SC_ENUM_TYPE { + SC_ENUM_PROCESS_INFO = 0 + } + + struct ENUM_SERVICE_STATUS_PROCESSA { + LPSTR lpServiceName; + LPSTR lpDisplayName; + SERVICE_STATUS_PROCESS ServiceStatusProcess; + } + alias ENUM_SERVICE_STATUS_PROCESSA* LPENUM_SERVICE_STATUS_PROCESSA; + + struct ENUM_SERVICE_STATUS_PROCESSW { + LPWSTR lpServiceName; + LPWSTR lpDisplayName; + SERVICE_STATUS_PROCESS ServiceStatusProcess; + } + alias ENUM_SERVICE_STATUS_PROCESSW* LPENUM_SERVICE_STATUS_PROCESSW; + + struct SERVICE_DESCRIPTIONA { + LPSTR lpDescription; + } + alias SERVICE_DESCRIPTIONA* LPSERVICE_DESCRIPTIONA; + + struct SERVICE_DESCRIPTIONW { + LPWSTR lpDescription; + } + alias SERVICE_DESCRIPTIONW* LPSERVICE_DESCRIPTIONW; + + enum SC_ACTION_TYPE { + SC_ACTION_NONE, + SC_ACTION_RESTART, + SC_ACTION_REBOOT, + SC_ACTION_RUN_COMMAND + } + + struct SC_ACTION { + SC_ACTION_TYPE Type; + DWORD Delay; + } + alias SC_ACTION* LPSC_ACTION; + + struct SERVICE_FAILURE_ACTIONSA { + DWORD dwResetPeriod; + LPSTR lpRebootMsg; + LPSTR lpCommand; + DWORD cActions; + SC_ACTION* lpsaActions; + } + alias SERVICE_FAILURE_ACTIONSA* LPSERVICE_FAILURE_ACTIONSA; + + struct SERVICE_FAILURE_ACTIONSW { + DWORD dwResetPeriod; + LPWSTR lpRebootMsg; + LPWSTR lpCommand; + DWORD cActions; + SC_ACTION* lpsaActions; + } + alias SERVICE_FAILURE_ACTIONSW* LPSERVICE_FAILURE_ACTIONSW; +} + +extern (Windows) { + BOOL ChangeServiceConfigA(SC_HANDLE, DWORD, DWORD, DWORD, LPCSTR, + LPCSTR, LPDWORD, LPCSTR, LPCSTR, LPCSTR, LPCSTR); + BOOL ChangeServiceConfigW(SC_HANDLE, DWORD, DWORD, DWORD, LPCWSTR, + LPCWSTR, LPDWORD, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR); + BOOL CloseServiceHandle(SC_HANDLE); + BOOL ControlService(SC_HANDLE, DWORD, LPSERVICE_STATUS); + SC_HANDLE CreateServiceA(SC_HANDLE, LPCSTR, LPCSTR, DWORD, DWORD, + DWORD, DWORD, LPCSTR, LPCSTR, PDWORD, LPCSTR, LPCSTR, LPCSTR); + SC_HANDLE CreateServiceW(SC_HANDLE, LPCWSTR, LPCWSTR, DWORD, DWORD, + DWORD, DWORD, LPCWSTR, LPCWSTR, PDWORD, LPCWSTR, LPCWSTR, LPCWSTR); + BOOL DeleteService(SC_HANDLE); + BOOL EnumDependentServicesA(SC_HANDLE, DWORD, LPENUM_SERVICE_STATUSA, + DWORD, PDWORD, PDWORD); + BOOL EnumDependentServicesW(SC_HANDLE, DWORD, LPENUM_SERVICE_STATUSW, + DWORD, PDWORD, PDWORD); + BOOL EnumServicesStatusA(SC_HANDLE, DWORD, DWORD, LPENUM_SERVICE_STATUSA, + DWORD, PDWORD, PDWORD, PDWORD); + BOOL EnumServicesStatusW(SC_HANDLE, DWORD, DWORD, LPENUM_SERVICE_STATUSW, + DWORD, PDWORD, PDWORD, PDWORD); + BOOL GetServiceDisplayNameA(SC_HANDLE, LPCSTR, LPSTR, PDWORD); + BOOL GetServiceDisplayNameW(SC_HANDLE, LPCWSTR, LPWSTR, PDWORD); + BOOL GetServiceKeyNameA(SC_HANDLE, LPCSTR, LPSTR, PDWORD); + BOOL GetServiceKeyNameW(SC_HANDLE, LPCWSTR, LPWSTR, PDWORD); + SC_LOCK LockServiceDatabase(SC_HANDLE); + BOOL NotifyBootConfigStatus(BOOL); + SC_HANDLE OpenSCManagerA(LPCSTR, LPCSTR, DWORD); + SC_HANDLE OpenSCManagerW(LPCWSTR, LPCWSTR, DWORD); + SC_HANDLE OpenServiceA(SC_HANDLE, LPCSTR, DWORD); + SC_HANDLE OpenServiceW(SC_HANDLE, LPCWSTR, DWORD); + BOOL QueryServiceConfigA(SC_HANDLE, LPQUERY_SERVICE_CONFIGA, DWORD, + PDWORD); + BOOL QueryServiceConfigW(SC_HANDLE, LPQUERY_SERVICE_CONFIGW, DWORD, + PDWORD); + BOOL QueryServiceLockStatusA(SC_HANDLE, LPQUERY_SERVICE_LOCK_STATUSA, + DWORD, PDWORD); + BOOL QueryServiceLockStatusW(SC_HANDLE, LPQUERY_SERVICE_LOCK_STATUSW, + DWORD, PDWORD); + BOOL QueryServiceObjectSecurity(SC_HANDLE, SECURITY_INFORMATION, + PSECURITY_DESCRIPTOR, DWORD, LPDWORD); + BOOL QueryServiceStatus(SC_HANDLE, LPSERVICE_STATUS); + SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerA(LPCSTR, + LPHANDLER_FUNCTION); + SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerW(LPCWSTR, + LPHANDLER_FUNCTION); + BOOL SetServiceObjectSecurity(SC_HANDLE, SECURITY_INFORMATION, + PSECURITY_DESCRIPTOR); + BOOL SetServiceStatus(SERVICE_STATUS_HANDLE, LPSERVICE_STATUS); + BOOL StartServiceA(SC_HANDLE, DWORD, LPCSTR*); + BOOL StartServiceW(SC_HANDLE, DWORD, LPCWSTR*); + BOOL StartServiceCtrlDispatcherA(LPSERVICE_TABLE_ENTRYA); + BOOL StartServiceCtrlDispatcherW(LPSERVICE_TABLE_ENTRYW); + BOOL UnlockServiceDatabase(SC_LOCK); + + static if (_WIN32_WINNT >= 0x500) { + BOOL EnumServicesStatusExA(SC_HANDLE, SC_ENUM_TYPE, DWORD, DWORD, LPBYTE, + DWORD, LPDWORD, LPDWORD, LPDWORD, LPCSTR); + BOOL EnumServicesStatusExW(SC_HANDLE, SC_ENUM_TYPE, DWORD, DWORD, LPBYTE, + DWORD, LPDWORD, LPDWORD, LPDWORD, LPCWSTR); + BOOL QueryServiceConfig2A(SC_HANDLE, DWORD, LPBYTE, DWORD, LPDWORD); + BOOL QueryServiceConfig2W(SC_HANDLE, DWORD, LPBYTE, DWORD, LPDWORD); + BOOL QueryServiceStatusEx(SC_HANDLE, SC_STATUS_TYPE, LPBYTE, DWORD, + LPDWORD); + SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerExA(LPCSTR, + LPHANDLER_FUNCTION_EX, LPVOID); + SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerExW(LPCWSTR, + LPHANDLER_FUNCTION_EX, LPVOID); + } + + static if (_WIN32_WINNT >= 0x501) { + BOOL ChangeServiceConfig2A(SC_HANDLE, DWORD, LPVOID); + BOOL ChangeServiceConfig2W(SC_HANDLE, DWORD, LPVOID); + } +} + +version (Unicode) { + alias ENUM_SERVICE_STATUSW ENUM_SERVICE_STATUS; + alias QUERY_SERVICE_CONFIGW QUERY_SERVICE_CONFIG; + alias QUERY_SERVICE_LOCK_STATUSW QUERY_SERVICE_LOCK_STATUS; + alias LPSERVICE_MAIN_FUNCTIONW LPSERVICE_MAIN_FUNCTION; + alias SERVICE_TABLE_ENTRYW SERVICE_TABLE_ENTRY; + alias ChangeServiceConfigW ChangeServiceConfig; + alias CreateServiceW CreateService; + alias EnumDependentServicesW EnumDependentServices; + alias EnumServicesStatusW EnumServicesStatus; + alias GetServiceDisplayNameW GetServiceDisplayName; + alias GetServiceKeyNameW GetServiceKeyName; + alias OpenSCManagerW OpenSCManager; + alias OpenServiceW OpenService; + alias QueryServiceConfigW QueryServiceConfig; + alias QueryServiceLockStatusW QueryServiceLockStatus; + alias RegisterServiceCtrlHandlerW RegisterServiceCtrlHandler; + alias StartServiceW StartService; + alias StartServiceCtrlDispatcherW StartServiceCtrlDispatcher; + + static if (_WIN32_WINNT >= 0x500) { + alias ENUM_SERVICE_STATUS_PROCESSW ENUM_SERVICE_STATUS_PROCESS; + alias SERVICE_DESCRIPTIONW SERVICE_DESCRIPTION; + alias SERVICE_FAILURE_ACTIONSW SERVICE_FAILURE_ACTIONS; + alias EnumServicesStatusExW EnumServicesStatusEx; + alias QueryServiceConfig2W QueryServiceConfig2; + alias RegisterServiceCtrlHandlerExW RegisterServiceCtrlHandlerEx; + } + + static if (_WIN32_WINNT >= 0x501) { + alias ChangeServiceConfig2W ChangeServiceConfig2; + } + +} else { + alias ENUM_SERVICE_STATUSA ENUM_SERVICE_STATUS; + alias QUERY_SERVICE_CONFIGA QUERY_SERVICE_CONFIG; + alias QUERY_SERVICE_LOCK_STATUSA QUERY_SERVICE_LOCK_STATUS; + alias LPSERVICE_MAIN_FUNCTIONA LPSERVICE_MAIN_FUNCTION; + alias SERVICE_TABLE_ENTRYA SERVICE_TABLE_ENTRY; + alias ChangeServiceConfigA ChangeServiceConfig; + alias CreateServiceA CreateService; + alias EnumDependentServicesA EnumDependentServices; + alias EnumServicesStatusA EnumServicesStatus; + alias GetServiceDisplayNameA GetServiceDisplayName; + alias GetServiceKeyNameA GetServiceKeyName; + alias OpenSCManagerA OpenSCManager; + alias OpenServiceA OpenService; + alias QueryServiceConfigA QueryServiceConfig; + alias QueryServiceLockStatusA QueryServiceLockStatus; + alias RegisterServiceCtrlHandlerA RegisterServiceCtrlHandler; + alias StartServiceA StartService; + alias StartServiceCtrlDispatcherA StartServiceCtrlDispatcher; + + static if (_WIN32_WINNT >= 0x500) { + alias ENUM_SERVICE_STATUS_PROCESSA ENUM_SERVICE_STATUS_PROCESS; + alias SERVICE_DESCRIPTIONA SERVICE_DESCRIPTION; + alias SERVICE_FAILURE_ACTIONSA SERVICE_FAILURE_ACTIONS; + alias EnumServicesStatusExA EnumServicesStatusEx; + alias QueryServiceConfig2A QueryServiceConfig2; + alias RegisterServiceCtrlHandlerExA RegisterServiceCtrlHandlerEx; + } + + static if (_WIN32_WINNT >= 0x501) { + alias ChangeServiceConfig2A ChangeServiceConfig2; + } + +} + +alias ENUM_SERVICE_STATUS* LPENUM_SERVICE_STATUS; +alias QUERY_SERVICE_CONFIG* LPQUERY_SERVICE_CONFIG; +alias QUERY_SERVICE_LOCK_STATUS* LPQUERY_SERVICE_LOCK_STATUS; +alias SERVICE_TABLE_ENTRY* LPSERVICE_TABLE_ENTRY; + +static if (_WIN32_WINNT >= 0x500) { + alias ENUM_SERVICE_STATUS_PROCESS* LPENUM_SERVICE_STATUS_PROCESS; + alias SERVICE_DESCRIPTION* LPSERVICE_DESCRIPTION; + alias SERVICE_FAILURE_ACTIONS* LPSERVICE_FAILURE_ACTIONS; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winuser.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winuser.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,4766 @@ +/***********************************************************************\ +* winuser.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winuser; +pragma(lib, "user32.lib"); + +// Conversion Notes: +// The following macros were for win16 only, and are not included in this file: +//#define EnumTaskWindows(h, f, p) EnumThreadWindows((DWORD)h, f, p) +//#define PostAppMessageA(t, m, w, l) PostThreadMessageA((DWORD)t, m, w, l) +//#define PostAppMessageW(t, m, w, l) PostThreadMessageW((DWORD)t, m, w, l) +//#define GetSysModalWindow() (NULL) +//#define SetSysModalWindow(h) (NULL) +//#define GetWindowTask(hWnd) ((HANDLE)GetWindowThreadProcessId(hWnd, NULL)) +//#define DefHookProc(c, p, lp, h) CallNextHookEx((HHOOK)*h, c, p, lp) + +private import win32.w32api, win32.winbase, win32.wingdi; +private import win32.windef; // for HMONITOR + +// FIXME: clean up Windows version support + +template MAKEINTATOM_T(int i) { + const LPTSTR MAKEINTATOM_T = cast(LPTSTR) i; +} + +const WC_DIALOG = MAKEINTATOM_T!(0x8002); + +const FVIRTKEY = 1; +const FNOINVERT = 2; +const FSHIFT = 4; +const FCONTROL = 8; +const FALT = 16; + +const ATF_TIMEOUTON = 1; +const ATF_ONOFFFEEDBACK = 2; +const ATF_AVAILABLE = 4; // May be obsolete. Not in recent MS docs. + +const WH_MIN = -1; +const WH_MSGFILTER = -1; +const WH_JOURNALRECORD = 0; +const WH_JOURNALPLAYBACK = 1; +const WH_KEYBOARD = 2; +const WH_GETMESSAGE = 3; +const WH_CALLWNDPROC = 4; +const WH_CBT = 5; +const WH_SYSMSGFILTER = 6; +const WH_MOUSE = 7; +const WH_HARDWARE = 8; +const WH_DEBUG = 9; +const WH_SHELL = 10; +const WH_FOREGROUNDIDLE = 11; +const WH_CALLWNDPROCRET = 12; +const WH_KEYBOARD_LL = 13; +const WH_MOUSE_LL = 14; +const WH_MAX = 14; +const WH_MINHOOK = WH_MIN; +const WH_MAXHOOK = WH_MAX; + +enum { + HC_ACTION = 0, + HC_GETNEXT, + HC_SKIP, + HC_NOREMOVE, // = 3 + HC_NOREM = HC_NOREMOVE, + HC_SYSMODALON, + HC_SYSMODALOFF +} + +enum { + HCBT_MOVESIZE = 0, + HCBT_MINMAX, + HCBT_QS, + HCBT_CREATEWND, + HCBT_DESTROYWND, + HCBT_ACTIVATE, + HCBT_CLICKSKIPPED, + HCBT_KEYSKIPPED, + HCBT_SYSCOMMAND, + HCBT_SETFOCUS // = 9 +} + +enum { + CF_TEXT = 1, + CF_BITMAP, + CF_METAFILEPICT, + CF_SYLK, + CF_DIF, + CF_TIFF, + CF_OEMTEXT, + CF_DIB, + CF_PALETTE, + CF_PENDATA, + CF_RIFF, + CF_WAVE, + CF_UNICODETEXT, + CF_ENHMETAFILE, + CF_HDROP, + CF_LOCALE, + CF_MAX, // = 17 + CF_OWNERDISPLAY = 128, + CF_DSPTEXT, + CF_DSPBITMAP, + CF_DSPMETAFILEPICT, // = 131 + CF_DSPENHMETAFILE = 142, + CF_PRIVATEFIRST = 512, + CF_PRIVATELAST = 767, + CF_GDIOBJFIRST = 768, + CF_GDIOBJLAST = 1023 +} + +const HKL_PREV = 0; +const HKL_NEXT = 1; + +const KLF_ACTIVATE = 1; +const KLF_SUBSTITUTE_OK = 2; +const KLF_UNLOADPREVIOUS = 4; +const KLF_REORDER = 8; +const KLF_REPLACELANG = 16; +const KLF_NOTELLSHELL = 128; +const KLF_SETFORPROCESS = 256; +const KL_NAMELENGTH = 9; + +const MF_ENABLED = 0; +const MF_GRAYED = 1; +const MF_DISABLED = 2; +const MF_BITMAP = 4; +const MF_CHECKED = 8; +const MF_MENUBARBREAK = 32; +const MF_MENUBREAK = 64; +const MF_OWNERDRAW = 256; +const MF_POPUP = 16; +const MF_SEPARATOR = 0x800; +const MF_STRING = 0; +const MF_UNCHECKED = 0; +const MF_DEFAULT = 4096; +const MF_SYSMENU = 0x2000; +const MF_HELP = 0x4000; +const MF_END = 128; +const MF_RIGHTJUSTIFY = 0x4000; +const MF_MOUSESELECT = 0x8000; +const MF_INSERT = 0; +const MF_CHANGE = 128; +const MF_APPEND = 256; +const MF_DELETE = 512; +const MF_REMOVE = 4096; +const MF_USECHECKBITMAPS = 512; +const MF_UNHILITE = 0; +const MF_HILITE = 128; + +// Also defined in dbt.h +const BSM_ALLCOMPONENTS = 0; +const BSM_VXDS = 1; +const BSM_NETDRIVER = 2; +const BSM_INSTALLABLEDRIVERS = 4; +const BSM_APPLICATIONS = 8; +const BSM_ALLDESKTOPS = 16; + +const BSF_QUERY = 0x00000001; +const BSF_IGNORECURRENTTASK = 0x00000002; +const BSF_FLUSHDISK = 0x00000004; +const BSF_NOHANG = 0x00000008; +const BSF_POSTMESSAGE = 0x00000010; +const BSF_FORCEIFHUNG = 0x00000020; +const BSF_NOTIMEOUTIFNOTHUNG = 0x00000040; + +static if (_WIN32_WINNT >= 0x500) { + const BSF_ALLOWSFW = 0x00000080; + const BSF_SENDNOTIFYMESSAGE = 0x00000100; +} +static if (_WIN32_WINNT >= 0x501) { + const BSF_RETURNHDESK = 0x00000200; + const BSF_LUID = 0x00000400; +} + +const BROADCAST_QUERY_DENY = 1112363332; +const DWORD ENUM_CURRENT_SETTINGS = -1; +const DWORD ENUM_REGISTRY_SETTINGS = -2; + +const CDS_UPDATEREGISTRY = 1; +const CDS_TEST = 2; +const CDS_FULLSCREEN = 4; +const CDS_GLOBAL = 8; +const CDS_SET_PRIMARY = 16; +const CDS_NORESET = 0x10000000; +const CDS_SETRECT = 0x20000000; +const CDS_RESET = 0x40000000; + +const DISP_CHANGE_RESTART = 1; +const DISP_CHANGE_SUCCESSFUL = 0; +const DISP_CHANGE_FAILED = -1; +const DISP_CHANGE_BADMODE = -2; +const DISP_CHANGE_NOTUPDATED = -3; +const DISP_CHANGE_BADFLAGS = -4; +const DISP_CHANGE_BADPARAM = -5; + +const BST_UNCHECKED = 0; +const BST_CHECKED = 1; +const BST_INDETERMINATE = 2; +const BST_PUSHED = 4; +const BST_FOCUS = 8; + +const MF_BYCOMMAND = 0; +const MF_BYPOSITION = 1024; +// [Redefined] MF_UNCHECKED=0 +// [Redefined] MF_HILITE=128 +// [Redefined] MF_UNHILITE=0 + +const CWP_ALL = 0; +const CWP_SKIPINVISIBLE = 1; +const CWP_SKIPDISABLED = 2; +const CWP_SKIPTRANSPARENT = 4; + +const IMAGE_BITMAP=0; +const IMAGE_ICON=1; +const IMAGE_CURSOR=2; +const IMAGE_ENHMETAFILE=3; + +const DF_ALLOWOTHERACCOUNTHOOK = 1; + +const DESKTOP_READOBJECTS = 1; +const DESKTOP_CREATEWINDOW = 2; +const DESKTOP_CREATEMENU = 4; +const DESKTOP_HOOKCONTROL = 8; +const DESKTOP_JOURNALRECORD = 16; +const DESKTOP_JOURNALPLAYBACK = 32; +const DESKTOP_ENUMERATE = 64; +const DESKTOP_WRITEOBJECTS = 128; +const DESKTOP_SWITCHDESKTOP = 256; + +const CW_USEDEFAULT = 0x80000000; + +enum { + WS_OVERLAPPED = 0, + WS_TILED = WS_OVERLAPPED, + WS_MAXIMIZEBOX = 0x00010000, + WS_MINIMIZEBOX = 0x00020000, + WS_TABSTOP = 0x00010000, + WS_GROUP = 0x00020000, + WS_THICKFRAME = 0x00040000, + WS_SIZEBOX = WS_THICKFRAME, + WS_SYSMENU = 0x00080000, + WS_HSCROLL = 0x00100000, + WS_VSCROLL = 0x00200000, + WS_DLGFRAME = 0x00400000, + WS_BORDER = 0x00800000, + WS_CAPTION = 0x00c00000, + WS_OVERLAPPEDWINDOW = WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME|WS_MINIMIZEBOX|WS_MAXIMIZEBOX, + WS_TILEDWINDOW = WS_OVERLAPPEDWINDOW, + WS_MAXIMIZE = 0x01000000, + WS_CLIPCHILDREN = 0x02000000, + WS_CLIPSIBLINGS = 0x04000000, + WS_DISABLED = 0x08000000, + WS_VISIBLE = 0x10000000, + WS_MINIMIZE = 0x20000000, + WS_ICONIC = WS_MINIMIZE, + WS_CHILD = 0x40000000, + WS_CHILDWINDOW = 0x40000000, + WS_POPUP = 0x80000000, + WS_POPUPWINDOW = WS_POPUP|WS_BORDER|WS_SYSMENU, +} + +const MDIS_ALLCHILDSTYLES = 1; + +const BS_3STATE = 5; +const BS_AUTO3STATE = 6; +const BS_AUTOCHECKBOX = 3; +const BS_AUTORADIOBUTTON = 9; +const BS_BITMAP = 128; +const BS_BOTTOM = 0x800; +const BS_CENTER = 0x300; +const BS_CHECKBOX = 2; +const BS_DEFPUSHBUTTON = 1; +const BS_GROUPBOX = 7; +const BS_ICON = 64; +const BS_LEFT = 256; +const BS_LEFTTEXT = 32; +const BS_MULTILINE = 0x2000; +const BS_NOTIFY = 0x4000; +const BS_OWNERDRAW = 0xb; +const BS_PUSHBUTTON = 0; +const BS_PUSHLIKE = 4096; +const BS_RADIOBUTTON = 4; +const BS_RIGHT = 512; +const BS_RIGHTBUTTON = 32; +const BS_TEXT = 0; +const BS_TOP = 0x400; +const BS_USERBUTTON = 8; +const BS_VCENTER = 0xc00; +const BS_FLAT = 0x8000; + +const CBS_AUTOHSCROLL = 64; +const CBS_DISABLENOSCROLL = 0x800; +const CBS_DROPDOWN = 2; +const CBS_DROPDOWNLIST = 3; +const CBS_HASSTRINGS = 512; +const CBS_LOWERCASE = 0x4000; +const CBS_NOINTEGRALHEIGHT = 0x400; +const CBS_OEMCONVERT = 128; +const CBS_OWNERDRAWFIXED = 16; +const CBS_OWNERDRAWVARIABLE = 32; +const CBS_SIMPLE = 1; +const CBS_SORT = 256; +const CBS_UPPERCASE = 0x2000; + +const ES_AUTOHSCROLL = 128; +const ES_AUTOVSCROLL = 64; +const ES_CENTER = 1; +const ES_LEFT = 0; +const ES_LOWERCASE = 16; +const ES_MULTILINE = 4; +const ES_NOHIDESEL = 256; +const ES_NUMBER = 0x2000; +const ES_OEMCONVERT = 0x400; +const ES_PASSWORD = 32; +const ES_READONLY = 0x800; +const ES_RIGHT = 2; +const ES_UPPERCASE = 8; +const ES_WANTRETURN = 4096; + +const LBS_DISABLENOSCROLL = 4096; +const LBS_EXTENDEDSEL = 0x800; +const LBS_HASSTRINGS = 64; +const LBS_MULTICOLUMN = 512; +const LBS_MULTIPLESEL = 8; +const LBS_NODATA = 0x2000; +const LBS_NOINTEGRALHEIGHT = 256; +const LBS_NOREDRAW = 4; +const LBS_NOSEL = 0x4000; +const LBS_NOTIFY = 1; +const LBS_OWNERDRAWFIXED = 16; +const LBS_OWNERDRAWVARIABLE = 32; +const LBS_SORT = 2; +const LBS_STANDARD = 0xa00003; +const LBS_USETABSTOPS = 128; +const LBS_WANTKEYBOARDINPUT = 0x400; + +const SBS_BOTTOMALIGN = 4; +const SBS_HORZ = 0; +const SBS_LEFTALIGN = 2; +const SBS_RIGHTALIGN = 4; +const SBS_SIZEBOX = 8; +const SBS_SIZEBOXBOTTOMRIGHTALIGN = 4; +const SBS_SIZEBOXTOPLEFTALIGN = 2; +const SBS_SIZEGRIP = 16; +const SBS_TOPALIGN = 2; +const SBS_VERT = 1; + +const SS_BITMAP = 14; +const SS_BLACKFRAME = 7; +const SS_BLACKRECT = 4; +const SS_CENTER = 1; +const SS_CENTERIMAGE = 512; +const SS_ENHMETAFILE = 15; +const SS_ETCHEDFRAME = 18; +const SS_ETCHEDHORZ = 16; +const SS_ETCHEDVERT = 17; +const SS_GRAYFRAME = 8; +const SS_GRAYRECT = 5; +const SS_ICON = 3; +const SS_LEFT = 0; +const SS_LEFTNOWORDWRAP = 0xc; +const SS_NOPREFIX = 128; +const SS_NOTIFY = 256; +const SS_OWNERDRAW = 0xd; +const SS_REALSIZEIMAGE = 0x800; +const SS_RIGHT = 2; +const SS_RIGHTJUST = 0x400; +const SS_SIMPLE = 11; +const SS_SUNKEN = 4096; +const SS_WHITEFRAME = 9; +const SS_WHITERECT = 6; +const SS_USERITEM = 10; +const SS_TYPEMASK = 0x0000001FL; +const SS_ENDELLIPSIS = 0x00004000L; +const SS_PATHELLIPSIS = 0x00008000L; +const SS_WORDELLIPSIS = 0x0000C000L; +const SS_ELLIPSISMASK = 0x0000C000L; + +const DS_ABSALIGN = 0x0001; +const DS_3DLOOK = 0x0004; +const DS_SYSMODAL = 0x0002; +const DS_FIXEDSYS = 0x0008; +const DS_NOFAILCREATE = 0x0010; +const DS_LOCALEDIT = 0x0020; +const DS_SETFONT = 0x0040; +const DS_MODALFRAME = 0x0080; +const DS_NOIDLEMSG = 0x0100; +const DS_SETFOREGROUND = 0x0200; +const DS_CONTROL = 0x0400; +const DS_CENTER = 0x0800; +const DS_CENTERMOUSE = 0x1000; +const DS_CONTEXTHELP = 0x2000; +const DS_SHELLFONT = DS_SETFONT | DS_FIXEDSYS; + +const WS_EX_ACCEPTFILES = 16; +const WS_EX_APPWINDOW = 0x40000; +const WS_EX_CLIENTEDGE = 512; +const WS_EX_COMPOSITED = 0x2000000; // XP +const WS_EX_CONTEXTHELP = 0x400; +const WS_EX_CONTROLPARENT = 0x10000; +const WS_EX_DLGMODALFRAME = 1; +const WS_EX_LAYERED = 0x80000; // w2k +const WS_EX_LAYOUTRTL = 0x400000; // w98, w2k +const WS_EX_LEFT = 0; +const WS_EX_LEFTSCROLLBAR = 0x4000; +const WS_EX_LTRREADING = 0; +const WS_EX_MDICHILD = 64; +const WS_EX_NOACTIVATE = 0x8000000; // w2k +const WS_EX_NOINHERITLAYOUT = 0x100000; // w2k +const WS_EX_NOPARENTNOTIFY = 4; +const WS_EX_OVERLAPPEDWINDOW = 0x300; +const WS_EX_PALETTEWINDOW = 0x188; +const WS_EX_RIGHT = 0x1000; +const WS_EX_RIGHTSCROLLBAR = 0; +const WS_EX_RTLREADING = 0x2000; +const WS_EX_STATICEDGE = 0x20000; +const WS_EX_TOOLWINDOW = 128; +const WS_EX_TOPMOST = 8; +const WS_EX_TRANSPARENT = 32; +const WS_EX_WINDOWEDGE = 256; + +const WINSTA_ENUMDESKTOPS = 1; +const WINSTA_READATTRIBUTES = 2; +const WINSTA_ACCESSCLIPBOARD = 4; +const WINSTA_CREATEDESKTOP = 8; +const WINSTA_WRITEATTRIBUTES = 16; +const WINSTA_ACCESSGLOBALATOMS = 32; +const WINSTA_EXITWINDOWS = 64; +const WINSTA_ENUMERATE = 256; +const WINSTA_READSCREEN = 512; + +const DDL_READWRITE = 0; +const DDL_READONLY = 1; +const DDL_HIDDEN = 2; +const DDL_SYSTEM = 4; +const DDL_DIRECTORY = 16; +const DDL_ARCHIVE = 32; +const DDL_POSTMSGS = 8192; +const DDL_DRIVES = 16384; +const DDL_EXCLUSIVE = 32768; + +const DC_ACTIVE = 0x00000001; +const DC_SMALLCAP = 0x00000002; +const DC_ICON = 0x00000004; +const DC_TEXT = 0x00000008; +const DC_INBUTTON = 0x00000010; + +static if (WINVER >= 0x500) { +const DC_GRADIENT=0x00000020; +} +static if (_WIN32_WINNT >= 0x501) { +const DC_BUTTONS=0x00001000; +} + +// Where are these documented? +//const DC_CAPTION = DC_ICON|DC_TEXT|DC_BUTTONS; +//const DC_NC = DC_CAPTION|DC_FRAME; + +const BDR_RAISEDOUTER = 1; +const BDR_SUNKENOUTER = 2; +const BDR_RAISEDINNER = 4; +const BDR_SUNKENINNER = 8; +const BDR_OUTER = 3; +const BDR_INNER = 0xc; +const BDR_RAISED = 5; +const BDR_SUNKEN = 10; + +const EDGE_RAISED = BDR_RAISEDOUTER|BDR_RAISEDINNER; +const EDGE_SUNKEN = BDR_SUNKENOUTER|BDR_SUNKENINNER; +const EDGE_ETCHED = BDR_SUNKENOUTER|BDR_RAISEDINNER; +const EDGE_BUMP = BDR_RAISEDOUTER|BDR_SUNKENINNER; + +const BF_LEFT = 1; +const BF_TOP = 2; +const BF_RIGHT = 4; +const BF_BOTTOM = 8; +const BF_TOPLEFT = BF_TOP|BF_LEFT; +const BF_TOPRIGHT = BF_TOP|BF_RIGHT; +const BF_BOTTOMLEFT = BF_BOTTOM|BF_LEFT; +const BF_BOTTOMRIGHT = BF_BOTTOM|BF_RIGHT; +const BF_RECT = BF_LEFT|BF_TOP|BF_RIGHT|BF_BOTTOM ; +const BF_DIAGONAL = 16; +const BF_DIAGONAL_ENDTOPRIGHT = BF_DIAGONAL|BF_TOP|BF_RIGHT; +const BF_DIAGONAL_ENDTOPLEFT = BF_DIAGONAL|BF_TOP|BF_LEFT; +const BF_DIAGONAL_ENDBOTTOMLEFT = BF_DIAGONAL|BF_BOTTOM|BF_LEFT; +const BF_DIAGONAL_ENDBOTTOMRIGHT = BF_DIAGONAL|BF_BOTTOM|BF_RIGHT; +const BF_MIDDLE = 0x800; +const BF_SOFT = 0x1000; +const BF_ADJUST = 0x2000; +const BF_FLAT = 0x4000; +const BF_MONO = 0x8000; + +const DFC_CAPTION=1; +const DFC_MENU=2; +const DFC_SCROLL=3; +const DFC_BUTTON=4; +static if (WINVER >= 0x500) { +const DFC_POPUPMENU=5; +}// WINVER >= 0x500 + +const DFCS_CAPTIONCLOSE = 0; +const DFCS_CAPTIONMIN = 1; +const DFCS_CAPTIONMAX = 2; +const DFCS_CAPTIONRESTORE = 3; +const DFCS_CAPTIONHELP = 4; + +const DFCS_MENUARROW = 0; +const DFCS_MENUCHECK = 1; +const DFCS_MENUBULLET = 2; +const DFCS_MENUARROWRIGHT = 4; + +const DFCS_SCROLLUP = 0; +const DFCS_SCROLLDOWN = 1; +const DFCS_SCROLLLEFT = 2; +const DFCS_SCROLLRIGHT = 3; +const DFCS_SCROLLCOMBOBOX = 5; +const DFCS_SCROLLSIZEGRIP = 8; +const DFCS_SCROLLSIZEGRIPRIGHT = 16; + +const DFCS_BUTTONCHECK = 0; +const DFCS_BUTTONRADIOIMAGE = 1; +const DFCS_BUTTONRADIOMASK = 2; +const DFCS_BUTTONRADIO = 4; +const DFCS_BUTTON3STATE = 8; +const DFCS_BUTTONPUSH = 16; +const DFCS_INACTIVE = 256; +const DFCS_PUSHED = 512; +const DFCS_CHECKED = 1024; +static if (WINVER >= 0x500) { +const DFCS_TRANSPARENT = 0x800; +const DFCS_HOT = 0x1000; +} +const DFCS_ADJUSTRECT = 0x2000; +const DFCS_FLAT = 0x4000; +const DFCS_MONO = 0x8000; + +enum { + DST_COMPLEX = 0, + DST_TEXT, + DST_PREFIXTEXT, + DST_ICON, + DST_BITMAP // = 4 +} + +const DSS_NORMAL = 0; +const DSS_UNION = 16; +const DSS_DISABLED = 32; +const DSS_MONO = 128; +const DSS_RIGHT = 0x8000; + +const DT_BOTTOM = 8; +const DT_CALCRECT = 1024; +const DT_CENTER = 1; +const DT_EDITCONTROL = 8192; +const DT_END_ELLIPSIS = 32768; +const DT_PATH_ELLIPSIS = 16384; +const DT_WORD_ELLIPSIS = 0x40000; +const DT_EXPANDTABS = 64; +const DT_EXTERNALLEADING = 512; +const DT_LEFT = 0; +const DT_MODIFYSTRING = 65536; +const DT_NOCLIP = 256; +const DT_NOPREFIX = 2048; +const DT_RIGHT = 2; +const DT_RTLREADING = 131072; +const DT_SINGLELINE = 32; +const DT_TABSTOP = 128; +const DT_TOP = 0; +const DT_VCENTER = 4; +const DT_WORDBREAK = 16; +const DT_INTERNAL = 4096; + +const WB_ISDELIMITER = 2; +const WB_LEFT = 0; +const WB_RIGHT = 1; + +const SB_HORZ = 0; +const SB_VERT = 1; +const SB_CTL = 2; +const SB_BOTH = 3; + +const ESB_DISABLE_BOTH = 3; +const ESB_DISABLE_DOWN = 2; +const ESB_DISABLE_LEFT = 1; +const ESB_DISABLE_LTUP = 1; +const ESB_DISABLE_RIGHT = 2; +const ESB_DISABLE_RTDN = 2; +const ESB_DISABLE_UP = 1; +const ESB_ENABLE_BOTH = 0; + +const SB_LINEUP = 0; +const SB_LINEDOWN = 1; +const SB_LINELEFT = 0; +const SB_LINERIGHT = 1; +const SB_PAGEUP = 2; +const SB_PAGEDOWN = 3; +const SB_PAGELEFT = 2; +const SB_PAGERIGHT = 3; +const SB_THUMBPOSITION = 4; +const SB_THUMBTRACK = 5; +const SB_ENDSCROLL = 8; +const SB_LEFT = 6; +const SB_RIGHT = 7; +const SB_BOTTOM = 7; +const SB_TOP = 6; + +//MACRO #define IS_INTRESOURCE(i) (((ULONG_PTR)(i) >> 16) == 0) + +template MAKEINTRESOURCE_T (WORD i) +{ + const LPTSTR MAKEINTRESOURCE_T = cast(LPTSTR)(i); +} + +LPSTR MAKEINTRESOURCEA(WORD i) +{ + return cast(LPSTR)(i); +} + +LPWSTR MAKEINTRESOURCEW(WORD i) +{ + return cast(LPWSTR)(i); +} + +const RT_CURSOR = MAKEINTRESOURCE_T!(1); +const RT_BITMAP = MAKEINTRESOURCE_T!(2); +const RT_ICON = MAKEINTRESOURCE_T!(3); +const RT_MENU = MAKEINTRESOURCE_T!(4); +const RT_DIALOG = MAKEINTRESOURCE_T!(5); +const RT_STRING = MAKEINTRESOURCE_T!(6); +const RT_FONTDIR = MAKEINTRESOURCE_T!(7); +const RT_FONT = MAKEINTRESOURCE_T!(8); +const RT_ACCELERATOR = MAKEINTRESOURCE_T!(9); +const RT_RCDATA = MAKEINTRESOURCE_T!(10); +const RT_MESSAGETABLE = MAKEINTRESOURCE_T!(11); + +const RT_GROUP_CURSOR = MAKEINTRESOURCE_T!(12); +const RT_GROUP_ICON = MAKEINTRESOURCE_T!(14); +const RT_VERSION = MAKEINTRESOURCE_T!(16); +const RT_DLGINCLUDE = MAKEINTRESOURCE_T!(17); +const RT_PLUGPLAY = MAKEINTRESOURCE_T!(19); +const RT_VXD = MAKEINTRESOURCE_T!(20); +const RT_ANICURSOR = MAKEINTRESOURCE_T!(21); +const RT_ANIICON = MAKEINTRESOURCE_T!(22); +const RT_HTML = MAKEINTRESOURCE_T!(23); +const RT_MANIFEST = MAKEINTRESOURCE_T!(24); + +const CREATEPROCESS_MANIFEST_RESOURCE_ID = MAKEINTRESOURCE_T!(1); +const ISOLATIONAWARE_MANIFEST_RESOURCE_ID = MAKEINTRESOURCE_T!(2); +const ISOLATIONAWARE_NOSTATICIMPORT_MANIFEST_RESOURCE_ID = MAKEINTRESOURCE_T!(3); + +const EWX_LOGOFF = 0; +const EWX_SHUTDOWN = 1; +const EWX_REBOOT = 2; +const EWX_FORCE = 4; +const EWX_POWEROFF = 8; +static if (_WIN32_WINNT >= 0x500) { +const EWX_FORCEIFHUNG = 16; +} + +const CS_BYTEALIGNCLIENT = 4096; +const CS_BYTEALIGNWINDOW = 8192; +const CS_KEYCVTWINDOW = 4; +const CS_NOKEYCVT = 256; +const CS_CLASSDC = 64; +const CS_DBLCLKS = 8; +const CS_GLOBALCLASS = 16384; +const CS_HREDRAW = 2; +const CS_NOCLOSE = 512; +const CS_OWNDC = 32; +const CS_PARENTDC = 128; +const CS_SAVEBITS = 2048; +const CS_VREDRAW = 1; +const CS_IME = 0x10000; + +const GCW_ATOM = -32; +const GCL_CBCLSEXTRA = -20; +const GCL_CBWNDEXTRA = -18; +const GCL_HBRBACKGROUND = -10; +const GCL_HCURSOR = -12; +const GCL_HICON = -14; +const GCL_HICONSM = -34; +const GCL_HMODULE = -16; +const GCL_MENUNAME = -8; +const GCL_STYLE = -26; +const GCL_WNDPROC = -24; + +alias GCL_HICONSM GCLP_HICONSM; +alias GCL_HICON GCLP_HICON; +alias GCL_HCURSOR GCLP_HCURSOR; +alias GCL_HBRBACKGROUND GCLP_HBRBACKGROUND; +alias GCL_HMODULE GCLP_HMODULE; +alias GCL_MENUNAME GCLP_MENUNAME; +alias GCL_WNDPROC GCLP_WNDPROC; + +const IDC_ARROW = MAKEINTRESOURCE_T!(32512); +const IDC_IBEAM = MAKEINTRESOURCE_T!(32513); +const IDC_WAIT = MAKEINTRESOURCE_T!(32514); +const IDC_CROSS = MAKEINTRESOURCE_T!(32515); +const IDC_UPARROW = MAKEINTRESOURCE_T!(32516); +const IDC_SIZENWSE = MAKEINTRESOURCE_T!(32642); +const IDC_SIZENESW = MAKEINTRESOURCE_T!(32643); +const IDC_SIZEWE = MAKEINTRESOURCE_T!(32644); +const IDC_SIZENS = MAKEINTRESOURCE_T!(32645); +const IDC_SIZEALL = MAKEINTRESOURCE_T!(32646); +const IDC_NO = MAKEINTRESOURCE_T!(32648); +const IDC_HAND = MAKEINTRESOURCE_T!(32649); +const IDC_APPSTARTING = MAKEINTRESOURCE_T!(32650); +const IDC_HELP = MAKEINTRESOURCE_T!(32651); +const IDC_ICON = MAKEINTRESOURCE_T!(32641); +const IDC_SIZE = MAKEINTRESOURCE_T!(32640); +const IDI_APPLICATION = MAKEINTRESOURCE_T!(32512); +const IDI_HAND = MAKEINTRESOURCE_T!(32513); +const IDI_QUESTION = MAKEINTRESOURCE_T!(32514); +const IDI_EXCLAMATION = MAKEINTRESOURCE_T!(32515); +const IDI_ASTERISK = MAKEINTRESOURCE_T!(32516); +const IDI_WINLOGO = MAKEINTRESOURCE_T!(32517); +const IDI_WARNING = IDI_EXCLAMATION; +const IDI_ERROR = IDI_HAND; +const IDI_INFORMATION = IDI_ASTERISK; + +const MIIM_STATE = 1; +const MIIM_ID = 2; +const MIIM_SUBMENU = 4; +const MIIM_CHECKMARKS = 8; +const MIIM_TYPE = 16; +const MIIM_DATA = 32; +const MIIM_STRING = 64; +const MIIM_BITMAP = 128; +const MIIM_FTYPE = 256; + +static if (WINVER >= 0x500) { + +const MIM_MAXHEIGHT = 1; +const MIM_BACKGROUND = 2; +const MIM_HELPID = 4; +const MIM_MENUDATA = 8; +const MIM_STYLE = 16; +const MIM_APPLYTOSUBMENUS = 0x80000000L; + +const MNS_NOCHECK = 0x80000000; +const MNS_MODELESS = 0x40000000; +const MNS_DRAGDROP = 0x20000000; +const MNS_AUTODISMISS = 0x10000000; +const MNS_NOTIFYBYPOS = 0x08000000; +const MNS_CHECKORBMP = 0x04000000; + +} + +const MFT_BITMAP = 4; +const MFT_MENUBARBREAK = 32; +const MFT_MENUBREAK = 64; +const MFT_OWNERDRAW = 256; +const MFT_RADIOCHECK = 512; +const MFT_RIGHTJUSTIFY = 0x4000; +const MFT_SEPARATOR = 0x800; +const MFT_RIGHTORDER = 0x2000L; +const MFT_STRING = 0; + +const MFS_CHECKED = 8; +const MFS_DEFAULT = 4096; +const MFS_DISABLED = 3; +const MFS_ENABLED = 0; +const MFS_GRAYED = 3; +const MFS_HILITE = 128; +const MFS_UNCHECKED = 0; +const MFS_UNHILITE = 0; + +const GW_HWNDNEXT = 2; +const GW_HWNDPREV = 3; +const GW_CHILD = 5; +const GW_HWNDFIRST = 0; +const GW_HWNDLAST = 1; +const GW_OWNER = 4; + +const SW_HIDE = 0; +const SW_NORMAL = 1; +const SW_SHOWNORMAL = 1; +const SW_SHOWMINIMIZED = 2; +const SW_MAXIMIZE = 3; +const SW_SHOWMAXIMIZED = 3; +const SW_SHOWNOACTIVATE = 4; +const SW_SHOW = 5; +const SW_MINIMIZE = 6; +const SW_SHOWMINNOACTIVE = 7; +const SW_SHOWNA = 8; +const SW_RESTORE = 9; +const SW_SHOWDEFAULT = 10; +const SW_FORCEMINIMIZE = 11; +const SW_MAX = 11; + +const MB_USERICON = 128; +const MB_ICONASTERISK = 64; +const MB_ICONEXCLAMATION = 0x30; +const MB_ICONWARNING = 0x30; +const MB_ICONERROR = 16; +const MB_ICONHAND = 16; +const MB_ICONQUESTION = 32; +const MB_OK = 0; +const MB_ABORTRETRYIGNORE = 2; +const MB_APPLMODAL = 0; +const MB_DEFAULT_DESKTOP_ONLY = 0x20000; +const MB_HELP = 0x4000; +const MB_RIGHT = 0x80000; +const MB_RTLREADING = 0x100000; +const MB_TOPMOST = 0x40000; +const MB_DEFBUTTON1 = 0; +const MB_DEFBUTTON2 = 256; +const MB_DEFBUTTON3 = 512; +const MB_DEFBUTTON4 = 0x300; +const MB_ICONINFORMATION = 64; +const MB_ICONSTOP = 16; +const MB_OKCANCEL = 1; +const MB_RETRYCANCEL = 5; + +static if (_WIN32_WINNT_ONLY) { + static if (_WIN32_WINNT >= 0x400) { + const MB_SERVICE_NOTIFICATION = 0x00200000; + } else { + const MB_SERVICE_NOTIFICATION = 0x00040000; + } + const MB_SERVICE_NOTIFICATION_NT3X = 0x00040000; +} + +const MB_SETFOREGROUND = 0x10000; +const MB_SYSTEMMODAL = 4096; +const MB_TASKMODAL = 0x2000; +const MB_YESNO = 4; +const MB_YESNOCANCEL = 3; +const MB_ICONMASK = 240; +const MB_DEFMASK = 3840; +const MB_MODEMASK = 0x00003000; +const MB_MISCMASK = 0x0000C000; +const MB_NOFOCUS = 0x00008000; +const MB_TYPEMASK = 15; +// [Redefined] MB_TOPMOST=0x40000 +static if (WINVER >= 0x500) { + const MB_CANCELTRYCONTINUE=6; +} + +const IDOK = 1; +const IDCANCEL = 2; +const IDABORT = 3; +const IDRETRY = 4; +const IDIGNORE = 5; +const IDYES = 6; +const IDNO = 7; +static if (WINVER >= 0x400) { +const IDCLOSE = 8; +const IDHELP = 9; +} +static if (WINVER >= 0x500) { +const IDTRYAGAIN = 10; +const IDCONTINUE = 11; +} + +const GWL_EXSTYLE = -20; +const GWL_STYLE = -16; +const GWL_WNDPROC = -4; +const GWLP_WNDPROC = -4; +const GWL_HINSTANCE = -6; +const GWLP_HINSTANCE = -6; +const GWL_HWNDPARENT = -8; +const GWLP_HWNDPARENT = -8; +const GWL_ID = -12; +const GWLP_ID = -12; +const GWL_USERDATA = -21; +const GWLP_USERDATA = -21; + +const DWL_DLGPROC = 4; +const DWLP_DLGPROC = 4; +const DWL_MSGRESULT = 0; +const DWLP_MSGRESULT = 0; +const DWL_USER = 8; +const DWLP_USER = 8; + +const QS_KEY = 1; +const QS_MOUSEMOVE = 2; +const QS_MOUSEBUTTON = 4; +const QS_MOUSE = 6; +const QS_POSTMESSAGE = 8; +const QS_TIMER = 16; +const QS_PAINT = 32; +const QS_SENDMESSAGE = 64; +const QS_HOTKEY = 128; +const QS_ALLPOSTMESSAGE = 256; +static if (_WIN32_WINNT >= 0x501) { +const QS_RAWINPUT = 1024; +const QS_INPUT = 1031; +const QS_ALLEVENTS = 1215; +const QS_ALLINPUT = 1279; +} else { +const QS_INPUT = 7; +const QS_ALLEVENTS = 191; +const QS_ALLINPUT = 255; +} + +const MWMO_WAITALL = 1; +const MWMO_ALERTABLE = 2; +const MWMO_INPUTAVAILABLE = 4; + +const COLOR_3DDKSHADOW=21; +const COLOR_3DFACE=15; +const COLOR_3DHILIGHT=20; +const COLOR_3DHIGHLIGHT=20; +const COLOR_3DLIGHT=22; +const COLOR_BTNHILIGHT=20; +const COLOR_3DSHADOW=16; +const COLOR_ACTIVEBORDER=10; +const COLOR_ACTIVECAPTION=2; +const COLOR_APPWORKSPACE=12; +const COLOR_BACKGROUND=1; +const COLOR_DESKTOP=1; +const COLOR_BTNFACE=15; +const COLOR_BTNHIGHLIGHT=20; +const COLOR_BTNSHADOW=16; +const COLOR_BTNTEXT=18; +const COLOR_CAPTIONTEXT=9; +const COLOR_GRAYTEXT=17; +const COLOR_HIGHLIGHT=13; +const COLOR_HIGHLIGHTTEXT=14; +const COLOR_INACTIVEBORDER=11; +const COLOR_INACTIVECAPTION=3; +const COLOR_INACTIVECAPTIONTEXT=19; +const COLOR_INFOBK=24; +const COLOR_INFOTEXT=23; +const COLOR_MENU=4; +const COLOR_MENUTEXT=7; +const COLOR_SCROLLBAR=0; +const COLOR_WINDOW=5; +const COLOR_WINDOWFRAME=6; +const COLOR_WINDOWTEXT=8; +const COLOR_HOTLIGHT=26; +const COLOR_GRADIENTACTIVECAPTION=27; +const COLOR_GRADIENTINACTIVECAPTION=28; + +const CTLCOLOR_MSGBOX=0; +const CTLCOLOR_EDIT=1; +const CTLCOLOR_LISTBOX=2; +const CTLCOLOR_BTN=3; +const CTLCOLOR_DLG=4; +const CTLCOLOR_SCROLLBAR=5; +const CTLCOLOR_STATIC=6; +const CTLCOLOR_MAX=7; + +// For GetSystemMetrics() +enum : int { + SM_CXSCREEN = 0, + SM_CYSCREEN, + SM_CXVSCROLL, + SM_CYHSCROLL, + SM_CYCAPTION, + SM_CXBORDER, + SM_CYBORDER, + SM_CXDLGFRAME, // = 7, + SM_CXFIXEDFRAME = SM_CXDLGFRAME, + SM_CYDLGFRAME, // =8, + SM_CYFIXEDFRAME = SM_CYDLGFRAME, + SM_CYVTHUMB = 9, + SM_CXHTHUMB, + SM_CXICON, + SM_CYICON, + SM_CXCURSOR, + SM_CYCURSOR, + SM_CYMENU, + SM_CXFULLSCREEN, + SM_CYFULLSCREEN, + SM_CYKANJIWINDOW, + SM_MOUSEPRESENT, + SM_CYVSCROLL, + SM_CXHSCROLL, + SM_DEBUG, + SM_SWAPBUTTON, + SM_RESERVED1, + SM_RESERVED2, + SM_RESERVED3, + SM_RESERVED4, + SM_CXMIN, + SM_CYMIN, + SM_CXSIZE, + SM_CYSIZE, + SM_CXSIZEFRAME, // = 32, + SM_CXFRAME = SM_CXSIZEFRAME, + SM_CYSIZEFRAME, // = 33 + SM_CYFRAME = SM_CYSIZEFRAME, + SM_CXMINTRACK, + SM_CYMINTRACK, + SM_CXDOUBLECLK, + SM_CYDOUBLECLK, + SM_CXICONSPACING, + SM_CYICONSPACING, + SM_MENUDROPALIGNMENT, + SM_PENWINDOWS, + SM_DBCSENABLED, + SM_CMOUSEBUTTONS, + SM_SECURE, + SM_CXEDGE, + SM_CYEDGE, + SM_CXMINSPACING, + SM_CYMINSPACING, + SM_CXSMICON, + SM_CYSMICON, + SM_CYSMCAPTION, + SM_CXSMSIZE, + SM_CYSMSIZE, + SM_CXMENUSIZE, + SM_CYMENUSIZE, + SM_ARRANGE, + SM_CXMINIMIZED, + SM_CYMINIMIZED, + SM_CXMAXTRACK, + SM_CYMAXTRACK, + SM_CXMAXIMIZED, + SM_CYMAXIMIZED, + SM_NETWORK, // = 63 + SM_CLEANBOOT = 67, + SM_CXDRAG, + SM_CYDRAG, + SM_SHOWSOUNDS, + SM_CXMENUCHECK, + SM_CYMENUCHECK, + SM_SLOWMACHINE, + SM_MIDEASTENABLED, + // The next values aren't supported in Win95. + SM_MOUSEWHEELPRESENT, + SM_XVIRTUALSCREEN, + SM_YVIRTUALSCREEN, + SM_CXVIRTUALSCREEN, + SM_CYVIRTUALSCREEN, + SM_CMONITORS, + SM_SAMEDISPLAYFORMAT, + SM_IMMENABLED, + SM_CXFOCUSBORDER, + SM_CYFOCUSBORDER, // = 84 + SM_TABLETPC = 86, + SM_MEDIACENTER = 87, + SM_REMOTESESSION = 0x1000, + // These are only for WinXP and later + SM_SHUTTINGDOWN = 0x2000, + SM_REMOTECONTROL = 0x2001 +} + +const ARW_BOTTOMLEFT=0; +const ARW_BOTTOMRIGHT=1; +const ARW_HIDE=8; +const ARW_TOPLEFT=2; +const ARW_TOPRIGHT=3; +const ARW_DOWN=4; +const ARW_LEFT=0; +const ARW_RIGHT=0; +const ARW_UP=4; + +const UOI_FLAGS=1; +const UOI_NAME=2; +const UOI_TYPE=3; +const UOI_USER_SID=4; + +// For the fuLoad parameter of LoadImage() +enum : UINT { + LR_DEFAULTCOLOR = 0, + LR_MONOCHROME = 1, + LR_COLOR = 2, + LR_COPYRETURNORG = 4, + LR_COPYDELETEORG = 8, + LR_LOADFROMFILE = 16, + LR_LOADTRANSPARENT = 32, + LR_DEFAULTSIZE = 64, + LR_LOADREALSIZE = 128, + LR_LOADMAP3DCOLORS = 4096, + LR_CREATEDIBSECTION = 8192, + LR_COPYFROMRESOURCE = 16384, + LR_SHARED = 32768 +} + +const KEYEVENTF_EXTENDEDKEY = 0x00000001; +const KEYEVENTF_KEYUP = 00000002; +static if (_WIN32_WINNT >= 0x500) { +const KEYEVENTF_UNICODE = 0x00000004; +const KEYEVENTF_SCANCODE = 0x00000008; +} + +const OBM_BTNCORNERS = 32758; +const OBM_BTSIZE = 32761; +const OBM_CHECK = 32760; +const OBM_CHECKBOXES = 32759; +const OBM_CLOSE = 32754; +const OBM_COMBO = 32738; +const OBM_DNARROW = 32752; +const OBM_DNARROWD = 32742; +const OBM_DNARROWI = 32736; +const OBM_LFARROW = 32750; +const OBM_LFARROWI = 32734; +const OBM_LFARROWD = 32740; +const OBM_MNARROW = 32739; +const OBM_OLD_CLOSE = 32767; +const OBM_OLD_DNARROW = 32764; +const OBM_OLD_LFARROW = 32762; +const OBM_OLD_REDUCE = 32757; +const OBM_OLD_RESTORE = 32755; +const OBM_OLD_RGARROW = 32763; +const OBM_OLD_UPARROW = 32765; +const OBM_OLD_ZOOM = 32756; +const OBM_REDUCE = 32749; +const OBM_REDUCED = 32746; +const OBM_RESTORE = 32747; +const OBM_RESTORED = 32744; +const OBM_RGARROW = 32751; +const OBM_RGARROWD = 32741; +const OBM_RGARROWI = 32735; +const OBM_SIZE = 32766; +const OBM_UPARROW = 32753; +const OBM_UPARROWD = 32743; +const OBM_UPARROWI = 32737; +const OBM_ZOOM = 32748; +const OBM_ZOOMD = 32745; + +const OCR_NORMAL = 32512; +const OCR_IBEAM = 32513; +const OCR_WAIT = 32514; +const OCR_CROSS = 32515; +const OCR_UP = 32516; +const OCR_SIZE = 32640; +const OCR_ICON = 32641; +const OCR_SIZENWSE = 32642; +const OCR_SIZENESW = 32643; +const OCR_SIZEWE = 32644; +const OCR_SIZENS = 32645; +const OCR_SIZEALL = 32646; +const OCR_NO = 32648; +const OCR_APPSTARTING = 32650; + +const OIC_SAMPLE = 32512; +const OIC_HAND = 32513; +const OIC_QUES = 32514; +const OIC_BANG = 32515; +const OIC_NOTE = 32516; +const OIC_WINLOGO = 32517; +const OIC_WARNING = OIC_BANG; +const OIC_ERROR = OIC_HAND; +const OIC_INFORMATION = OIC_NOTE; + +const HELPINFO_MENUITEM = 2; +const HELPINFO_WINDOW = 1; + +const MSGF_DIALOGBOX = 0; +const MSGF_MESSAGEBOX = 1; +const MSGF_MENU = 2; +const MSGF_MOVE = 3; +const MSGF_SIZE = 4; +const MSGF_SCROLLBAR = 5; +const MSGF_NEXTWINDOW = 6; +const MSGF_MAINLOOP = 8; +const MSGF_USER = 4096; + +const MOUSEEVENTF_MOVE = 1; +const MOUSEEVENTF_LEFTDOWN = 2; +const MOUSEEVENTF_LEFTUP = 4; +const MOUSEEVENTF_RIGHTDOWN = 8; +const MOUSEEVENTF_RIGHTUP = 16; +const MOUSEEVENTF_MIDDLEDOWN = 32; +const MOUSEEVENTF_MIDDLEUP = 64; +const MOUSEEVENTF_WHEEL = 0x0800; +const MOUSEEVENTF_ABSOLUTE = 32768; + +const PM_NOREMOVE = 0; +const PM_REMOVE = 1; +const PM_NOYIELD = 2; + +static if (WINVER >= 0x500) { +const PM_QS_INPUT = (QS_INPUT << 16); +const PM_QS_POSTMESSAGE = ((QS_POSTMESSAGE|QS_HOTKEY|QS_TIMER) << 16); +const PM_QS_PAINT = (QS_PAINT << 16); +const PM_QS_SENDMESSAGE = (QS_SENDMESSAGE << 16); +} +const HWND + HWND_BROADCAST = cast(HWND)0xffff, + HWND_BOTTOM = cast(HWND)1, + HWND_NOTOPMOST = cast(HWND)(-2), + HWND_TOP = cast(HWND)0, + HWND_TOPMOST = cast(HWND)(-1), + HWND_DESKTOP = cast(HWND)0, + HWND_MESSAGE = cast(HWND)(-3);// w2k + +const RDW_INVALIDATE = 1; +const RDW_INTERNALPAINT = 2; +const RDW_ERASE = 4; +const RDW_VALIDATE = 8; +const RDW_NOINTERNALPAINT = 16; +const RDW_NOERASE = 32; +const RDW_NOCHILDREN = 64; +const RDW_ALLCHILDREN = 128; +const RDW_UPDATENOW = 256; +const RDW_ERASENOW = 512; +const RDW_FRAME = 1024; +const RDW_NOFRAME = 2048; + +const SMTO_NORMAL = 0; +const SMTO_BLOCK = 1; +const SMTO_ABORTIFHUNG = 2; + +const SIF_ALL = 23; +const SIF_PAGE = 2; +const SIF_POS = 4; +const SIF_RANGE = 1; +const SIF_DISABLENOSCROLL = 8; +const SIF_TRACKPOS = 16; + +const SWP_DRAWFRAME = 32; +const SWP_FRAMECHANGED = 32; +const SWP_HIDEWINDOW = 128; +const SWP_NOACTIVATE = 16; +const SWP_NOCOPYBITS = 256; +const SWP_NOMOVE = 2; +const SWP_NOSIZE = 1; +const SWP_NOREDRAW = 8; +const SWP_NOZORDER = 4; +const SWP_SHOWWINDOW = 64; +const SWP_NOOWNERZORDER = 512; +const SWP_NOREPOSITION = 512; +const SWP_NOSENDCHANGING = 1024; +const SWP_DEFERERASE = 8192; +const SWP_ASYNCWINDOWPOS = 16384; + +const HSHELL_ACTIVATESHELLWINDOW = 3; +const HSHELL_GETMINRECT = 5; +const HSHELL_LANGUAGE = 8; +const HSHELL_REDRAW = 6; +const HSHELL_TASKMAN = 7; +const HSHELL_WINDOWACTIVATED = 4; +const HSHELL_WINDOWCREATED = 1; +const HSHELL_WINDOWDESTROYED = 2; +const HSHELL_FLASH = 32774; + +static if (WINVER >= 0x500) { +const SPI_SETFOREGROUNDLOCKTIMEOUT=0x2001; +const SPI_GETFOREGROUNDLOCKTIMEOUT=0x2000; +} + +const SPI_GETACCESSTIMEOUT=60; +const SPI_GETACTIVEWNDTRKTIMEOUT=8194; +const SPI_GETANIMATION=72; +const SPI_GETBEEP=1; +const SPI_GETBORDER=5; +const SPI_GETDEFAULTINPUTLANG=89; +const SPI_GETDRAGFULLWINDOWS=38; +const SPI_GETFASTTASKSWITCH=35; +const SPI_GETFILTERKEYS=50; +const SPI_GETFONTSMOOTHING=74; +const SPI_GETGRIDGRANULARITY=18; +const SPI_GETHIGHCONTRAST=66; +const SPI_GETICONMETRICS=45; +const SPI_GETICONTITLELOGFONT=31; +const SPI_GETICONTITLEWRAP=25; +const SPI_GETKEYBOARDDELAY=22; +const SPI_GETKEYBOARDPREF=68; +const SPI_GETKEYBOARDSPEED=10; +const SPI_GETLOWPOWERACTIVE=83; +const SPI_GETLOWPOWERTIMEOUT=79; +const SPI_GETMENUDROPALIGNMENT=27; +const SPI_GETMINIMIZEDMETRICS=43; +const SPI_GETMOUSE=3; +const SPI_GETMOUSEKEYS=54; +const SPI_GETMOUSETRAILS=94; +const SPI_GETNONCLIENTMETRICS=41; +const SPI_GETPOWEROFFACTIVE=84; +const SPI_GETPOWEROFFTIMEOUT=80; +const SPI_GETSCREENREADER=70; +const SPI_GETSCREENSAVEACTIVE=16; +const SPI_GETSCREENSAVETIMEOUT=14; +const SPI_GETSERIALKEYS=62; +const SPI_GETSHOWSOUNDS=56; +const SPI_GETSOUNDSENTRY=64; +const SPI_GETSTICKYKEYS=58; +const SPI_GETTOGGLEKEYS=52; +const SPI_GETWHEELSCROLLLINES=104; +const SPI_GETWINDOWSEXTENSION=92; +const SPI_GETWORKAREA=48; +const SPI_ICONHORIZONTALSPACING=13; +const SPI_ICONVERTICALSPACING=24; +const SPI_LANGDRIVER=12; +const SPI_SCREENSAVERRUNNING=97; +const SPI_SETACCESSTIMEOUT=61; +const SPI_SETACTIVEWNDTRKTIMEOUT=8195; +const SPI_SETANIMATION=73; +const SPI_SETBEEP=2; +const SPI_SETBORDER=6; +const SPI_SETDEFAULTINPUTLANG=90; +const SPI_SETDESKPATTERN=21; +const SPI_SETDESKWALLPAPER=20; +const SPI_SETDOUBLECLICKTIME=32; +const SPI_SETDOUBLECLKHEIGHT=30; +const SPI_SETDOUBLECLKWIDTH=29; +const SPI_SETDRAGFULLWINDOWS=37; +const SPI_SETDRAGHEIGHT=77; +const SPI_SETDRAGWIDTH=76; +const SPI_SETFASTTASKSWITCH=36; +const SPI_SETFILTERKEYS=51; +const SPI_SETFONTSMOOTHING=75; +const SPI_SETGRIDGRANULARITY=19; +const SPI_SETHANDHELD=78; +const SPI_SETHIGHCONTRAST=67; +const SPI_SETICONMETRICS=46; +const SPI_SETICONTITLELOGFONT=34; +const SPI_SETICONTITLEWRAP=26; +const SPI_SETKEYBOARDDELAY=23; +const SPI_SETKEYBOARDPREF=69; +const SPI_SETKEYBOARDSPEED=11; +const SPI_SETLANGTOGGLE=91; +const SPI_SETLOWPOWERACTIVE=85; +const SPI_SETLOWPOWERTIMEOUT=81; +const SPI_SETMENUDROPALIGNMENT=28; +const SPI_SETMINIMIZEDMETRICS=44; +const SPI_SETMOUSE=4; +const SPI_SETMOUSEBUTTONSWAP=33; +const SPI_SETMOUSEKEYS=55; +const SPI_SETMOUSETRAILS=93; +const SPI_SETNONCLIENTMETRICS=42; +const SPI_SETPENWINDOWS=49; +const SPI_SETPOWEROFFACTIVE=86; +const SPI_SETPOWEROFFTIMEOUT=82; +const SPI_SETSCREENREADER=71; +const SPI_SETSCREENSAVEACTIVE=17; +const SPI_SETSCREENSAVERRUNNING=97; +const SPI_SETSCREENSAVETIMEOUT=15; +const SPI_SETSERIALKEYS=63; +const SPI_SETSHOWSOUNDS=57; +const SPI_SETSOUNDSENTRY=65; +const SPI_SETSTICKYKEYS=59; +const SPI_SETTOGGLEKEYS=53; +const SPI_SETWHEELSCROLLLINES=105; +const SPI_SETWORKAREA=47; + +static if (WINVER >= 0x500) { +const SPI_GETDESKWALLPAPER=115; +const SPI_GETMOUSESPEED=112; +const SPI_GETSCREENSAVERRUNNING=114; +const SPI_GETACTIVEWINDOWTRACKING=0x1000; +const SPI_GETACTIVEWNDTRKZORDER=0x100C; +const SPI_GETCOMBOBOXANIMATION=0x1004; +const SPI_GETCURSORSHADOW=0x101A; +const SPI_GETGRADIENTCAPTIONS=0x1008; +const SPI_GETHOTTRACKING=0x100E; +const SPI_GETKEYBOARDCUES=0x100A; +const SPI_GETLISTBOXSMOOTHSCROLLING=0x1006; +const SPI_GETMENUANIMATION=0x1002; +const SPI_GETMENUFADE=0x1012; +const SPI_GETMENUUNDERLINES=0x100A; +const SPI_GETSELECTIONFADE=0x1014; +const SPI_GETTOOLTIPANIMATION=0x1016; +const SPI_GETTOOLTIPFADE=0x1018; +const SPI_SETACTIVEWINDOWTRACKING=0x1001; +const SPI_SETACTIVEWNDTRKZORDER=0x100D; +const SPI_SETCOMBOBOXANIMATION=0x1005; +const SPI_SETCURSORSHADOW=0x101B; +const SPI_SETGRADIENTCAPTIONS=0x1009; +const SPI_SETHOTTRACKING=0x100F; +const SPI_SETKEYBOARDCUES=0x100B; +const SPI_SETLISTBOXSMOOTHSCROLLING=0x1007; +const SPI_SETMENUANIMATION=0x1003; +const SPI_SETMENUFADE=0x1013; +const SPI_SETMENUUNDERLINES=0x100B; +const SPI_SETMOUSESPEED=113; +const SPI_SETSELECTIONFADE=0x1015; +const SPI_SETTOOLTIPANIMATION=0x1017; +const SPI_SETTOOLTIPFADE=0x1019; +} + +const SPIF_UPDATEINIFILE=1; +const SPIF_SENDWININICHANGE=2; +const SPIF_SENDCHANGE=2; +// [Redefined] ATF_ONOFFFEEDBACK=2 +// [Redefined] ATF_TIMEOUTON=1 +const WM_APP=32768; +const WM_ACTIVATE=6; +const WM_ACTIVATEAPP=28; +// FIXME/CHECK: Are WM_AFX {FIRST, LAST} valid for WINVER < 0x400? +const WM_AFXFIRST=864; +const WM_AFXLAST=895; +const WM_ASKCBFORMATNAME=780; +const WM_CANCELJOURNAL=75; +const WM_CANCELMODE=31; +const WM_CAPTURECHANGED=533; +const WM_CHANGECBCHAIN=781; +const WM_CHAR=258; +const WM_CHARTOITEM=47; +const WM_CHILDACTIVATE=34; +const WM_CLEAR=771; +const WM_CLOSE=16; +const WM_COMMAND=273; +const WM_COMMNOTIFY=68; // obsolete +const WM_COMPACTING=65; +const WM_COMPAREITEM=57; +const WM_CONTEXTMENU=123; +const WM_COPY=769; +const WM_COPYDATA=74; +const WM_CREATE=1; +const WM_CTLCOLORBTN=309; +const WM_CTLCOLORDLG=310; +const WM_CTLCOLOREDIT=307; +const WM_CTLCOLORLISTBOX=308; +const WM_CTLCOLORMSGBOX=306; +const WM_CTLCOLORSCROLLBAR=311; +const WM_CTLCOLORSTATIC=312; +const WM_CUT=768; +const WM_DEADCHAR=259; +const WM_DELETEITEM=45; +const WM_DESTROY=2; +const WM_DESTROYCLIPBOARD=775; +const WM_DEVICECHANGE=537; +const WM_DEVMODECHANGE=27; +const WM_DISPLAYCHANGE=126; +const WM_DRAWCLIPBOARD=776; +const WM_DRAWITEM=43; +const WM_DROPFILES=563; +const WM_ENABLE=10; +const WM_ENDSESSION=22; +const WM_ENTERIDLE=289; +const WM_ENTERMENULOOP=529; +const WM_ENTERSIZEMOVE=561; +const WM_ERASEBKGND=20; +const WM_EXITMENULOOP=530; +const WM_EXITSIZEMOVE=562; +const WM_FONTCHANGE=29; +const WM_GETDLGCODE=135; +const WM_GETFONT=49; +const WM_GETHOTKEY=51; +const WM_GETICON=127; +const WM_GETMINMAXINFO=36; +const WM_GETTEXT=13; +const WM_GETTEXTLENGTH=14; +const WM_HANDHELDFIRST=856; +const WM_HANDHELDLAST=863; +const WM_HELP=83; +const WM_HOTKEY=786; +const WM_HSCROLL=276; +const WM_HSCROLLCLIPBOARD=782; +const WM_ICONERASEBKGND=39; +const WM_INITDIALOG=272; +const WM_INITMENU=278; +const WM_INITMENUPOPUP=279; +const WM_INPUTLANGCHANGE=81; +const WM_INPUTLANGCHANGEREQUEST=80; +const WM_KEYDOWN=256; +const WM_KEYUP=257; +const WM_KILLFOCUS=8; +const WM_MDIACTIVATE=546; +const WM_MDICASCADE=551; +const WM_MDICREATE=544; +const WM_MDIDESTROY=545; +const WM_MDIGETACTIVE=553; +const WM_MDIICONARRANGE=552; +const WM_MDIMAXIMIZE=549; +const WM_MDINEXT=548; +const WM_MDIREFRESHMENU=564; +const WM_MDIRESTORE=547; +const WM_MDISETMENU=560; +const WM_MDITILE=550; +const WM_MEASUREITEM=44; +static if (WINVER >= 0x500) { +const WM_UNINITMENUPOPUP=0x0125; +const WM_MENURBUTTONUP=290; +const WM_MENUCOMMAND=0x0126; +const WM_MENUGETOBJECT=0x0124; +const WM_MENUDRAG=0x0123; +} + +static if (_WIN32_WINNT >= 0x500) { + + enum { + WM_CHANGEUISTATE = 0x0127, + WM_UPDATEUISTATE = 0x0128, + WM_QUERYUISTATE = 0x0129 + } + + // LOWORD(wParam) values in WM_*UISTATE* + enum { + UIS_SET = 1, + UIS_CLEAR = 2, + UIS_INITIALIZE = 3 + } + + // HIWORD(wParam) values in WM_*UISTATE* + enum { + UISF_HIDEFOCUS = 0x1, + UISF_HIDEACCEL = 0x2 + } + +} + +static if (_WIN32_WINNT >= 0x501) { + + // HIWORD(wParam) values in WM_*UISTATE* + enum { + UISF_ACTIVE = 0x4 + } + +} + +const WM_MENUCHAR=288; +const WM_MENUSELECT=287; +const WM_MOVE=3; +const WM_MOVING=534; +const WM_NCACTIVATE=134; +const WM_NCCALCSIZE=131; +const WM_NCCREATE=129; +const WM_NCDESTROY=130; +const WM_NCHITTEST=132; +const WM_NCLBUTTONDBLCLK=163; +const WM_NCLBUTTONDOWN=161; +const WM_NCLBUTTONUP=162; +const WM_NCMBUTTONDBLCLK=169; +const WM_NCMBUTTONDOWN=167; +const WM_NCMBUTTONUP=168; +static if (_WIN32_WINNT >= 0x500) { +const WM_NCXBUTTONDOWN=171; +const WM_NCXBUTTONUP=172; +const WM_NCXBUTTONDBLCLK=173; +const WM_NCMOUSEHOVER=0x02A0; +const WM_NCMOUSELEAVE=0x02A2; +} +const WM_NCMOUSEMOVE=160; +const WM_NCPAINT=133; +const WM_NCRBUTTONDBLCLK=166; +const WM_NCRBUTTONDOWN=164; +const WM_NCRBUTTONUP=165; +const WM_NEXTDLGCTL=40; +const WM_NEXTMENU=531; +const WM_NOTIFY=78; +const WM_NOTIFYFORMAT=85; +const WM_NULL=0; +const WM_PAINT=15; +const WM_PAINTCLIPBOARD=777; +const WM_PAINTICON=38; +const WM_PALETTECHANGED=785; +const WM_PALETTEISCHANGING=784; +const WM_PARENTNOTIFY=528; +const WM_PASTE=770; +const WM_PENWINFIRST=896; +const WM_PENWINLAST=911; +const WM_POWER=72; +const WM_POWERBROADCAST=536; +const WM_PRINT=791; +const WM_PRINTCLIENT=792; +const WM_APPCOMMAND = 0x0319; +const WM_QUERYDRAGICON=55; +const WM_QUERYENDSESSION=17; +const WM_QUERYNEWPALETTE=783; +const WM_QUERYOPEN=19; +const WM_QUEUESYNC=35; +const WM_QUIT=18; +const WM_RENDERALLFORMATS=774; +const WM_RENDERFORMAT=773; +const WM_SETCURSOR=32; +const WM_SETFOCUS=7; +const WM_SETFONT=48; +const WM_SETHOTKEY=50; +const WM_SETICON=128; +const WM_SETREDRAW=11; +const WM_SETTEXT=12; +const WM_SETTINGCHANGE=26; +const WM_SHOWWINDOW=24; +const WM_SIZE=5; +const WM_SIZECLIPBOARD=779; +const WM_SIZING=532; +const WM_SPOOLERSTATUS=42; +const WM_STYLECHANGED=125; +const WM_STYLECHANGING=124; +const WM_SYSCHAR=262; +const WM_SYSCOLORCHANGE=21; +const WM_SYSCOMMAND=274; +const WM_SYSDEADCHAR=263; +const WM_SYSKEYDOWN=260; +const WM_SYSKEYUP=261; +const WM_TCARD=82; +const WM_THEMECHANGED=794; +const WM_TIMECHANGE=30; +const WM_TIMER=275; +const WM_UNDO=772; +const WM_USER=1024; +const WM_USERCHANGED=84; +const WM_VKEYTOITEM=46; +const WM_VSCROLL=277; +const WM_VSCROLLCLIPBOARD=778; +const WM_WINDOWPOSCHANGED=71; +const WM_WINDOWPOSCHANGING=70; +const WM_WININICHANGE=26; +const WM_INPUT=255; +const WM_KEYFIRST=256; +const WM_KEYLAST=264; +const WM_SYNCPAINT=136; +const WM_MOUSEACTIVATE=33; +const WM_MOUSEMOVE=512; +const WM_LBUTTONDOWN=513; +const WM_LBUTTONUP=514; +const WM_LBUTTONDBLCLK=515; +const WM_RBUTTONDOWN=516; +const WM_RBUTTONUP=517; +const WM_RBUTTONDBLCLK=518; +const WM_MBUTTONDOWN=519; +const WM_MBUTTONUP=520; +const WM_MBUTTONDBLCLK=521; +const WM_MOUSEWHEEL=522; +const WM_MOUSEFIRST=512; +static if (_WIN32_WINNT >= 0x500) { +const WM_XBUTTONDOWN=523; +const WM_XBUTTONUP=524; +const WM_XBUTTONDBLCLK=525; +const WM_MOUSELAST=525; +} else { +const WM_MOUSELAST=522; +} +const WM_MOUSEHOVER=0x2A1; +const WM_MOUSELEAVE=0x2A3; +static if (_WIN32_WINNT >= 0x400) { +const WHEEL_DELTA=120; + +SHORT GET_WHEEL_DELTA_WPARAM(WPARAM wparam) +{ +return cast(SHORT) HIWORD(wparam); +} + +const WHEEL_PAGESCROLL = uint.max; +} +const BM_CLICK=245; +const BM_GETCHECK=240; +const BM_GETIMAGE=246; +const BM_GETSTATE=242; +const BM_SETCHECK=241; +const BM_SETIMAGE=247; +const BM_SETSTATE=243; +const BM_SETSTYLE=244; +const BN_CLICKED=0; +const BN_DBLCLK=5; +const BN_DISABLE=4; +const BN_DOUBLECLICKED=5; +const BN_HILITE=2; +const BN_KILLFOCUS=7; +const BN_PAINT=1; +const BN_PUSHED=2; +const BN_SETFOCUS=6; +const BN_UNHILITE=3; +const BN_UNPUSHED=3; +const CB_ADDSTRING=323; +const CB_DELETESTRING=324; +const CB_DIR=325; +const CB_FINDSTRING=332; +const CB_FINDSTRINGEXACT=344; +const CB_GETCOUNT=326; +const CB_GETCURSEL=327; +const CB_GETDROPPEDCONTROLRECT=338; +const CB_GETDROPPEDSTATE=343; +const CB_GETDROPPEDWIDTH=351; +const CB_GETEDITSEL=320; +const CB_GETEXTENDEDUI=342; +const CB_GETHORIZONTALEXTENT=349; +const CB_GETITEMDATA=336; +const CB_GETITEMHEIGHT=340; +const CB_GETLBTEXT=328; +const CB_GETLBTEXTLEN=329; +const CB_GETLOCALE=346; +const CB_GETTOPINDEX=347; +const CB_INITSTORAGE=353; +const CB_INSERTSTRING=330; +const CB_LIMITTEXT=321; +const CB_RESETCONTENT=331; +const CB_SELECTSTRING=333; +const CB_SETCURSEL=334; +const CB_SETDROPPEDWIDTH=352; +const CB_SETEDITSEL=322; +const CB_SETEXTENDEDUI=341; +const CB_SETHORIZONTALEXTENT=350; +const CB_SETITEMDATA=337; +const CB_SETITEMHEIGHT=339; +const CB_SETLOCALE=345; +const CB_SETTOPINDEX=348; +const CB_SHOWDROPDOWN=335; + +const CBN_CLOSEUP=8; +const CBN_DBLCLK=2; +const CBN_DROPDOWN=7; +const CBN_EDITCHANGE=5; +const CBN_EDITUPDATE=6; +const CBN_ERRSPACE=(-1); +const CBN_KILLFOCUS=4; +const CBN_SELCHANGE=1; +const CBN_SELENDCANCEL=10; +const CBN_SELENDOK=9; +const CBN_SETFOCUS=3; + +const EM_CANUNDO=198; +const EM_CHARFROMPOS=215; +const EM_EMPTYUNDOBUFFER=205; +const EM_FMTLINES=200; +const EM_GETFIRSTVISIBLELINE=206; +const EM_GETHANDLE=189; +const EM_GETLIMITTEXT=213; +const EM_GETLINE=196; +const EM_GETLINECOUNT=186; +const EM_GETMARGINS=212; +const EM_GETMODIFY=184; +const EM_GETPASSWORDCHAR=210; +const EM_GETRECT=178; +const EM_GETSEL=176; +const EM_GETTHUMB=190; +const EM_GETWORDBREAKPROC=209; +const EM_LIMITTEXT=197; +const EM_LINEFROMCHAR=201; +const EM_LINEINDEX=187; +const EM_LINELENGTH=193; +const EM_LINESCROLL=182; +const EM_POSFROMCHAR=214; +const EM_REPLACESEL=194; +const EM_SCROLL=181; +const EM_SCROLLCARET=183; +const EM_SETHANDLE=188; +const EM_SETLIMITTEXT=197; +const EM_SETMARGINS=211; +const EM_SETMODIFY=185; +const EM_SETPASSWORDCHAR=204; +const EM_SETREADONLY=207; +const EM_SETRECT=179; +const EM_SETRECTNP=180; +const EM_SETSEL=177; +const EM_SETTABSTOPS=203; +const EM_SETWORDBREAKPROC=208; +const EM_UNDO=199; + +const EN_CHANGE=768; +const EN_ERRSPACE=1280; +const EN_HSCROLL=1537; +const EN_KILLFOCUS=512; +const EN_MAXTEXT=1281; +const EN_SETFOCUS=256; +const EN_UPDATE=1024; +const EN_VSCROLL=1538; + +const LB_ADDFILE=406; +const LB_ADDSTRING=384; +const LB_DELETESTRING=386; +const LB_DIR=397; +const LB_FINDSTRING=399; +const LB_FINDSTRINGEXACT=418; +const LB_GETANCHORINDEX=413; +const LB_GETCARETINDEX=415; +const LB_GETCOUNT=395; +const LB_GETCURSEL=392; +const LB_GETHORIZONTALEXTENT=403; +const LB_GETITEMDATA=409; +const LB_GETITEMHEIGHT=417; +const LB_GETITEMRECT=408; +const LB_GETLOCALE=422; +const LB_GETSEL=391; +const LB_GETSELCOUNT=400; +const LB_GETSELITEMS=401; +const LB_GETTEXT=393; +const LB_GETTEXTLEN=394; +const LB_GETTOPINDEX=398; +const LB_INITSTORAGE=424; +const LB_INSERTSTRING=385; +const LB_ITEMFROMPOINT=425; +const LB_RESETCONTENT=388; +const LB_SELECTSTRING=396; +const LB_SELITEMRANGE=411; +const LB_SELITEMRANGEEX=387; +const LB_SETANCHORINDEX=412; +const LB_SETCARETINDEX=414; +const LB_SETCOLUMNWIDTH=405; +const LB_SETCOUNT=423; +const LB_SETCURSEL=390; +const LB_SETHORIZONTALEXTENT=404; +const LB_SETITEMDATA=410; +const LB_SETITEMHEIGHT=416; +const LB_SETLOCALE=421; +const LB_SETSEL=389; +const LB_SETTABSTOPS=402; +const LB_SETTOPINDEX=407; + +const LBN_DBLCLK=2; +const LBN_ERRSPACE=-2; +const LBN_KILLFOCUS=5; +const LBN_SELCANCEL=3; +const LBN_SELCHANGE=1; +const LBN_SETFOCUS=4; + +const SBM_ENABLE_ARROWS=228; +const SBM_GETPOS=225; +const SBM_GETRANGE=227; +const SBM_GETSCROLLINFO=234; +const SBM_SETPOS=224; +const SBM_SETRANGE=226; +const SBM_SETRANGEREDRAW=230; +const SBM_SETSCROLLINFO=233; +const STM_GETICON=369; +const STM_GETIMAGE=371; +const STM_SETICON=368; +const STM_SETIMAGE=370; +const STN_CLICKED=0; +const STN_DBLCLK=1; +const STN_DISABLE=3; +const STN_ENABLE=2; + +const DM_GETDEFID = WM_USER; +const DM_SETDEFID = WM_USER+1; +const DM_REPOSITION = WM_USER+2; + +const PSM_PAGEINFO = WM_USER+100; +const PSM_SHEETINFO = WM_USER+101; + +const PSI_SETACTIVE=1; +const PSI_KILLACTIVE=2; +const PSI_APPLY=3; +const PSI_RESET=4; +const PSI_HASHELP=5; +const PSI_HELP=6; +const PSI_CHANGED=1; +const PSI_GUISTART=2; +const PSI_REBOOT=3; +const PSI_GETSIBLINGS=4; + +const DCX_WINDOW=1; +const DCX_CACHE=2; +const DCX_PARENTCLIP=32; +const DCX_CLIPSIBLINGS=16; +const DCX_CLIPCHILDREN=8; +const DCX_NORESETATTRS=4; +const DCX_INTERSECTUPDATE=0x200; +const DCX_LOCKWINDOWUPDATE=0x400; +const DCX_EXCLUDERGN=64; +const DCX_INTERSECTRGN=128; +const DCX_VALIDATE=0x200000; + +const GMDI_GOINTOPOPUPS=2; +const GMDI_USEDISABLED=1; +const FKF_AVAILABLE=2; +const FKF_CLICKON=64; +const FKF_FILTERKEYSON=1; +const FKF_HOTKEYACTIVE=4; +const FKF_HOTKEYSOUND=16; +const FKF_CONFIRMHOTKEY=8; +const FKF_INDICATOR=32; +const HCF_HIGHCONTRASTON=1; +const HCF_AVAILABLE=2; +const HCF_HOTKEYACTIVE=4; +const HCF_CONFIRMHOTKEY=8; +const HCF_HOTKEYSOUND=16; +const HCF_INDICATOR=32; +const HCF_HOTKEYAVAILABLE=64; +const MKF_AVAILABLE=2; +const MKF_CONFIRMHOTKEY=8; +const MKF_HOTKEYACTIVE=4; +const MKF_HOTKEYSOUND=16; +const MKF_INDICATOR=32; +const MKF_MOUSEKEYSON=1; +const MKF_MODIFIERS=64; +const MKF_REPLACENUMBERS=128; +const SERKF_ACTIVE=8; // May be obsolete. Not in recent MS docs. +const SERKF_AVAILABLE=2; +const SERKF_INDICATOR=4; +const SERKF_SERIALKEYSON=1; +const SSF_AVAILABLE=2; +const SSF_SOUNDSENTRYON=1; +const SSTF_BORDER=2; +const SSTF_CHARS=1; +const SSTF_DISPLAY=3; +const SSTF_NONE=0; +const SSGF_DISPLAY=3; +const SSGF_NONE=0; +const SSWF_CUSTOM=4; +const SSWF_DISPLAY=3; +const SSWF_NONE=0; +const SSWF_TITLE=1; +const SSWF_WINDOW=2; +const SKF_AUDIBLEFEEDBACK=64; +const SKF_AVAILABLE=2; +const SKF_CONFIRMHOTKEY=8; +const SKF_HOTKEYACTIVE=4; +const SKF_HOTKEYSOUND=16; +const SKF_INDICATOR=32; +const SKF_STICKYKEYSON=1; +const SKF_TRISTATE=128; +const SKF_TWOKEYSOFF=256; +const TKF_AVAILABLE=2; +const TKF_CONFIRMHOTKEY=8; +const TKF_HOTKEYACTIVE=4; +const TKF_HOTKEYSOUND=16; +const TKF_TOGGLEKEYSON=1; +const MDITILE_SKIPDISABLED=2; +const MDITILE_HORIZONTAL=1; +const MDITILE_VERTICAL=0; + +enum { + VK_LBUTTON = 0x01, + VK_RBUTTON = 0x02, + VK_CANCEL = 0x03, + VK_MBUTTON = 0x04, + //static if (_WIN32_WINNT > = 0x500) { + VK_XBUTTON1 = 0x05, + VK_XBUTTON2 = 0x06, + //} + VK_BACK = 0x08, + VK_TAB = 0x09, + VK_CLEAR = 0x0C, + VK_RETURN = 0x0D, + VK_SHIFT = 0x10, + VK_CONTROL = 0x11, + VK_MENU = 0x12, + VK_PAUSE = 0x13, + VK_CAPITAL = 0x14, + VK_KANA = 0x15, + VK_HANGEUL = 0x15, + VK_HANGUL = 0x15, + VK_JUNJA = 0x17, + VK_FINAL = 0x18, + VK_HANJA = 0x19, + VK_KANJI = 0x19, + VK_ESCAPE = 0x1B, + VK_CONVERT = 0x1C, + VK_NONCONVERT = 0x1D, + VK_ACCEPT = 0x1E, + VK_MODECHANGE = 0x1F, + VK_SPACE = 0x20, + VK_PRIOR = 0x21, + VK_NEXT = 0x22, + VK_END = 0x23, + VK_HOME = 0x24, + VK_LEFT = 0x25, + VK_UP = 0x26, + VK_RIGHT = 0x27, + VK_DOWN = 0x28, + VK_SELECT = 0x29, + VK_PRINT = 0x2A, + VK_EXECUTE = 0x2B, + VK_SNAPSHOT = 0x2C, + VK_INSERT = 0x2D, + VK_DELETE = 0x2E, + VK_HELP = 0x2F, + VK_LWIN = 0x5B, + VK_RWIN = 0x5C, + VK_APPS = 0x5D, + VK_SLEEP = 0x5F, + VK_NUMPAD0 = 0x60, + VK_NUMPAD1 = 0x61, + VK_NUMPAD2 = 0x62, + VK_NUMPAD3 = 0x63, + VK_NUMPAD4 = 0x64, + VK_NUMPAD5 = 0x65, + VK_NUMPAD6 = 0x66, + VK_NUMPAD7 = 0x67, + VK_NUMPAD8 = 0x68, + VK_NUMPAD9 = 0x69, + VK_MULTIPLY = 0x6A, + VK_ADD = 0x6B, + VK_SEPARATOR = 0x6C, + VK_SUBTRACT = 0x6D, + VK_DECIMAL = 0x6E, + VK_DIVIDE = 0x6F, + VK_F1 = 0x70, + VK_F2 = 0x71, + VK_F3 = 0x72, + VK_F4 = 0x73, + VK_F5 = 0x74, + VK_F6 = 0x75, + VK_F7 = 0x76, + VK_F8 = 0x77, + VK_F9 = 0x78, + VK_F10 = 0x79, + VK_F11 = 0x7A, + VK_F12 = 0x7B, + VK_F13 = 0x7C, + VK_F14 = 0x7D, + VK_F15 = 0x7E, + VK_F16 = 0x7F, + VK_F17 = 0x80, + VK_F18 = 0x81, + VK_F19 = 0x82, + VK_F20 = 0x83, + VK_F21 = 0x84, + VK_F22 = 0x85, + VK_F23 = 0x86, + VK_F24 = 0x87, + VK_NUMLOCK = 0x90, + VK_SCROLL = 0x91, + VK_LSHIFT = 0xA0, + VK_RSHIFT = 0xA1, + VK_LCONTROL = 0xA2, + VK_RCONTROL = 0xA3, + VK_LMENU = 0xA4, + VK_RMENU = 0xA5, + //static if (_WIN32_WINNT > = 0x500) { + VK_BROWSER_BACK = 0xA6, + VK_BROWSER_FORWARD = 0xA7, + VK_BROWSER_REFRESH = 0xA8, + VK_BROWSER_STOP = 0xA9, + VK_BROWSER_SEARCH = 0xAA, + VK_BROWSER_FAVORITES = 0xAB, + VK_BROWSER_HOME = 0xAC, + VK_VOLUME_MUTE = 0xAD, + VK_VOLUME_DOWN = 0xAE, + VK_VOLUME_UP = 0xAF, + VK_MEDIA_NEXT_TRACK = 0xB0, + VK_MEDIA_PREV_TRACK = 0xB1, + VK_MEDIA_STOP = 0xB2, + VK_MEDIA_PLAY_PAUSE = 0xB3, + VK_LAUNCH_MAIL = 0xB4, + VK_LAUNCH_MEDIA_SELECT = 0xB5, + VK_LAUNCH_APP1 = 0xB6, + VK_LAUNCH_APP2 = 0xB7, + //} + VK_OEM_1 = 0xBA, + //static if (_WIN32_WINNT > = 0x500) { + VK_OEM_PLUS = 0xBB, + VK_OEM_COMMA = 0xBC, + VK_OEM_MINUS = 0xBD, + VK_OEM_PERIOD = 0xBE, + //} + VK_OEM_2 = 0xBF, + VK_OEM_3 = 0xC0, + VK_OEM_4 = 0xDB, + VK_OEM_5 = 0xDC, + VK_OEM_6 = 0xDD, + VK_OEM_7 = 0xDE, + VK_OEM_8 = 0xDF, + //static if (_WIN32_WINNT > = 0x500) { + VK_OEM_102 = 0xE2, + //} + VK_PROCESSKEY = 0xE5, + //static if (_WIN32_WINNT > = 0x500) { + VK_PACKET = 0xE7, + //} + VK_ATTN = 0xF6, + VK_CRSEL = 0xF7, + VK_EXSEL = 0xF8, + VK_EREOF = 0xF9, + VK_PLAY = 0xFA, + VK_ZOOM = 0xFB, + VK_NONAME = 0xFC, + VK_PA1 = 0xFD, + VK_OEM_CLEAR = 0xFE, +} + +const TME_HOVER=1; +const TME_LEAVE=2; +const TME_QUERY=0x40000000; +const TME_CANCEL=0x80000000; + +const HOVER_DEFAULT=0xFFFFFFFF; + +const MK_LBUTTON=1; +const MK_RBUTTON=2; +const MK_SHIFT=4; +const MK_CONTROL=8; +const MK_MBUTTON=16; +static if (_WIN32_WINNT >= 0x500) { +const MK_XBUTTON1=32; +const MK_XBUTTON2=64; +} +const TPM_CENTERALIGN=4; +const TPM_LEFTALIGN=0; +const TPM_RIGHTALIGN=8; +const TPM_LEFTBUTTON=0; +const TPM_RIGHTBUTTON=2; +const TPM_HORIZONTAL=0; +const TPM_VERTICAL=64; +const TPM_TOPALIGN=0; +const TPM_VCENTERALIGN=16; +const TPM_BOTTOMALIGN=32; +const TPM_NONOTIFY=128; +const TPM_RETURNCMD=256; +static if ((_WIN32_WINNT >= 0x500) || (_WIN32_WINDOWS >= 0x410)) { +const TPM_RECURSE=1; +} + +const HELP_COMMAND=0x102; +const HELP_CONTENTS=3; +const HELP_CONTEXT=1; +const HELP_CONTEXTPOPUP=8; +const HELP_FORCEFILE=9; +const HELP_HELPONHELP=4; +const HELP_INDEX=3; +const HELP_KEY=0x101; +const HELP_MULTIKEY=0x201; +const HELP_PARTIALKEY=0x105; +const HELP_QUIT=2; +const HELP_SETCONTENTS=5; +const HELP_SETINDEX=5; +const HELP_SETWINPOS=0x203; +const HELP_CONTEXTMENU=0xa; +const HELP_FINDER=0xb; +const HELP_WM_HELP=0xc; +const HELP_TCARD=0x8000; +const HELP_TCARD_DATA=16; +const HELP_TCARD_OTHER_CALLER=0x11; + +const IDH_NO_HELP=28440; +const IDH_MISSING_CONTEXT=28441; +const IDH_GENERIC_HELP_BUTTON=28442; +const IDH_OK=28443; +const IDH_CANCEL=28444; +const IDH_HELP=28445; + +const LB_CTLCODE=0; +const LB_OKAY=0; +const LB_ERR=-1; +const LB_ERRSPACE=-2; + +const CB_OKAY=0; +const CB_ERR=-1; +const CB_ERRSPACE=-2; + +const HIDE_WINDOW=0; + +const SHOW_OPENWINDOW=1; +const SHOW_ICONWINDOW=2; +const SHOW_FULLSCREEN=3; +const SHOW_OPENNOACTIVATE=4; + +const SW_PARENTCLOSING=1; +const SW_OTHERZOOM=2; +const SW_PARENTOPENING=3; +const SW_OTHERUNZOOM=4; + +const KF_EXTENDED=256; +const KF_DLGMODE=2048; +const KF_MENUMODE=4096; +const KF_ALTDOWN=8192; +const KF_REPEAT=16384; +const KF_UP=32768; + +const WSF_VISIBLE=1; + +const PWR_OK=1; +const PWR_FAIL=-1; +const PWR_SUSPENDREQUEST=1; +const PWR_SUSPENDRESUME=2; +const PWR_CRITICALRESUME=3; + +const NFR_ANSI=1; +const NFR_UNICODE=2; +const NF_QUERY=3; +const NF_REQUERY=4; + +const MENULOOP_WINDOW=0; +const MENULOOP_POPUP=1; + +const WMSZ_LEFT=1; +const WMSZ_RIGHT=2; +const WMSZ_TOP=3; +const WMSZ_TOPLEFT=4; +const WMSZ_TOPRIGHT=5; +const WMSZ_BOTTOM=6; +const WMSZ_BOTTOMLEFT=7; +const WMSZ_BOTTOMRIGHT=8; + +const HTERROR=-2; +const HTTRANSPARENT=-1; +const HTNOWHERE=0; +const HTCLIENT=1; +const HTCAPTION=2; +const HTSYSMENU=3; +const HTGROWBOX=4; +const HTSIZE=4; +const HTMENU=5; +const HTHSCROLL=6; +const HTVSCROLL=7; +const HTMINBUTTON=8; +const HTMAXBUTTON=9; +const HTREDUCE=8; +const HTZOOM=9; +const HTLEFT=10; +const HTSIZEFIRST=10; +const HTRIGHT=11; +const HTTOP=12; +const HTTOPLEFT=13; +const HTTOPRIGHT=14; +const HTBOTTOM=15; +const HTBOTTOMLEFT=16; +const HTBOTTOMRIGHT=17; +const HTSIZELAST=17; +const HTBORDER=18; +const HTOBJECT=19; +const HTCLOSE=20; +const HTHELP=21; + +const MA_ACTIVATE=1; +const MA_ACTIVATEANDEAT=2; +const MA_NOACTIVATE=3; +const MA_NOACTIVATEANDEAT=4; + +const SIZE_RESTORED=0; +const SIZE_MINIMIZED=1; +const SIZE_MAXIMIZED=2; +const SIZE_MAXSHOW=3; +const SIZE_MAXHIDE=4; + +const SIZENORMAL=0; +const SIZEICONIC=1; +const SIZEFULLSCREEN=2; +const SIZEZOOMSHOW=3; +const SIZEZOOMHIDE=4; + +const WVR_ALIGNTOP=16; +const WVR_ALIGNLEFT=32; +const WVR_ALIGNBOTTOM=64; +const WVR_ALIGNRIGHT=128; +const WVR_HREDRAW=256; +const WVR_VREDRAW=512; +const WVR_REDRAW=(WVR_HREDRAW|WVR_VREDRAW); +const WVR_VALIDRECTS=1024; + +const PRF_CHECKVISIBLE=1; +const PRF_NONCLIENT=2; +const PRF_CLIENT=4; +const PRF_ERASEBKGND=8; +const PRF_CHILDREN=16; +const PRF_OWNED=32; + +const IDANI_OPEN=1; +const IDANI_CLOSE=2; +const IDANI_CAPTION=3; + +const WPF_RESTORETOMAXIMIZED=2; +const WPF_SETMINPOSITION=1; + +const ODT_MENU=1; +const ODT_LISTBOX=2; +const ODT_COMBOBOX=3; +const ODT_BUTTON=4; +const ODT_STATIC=5; +const ODA_DRAWENTIRE=1; +const ODA_SELECT=2; +const ODA_FOCUS=4; +const ODS_SELECTED=1; +const ODS_GRAYED=2; +const ODS_DISABLED=4; +const ODS_CHECKED=8; +const ODS_FOCUS=16; +const ODS_DEFAULT=32; +const ODS_COMBOBOXEDIT=4096; + +const IDHOT_SNAPWINDOW=-1; +const IDHOT_SNAPDESKTOP=-2; + +const DBWF_LPARAMPOINTER=0x8000; +const DLGWINDOWEXTRA=30; +const MNC_IGNORE=0; +const MNC_CLOSE=1; +const MNC_EXECUTE=2; +const MNC_SELECT=3; +const DOF_EXECUTABLE=0x8001; +const DOF_DOCUMENT=0x8002; +const DOF_DIRECTORY=0x8003; +const DOF_MULTIPLE=0x8004; +const DOF_PROGMAN=1; +const DOF_SHELLDATA=2; +const DO_DROPFILE=0x454C4946; +const DO_PRINTFILE=0x544E5250; + +const SW_SCROLLCHILDREN=1; +const SW_INVALIDATE=2; +const SW_ERASE=4; + +const SC_SIZE=0xF000; +const SC_MOVE=0xF010; +const SC_MINIMIZE=0xF020; +const SC_ICON=0xf020; +const SC_MAXIMIZE=0xF030; +const SC_ZOOM=0xF030; +const SC_NEXTWINDOW=0xF040; +const SC_PREVWINDOW=0xF050; +const SC_CLOSE=0xF060; +const SC_VSCROLL=0xF070; +const SC_HSCROLL=0xF080; +const SC_MOUSEMENU=0xF090; +const SC_KEYMENU=0xF100; +const SC_ARRANGE=0xF110; +const SC_RESTORE=0xF120; +const SC_TASKLIST=0xF130; +const SC_SCREENSAVE=0xF140; +const SC_HOTKEY=0xF150; +const SC_DEFAULT=0xF160; +const SC_MONITORPOWER=0xF170; +const SC_CONTEXTHELP=0xF180; +const SC_SEPARATOR=0xF00F; + +const EC_LEFTMARGIN=1; +const EC_RIGHTMARGIN=2; +const EC_USEFONTINFO=0xffff; + +const DC_HASDEFID=0x534B; + +const DLGC_WANTARROWS=1; +const DLGC_WANTTAB=2; +const DLGC_WANTALLKEYS=4; +const DLGC_WANTMESSAGE=4; +const DLGC_HASSETSEL=8; +const DLGC_DEFPUSHBUTTON=16; +const DLGC_UNDEFPUSHBUTTON=32; +const DLGC_RADIOBUTTON=64; +const DLGC_WANTCHARS=128; +const DLGC_STATIC=256; +const DLGC_BUTTON=0x2000; + +const WA_INACTIVE=0; +const WA_ACTIVE=1; +const WA_CLICKACTIVE=2; + +const ICON_SMALL=0; +const ICON_BIG=1; +static if (_WIN32_WINNT >= 0x501) { +const ICON_SMALL2=2; +} + +const HBITMAP + HBMMENU_CALLBACK = cast(HBITMAP)-1, + HBMMENU_SYSTEM = cast(HBITMAP)1, + HBMMENU_MBAR_RESTORE = cast(HBITMAP)2, + HBMMENU_MBAR_MINIMIZE = cast(HBITMAP)3, + HBMMENU_MBAR_CLOSE = cast(HBITMAP)5, + HBMMENU_MBAR_CLOSE_D = cast(HBITMAP)6, + HBMMENU_MBAR_MINIMIZE_D = cast(HBITMAP)7, + HBMMENU_POPUP_CLOSE = cast(HBITMAP)8, + HBMMENU_POPUP_RESTORE = cast(HBITMAP)9, + HBMMENU_POPUP_MAXIMIZE = cast(HBITMAP)10, + HBMMENU_POPUP_MINIMIZE = cast(HBITMAP)11; + +const MOD_ALT=1; +const MOD_CONTROL=2; +const MOD_SHIFT=4; +const MOD_WIN=8; +const MOD_IGNORE_ALL_MODIFIER=1024; +const MOD_ON_KEYUP=2048; +const MOD_RIGHT=16384; +const MOD_LEFT=32768; + +const LLKHF_EXTENDED=(KF_EXTENDED >> 8); +const LLKHF_INJECTED=0x00000010; +const LLKHF_ALTDOWN=(KF_ALTDOWN >> 8); +const LLKHF_UP=(KF_UP >> 8); + +static if (WINVER >= 0x500) { +const FLASHW_STOP=0; +const FLASHW_CAPTION=1; +const FLASHW_TRAY=2; +const FLASHW_ALL=(FLASHW_CAPTION|FLASHW_TRAY); +const FLASHW_TIMER=4; +const FLASHW_TIMERNOFG=12; +} + +const CURSOR_SHOWING=0x00000001; +const WS_ACTIVECAPTION=0x00000001; +static if (_WIN32_WINNT >= 0x403) { +const INPUT_MOUSE=0x00000000; +const INPUT_KEYBOARD=0x00000001; +const INPUT_HARDWARE=0x00000002; +} +static if (WINVER >= 0x400) { +const ENDSESSION_LOGOFF = 0x80000000; +} + +static if (WINVER >= 0x500) { +const CHILDID_SELF = 0; +const OBJID_WINDOW = 0x00000000; +const OBJID_SYSMENU = 0xFFFFFFFF; +const OBJID_TITLEBAR = 0xFFFFFFFE; +const OBJID_MENU = 0xFFFFFFFD; +const OBJID_CLIENT = 0xFFFFFFFC; +const OBJID_VSCROLL = 0xFFFFFFFB; +const OBJID_HSCROLL = 0xFFFFFFFA; +const OBJID_SIZEGRIP = 0xFFFFFFF9; +const OBJID_CARET = 0xFFFFFFF8; +const OBJID_CURSOR = 0xFFFFFFF7; +const OBJID_ALERT = 0xFFFFFFF6; +const OBJID_SOUND = 0xFFFFFFF5; + +const GUI_CARETBLINKING = 0x00000001; +const GUI_INMOVESIZE = 0x00000002; +const GUI_INMENUMODE = 0x00000004; +const GUI_SYSTEMMENUMODE = 0x00000008; +const GUI_POPUPMENUMODE = 0x00000010; + +static if (_WIN32_WINNT >= 0x501) { +const GUI_16BITTASK = 0x00000020; +} +const WINEVENT_OUTOFCONTEXT=0x0000; +const WINEVENT_SKIPOWNTHREAD=0x0001; +const WINEVENT_SKIPOWNPROCESS=0x0002; +const WINEVENT_INCONTEXT=0x0004; +const AW_HOR_POSITIVE=0x00000001; +const AW_HOR_NEGATIVE=0x00000002; +const AW_VER_POSITIVE=0x00000004; +const AW_VER_NEGATIVE=0x00000008; +const AW_CENTER=0x00000010; +const AW_HIDE=0x00010000; +const AW_ACTIVATE=0x00020000; +const AW_SLIDE=0x00040000; +const AW_BLEND=0x00080000; +const DEVICE_NOTIFY_WINDOW_HANDLE=0x00000000; +const DEVICE_NOTIFY_SERVICE_HANDLE=0x00000001; + +static if (_WIN32_WINNT >= 0x501) { +const DEVICE_NOTIFY_ALL_INTERFACE_CLASSES=0x00000004; +} + +const EVENT_MIN = 0x00000001; +const EVENT_SYSTEM_SOUND = 0x00000001; +const EVENT_SYSTEM_ALERT = 0x00000002; +const EVENT_SYSTEM_FOREGROUND = 0x00000003; +const EVENT_SYSTEM_MENUSTART = 0x00000004; +const EVENT_SYSTEM_MENUEND = 0x00000005; +const EVENT_SYSTEM_MENUPOPUPSTART = 0x00000006; +const EVENT_SYSTEM_MENUPOPUPEND = 0x00000007; +const EVENT_SYSTEM_CAPTURESTART = 0x00000008; +const EVENT_SYSTEM_CAPTUREEND = 0x00000009; +const EVENT_SYSTEM_MOVESIZESTART = 0x0000000a; +const EVENT_SYSTEM_MOVESIZEEND = 0x0000000b; +const EVENT_SYSTEM_CONTEXTHELPSTART = 0x0000000c; +const EVENT_SYSTEM_CONTEXTHELPEND = 0x0000000d; +const EVENT_SYSTEM_DRAGDROPSTART = 0x0000000e; +const EVENT_SYSTEM_DRAGDROPEND = 0x0000000f; +const EVENT_SYSTEM_DIALOGSTART = 0x00000010; +const EVENT_SYSTEM_DIALOGEND = 0x00000011; +const EVENT_SYSTEM_SCROLLINGSTART = 0x00000012; +const EVENT_SYSTEM_SCROLLINGEND = 0x00000013; +const EVENT_SYSTEM_SWITCHSTART = 0x00000014; +const EVENT_SYSTEM_SWITCHEND = 0x00000015; +const EVENT_SYSTEM_MINIMIZESTART = 0x00000016; +const EVENT_SYSTEM_MINIMIZEEND = 0x00000017; + +const EVENT_OBJECT_CREATE = 0x00008000; +const EVENT_OBJECT_DESTROY = 0x00008001; +const EVENT_OBJECT_SHOW = 0x00008002; +const EVENT_OBJECT_HIDE = 0x00008003; +const EVENT_OBJECT_REORDER = 0x00008004; +const EVENT_OBJECT_FOCUS = 0x00008005; +const EVENT_OBJECT_SELECTION = 0x00008006; +const EVENT_OBJECT_SELECTIONADD = 0x00008007; +const EVENT_OBJECT_SELECTIONREMOVE = 0x00008008; +const EVENT_OBJECT_SELECTIONWITHIN = 0x00008009; +const EVENT_OBJECT_STATECHANGE = 0x0000800a; +const EVENT_OBJECT_LOCATIONCHANGE = 0x0000800b; +const EVENT_OBJECT_NAMECHANGE = 0x0000800c; +const EVENT_OBJECT_DESCRIPTIONCHANGE = 0x0000800d; +const EVENT_OBJECT_VALUECHANGE = 0x0000800e; +const EVENT_OBJECT_PARENTCHANGE = 0x0000800f; +const EVENT_OBJECT_HELPCHANGE = 0x00008010; +const EVENT_OBJECT_DEFACTIONCHANGE = 0x00008011; +const EVENT_OBJECT_ACCELERATORCHANGE = 0x00008012; + +static if (_WIN32_WINNT >= 0x501) { +const EVENT_CONSOLE_CARET = 0x00004001; +const EVENT_CONSOLE_UPDATE_REGION = 0x00004002; +const EVENT_CONSOLE_UPDATE_SIMPLE = 0x00004003; +const EVENT_CONSOLE_UPDATE_SCROLL = 0x00004004; +const EVENT_CONSOLE_LAYOUT = 0x00004005; +const EVENT_CONSOLE_START_APPLICATION = 0x00004006; +const EVENT_CONSOLE_END_APPLICATION = 0x00004007; + +const CONSOLE_CARET_SELECTION = 0x00000001; +const CONSOLE_CARET_VISIBLE = 0x00000002; + +const CONSOLE_APPLICATION_16BIT = 0x00000001; + +} +const EVENT_MAX=0x7fffffff; + +}//(WINVER >= 0x500) + +static if ((_WIN32_WINNT >= 0x500) || (_WIN32_WINDOWS >= 0x490)) { +const DWORD ASFW_ANY = -1; +const LSFW_LOCK = 1; +const LSFW_UNLOCK = 2; +} + +static if (_WIN32_WINNT >= 0x500) { +const LWA_COLORKEY=0x01; +const LWA_ALPHA=0x02; +const ULW_COLORKEY=0x01; +const ULW_ALPHA=0x02; +const ULW_OPAQUE=0x04; +} + +const GA_PARENT = 1; +const GA_ROOT = 2; +const GA_ROOTOWNER = 3; + +static if ((_WIN32_WINNT >= 0x500) || (_WIN32_WINDOWS >= 0x410)) { + +const MONITOR_DEFAULTTONULL = 0; +const MONITOR_DEFAULTTOPRIMARY = 1; +const MONITOR_DEFAULTTONEAREST = 2; +const MONITORINFOF_PRIMARY = 1; + +const EDS_RAWMODE = 0x00000002; + +const ISMEX_NOSEND = 0x00000000; +const ISMEX_SEND = 0x00000001; +const ISMEX_NOTIFY = 0x00000002; +const ISMEX_CALLBACK = 0x00000004; +const ISMEX_REPLIED = 0x00000008; +} + +static if (_WIN32_WINNT >= 0x500) { +const GR_GDIOBJECTS = 0; +const GR_USEROBJECTS = 1; +} + +static if ((_WIN32_WINNT >= 0x500) || (_WIN32_WINDOWS >= 0x490)) { +const GMMP_USE_DISPLAY_POINTS = 1; +const GMMP_USE_HIGH_RESOLUTION_POINTS = 2; +} + +static if (_WIN32_WINNT >= 0x501) { +const PW_CLIENTONLY = 0x00000001; +const RIM_INPUT = 0x00000000; +const RIM_INPUTSINK = 0x00000001; +const RIM_TYPEMOUSE = 0x00000000; +const RIM_TYPEKEYBOARD = 0x00000001; +const RIM_TYPEHID = 0x00000002; +const MOUSE_MOVE_RELATIVE = 0x00000000; +const MOUSE_MOVE_ABSOLUTE = 0x00000001; +const MOUSE_VIRTUAL_DESKTOP = 0x00000002; +const MOUSE_ATTRIBUTES_CHANGED = 0x00000004; +const RI_MOUSE_LEFT_BUTTON_DOWN = 0x0001; +const RI_MOUSE_LEFT_BUTTON_UP = 0x0002; +const RI_MOUSE_RIGHT_BUTTON_DOWN = 0x0004; +const RI_MOUSE_RIGHT_BUTTON_UP = 0x0008; +const RI_MOUSE_MIDDLE_BUTTON_DOWN = 0x0010; +const RI_MOUSE_MIDDLE_BUTTON_UP = 0x0020; +const RI_MOUSE_BUTTON_1_DOWN = RI_MOUSE_LEFT_BUTTON_DOWN; +const RI_MOUSE_BUTTON_1_UP = RI_MOUSE_LEFT_BUTTON_UP; +const RI_MOUSE_BUTTON_2_DOWN = RI_MOUSE_RIGHT_BUTTON_DOWN; +const RI_MOUSE_BUTTON_2_UP = RI_MOUSE_RIGHT_BUTTON_UP; +const RI_MOUSE_BUTTON_3_DOWN = RI_MOUSE_MIDDLE_BUTTON_DOWN; +const RI_MOUSE_BUTTON_3_UP = RI_MOUSE_MIDDLE_BUTTON_UP; +const RI_MOUSE_BUTTON_4_DOWN = 0x0040; +const RI_MOUSE_BUTTON_4_UP = 0x0080; +const RI_MOUSE_BUTTON_5_DOWN = 0x0100; +const RI_MOUSE_BUTTON_5_UP = 0x0200; +const RI_MOUSE_WHEEL = 0x0400; +const KEYBOARD_OVERRUN_MAKE_CODE = 0x00ff; +const RI_KEY_MAKE = 0x0000; +const RI_KEY_BREAK = 0x0001; +const RI_KEY_E0 = 0x0002; +const RI_KEY_E1 = 0x0004; +const RI_KEY_TERMSRV_SET_LED = 0x0008; +const RI_KEY_TERMSRV_SHADOW = 0x0010; + +const RID_INPUT = 0x10000003; +const RID_HEADER = 0x10000005; + +const RIDI_PREPARSEDDATA = 0x20000005; +const RIDI_DEVICENAME = 0x20000007; +const RIDI_DEVICEINFO = 0x2000000b; + +const RIDEV_REMOVE = 0x00000001; +const RIDEV_EXCLUDE = 0x00000010; +const RIDEV_PAGEONLY = 0x00000020; +const RIDEV_NOLEGACY = 0x00000030; +const RIDEV_INPUTSINK = 0x00000100; +const RIDEV_CAPTUREMOUSE = 0x00000200; +const RIDEV_NOHOTKEYS = 0x00000200; +const RIDEV_APPKEYS = 0x00000400; +} + +// Callbacks +// --------- +extern (Windows) { + alias BOOL function (HWND, UINT, WPARAM, LPARAM) DLGPROC; + alias void function (HWND, UINT, UINT, DWORD) TIMERPROC; + alias BOOL function (HDC, LPARAM, int) GRAYSTRINGPROC; + alias LRESULT function (int, WPARAM, LPARAM) HOOKPROC; + alias BOOL function (HWND, LPCSTR, HANDLE) PROPENUMPROCA; + alias BOOL function (HWND, LPCWSTR, HANDLE) PROPENUMPROCW; + alias BOOL function (HWND, LPSTR, HANDLE, DWORD) PROPENUMPROCEXA; + alias BOOL function (HWND, LPWSTR, HANDLE, DWORD) PROPENUMPROCEXW; + alias int function (LPSTR, int, int, int) EDITWORDBREAKPROCA; + alias int function (LPWSTR, int, int, int) EDITWORDBREAKPROCW; + alias LRESULT function (HWND, UINT, WPARAM, LPARAM) WNDPROC; + alias BOOL function (HDC, LPARAM, WPARAM, int, int) DRAWSTATEPROC; + alias BOOL function (HWND, LPARAM) WNDENUMPROC; + alias BOOL function (HWND, LPARAM) ENUMWINDOWSPROC; + alias void function (LPHELPINFO) MSGBOXCALLBACK; + + static if (WINVER >= 0x410) { + alias BOOL function (HMONITOR, HDC, LPRECT, LPARAM) MONITORENUMPROC; + } + alias BOOL function (LPSTR, LPARAM) NAMEENUMPROCA; + alias BOOL function (LPWSTR, LPARAM) NAMEENUMPROCW; + alias void function (HWND, UINT, DWORD, LRESULT) SENDASYNCPROC; + + alias NAMEENUMPROCA DESKTOPENUMPROCA; + alias NAMEENUMPROCW DESKTOPENUMPROCW; + alias NAMEENUMPROCA WINSTAENUMPROCA; + alias NAMEENUMPROCW WINSTAENUMPROCW; +} + +typedef HANDLE HHOOK; +typedef HANDLE HDWP; +typedef HANDLE HDEVNOTIFY; + +struct ACCEL { + BYTE fVirt; + WORD key; + WORD cmd; +} +alias ACCEL* LPACCEL; + +struct ACCESSTIMEOUT { + UINT cbSize = ACCESSTIMEOUT.sizeof; + DWORD dwFlags; + DWORD iTimeOutMSec; +} +alias ACCESSTIMEOUT* LPACCESSTIMEOUT; + +struct ANIMATIONINFO { + UINT cbSize = ANIMATIONINFO.sizeof; + int iMinAnimate; +} +alias ANIMATIONINFO* LPANIMATIONINFO; + +struct CREATESTRUCTA { + LPVOID lpCreateParams; + HINSTANCE hInstance; + HMENU hMenu; + HWND hwndParent; + int cy; + int cx; + int y; + int x; + LONG style; + LPCSTR lpszName; + LPCSTR lpszClass; + DWORD dwExStyle; +} +alias CREATESTRUCTA* LPCREATESTRUCTA; + +struct CREATESTRUCTW { + LPVOID lpCreateParams; + HINSTANCE hInstance; + HMENU hMenu; + HWND hwndParent; + int cy; + int cx; + int y; + int x; + LONG style; + LPCWSTR lpszName; + LPCWSTR lpszClass; + DWORD dwExStyle; +} +alias CREATESTRUCTW* LPCREATESTRUCTW; + +struct CBT_CREATEWNDA { + LPCREATESTRUCTA lpcs; + HWND hwndInsertAfter; +} +alias CBT_CREATEWNDA* LPCBT_CREATEWNDA; + +struct CBT_CREATEWNDW { + LPCREATESTRUCTW lpcs; + HWND hwndInsertAfter; +} +alias CBT_CREATEWNDW* LPCBT_CREATEWNDW; + +struct CBTACTIVATESTRUCT { + BOOL fMouse; + HWND hWndActive; +} +alias CBTACTIVATESTRUCT* LPCBTACTIVATESTRUCT; + +struct CLIENTCREATESTRUCT { + HANDLE hWindowMenu; + UINT idFirstChild; +} +alias CLIENTCREATESTRUCT* LPCLIENTCREATESTRUCT; + +struct COMPAREITEMSTRUCT { + UINT CtlType; + UINT CtlID; + HWND hwndItem; + UINT itemID1; + DWORD itemData1; + UINT itemID2; + DWORD itemData2; + DWORD dwLocaleId; +} +alias COMPAREITEMSTRUCT* LPCOMPAREITEMSTRUCT; + +struct COPYDATASTRUCT { + DWORD dwData; + DWORD cbData; + PVOID lpData; +} +alias COPYDATASTRUCT* PCOPYDATASTRUCT; + +struct CURSORSHAPE { + int xHotSpot; + int yHotSpot; + int cx; + int cy; + int cbWidth; + BYTE Planes; + BYTE BitsPixel; +} +alias CURSORSHAPE* LPCURSORSHAPE; + +struct CWPRETSTRUCT { + LRESULT lResult; + LPARAM lParam; + WPARAM wParam; + DWORD message; + HWND hwnd; +} + +struct CWPSTRUCT { + LPARAM lParam; + WPARAM wParam; + UINT message; + HWND hwnd; +} +alias CWPSTRUCT* PCWPSTRUCT; + +struct DEBUGHOOKINFO { + DWORD idThread; + DWORD idThreadInstaller; + LPARAM lParam; + WPARAM wParam; + int code; +} +alias DEBUGHOOKINFO* PDEBUGHOOKINFO, LPDEBUGHOOKINFO; + +struct DELETEITEMSTRUCT { + UINT CtlType; + UINT CtlID; + UINT itemID; + HWND hwndItem; + UINT itemData; +} +alias DELETEITEMSTRUCT* PDELETEITEMSTRUCT, LPDELETEITEMSTRUCT; + +align(2): +struct DLGITEMTEMPLATE { + DWORD style; + DWORD dwExtendedStyle; + short x; + short y; + short cx; + short cy; + WORD id; +} +alias DLGITEMTEMPLATE* LPDLGITEMTEMPLATE; + +struct DLGTEMPLATE { + DWORD style; + DWORD dwExtendedStyle; + WORD cdit; + short x; + short y; + short cx; + short cy; +} +alias DLGTEMPLATE* LPDLGTEMPLATE, LPDLGTEMPLATEA, LPDLGTEMPLATEW; +alias DLGTEMPLATE* LPCDLGTEMPLATE; + +align: + +struct DRAWITEMSTRUCT { + UINT CtlType; + UINT CtlID; + UINT itemID; + UINT itemAction; + UINT itemState; + HWND hwndItem; + HDC hDC; + RECT rcItem; + DWORD itemData; +} +alias DRAWITEMSTRUCT* LPDRAWITEMSTRUCT, PDRAWITEMSTRUCT; + +struct DRAWTEXTPARAMS { + UINT cbSize = DRAWTEXTPARAMS.sizeof; + int iTabLength; + int iLeftMargin; + int iRightMargin; + UINT uiLengthDrawn; +} +alias DRAWTEXTPARAMS* LPDRAWTEXTPARAMS; + +struct PAINTSTRUCT { + HDC hdc; + BOOL fErase; + RECT rcPaint; + BOOL fRestore; + BOOL fIncUpdate; + BYTE[32] rgbReserved; +} +alias PAINTSTRUCT* LPPAINTSTRUCT; + +struct MSG { + HWND hwnd; + UINT message; + WPARAM wParam; + LPARAM lParam; + DWORD time; + POINT pt; +} +alias MSG* LPMSG, PMSG; + +struct ICONINFO { + BOOL fIcon; + DWORD xHotspot; + DWORD yHotspot; + HBITMAP hbmMask; + HBITMAP hbmColor; +} +alias ICONINFO* PICONINFO; + +struct NMHDR { + HWND hwndFrom; + UINT idFrom; + UINT code; +} +alias NMHDR* LPNMHDR; + +struct WNDCLASSA { + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HINSTANCE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCSTR lpszMenuName; + LPCSTR lpszClassName; +} +alias WNDCLASSA* LPWNDCLASSA, PWNDCLASSA; + +struct WNDCLASSW { + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HINSTANCE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCWSTR lpszMenuName; + LPCWSTR lpszClassName; +} +alias WNDCLASSW* LPWNDCLASSW, PWNDCLASSW; + +struct WNDCLASSEXA { + UINT cbSize = WNDCLASSEXA.sizeof; + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HINSTANCE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCSTR lpszMenuName; + LPCSTR lpszClassName; + HICON hIconSm; +} +alias WNDCLASSEXA* LPWNDCLASSEXA, PWNDCLASSEXA; + +struct WNDCLASSEXW { + UINT cbSize = WNDCLASSEXW.sizeof; + UINT style; + WNDPROC lpfnWndProc; + int cbClsExtra; + int cbWndExtra; + HINSTANCE hInstance; + HICON hIcon; + HCURSOR hCursor; + HBRUSH hbrBackground; + LPCWSTR lpszMenuName; + LPCWSTR lpszClassName; + HICON hIconSm; +} +alias WNDCLASSEXW* LPWNDCLASSEXW, PWNDCLASSEXW; + +struct MENUITEMINFOA { + UINT cbSize = MENUITEMINFOA.sizeof; + UINT fMask; + UINT fType; + UINT fState; + UINT wID; + HMENU hSubMenu; + HBITMAP hbmpChecked; + HBITMAP hbmpUnchecked; + DWORD dwItemData; + LPSTR dwTypeData; + UINT cch; + static if (_WIN32_WINNT >= 0x500) { + HBITMAP hbmpItem; + } +} +alias MENUITEMINFOA* LPMENUITEMINFOA; +alias MENUITEMINFOA* LPCMENUITEMINFOA; + +struct MENUITEMINFOW { + UINT cbSize = MENUITEMINFOW.sizeof; + UINT fMask; + UINT fType; + UINT fState; + UINT wID; + HMENU hSubMenu; + HBITMAP hbmpChecked; + HBITMAP hbmpUnchecked; + DWORD dwItemData; + LPWSTR dwTypeData; + UINT cch; + static if (_WIN32_WINNT >= 0x500) { + HBITMAP hbmpItem; + } +} +alias MENUITEMINFOW* LPMENUITEMINFOW; +alias MENUITEMINFOW* LPCMENUITEMINFOW; + +struct SCROLLINFO { + UINT cbSize = this.sizeof; + UINT fMask; + int nMin; + int nMax; + UINT nPage; + int nPos; + int nTrackPos; +} +alias SCROLLINFO* LPSCROLLINFO; +alias SCROLLINFO* LPCSCROLLINFO; + +struct WINDOWPLACEMENT { + UINT length; + UINT flags; + UINT showCmd; + POINT ptMinPosition; + POINT ptMaxPosition; + RECT rcNormalPosition; +} +alias WINDOWPLACEMENT* LPWINDOWPLACEMENT, PWINDOWPLACEMENT; + +struct MENUITEMTEMPLATEHEADER { + WORD versionNumber; + WORD offset; +} + +struct MENUITEMTEMPLATE { + WORD mtOption; + WORD mtID; + WCHAR mtString[1]; +} + +alias void MENUTEMPLATE, MENUTEMPLATEA, MENUTEMPLATEW; + +alias MENUTEMPLATE* LPMENUTEMPLATEA, LPMENUTEMPLATEW, LPMENUTEMPLATE; + +struct HELPINFO { + UINT cbSize = this.sizeof; + int iContextType; + int iCtrlId; + HANDLE hItemHandle; + DWORD dwContextId; + POINT MousePos; +} +alias HELPINFO* LPHELPINFO; + +struct MSGBOXPARAMSA { + UINT cbSize = this.sizeof; + HWND hwndOwner; + HINSTANCE hInstance; + LPCSTR lpszText; + LPCSTR lpszCaption; + DWORD dwStyle; + LPCSTR lpszIcon; + DWORD dwContextHelpId; + MSGBOXCALLBACK lpfnMsgBoxCallback; + DWORD dwLanguageId; +} +alias MSGBOXPARAMSA* PMSGBOXPARAMSA, LPMSGBOXPARAMSA; + +struct MSGBOXPARAMSW { + UINT cbSize = this.sizeof; + HWND hwndOwner; + HINSTANCE hInstance; + LPCWSTR lpszText; + LPCWSTR lpszCaption; + DWORD dwStyle; + LPCWSTR lpszIcon; + DWORD dwContextHelpId; + MSGBOXCALLBACK lpfnMsgBoxCallback; + DWORD dwLanguageId; +} +alias MSGBOXPARAMSW* PMSGBOXPARAMSW, LPMSGBOXPARAMSW; + +struct USEROBJECTFLAGS { + BOOL fInherit; + BOOL fReserved; + DWORD dwFlags; +} + +struct FILTERKEYS { + UINT cbSize = this.sizeof; + DWORD dwFlags; + DWORD iWaitMSec; + DWORD iDelayMSec; + DWORD iRepeatMSec; + DWORD iBounceMSec; +} + +struct HIGHCONTRASTA { + UINT cbSize = this.sizeof; + DWORD dwFlags; + LPSTR lpszDefaultScheme; +} +alias HIGHCONTRASTA* LPHIGHCONTRASTA; + +struct HIGHCONTRASTW { + UINT cbSize = this.sizeof; + DWORD dwFlags; + LPWSTR lpszDefaultScheme; +} +alias HIGHCONTRASTW* LPHIGHCONTRASTW; + +struct ICONMETRICSA { + UINT cbSize = this.sizeof; + int iHorzSpacing; + int iVertSpacing; + int iTitleWrap; + LOGFONTA lfFont; +} +alias ICONMETRICSA* LPICONMETRICSA; + +struct ICONMETRICSW { + UINT cbSize = this.sizeof; + int iHorzSpacing; + int iVertSpacing; + int iTitleWrap; + LOGFONTW lfFont; +} +alias ICONMETRICSW* LPICONMETRICSW; + +struct MINIMIZEDMETRICS { + UINT cbSize = this.sizeof; + int iWidth; + int iHorzGap; + int iVertGap; + int iArrange; +} +alias MINIMIZEDMETRICS* LPMINIMIZEDMETRICS; + +struct MOUSEKEYS { + UINT cbSize = this.sizeof; + DWORD dwFlags; + DWORD iMaxSpeed; + DWORD iTimeToMaxSpeed; + DWORD iCtrlSpeed; + DWORD dwReserved1; + DWORD dwReserved2; +} +alias MOUSEKEYS* LPMOUSEKEYS; + +struct NONCLIENTMETRICSA { + UINT cbSize = this.sizeof; + int iBorderWidth; + int iScrollWidth; + int iScrollHeight; + int iCaptionWidth; + int iCaptionHeight; + LOGFONTA lfCaptionFont; + int iSmCaptionWidth; + int iSmCaptionHeight; + LOGFONTA lfSmCaptionFont; + int iMenuWidth; + int iMenuHeight; + LOGFONTA lfMenuFont; + LOGFONTA lfStatusFont; + LOGFONTA lfMessageFont; +} +alias NONCLIENTMETRICSA* LPNONCLIENTMETRICSA; + +struct NONCLIENTMETRICSW { + UINT cbSize = this.sizeof; + int iBorderWidth; + int iScrollWidth; + int iScrollHeight; + int iCaptionWidth; + int iCaptionHeight; + LOGFONTW lfCaptionFont; + int iSmCaptionWidth; + int iSmCaptionHeight; + LOGFONTW lfSmCaptionFont; + int iMenuWidth; + int iMenuHeight; + LOGFONTW lfMenuFont; + LOGFONTW lfStatusFont; + LOGFONTW lfMessageFont; +} +alias NONCLIENTMETRICSW* LPNONCLIENTMETRICSW; + +struct SERIALKEYSA { + UINT cbSize = this.sizeof; + DWORD dwFlags; + LPSTR lpszActivePort; + LPSTR lpszPort; + UINT iBaudRate; + UINT iPortState; + UINT iActive; +} +alias SERIALKEYSA* LPSERIALKEYSA; + +struct SERIALKEYSW { + UINT cbSize = this.sizeof; + DWORD dwFlags; + LPWSTR lpszActivePort; + LPWSTR lpszPort; + UINT iBaudRate; + UINT iPortState; + UINT iActive; +} +alias SERIALKEYSW* LPSERIALKEYSW; + +struct SOUNDSENTRYA { + UINT cbSize = this.sizeof; + DWORD dwFlags; + DWORD iFSTextEffect; + DWORD iFSTextEffectMSec; + DWORD iFSTextEffectColorBits; + DWORD iFSGrafEffect; + DWORD iFSGrafEffectMSec; + DWORD iFSGrafEffectColor; + DWORD iWindowsEffect; + DWORD iWindowsEffectMSec; + LPSTR lpszWindowsEffectDLL; + DWORD iWindowsEffectOrdinal; +} +alias SOUNDSENTRYA* LPSOUNDSENTRYA; + +struct SOUNDSENTRYW { + UINT cbSize = this.sizeof; + DWORD dwFlags; + DWORD iFSTextEffect; + DWORD iFSTextEffectMSec; + DWORD iFSTextEffectColorBits; + DWORD iFSGrafEffect; + DWORD iFSGrafEffectMSec; + DWORD iFSGrafEffectColor; + DWORD iWindowsEffect; + DWORD iWindowsEffectMSec; + LPWSTR lpszWindowsEffectDLL; + DWORD iWindowsEffectOrdinal; +} +alias SOUNDSENTRYW* LPSOUNDSENTRYW; + +struct STICKYKEYS { + DWORD cbSize = this.sizeof; + DWORD dwFlags; +} +alias STICKYKEYS* LPSTICKYKEYS; + +struct TOGGLEKEYS { + DWORD cbSize = this.sizeof; + DWORD dwFlags; +} + +struct MOUSEHOOKSTRUCT { + POINT pt; + HWND hwnd; + UINT wHitTestCode; + DWORD dwExtraInfo; +} +alias MOUSEHOOKSTRUCT* LPMOUSEHOOKSTRUCT, PMOUSEHOOKSTRUCT; + +struct TRACKMOUSEEVENT { + DWORD cbSize = this.sizeof; + DWORD dwFlags; + HWND hwndTrack; + DWORD dwHoverTime; +} +alias TRACKMOUSEEVENT* LPTRACKMOUSEEVENT; + +struct TPMPARAMS { + UINT cbSize = this.sizeof; + RECT rcExclude; +} +alias TPMPARAMS* LPTPMPARAMS; + +struct EVENTMSG { + UINT message; + UINT paramL; + UINT paramH; + DWORD time; + HWND hwnd; +} +alias EVENTMSG* PEVENTMSGMSG, LPEVENTMSGMSG, PEVENTMSG, LPEVENTMSG; + +struct WINDOWPOS { + HWND hwnd; + HWND hwndInsertAfter; + int x; + int y; + int cx; + int cy; + UINT flags; +} +alias WINDOWPOS* PWINDOWPOS, LPWINDOWPOS; + +struct NCCALCSIZE_PARAMS { + RECT rgrc[3]; + PWINDOWPOS lppos; +} +alias NCCALCSIZE_PARAMS* LPNCCALCSIZE_PARAMS; + +struct MDICREATESTRUCTA { + LPCSTR szClass; + LPCSTR szTitle; + HANDLE hOwner; + int x; + int y; + int cx; + int cy; + DWORD style; + LPARAM lParam; +} +alias MDICREATESTRUCTA* LPMDICREATESTRUCTA; + +struct MDICREATESTRUCTW { + LPCWSTR szClass; + LPCWSTR szTitle; + HANDLE hOwner; + int x; + int y; + int cx; + int cy; + DWORD style; + LPARAM lParam; +} +alias MDICREATESTRUCTW* LPMDICREATESTRUCTW; + +struct MINMAXINFO { + POINT ptReserved; + POINT ptMaxSize; + POINT ptMaxPosition; + POINT ptMinTrackSize; + POINT ptMaxTrackSize; +} +alias MINMAXINFO* PMINMAXINFO, LPMINMAXINFO; + +struct MDINEXTMENU { + HMENU hmenuIn; + HMENU hmenuNext; + HWND hwndNext; +} +alias MDINEXTMENU* PMDINEXTMENU, LPMDINEXTMENU; + +struct MEASUREITEMSTRUCT { + UINT CtlType; + UINT CtlID; + UINT itemID; + UINT itemWidth; + UINT itemHeight; + DWORD itemData; +} +alias MEASUREITEMSTRUCT* PMEASUREITEMSTRUCT, LPMEASUREITEMSTRUCT; + +struct DROPSTRUCT { + HWND hwndSource; + HWND hwndSink; + DWORD wFmt; + DWORD dwData; + POINT ptDrop; + DWORD dwControlData; +} +alias DROPSTRUCT* PDROPSTRUCT, LPDROPSTRUCT; + +alias DWORD HELPPOLY; + +struct MULTIKEYHELPA { + DWORD mkSize; + CHAR mkKeylist; + CHAR szKeyphrase[1]; +} +alias MULTIKEYHELPA* PMULTIKEYHELPA, LPMULTIKEYHELPA; + +struct MULTIKEYHELPW { + DWORD mkSize; + WCHAR mkKeylist; + WCHAR szKeyphrase[1]; +} +alias MULTIKEYHELPW* PMULTIKEYHELPW, LPMULTIKEYHELPW; + +struct HELPWININFOA { + int wStructSize; + int x; + int y; + int dx; + int dy; + int wMax; + CHAR rgchMember[2]; +} +alias HELPWININFOA* PHELPWININFOA, LPHELPWININFOA; + +struct HELPWININFOW { + int wStructSize; + int x; + int y; + int dx; + int dy; + int wMax; + WCHAR rgchMember[2]; +} +alias HELPWININFOW* PHELPWININFOW, LPHELPWININFOW; + +struct STYLESTRUCT { + DWORD styleOld; + DWORD styleNew; +} +alias STYLESTRUCT* LPSTYLESTRUCT; + +struct ALTTABINFO { + DWORD cbSize = this.sizeof; + int cItems; + int cColumns; + int cRows; + int iColFocus; + int iRowFocus; + int cxItem; + int cyItem; + POINT ptStart; +} +alias ALTTABINFO* PALTTABINFO, LPALTTABINFO; + +struct COMBOBOXINFO { + DWORD cbSize = this.sizeof; + RECT rcItem; + RECT rcButton; + DWORD stateButton; + HWND hwndCombo; + HWND hwndItem; + HWND hwndList; +} +alias COMBOBOXINFO* PCOMBOBOXINFO, LPCOMBOBOXINFO; + +struct CURSORINFO { + DWORD cbSize = this.sizeof; + DWORD flags; + HCURSOR hCursor; + POINT ptScreenPos; +} +alias CURSORINFO* PCURSORINFO, LPCURSORINFO; + +struct MENUBARINFO { + DWORD cbSize = this.sizeof; + RECT rcBar; + HMENU hMenu; + HWND hwndMenu; + byte bf_; // Simulated bitfield +// BOOL fBarFocused:1; +// BOOL fFocused:1; + bool fBarFocused() { return (bf_ & 1) == 1; } + bool fFocused() { return (bf_ & 2) == 2; } + void fBarFocused(bool b) { bf_ = cast(byte)((bf_ & 0xFE) | b); } + void fFocused(bool b) { bf_ = cast(byte)(b ? (bf_ | 2) : bf_ & 0xFD); } +} +alias MENUBARINFO* PMENUBARINFO; + +struct MENUINFO { + DWORD cbSize = this.sizeof; + DWORD fMask; + DWORD dwStyle; + UINT cyMax; + HBRUSH hbrBack; + DWORD dwContextHelpID; + ULONG_PTR dwMenuData; +} +alias MENUINFO* LPMENUINFO, LPCMENUINFO; + + +const CCHILDREN_SCROLLBAR=5; + +struct SCROLLBARINFO { + DWORD cbSize = this.sizeof; + RECT rcScrollBar; + int dxyLineButton; + int xyThumbTop; + int xyThumbBottom; + int reserved; + DWORD rgstate[CCHILDREN_SCROLLBAR+1]; +} +alias SCROLLBARINFO* PSCROLLBARINFO, LPSCROLLBARINFO; + +const CCHILDREN_TITLEBAR=5; + +struct TITLEBARINFO { + DWORD cbSize = TITLEBARINFO.sizeof; + RECT rcTitleBar; + DWORD[CCHILDREN_TITLEBAR+1] rgstate; +} +alias TITLEBARINFO* PTITLEBARINFO, LPTITLEBARINFO; + +struct WINDOWINFO { + DWORD cbSize = WINDOWINFO.sizeof; + RECT rcWindow; + RECT rcClient; + DWORD dwStyle; + DWORD dwExStyle; + DWORD dwWindowStatus; + UINT cxWindowBorders; + UINT cyWindowBorders; + ATOM atomWindowType; + WORD wCreatorVersion; +} +alias WINDOWINFO* PWINDOWINFO, LPWINDOWINFO; + +struct LASTINPUTINFO { + UINT cbSize = this.sizeof; + DWORD dwTime; +} +alias LASTINPUTINFO* PLASTINPUTINFO; + +struct MONITORINFO { + DWORD cbSize = this.sizeof; + RECT rcMonitor; + RECT rcWork; + DWORD dwFlags; +} +alias MONITORINFO* LPMONITORINFO; + +const CCHDEVICENAME=32; + +struct MONITORINFOEXA { + DWORD cbSize = MONITORINFOEXA.sizeof; + RECT rcMonitor; + RECT rcWork; + DWORD dwFlags; + CHAR[CCHDEVICENAME] szDevice; +} +alias MONITORINFOEXA* LPMONITORINFOEXA; + +struct MONITORINFOEXW { + DWORD cbSize = MONITORINFOEXW.sizeof; + RECT rcMonitor; + RECT rcWork; + DWORD dwFlags; + WCHAR[CCHDEVICENAME] szDevice; +} +alias MONITORINFOEXW* LPMONITORINFOEXW; + +struct KBDLLHOOKSTRUCT { + DWORD vkCode; + DWORD scanCode; + DWORD flags; + DWORD time; + DWORD dwExtraInfo; +} +alias KBDLLHOOKSTRUCT* LPKBDLLHOOKSTRUCT, PKBDLLHOOKSTRUCT; + +static if ((_WIN32_WINNT >= 0x500) || (_WIN32_WINDOWS >= 0x410)) { + +struct FLASHWINFO { + UINT cbSize = this.sizeof; + HWND hwnd; + DWORD dwFlags; + UINT uCount; + DWORD dwTimeout; +} +alias FLASHWINFO* PFLASHWINFO; + +} + +static if ((_WIN32_WINNT >= 0x500) || (_WIN32_WINDOWS >= 0x490)) { + +struct MOUSEMOVEPOINT { + int x; + int y; + DWORD time; + ULONG_PTR dwExtraInfo; +} +alias MOUSEMOVEPOINT* PMOUSEMOVEPOINT, LPMOUSEMOVEPOINT; +} + +static if (_WIN32_WINNT >= 0x403) { +struct MOUSEINPUT { + LONG dx; + LONG dy; + DWORD mouseData; + DWORD dwFlags; + DWORD time; + ULONG_PTR dwExtraInfo; +} +alias MOUSEINPUT* PMOUSEINPUT; + +struct KEYBDINPUT { + WORD wVk; + WORD wScan; + DWORD dwFlags; + DWORD time; + ULONG_PTR dwExtraInfo; +} +alias KEYBDINPUT* PKEYBDINPUT; + +struct HARDWAREINPUT { + DWORD uMsg; + WORD wParamL; + WORD wParamH; +} +alias HARDWAREINPUT* PHARDWAREINPUT; + +struct INPUT { + DWORD type; + union { + MOUSEINPUT mi; + KEYBDINPUT ki; + HARDWAREINPUT hi; + } +} +alias INPUT* PINPUT, LPINPUT; +}// (_WIN32_WINNT >= 0x403) + +static if (WINVER >= 0x500) { +struct GUITHREADINFO { + DWORD cbSize = this.sizeof; + DWORD flags; + HWND hwndActive; + HWND hwndFocus; + HWND hwndCapture; + HWND hwndMenuOwner; + HWND hwndMoveSize; + HWND hwndCaret; + RECT rcCaret; +} +alias GUITHREADINFO* PGUITHREADINFO, LPGUITHREADINFO; +extern (Windows) { +alias void function (HWINEVENTHOOK, DWORD, HWND, LONG, LONG, DWORD, DWORD) WINEVENTPROC; +} + +}// (WINVER >= 0x500) + +static if (_WIN32_WINNT >= 0x501) { +struct BSMINFO { + UINT cbSize = this.sizeof; + HDESK hdesk; + HWND hwnd; + LUID luid; +} +alias BSMINFO* PBSMINFO; + +typedef HANDLE HRAWINPUT; + +struct RAWINPUTHEADER { + DWORD dwType; + DWORD dwSize; + HANDLE hDevice; + WPARAM wParam; +} +alias RAWINPUTHEADER* PRAWINPUTHEADER; + +struct RAWMOUSE { + USHORT usFlags; + union { + ULONG ulButtons; + struct { + USHORT usButtonFlags; + USHORT usButtonData; + } + } + ULONG ulRawButtons; + LONG lLastX; + LONG lLastY; + ULONG ulExtraInformation; +} +alias RAWMOUSE* PRAWMOUSE, LPRAWMOUSE; + +struct RAWKEYBOARD { + USHORT MakeCode; + USHORT Flags; + USHORT Reserved; + USHORT VKey; + UINT Message; + ULONG ExtraInformation; +} +alias RAWKEYBOARD* PRAWKEYBOARD, LPRAWKEYBOARD; + +struct RAWHID { + DWORD dwSizeHid; + DWORD dwCount; + BYTE bRawData; +} +alias RAWHID* PRAWHID, LPRAWHID; + +struct RAWINPUT { + RAWINPUTHEADER header; + union _data { + RAWMOUSE mouse; + RAWKEYBOARD keyboard; + RAWHID hid; + } + _data data; +} +alias RAWINPUT* PRAWINPUT, LPRAWINPUT; + +struct RAWINPUTDEVICE { + USHORT usUsagePage; + USHORT usUsage; + DWORD dwFlags; + HWND hwndTarget; +} +alias RAWINPUTDEVICE* PRAWINPUTDEVICE, LPRAWINPUTDEVICE; +alias RAWINPUTDEVICE* PCRAWINPUTDEVICE; + +struct RAWINPUTDEVICELIST { + HANDLE hDevice; + DWORD dwType; +} +alias RAWINPUTDEVICELIST* PRAWINPUTDEVICELIST; + +struct RID_DEVICE_INFO_MOUSE { + DWORD dwId; + DWORD dwNumberOfButtons; + DWORD dwSampleRate; + BOOL fHasHorizontalWheel; +} + +struct RID_DEVICE_INFO_KEYBOARD { + DWORD dwType; + DWORD dwSubType; + DWORD dwKeyboardMode; + DWORD dwNumberOfFunctionKeys; + DWORD dwNumberOfIndicators; + DWORD dwNumberOfKeysTotal; +} + +struct RID_DEVICE_INFO_HID { + DWORD dwVendorId; + DWORD dwProductId; + DWORD dwVersionNumber; + USHORT usUsagePage; + USHORT usUsage; +} + +struct RID_DEVICE_INFO { + DWORD cbSize = this.sizeof; + DWORD dwType; + union { + RID_DEVICE_INFO_MOUSE mouse; + RID_DEVICE_INFO_KEYBOARD keyboard; + RID_DEVICE_INFO_HID hid; + } +} +}// (_WIN32_WINNT >= 0x501) + +struct MSLLHOOKSTRUCT { + POINT pt; + DWORD mouseData; + DWORD flags; + DWORD time; + ULONG_PTR dwExtraInfo; +} +alias MSLLHOOKSTRUCT* PMSLLHOOKSTRUCT; + +alias CharToOemA AnsiToOem; +alias OemToCharA OemToAnsi; +alias CharToOemBuffA AnsiToOemBuff; +alias OemToCharBuffA OemToAnsiBuff; +alias CharUpperA AnsiUpper; +alias CharUpperBuffA AnsiUpperBuff; +alias CharLowerA AnsiLower; +alias CharLowerBuffA AnsiLowerBuff; +alias CharNextA AnsiNext; +alias CharPrevA AnsiPrev; + +alias MAKELONG MAKEWPARAM; +alias MAKELONG MAKELPARAM; +alias MAKELONG MAKELRESULT; + +//MACRO #define POINTSTOPOINT(p, ps) { (p).x=LOWORD(*(DWORD* )&ps); (p).y=HIWORD(*(DWORD* )&ps); } +//MACRO #define POINTTOPOINTS(p) ((POINTS)MAKELONG((p).x, (p).y)) + +extern (Windows) { + +HKL ActivateKeyboardLayout(HKL, UINT); +BOOL AdjustWindowRect(LPRECT, DWORD, BOOL); +BOOL AdjustWindowRectEx(LPRECT, DWORD, BOOL, DWORD); +BOOL AnyPopup(); +BOOL AppendMenuA(HMENU, UINT, UINT_PTR, LPCSTR); +BOOL AppendMenuW(HMENU, UINT, UINT_PTR, LPCWSTR); +UINT ArrangeIconicWindows(HWND); +BOOL AttachThreadInput(DWORD, DWORD, BOOL); +HDWP BeginDeferWindowPos(int); +HDC BeginPaint(HWND, LPPAINTSTRUCT); +BOOL BringWindowToTop(HWND); +BOOL CallMsgFilterA(LPMSG, INT); +BOOL CallMsgFilterW(LPMSG, INT); +LRESULT CallNextHookEx(HHOOK, int, WPARAM, LPARAM); +LRESULT CallWindowProcA(WNDPROC, HWND, UINT, WPARAM, LPARAM); +LRESULT CallWindowProcW(WNDPROC, HWND, UINT, WPARAM, LPARAM); +WORD CascadeWindows(HWND, UINT, LPCRECT, UINT, HWND*); +BOOL ChangeClipboardChain(HWND, HWND); + +LONG ChangeDisplaySettingsA(PDEVMODEA, DWORD); +LONG ChangeDisplaySettingsW(PDEVMODEW, DWORD); +LONG ChangeDisplaySettingsExA(LPCSTR, LPDEVMODEA, HWND, DWORD, LPVOID); +LONG ChangeDisplaySettingsExW(LPCWSTR, LPDEVMODEW, HWND, DWORD, LPVOID); + +BOOL ChangeMenuA(HMENU, UINT, LPCSTR, UINT, UINT); +BOOL ChangeMenuW(HMENU, UINT, LPCWSTR, UINT, UINT); +LPSTR CharLowerA(LPSTR); +LPWSTR CharLowerW(LPWSTR); +DWORD CharLowerBuffA(LPSTR, DWORD); +DWORD CharLowerBuffW(LPWSTR, DWORD); +LPSTR CharNextA(LPCSTR); +LPWSTR CharNextW(LPCWSTR); +LPSTR CharNextExA(WORD, LPCSTR, DWORD); +LPWSTR CharNextExW(WORD, LPCWSTR, DWORD); +LPSTR CharPrevA(LPCSTR, LPCSTR); +LPWSTR CharPrevW(LPCWSTR, LPCWSTR); +LPSTR CharPrevExA(WORD, LPCSTR, LPCSTR, DWORD); +LPWSTR CharPrevExW(WORD, LPCWSTR, LPCWSTR, DWORD); +BOOL CharToOemA(LPCSTR, LPSTR); +BOOL CharToOemW(LPCWSTR, LPSTR); +BOOL CharToOemBuffA(LPCSTR, LPSTR, DWORD); +BOOL CharToOemBuffW(LPCWSTR, LPSTR, DWORD); +LPSTR CharUpperA(LPSTR); +LPWSTR CharUpperW(LPWSTR); +DWORD CharUpperBuffA(LPSTR, DWORD); +DWORD CharUpperBuffW(LPWSTR, DWORD); +BOOL CheckDlgButton(HWND, int, UINT); +DWORD CheckMenuItem(HMENU, UINT, UINT); +BOOL CheckMenuRadioItem(HMENU, UINT, UINT, UINT, UINT); +BOOL CheckRadioButton(HWND, int, int, int); +HWND ChildWindowFromPoint(HWND, POINT); +HWND ChildWindowFromPointEx(HWND, POINT, UINT); +BOOL ClientToScreen(HWND, LPPOINT); +BOOL ClipCursor(LPCRECT); +BOOL CloseClipboard(); +BOOL CloseDesktop(HDESK); +BOOL CloseWindow(HWND); +BOOL CloseWindowStation(HWINSTA); +int CopyAcceleratorTableA(HACCEL, LPACCEL, int); +int CopyAcceleratorTableW(HACCEL, LPACCEL, int); + +HICON CopyIcon(HICON); +HANDLE CopyImage(HANDLE, UINT, int, int, UINT); +BOOL CopyRect(LPRECT, LPCRECT); +int CountClipboardFormats(); +HACCEL CreateAcceleratorTableA(LPACCEL, int); +HACCEL CreateAcceleratorTableW(LPACCEL, int); +BOOL CreateCaret(HWND, HBITMAP, int, int); +HCURSOR CreateCursor(HINSTANCE, int, int, int, int, PCVOID, PCVOID); + +HDESK CreateDesktopA(LPCSTR, LPCSTR, LPDEVMODEA, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES); +HDESK CreateDesktopW(LPCWSTR, LPCWSTR, LPDEVMODEW, DWORD, ACCESS_MASK, LPSECURITY_ATTRIBUTES); + +HWND CreateDialogParamA(HINSTANCE, LPCSTR, HWND, DLGPROC, LPARAM); +HWND CreateDialogParamW(HINSTANCE, LPCWSTR, HWND, DLGPROC, LPARAM); +HWND CreateDialogIndirectParamA(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); +HWND CreateDialogIndirectParamW(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); + +HICON CreateIcon(HINSTANCE, int, int, BYTE, BYTE, BYTE*, BYTE*); +HICON CreateIconFromResource(PBYTE, DWORD, BOOL, DWORD); +HICON CreateIconFromResourceEx(PBYTE, DWORD, BOOL, DWORD, int, int, UINT); +HICON CreateIconIndirect(PICONINFO); +HWND CreateMDIWindowA(LPCSTR, LPCSTR, DWORD, int, int, int, int, HWND, HINSTANCE, LPARAM); +HWND CreateMDIWindowW(LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HINSTANCE, LPARAM); +HMENU CreateMenu(); +HMENU CreatePopupMenu(); + +HWND CreateWindowExA(DWORD, LPCSTR, LPCSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID); +HWND CreateWindowExW(DWORD, LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HMENU, HINSTANCE, LPVOID); + +HWINSTA CreateWindowStationA(LPSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES); +HWINSTA CreateWindowStationW(LPWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES); +LRESULT DefDlgProcA(HWND, UINT, WPARAM, LPARAM); +LRESULT DefDlgProcW(HWND, UINT, WPARAM, LPARAM); +HDWP DeferWindowPos(HDWP, HWND, HWND, int, int, int, int, UINT); +LRESULT DefFrameProcA(HWND, HWND, UINT, WPARAM, LPARAM); +LRESULT DefFrameProcW(HWND, HWND, UINT, WPARAM, LPARAM); + +LRESULT DefMDIChildProcA(HWND, UINT, WPARAM, LPARAM); +LRESULT DefMDIChildProcW(HWND, UINT, WPARAM, LPARAM); +LRESULT DefWindowProcA(HWND, UINT, WPARAM, LPARAM); +LRESULT DefWindowProcW(HWND, UINT, WPARAM, LPARAM); +BOOL DeleteMenu(HMENU, UINT, UINT); +BOOL DeregisterShellHookWindow(HWND); +BOOL DestroyAcceleratorTable(HACCEL); +BOOL DestroyCaret(); +BOOL DestroyCursor(HCURSOR); +BOOL DestroyIcon(HICON); +BOOL DestroyMenu(HMENU); +BOOL DestroyWindow(HWND); + +int DialogBoxParamA(HINSTANCE, LPCSTR, HWND, DLGPROC, LPARAM); +int DialogBoxParamW(HINSTANCE, LPCWSTR, HWND, DLGPROC, LPARAM); +int DialogBoxIndirectParamA(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); +int DialogBoxIndirectParamW(HINSTANCE, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); + +} // extern (Windows) + +HCURSOR CopyCursor(HCURSOR c) +{ + return cast(HCURSOR)CopyIcon(cast(HICON)c); +} + +HWND CreateDialogA(HINSTANCE h, LPCSTR n, HWND w, DLGPROC f) +{ + return CreateDialogParamA(h, n, w, f, 0); +} + +HWND CreateDialogW(HINSTANCE h, LPCWSTR n, HWND w, DLGPROC f) +{ + return CreateDialogParamW(h, n, w, f, 0); +} + +HWND CreateDialogIndirectA(HINSTANCE h, LPCDLGTEMPLATE t, HWND w , DLGPROC f) +{ + return CreateDialogIndirectParamA(h, t, w, f, 0); +} + +HWND CreateDialogIndirectW(HINSTANCE h, LPCDLGTEMPLATE t, HWND w , DLGPROC f) +{ + return CreateDialogIndirectParamW(h, t, w, f, 0); +} + + +HWND CreateWindowA(LPCSTR a, LPCSTR b, DWORD c, int d, int e, int f, int g, HWND h, HMENU i, HINSTANCE j, LPVOID k) +{ + return CreateWindowExA(0, a, b, c, d, e, f, g, h, i, j, k); +} + +HWND CreateWindowW(LPCWSTR a, LPCWSTR b, DWORD c, int d, int e, int f, int g, HWND h, HMENU i, HINSTANCE j, LPVOID k) +{ + return CreateWindowExW(0, a, b, c, d, e, f, g, h, i, j, k); +} + +int DialogBoxA(HINSTANCE i, LPCSTR t, HWND p, DLGPROC f) +{ + return DialogBoxParamA(i, t, p, f, 0); +} + +int DialogBoxW(HINSTANCE i, LPCWSTR t, HWND p, DLGPROC f) +{ + return DialogBoxParamW(i, t, p, f, 0); +} + +int DialogBoxIndirectA(HINSTANCE i, LPCDLGTEMPLATE t, HWND p, DLGPROC f) +{ + return DialogBoxIndirectParamA(i, t, p, f, 0); +} + +int DialogBoxIndirectW(HINSTANCE i, LPCDLGTEMPLATE t, HWND p, DLGPROC f) +{ + return DialogBoxIndirectParamW(i, t, p, f, 0); +} + +BOOL ExitWindows(UINT r, DWORD c) +{ + return ExitWindowsEx(EWX_LOGOFF, 0); +} +alias GetWindow GetNextWindow; + +extern (Windows): +LONG DispatchMessageA( MSG*); +LONG DispatchMessageW( MSG*); +int DlgDirListA(HWND, LPSTR, int, int, UINT); +int DlgDirListW(HWND, LPWSTR, int, int, UINT); +int DlgDirListComboBoxA(HWND, LPSTR, int, int, UINT); +int DlgDirListComboBoxW(HWND, LPWSTR, int, int, UINT); +BOOL DlgDirSelectComboBoxExA(HWND, LPSTR, int, int); +BOOL DlgDirSelectComboBoxExW(HWND, LPWSTR, int, int); +BOOL DlgDirSelectExA(HWND, LPSTR, int, int); +BOOL DlgDirSelectExW(HWND, LPWSTR, int, int); +BOOL DragDetect(HWND, POINT); +DWORD DragObject(HWND, HWND, UINT, DWORD, HCURSOR); +BOOL DrawAnimatedRects(HWND, int, LPCRECT, LPCRECT); +BOOL DrawCaption(HWND, HDC, LPCRECT, UINT); +BOOL DrawEdge(HDC, LPRECT, UINT, UINT); +BOOL DrawFocusRect(HDC, LPCRECT); +BOOL DrawFrameControl(HDC, LPRECT, UINT, UINT); +BOOL DrawIcon(HDC, int, int, HICON); +BOOL DrawIconEx(HDC, int, int, HICON, int, int, UINT, HBRUSH, UINT); +BOOL DrawMenuBar(HWND); +BOOL DrawStateA(HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT); +BOOL DrawStateW(HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT); +int DrawTextA(HDC, LPCSTR, int, LPRECT, UINT); +int DrawTextW(HDC, LPCWSTR, int, LPRECT, UINT); +int DrawTextExA(HDC, LPSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS); +int DrawTextExW(HDC, LPWSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS); +BOOL EmptyClipboard(); +BOOL EnableMenuItem(HMENU, UINT, UINT); +BOOL EnableScrollBar(HWND, UINT, UINT); +BOOL EnableWindow(HWND, BOOL); +BOOL EndDeferWindowPos(HDWP); +BOOL EndDialog(HWND, int); +BOOL EndMenu(); +BOOL EndPaint(HWND, PAINTSTRUCT*); +BOOL EnumChildWindows(HWND, ENUMWINDOWSPROC, LPARAM); +UINT EnumClipboardFormats(UINT); +BOOL EnumDesktopsA(HWINSTA, DESKTOPENUMPROCA, LPARAM); +BOOL EnumDesktopsW(HWINSTA, DESKTOPENUMPROCW, LPARAM); +BOOL EnumDesktopWindows(HDESK, ENUMWINDOWSPROC, LPARAM); +BOOL EnumDisplaySettingsA(LPCSTR, DWORD, PDEVMODEA); +BOOL EnumDisplaySettingsW(LPCWSTR, DWORD, PDEVMODEW); + +BOOL EnumDisplayDevicesA(LPCSTR, DWORD, PDISPLAY_DEVICEA, DWORD); +BOOL EnumDisplayDevicesW(LPCWSTR, DWORD, PDISPLAY_DEVICEW, DWORD); + +int EnumPropsA(HWND, PROPENUMPROCA); +int EnumPropsW(HWND, PROPENUMPROCW); +int EnumPropsExA(HWND, PROPENUMPROCEXA, LPARAM); +int EnumPropsExW(HWND, PROPENUMPROCEXW, LPARAM); + +BOOL EnumThreadWindows(DWORD, WNDENUMPROC, LPARAM); +BOOL EnumWindows(WNDENUMPROC, LPARAM); +BOOL EnumWindowStationsA(WINSTAENUMPROCA, LPARAM); +BOOL EnumWindowStationsW(WINSTAENUMPROCW, LPARAM); +BOOL EqualRect(LPCRECT, LPCRECT); + +BOOL ExitWindowsEx(UINT, DWORD); +HWND FindWindowA(LPCSTR, LPCSTR); +HWND FindWindowExA(HWND, HWND, LPCSTR, LPCSTR); +HWND FindWindowExW(HWND, HWND, LPCWSTR, LPCWSTR); +HWND FindWindowW(LPCWSTR, LPCWSTR); +BOOL FlashWindow(HWND, BOOL); + +int FrameRect(HDC, LPCRECT, HBRUSH); +BOOL FrameRgn(HDC, HRGN, HBRUSH, int, int); +HWND GetActiveWindow(); +HWND GetAncestor(HWND, UINT); +SHORT GetAsyncKeyState(int); +HWND GetCapture(); +UINT GetCaretBlinkTime(); +BOOL GetCaretPos(LPPOINT); +BOOL GetClassInfoA(HINSTANCE, LPCSTR, LPWNDCLASSA); +BOOL GetClassInfoExA(HINSTANCE, LPCSTR, LPWNDCLASSEXA); +BOOL GetClassInfoW(HINSTANCE, LPCWSTR, LPWNDCLASSW); +BOOL GetClassInfoExW(HINSTANCE, LPCWSTR, LPWNDCLASSEXW); +DWORD GetClassLongA(HWND, int); +DWORD GetClassLongW(HWND, int); +int GetClassNameA(HWND, LPSTR, int); +int GetClassNameW(HWND, LPWSTR, int); +WORD GetClassWord(HWND, int); +BOOL GetClientRect(HWND, LPRECT); +HANDLE GetClipboardData(UINT); +int GetClipboardFormatNameA(UINT, LPSTR, int); +int GetClipboardFormatNameW(UINT, LPWSTR, int); +HWND GetClipboardOwner(); +HWND GetClipboardViewer(); +BOOL GetClipCursor(LPRECT); +BOOL GetCursorPos(LPPOINT); +HDC GetDC(HWND); +HDC GetDCEx(HWND, HRGN, DWORD); +HWND GetDesktopWindow(); +int GetDialogBaseUnits(); +int GetDlgCtrlID(HWND); +HWND GetDlgItem(HWND, int); +UINT GetDlgItemInt(HWND, int, PBOOL, BOOL); +UINT GetDlgItemTextA(HWND, int, LPSTR, int); +UINT GetDlgItemTextW(HWND, int, LPWSTR, int); +UINT GetDoubleClickTime(); +HWND GetFocus(); +HWND GetForegroundWindow(); + +BOOL GetIconInfo(HICON, PICONINFO); +BOOL GetInputState(); +UINT GetKBCodePage(); +HKL GetKeyboardLayout(DWORD); +UINT GetKeyboardLayoutList(int, HKL*); +BOOL GetKeyboardLayoutNameA(LPSTR); +BOOL GetKeyboardLayoutNameW(LPWSTR); +BOOL GetKeyboardState(PBYTE); +int GetKeyboardType(int); +int GetKeyNameTextA(LONG, LPSTR, int); +int GetKeyNameTextW(LONG, LPWSTR, int); +SHORT GetKeyState(int); +HWND GetLastActivePopup(HWND); +HMENU GetMenu(HWND); +LONG GetMenuCheckMarkDimensions(); +DWORD GetMenuContextHelpId(HMENU); +UINT GetMenuDefaultItem(HMENU, UINT, UINT); +int GetMenuItemCount(HMENU); +UINT GetMenuItemID(HMENU, int); +BOOL GetMenuItemInfoA(HMENU, UINT, BOOL, LPMENUITEMINFOA); +BOOL GetMenuItemInfoW(HMENU, UINT, BOOL, LPMENUITEMINFOW); +BOOL GetMenuItemRect(HWND, HMENU, UINT, LPRECT); +UINT GetMenuState(HMENU, UINT, UINT); +int GetMenuStringA(HMENU, UINT, LPSTR, int, UINT); +int GetMenuStringW(HMENU, UINT, LPWSTR, int, UINT); +BOOL GetMessageA(LPMSG, HWND, UINT, UINT); +BOOL GetMessageW(LPMSG, HWND, UINT, UINT); +LONG GetMessageExtraInfo(); +DWORD GetMessagePos(); +LONG GetMessageTime(); + +HWND GetNextDlgGroupItem(HWND, HWND, BOOL); +HWND GetNextDlgTabItem(HWND, HWND, BOOL); + +HWND GetOpenClipboardWindow(); +HWND GetParent(HWND); +int GetPriorityClipboardFormat(UINT*, int); +HANDLE GetPropA(HWND, LPCSTR); +HANDLE GetPropW(HWND, LPCWSTR); + +DWORD GetQueueStatus(UINT); +BOOL GetScrollInfo(HWND, int, LPSCROLLINFO); +int GetScrollPos(HWND, int); +BOOL GetScrollRange(HWND, int, LPINT, LPINT); + +HMENU GetSubMenu(HMENU, int); +DWORD GetSysColor(int); +HBRUSH GetSysColorBrush(int); + +HMENU GetSystemMenu(HWND, BOOL); +int GetSystemMetrics(int); +DWORD GetTabbedTextExtentA(HDC, LPCSTR, int, int, LPINT); +DWORD GetTabbedTextExtentW(HDC, LPCWSTR, int, int, LPINT); +LONG GetWindowLongA(HWND, int); +LONG GetWindowLongW(HWND, int); + +HDESK GetThreadDesktop(DWORD); +HWND GetTopWindow(HWND); +BOOL GetUpdateRect(HWND, LPRECT, BOOL); +int GetUpdateRgn(HWND, HRGN, BOOL); +BOOL GetUserObjectInformationA(HANDLE, int, PVOID, DWORD, PDWORD); +BOOL GetUserObjectInformationW(HANDLE, int, PVOID, DWORD, PDWORD); +BOOL GetUserObjectSecurity(HANDLE, PSECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, PDWORD); +HWND GetWindow(HWND, UINT); +DWORD GetWindowContextHelpId(HWND); +HDC GetWindowDC(HWND); +BOOL GetWindowPlacement(HWND, WINDOWPLACEMENT*); +BOOL GetWindowRect(HWND, LPRECT); +int GetWindowRgn(HWND, HRGN); +int GetWindowTextA(HWND, LPSTR, int); +int GetWindowTextLengthA(HWND); +int GetWindowTextLengthW(HWND); +int GetWindowTextW(HWND, LPWSTR, int); +WORD GetWindowWord(HWND, int); +BOOL GetAltTabInfoA(HWND, int, PALTTABINFO, LPSTR, UINT); +BOOL GetAltTabInfoW(HWND, int, PALTTABINFO, LPWSTR, UINT); +BOOL GetComboBoxInfo(HWND, PCOMBOBOXINFO); +BOOL GetCursorInfo(PCURSORINFO); +BOOL GetLastInputInfo(PLASTINPUTINFO); +DWORD GetListBoxInfo(HWND); +BOOL GetMenuBarInfo(HWND, LONG, LONG, PMENUBARINFO); +BOOL GetMenuInfo(HMENU, LPMENUINFO); +BOOL GetScrollBarInfo(HWND, LONG, PSCROLLBARINFO); +BOOL GetTitleBarInfo(HWND, PTITLEBARINFO); +BOOL GetWindowInfo(HWND, PWINDOWINFO); +UINT GetWindowModuleFileNameA(HWND, LPSTR, UINT); +UINT GetWindowModuleFileNameW(HWND, LPWSTR, UINT); +BOOL GrayStringA(HDC, HBRUSH, GRAYSTRINGPROC, LPARAM, int, int, int, int, int); +BOOL GrayStringW(HDC, HBRUSH, GRAYSTRINGPROC, LPARAM, int, int, int, int, int); +BOOL HideCaret(HWND); +BOOL HiliteMenuItem(HWND, HMENU, UINT, UINT); +BOOL InflateRect(LPRECT, int, int); +BOOL InSendMessage(); +BOOL InsertMenuA(HMENU, UINT, UINT, UINT, LPCSTR); +BOOL InsertMenuW(HMENU, UINT, UINT, UINT, LPCWSTR); +BOOL InsertMenuItemA(HMENU, UINT, BOOL, LPCMENUITEMINFOA); +BOOL InsertMenuItemW(HMENU, UINT, BOOL, LPCMENUITEMINFOW); +INT InternalGetWindowText(HWND, LPWSTR, INT); +BOOL IntersectRect(LPRECT, LPCRECT, LPCRECT); +BOOL InvalidateRect(HWND, LPCRECT, BOOL); +BOOL InvalidateRgn(HWND, HRGN, BOOL); +BOOL InvertRect(HDC, LPCRECT); +BOOL IsCharAlphaA(CHAR ch); +BOOL IsCharAlphaNumericA(CHAR); +BOOL IsCharAlphaNumericW(WCHAR); +BOOL IsCharAlphaW(WCHAR); +BOOL IsCharLowerA(CHAR); +BOOL IsCharLowerW(WCHAR); +BOOL IsCharUpperA(CHAR); +BOOL IsCharUpperW(WCHAR); +BOOL IsChild(HWND, HWND); +BOOL IsClipboardFormatAvailable(UINT); +BOOL IsDialogMessageA(HWND, LPMSG); +BOOL IsDialogMessageW(HWND, LPMSG); +UINT IsDlgButtonChecked(HWND, int); +BOOL IsIconic(HWND); +BOOL IsMenu(HMENU); +BOOL IsRectEmpty(LPCRECT); +BOOL IsWindow(HWND); +BOOL IsWindowEnabled(HWND); +BOOL IsWindowUnicode(HWND); +BOOL IsWindowVisible(HWND); +BOOL IsZoomed(HWND); +void keybd_event(BYTE, BYTE, DWORD, DWORD); +BOOL KillTimer(HWND, UINT); +HACCEL LoadAcceleratorsA(HINSTANCE, LPCSTR); +HACCEL LoadAcceleratorsW(HINSTANCE, LPCWSTR); +HBITMAP LoadBitmapA(HINSTANCE, LPCSTR); +HBITMAP LoadBitmapW(HINSTANCE, LPCWSTR); +HCURSOR LoadCursorA(HINSTANCE, LPCSTR); +HCURSOR LoadCursorFromFileA(LPCSTR); +HCURSOR LoadCursorFromFileW(LPCWSTR); +HCURSOR LoadCursorW(HINSTANCE, LPCWSTR); +HICON LoadIconA(HINSTANCE, LPCSTR); +HICON LoadIconW(HINSTANCE, LPCWSTR); +HANDLE LoadImageA(HINSTANCE, LPCSTR, UINT, int, int, UINT); +HANDLE LoadImageW(HINSTANCE, LPCWSTR, UINT, int, int, UINT); +HKL LoadKeyboardLayoutA(LPCSTR, UINT); +HKL LoadKeyboardLayoutW(LPCWSTR, UINT); +HMENU LoadMenuA(HINSTANCE, LPCSTR); +HMENU LoadMenuIndirectA( MENUTEMPLATE*); +HMENU LoadMenuIndirectW( MENUTEMPLATE*); +HMENU LoadMenuW(HINSTANCE, LPCWSTR); +int LoadStringA(HINSTANCE, UINT, LPSTR, int); +int LoadStringW(HINSTANCE, UINT, LPWSTR, int); +BOOL LockWindowUpdate(HWND); +int LookupIconIdFromDirectory(PBYTE, BOOL); +int LookupIconIdFromDirectoryEx(PBYTE, BOOL, int, int, UINT); +BOOL MapDialogRect(HWND, LPRECT); +UINT MapVirtualKeyA(UINT, UINT); +UINT MapVirtualKeyExA(UINT, UINT, HKL); +UINT MapVirtualKeyExW(UINT, UINT, HKL); +UINT MapVirtualKeyW(UINT, UINT); +int MapWindowPoints(HWND, HWND, LPPOINT, UINT); +int MenuItemFromPoint(HWND, HMENU, POINT); +BOOL MessageBeep(UINT); +int MessageBoxA(HWND, LPCSTR, LPCSTR, UINT); +int MessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT); +int MessageBoxExA(HWND, LPCSTR, LPCSTR, UINT, WORD); +int MessageBoxExW(HWND, LPCWSTR, LPCWSTR, UINT, WORD); +int MessageBoxIndirectA(MSGBOXPARAMSA*); +int MessageBoxIndirectW(MSGBOXPARAMSW*); +BOOL ModifyMenuA(HMENU, UINT, UINT, UINT, LPCSTR); +BOOL ModifyMenuW(HMENU, UINT, UINT, UINT, LPCWSTR); +void mouse_event(DWORD, DWORD, DWORD, DWORD, ULONG_PTR); +BOOL MoveWindow(HWND, int, int, int, int, BOOL); +DWORD MsgWaitForMultipleObjects(DWORD, HANDLE*, BOOL, DWORD, DWORD); +DWORD MsgWaitForMultipleObjectsEx(DWORD, HANDLE*, DWORD, DWORD, DWORD); +DWORD OemKeyScan(WORD); +BOOL OemToCharA(LPCSTR, LPSTR); +BOOL OemToCharBuffA(LPCSTR, LPSTR, DWORD); +BOOL OemToCharBuffW(LPCSTR, LPWSTR, DWORD); +BOOL OemToCharW(LPCSTR, LPWSTR); +BOOL OffsetRect(LPRECT, int, int); +BOOL OpenClipboard(HWND); +HDESK OpenDesktopA(LPSTR, DWORD, BOOL, DWORD); +HDESK OpenDesktopW(LPWSTR, DWORD, BOOL, DWORD); +BOOL OpenIcon(HWND); +HDESK OpenInputDesktop(DWORD, BOOL, DWORD); +HWINSTA OpenWindowStationA(LPSTR, BOOL, DWORD); +HWINSTA OpenWindowStationW(LPWSTR, BOOL, DWORD); +BOOL PaintDesktop(HDC); +BOOL PeekMessageA(LPMSG, HWND, UINT, UINT, UINT); +BOOL PeekMessageW(LPMSG, HWND, UINT, UINT, UINT); +BOOL PostMessageA(HWND, UINT, WPARAM, LPARAM); +BOOL PostMessageW(HWND, UINT, WPARAM, LPARAM); +void PostQuitMessage(int); +BOOL PostThreadMessageA(DWORD, UINT, WPARAM, LPARAM); +BOOL PostThreadMessageW(DWORD, UINT, WPARAM, LPARAM); +BOOL PtInRect(LPCRECT, POINT); +HWND RealChildWindowFromPoint(HWND, POINT); +UINT RealGetWindowClassA(HWND, LPSTR, UINT); +UINT RealGetWindowClassW(HWND, LPWSTR, UINT); +BOOL RedrawWindow(HWND, LPCRECT, HRGN, UINT); +ATOM RegisterClassA(WNDCLASSA*); +ATOM RegisterClassW(WNDCLASSW*); +ATOM RegisterClassExA(WNDCLASSEXA*); +ATOM RegisterClassExW(WNDCLASSEXW*); +UINT RegisterClipboardFormatA(LPCSTR); +UINT RegisterClipboardFormatW(LPCWSTR); +BOOL RegisterHotKey(HWND, int, UINT, UINT); +UINT RegisterWindowMessageA(LPCSTR); +UINT RegisterWindowMessageW(LPCWSTR); +BOOL ReleaseCapture(); +int ReleaseDC(HWND, HDC); +BOOL RemoveMenu(HMENU, UINT, UINT); +HANDLE RemovePropA(HWND, LPCSTR); +HANDLE RemovePropW(HWND, LPCWSTR); +BOOL ReplyMessage(LRESULT); +BOOL ScreenToClient(HWND, LPPOINT); +BOOL ScrollDC(HDC, int, int, LPCRECT, LPCRECT, HRGN, LPRECT); +BOOL ScrollWindow(HWND, int, int, LPCRECT, LPCRECT); +int ScrollWindowEx(HWND, int, int, LPCRECT, LPCRECT, HRGN, LPRECT, UINT); +LONG SendDlgItemMessageA(HWND, int, UINT, WPARAM, LPARAM); +LONG SendDlgItemMessageW(HWND, int, UINT, WPARAM, LPARAM); +LRESULT SendMessageA(HWND, UINT, WPARAM, LPARAM); +BOOL SendMessageCallbackA(HWND, UINT, WPARAM, LPARAM, SENDASYNCPROC, DWORD); +BOOL SendMessageCallbackW(HWND, UINT, WPARAM, LPARAM, SENDASYNCPROC, DWORD); +LRESULT SendMessageTimeoutA(HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD); +LRESULT SendMessageTimeoutW(HWND, UINT, WPARAM, LPARAM, UINT, UINT, PDWORD); +LRESULT SendMessageW(HWND, UINT, WPARAM, LPARAM); +BOOL SendNotifyMessageA(HWND, UINT, WPARAM, LPARAM); +BOOL SendNotifyMessageW(HWND, UINT, WPARAM, LPARAM); +HWND SetActiveWindow(HWND); +HWND SetCapture(HWND hWnd); +BOOL SetCaretBlinkTime(UINT); +BOOL SetCaretPos(int, int); +DWORD SetClassLongA(HWND, int, LONG); +DWORD SetClassLongW(HWND, int, LONG); +WORD SetClassWord(HWND, int, WORD); +HANDLE SetClipboardData(UINT, HANDLE); +HWND SetClipboardViewer(HWND); +HCURSOR SetCursor(HCURSOR); +BOOL SetCursorPos(int, int); +void SetDebugErrorLevel(DWORD); +BOOL SetDlgItemInt(HWND, int, UINT, BOOL); +BOOL SetDlgItemTextA(HWND, int, LPCSTR); +BOOL SetDlgItemTextW(HWND, int, LPCWSTR); +BOOL SetDoubleClickTime(UINT); +HWND SetFocus(HWND); +BOOL SetForegroundWindow(HWND); +BOOL SetKeyboardState(PBYTE); +BOOL SetMenu(HWND, HMENU); +BOOL SetMenuContextHelpId(HMENU, DWORD); +BOOL SetMenuDefaultItem(HMENU, UINT, UINT); +BOOL SetMenuInfo(HMENU, LPCMENUINFO); +BOOL SetMenuItemBitmaps(HMENU, UINT, UINT, HBITMAP, HBITMAP); +BOOL SetMenuItemInfoA(HMENU, UINT, BOOL, LPCMENUITEMINFOA); +BOOL SetMenuItemInfoW( HMENU, UINT, BOOL, LPCMENUITEMINFOW); +LPARAM SetMessageExtraInfo(LPARAM); +BOOL SetMessageQueue(int); +HWND SetParent(HWND, HWND); +BOOL SetProcessWindowStation(HWINSTA); +BOOL SetPropA(HWND, LPCSTR, HANDLE); +BOOL SetPropW(HWND, LPCWSTR, HANDLE); +BOOL SetRect(LPRECT, int, int, int, int); +BOOL SetRectEmpty(LPRECT); +int SetScrollInfo(HWND, int, LPCSCROLLINFO, BOOL); +int SetScrollPos(HWND, int, int, BOOL); +BOOL SetScrollRange(HWND, int, int, int, BOOL); +BOOL SetSysColors(int, INT* , COLORREF* ); +BOOL SetSystemCursor(HCURSOR, DWORD); +BOOL SetThreadDesktop(HDESK); +UINT SetTimer(HWND, UINT, UINT, TIMERPROC); +BOOL SetUserObjectInformationA(HANDLE, int, PVOID, DWORD); +BOOL SetUserObjectInformationW(HANDLE, int, PVOID, DWORD); +BOOL SetUserObjectSecurity(HANDLE, PSECURITY_INFORMATION, PSECURITY_DESCRIPTOR); +BOOL SetWindowContextHelpId(HWND, DWORD); +LONG SetWindowLongA(HWND, int, LONG); +LONG SetWindowLongW(HWND, int, LONG); +BOOL SetWindowPlacement(HWND hWnd, WINDOWPLACEMENT*); +BOOL SetWindowPos(HWND, HWND, int, int, int, int, UINT); +int SetWindowRgn(HWND, HRGN, BOOL); +HHOOK SetWindowsHookA(int, HOOKPROC); +HHOOK SetWindowsHookW(int, HOOKPROC); +HHOOK SetWindowsHookExA(int, HOOKPROC, HINSTANCE, DWORD); +HHOOK SetWindowsHookExW(int, HOOKPROC, HINSTANCE, DWORD); +BOOL SetWindowTextA(HWND, LPCSTR); +BOOL SetWindowTextW(HWND, LPCWSTR); +WORD SetWindowWord(HWND, int, WORD); +BOOL ShowCaret(HWND); +int ShowCursor(BOOL); +BOOL ShowOwnedPopups(HWND, BOOL); +BOOL ShowScrollBar(HWND, int, BOOL); +BOOL ShowWindow(HWND, int); +BOOL ShowWindowAsync(HWND, int); +BOOL SubtractRect(LPRECT, LPCRECT, LPCRECT); +BOOL SwapMouseButton(BOOL); +BOOL SwitchDesktop(HDESK); +BOOL SystemParametersInfoA(UINT, UINT, PVOID, UINT); +BOOL SystemParametersInfoW(UINT, UINT, PVOID, UINT); +LONG TabbedTextOutA(HDC, int, int, LPCSTR, int, int, LPINT, int); +LONG TabbedTextOutW(HDC, int, int, LPCWSTR, int, int, LPINT, int); +WORD TileWindows(HWND, UINT, LPCRECT, UINT, HWND* ); +int ToAscii(UINT, UINT, PBYTE, LPWORD, UINT); +int ToAsciiEx(UINT, UINT, PBYTE, LPWORD, UINT, HKL); +int ToUnicode(UINT, UINT, PBYTE, LPWSTR, int, UINT); +int ToUnicodeEx(UINT, UINT, PBYTE, LPWSTR, int, UINT, HKL); +BOOL TrackMouseEvent(LPTRACKMOUSEEVENT); +BOOL TrackPopupMenu(HMENU, UINT, int, int, int, HWND, LPCRECT); +BOOL TrackPopupMenuEx(HMENU, UINT, int, int, HWND, LPTPMPARAMS); +int TranslateAcceleratorA(HWND, HACCEL, LPMSG); +int TranslateAcceleratorW(HWND, HACCEL, LPMSG); +BOOL TranslateMDISysAccel(HWND, LPMSG); +BOOL TranslateMessage( MSG*); +BOOL UnhookWindowsHook(int, HOOKPROC); +BOOL UnhookWindowsHookEx(HHOOK); +BOOL UnionRect(LPRECT, LPCRECT, LPCRECT); +BOOL UnloadKeyboardLayout(HKL); +BOOL UnregisterClassA(LPCSTR, HINSTANCE); +BOOL UnregisterClassW(LPCWSTR, HINSTANCE); +BOOL UnregisterHotKey(HWND, int); +BOOL UpdateWindow(HWND); +BOOL ValidateRect(HWND, LPCRECT); +BOOL ValidateRgn(HWND, HRGN); +SHORT VkKeyScanA(CHAR); +SHORT VkKeyScanExA(CHAR, HKL); +SHORT VkKeyScanExW(WCHAR, HKL); +SHORT VkKeyScanW(WCHAR); +DWORD WaitForInputIdle(HANDLE, DWORD); +BOOL WaitMessage(); +HWND WindowFromDC(HDC hDC); +HWND WindowFromPoint(POINT); +UINT WinExec(LPCSTR, UINT); +BOOL WinHelpA(HWND, LPCSTR, UINT, DWORD); +BOOL WinHelpW(HWND, LPCWSTR, UINT, DWORD); + +extern (C) { + int wsprintfA(LPSTR, LPCSTR, ...); + int wsprintfW(LPWSTR, LPCWSTR, ...); +} + + +// These shouldn't be necessary for D. +typedef char* va_list_; +int wvsprintfA(LPSTR, LPCSTR, va_list_ arglist); +int wvsprintfW(LPWSTR, LPCWSTR, va_list_ arglist); + + +static if (_WIN32_WINDOWS == 0x400) { +// On Win95, there's only one version. +int BroadcastSystemMessage(DWORD, LPDWORD, UINT, WPARAM, LPARAM); +} +static if (_WIN32_WINNT >= 0x400) { +int BroadcastSystemMessageA(DWORD, LPDWORD, UINT, WPARAM, LPARAM); +int BroadcastSystemMessageW(DWORD, LPDWORD, UINT, WPARAM, LPARAM); +} +static if (_WIN32_WINNT >= 0x501) { +int BroadcastSystemMessageExA(DWORD, LPDWORD, UINT, WPARAM, LPARAM, PBSMINFO); +int BroadcastSystemMessageExW(DWORD, LPDWORD, UINT, WPARAM, LPARAM, PBSMINFO); +} + +static if (_WIN32_WINNT >= 0x403) { +UINT SendInput(UINT, LPINPUT, int); +} +static if (_WIN32_WINNT >= 0x500) { +BOOL AnimateWindow(HWND, DWORD, DWORD); +BOOL EndTask(HWND, BOOL, BOOL); +DWORD GetGuiResources(HANDLE, DWORD); +HWND GetShellWindow(); +BOOL GetProcessDefaultLayout(DWORD*); +BOOL IsHungAppWindow(HWND); +BOOL LockWorkStation(); +HDEVNOTIFY RegisterDeviceNotificationA(HANDLE, LPVOID, DWORD); +HDEVNOTIFY RegisterDeviceNotificationW(HANDLE, LPVOID, DWORD); +BOOL SetProcessDefaultLayout(DWORD); +void SwitchToThisWindow(HWND, BOOL); +BOOL SetLayeredWindowAttributes(HWND, COLORREF, BYTE, DWORD); +BOOL UpdateLayeredWindow(HWND, HDC, POINT*, SIZE*, HDC, POINT*, COLORREF, BLENDFUNCTION*, DWORD); +BOOL UserHandleGrantAccess(HANDLE, HANDLE, BOOL); +} +static if (_WIN32_WINNT >= 0x501) { +UINT GetRawInputBuffer(PRAWINPUT, PUINT, UINT); +UINT GetRawInputData(HRAWINPUT, UINT, LPVOID, PUINT, UINT); +UINT GetRawInputDeviceInfoA(HANDLE, UINT, LPVOID, PUINT); +UINT GetRawInputDeviceInfoW(HANDLE, UINT, LPVOID, PUINT); +UINT GetRawInputDeviceList(PRAWINPUTDEVICELIST, PUINT, UINT); +UINT GetRegisteredRawInputDevices(PRAWINPUTDEVICE, PUINT, UINT); +LRESULT DefRawInputProc(PRAWINPUT*, INT, UINT); +BOOL RegisterRawInputDevices(PCRAWINPUTDEVICE, UINT, UINT); + +BOOL IsGUIThread(BOOL); +BOOL IsWinEventHookInstalled(DWORD); +BOOL PrintWindow(HWND, HDC, UINT); +BOOL GetLayeredWindowAttributes(HWND, COLORREF*, BYTE*, DWORD*); +} +static if (WINVER >= 0x410) { + BOOL EnumDisplayMonitors(HDC, LPCRECT, MONITORENUMPROC, LPARAM); + BOOL GetMonitorInfoA(HMONITOR, LPMONITORINFO); + BOOL GetMonitorInfoA(HMONITOR, LPMONITORINFOEXA); + BOOL GetMonitorInfoW(HMONITOR, LPMONITORINFO); + BOOL GetMonitorInfoW(HMONITOR, LPMONITORINFOEXW); + HMONITOR MonitorFromPoint(POINT, DWORD); + HMONITOR MonitorFromRect(LPCRECT, DWORD); + HMONITOR MonitorFromWindow(HWND, DWORD); +} +static if (WINVER >= 0x500) { +BOOL GetGUIThreadInfo(DWORD, LPGUITHREADINFO); +void NotifyWinEvent(DWORD, HWND, LONG, LONG); +HWINEVENTHOOK SetWinEventHook(UINT, UINT, HMODULE, WINEVENTPROC, DWORD, DWORD, UINT); +BOOL UnhookWinEvent(HWINEVENTHOOK); +BOOL UnregisterDeviceNotification(HANDLE); +} +static if ((_WIN32_WINNT >= 0x500) || (_WIN32_WINDOWS >= 0x410)) { +BOOL EnumDisplaySettingsExA(LPCSTR, DWORD, LPDEVMODEA, DWORD); +BOOL EnumDisplaySettingsExW(LPCWSTR, DWORD, LPDEVMODEW, DWORD); +BOOL FlashWindowEx(PFLASHWINFO); +DWORD GetClipboardSequenceNumber(); +DWORD InSendMessageEx(LPVOID); +} +static if ((_WIN32_WINNT >= 0x500) || (_WIN32_WINDOWS >= 0x490)) { +BOOL AllowSetForegroundWindow(DWORD); +BOOL LockSetForegroundWindow(UINT); +int GetMouseMovePointsEx(UINT, LPMOUSEMOVEPOINT, LPMOUSEMOVEPOINT, int, DWORD); +} + +version (Win64) { +LONG_PTR GetWindowLongPtrA(HWND, int); +LONG_PTR GetWindowLongPtrW(HWND, int); +LONG_PTR SetWindowLongPtrA(HWND, int, LONG_PTR); +LONG_PTR SetWindowLongPtrW(HWND, int, LONG_PTR); +} else { +alias GetWindowLongA GetWindowLongPtrA; +alias GetWindowLongW GetWindowLongPtrW; +alias SetWindowLongA SetWindowLongPtrA; +alias SetWindowLongW SetWindowLongPtrW; +} + + +// ----- +// Aliases for Unicode or Ansi +version(Unicode) { + +alias EDITWORDBREAKPROCW EDITWORDBREAKPROC; +alias PROPENUMPROCW PROPENUMPROC; +alias PROPENUMPROCEXW PROPENUMPROCEX; +alias DESKTOPENUMPROCW DESKTOPENUMPROC; +alias WINSTAENUMPROCW WINSTAENUMPROC; +alias MAKEINTRESOURCEW MAKEINTRESOURCE; + +alias WNDCLASSW WNDCLASS; +alias WNDCLASSEXW WNDCLASSEX; +alias MENUITEMINFOW MENUITEMINFO; +alias LPCMENUITEMINFOW LPCMENUITEMINFO; +alias MSGBOXPARAMSW MSGBOXPARAMS; +alias HIGHCONTRASTW HIGHCONTRAST; +alias SERIALKEYSW SERIALKEYS; +alias SOUNDSENTRYW SOUNDSENTRY; +alias CREATESTRUCTW CREATESTRUCT; +alias CBT_CREATEWNDW CBT_CREATEWND; +alias MDICREATESTRUCTW MDICREATESTRUCT; +alias MULTIKEYHELPW MULTIKEYHELP; +alias MONITORINFOEXW MONITORINFOEX; +alias ICONMETRICSW ICONMETRICS; +alias NONCLIENTMETRICSW NONCLIENTMETRICS; + +alias AppendMenuW AppendMenu; +alias BroadcastSystemMessageW BroadcastSystemMessage; +static if (_WIN32_WINNT >= 0x501) { +alias BroadcastSystemMessageExW BroadcastSystemMessageEx; +} +alias CallMsgFilterW CallMsgFilter; +alias CallWindowProcW CallWindowProc; +alias ChangeMenuW ChangeMenu; +alias CharLowerW CharLower; +alias CharLowerBuffW CharLowerBuff; +alias CharNextW CharNext; +alias CharNextExW CharNextEx; +alias CharPrevW CharPrev; +alias CharPrevExW CharPrevEx; +alias CharToOemW CharToOem; +alias CharToOemBuffW CharToOemBuff; +alias CharUpperW CharUpper; +alias CharUpperBuffW CharUpperBuff; +alias CopyAcceleratorTableW CopyAcceleratorTable; +alias CreateAcceleratorTableW CreateAcceleratorTable; +alias CreateDialogW CreateDialog; +alias CreateDialogIndirectW CreateDialogIndirect; +alias CreateDialogIndirectParamW CreateDialogIndirectParam; +alias CreateDialogParamW CreateDialogParam; +alias CreateMDIWindowW CreateMDIWindow; +alias CreateWindowW CreateWindow; +alias CreateWindowExW CreateWindowEx; +alias CreateWindowStationW CreateWindowStation; +alias DefDlgProcW DefDlgProc; +alias DefFrameProcW DefFrameProc; +alias DefMDIChildProcW DefMDIChildProc; +alias DefWindowProcW DefWindowProc; +alias DialogBoxW DialogBox; +alias DialogBoxIndirectW DialogBoxIndirect; +alias DialogBoxIndirectParamW DialogBoxIndirectParam; +alias DialogBoxParamW DialogBoxParam; +alias DispatchMessageW DispatchMessage; +alias DlgDirListW DlgDirList; +alias DlgDirListComboBoxW DlgDirListComboBox; +alias DlgDirSelectComboBoxExW DlgDirSelectComboBoxEx; +alias DlgDirSelectExW DlgDirSelectEx; +alias DrawStateW DrawState; +alias DrawTextW DrawText; +alias DrawTextExW DrawTextEx; +alias EnumDesktopsW EnumDesktops; +alias EnumPropsW EnumProps; +alias EnumPropsExW EnumPropsEx; +alias EnumWindowStationsW EnumWindowStations; +alias FindWindowW FindWindow; +alias FindWindowExW FindWindowEx; +alias GetClassInfoW GetClassInfo; +alias GetClassInfoExW GetClassInfoEx; +alias GetClassLongW GetClassLong; +alias GetClassNameW GetClassName; +alias GetClipboardFormatNameW GetClipboardFormatName; +alias GetDlgItemTextW GetDlgItemText; +alias GetKeyboardLayoutNameW GetKeyboardLayoutName; +alias GetKeyNameTextW GetKeyNameText; +alias GetMenuItemInfoW GetMenuItemInfo; +alias GetMenuStringW GetMenuString; +alias GetMessageW GetMessage; +static if (WINVER >=0x410) { +alias GetMonitorInfoW GetMonitorInfo; +} +alias GetPropW GetProp; +static if (_WIN32_WINNT >= 0x501) { +alias GetRawInputDeviceInfoW GetRawInputDeviceInfo; +} +alias GetTabbedTextExtentW GetTabbedTextExtent; +alias GetUserObjectInformationW GetUserObjectInformation; +alias GetWindowLongW GetWindowLong; +alias GetWindowLongPtrW GetWindowLongPtr; +alias GetWindowTextW GetWindowText; +alias GetWindowTextLengthW GetWindowTextLength; +alias GetAltTabInfoW GetAltTabInfo; +alias GetWindowModuleFileNameW GetWindowModuleFileName; +alias GrayStringW GrayString; +alias InsertMenuW InsertMenu; +alias InsertMenuItemW InsertMenuItem; +alias IsCharAlphaW IsCharAlpha; +alias IsCharAlphaNumericW IsCharAlphaNumeric; +alias IsCharLowerW IsCharLower; +alias IsCharUpperW IsCharUpper; +alias IsDialogMessageW IsDialogMessage; +alias LoadAcceleratorsW LoadAccelerators; +alias LoadBitmapW LoadBitmap; +alias LoadCursorW LoadCursor; +alias LoadCursorFromFileW LoadCursorFromFile; +alias LoadIconW LoadIcon; +alias LoadImageW LoadImage; +alias LoadKeyboardLayoutW LoadKeyboardLayout; +alias LoadMenuW LoadMenu; +alias LoadMenuIndirectW LoadMenuIndirect; +alias LoadStringW LoadString; +alias MapVirtualKeyW MapVirtualKey; +alias MapVirtualKeyExW MapVirtualKeyEx; +alias MessageBoxW MessageBox; +alias MessageBoxExW MessageBoxEx; +alias MessageBoxIndirectW MessageBoxIndirect; +alias ModifyMenuW ModifyMenu; +alias OemToCharW OemToChar; +alias OemToCharBuffW OemToCharBuff; +alias OpenDesktopW OpenDesktop; +alias OpenWindowStationW OpenWindowStation; +alias PeekMessageW PeekMessage; +alias PostMessageW PostMessage; +alias PostThreadMessageW PostThreadMessage; +alias RealGetWindowClassW RealGetWindowClass; +alias RegisterClassW RegisterClass; +alias RegisterClassExW RegisterClassEx; +alias RegisterClipboardFormatW RegisterClipboardFormat; +static if (WINVER >= 0x500) { +alias RegisterDeviceNotificationW RegisterDeviceNotification; +} +alias RegisterWindowMessageW RegisterWindowMessage; +alias RemovePropW RemoveProp; +alias SendDlgItemMessageW SendDlgItemMessage; +alias SendMessageW SendMessage; +alias SendMessageCallbackW SendMessageCallback; +alias SendMessageTimeoutW SendMessageTimeout; +alias SendNotifyMessageW SendNotifyMessage; +alias SetClassLongW SetClassLong; +alias SetDlgItemTextW SetDlgItemText; +alias SetMenuItemInfoW SetMenuItemInfo; +alias SetPropW SetProp; +alias SetUserObjectInformationW SetUserObjectInformation; +alias SetWindowLongW SetWindowLong; +alias SetWindowLongPtrW SetWindowLongPtr; +alias SetWindowsHookW SetWindowsHook; +alias SetWindowsHookExW SetWindowsHookEx; +alias SetWindowTextW SetWindowText; +alias SystemParametersInfoW SystemParametersInfo; +alias TabbedTextOutW TabbedTextOut; +alias TranslateAcceleratorW TranslateAccelerator; +alias UnregisterClassW UnregisterClass; +alias VkKeyScanW VkKeyScan; +alias VkKeyScanExW VkKeyScanEx; +alias WinHelpW WinHelp; +alias wsprintfW wsprintf; +alias wvsprintfW wvsprintf; + +alias ChangeDisplaySettingsW ChangeDisplaySettings; +alias ChangeDisplaySettingsExW ChangeDisplaySettingsEx; +alias CreateDesktopW CreateDesktop; +alias EnumDisplaySettingsW EnumDisplaySettings; +static if ((_WIN32_WINNT >= 0x500) || (_WIN32_WINDOWS >= 0x410)) { +alias EnumDisplaySettingsExW EnumDisplaySettingsEx; +} +alias EnumDisplayDevicesW EnumDisplayDevices; + +} else { // ANSI + +alias EDITWORDBREAKPROCA EDITWORDBREAKPROC; +alias PROPENUMPROCA PROPENUMPROC; +alias PROPENUMPROCEXA PROPENUMPROCEX; +alias DESKTOPENUMPROCA DESKTOPENUMPROC; +alias WINSTAENUMPROCA WINSTAENUMPROC; +alias MAKEINTRESOURCEA MAKEINTRESOURCE; + +alias WNDCLASSA WNDCLASS; +alias WNDCLASSEXA WNDCLASSEX; +alias MENUITEMINFOA MENUITEMINFO; +alias LPCMENUITEMINFOA LPCMENUITEMINFO; +alias MSGBOXPARAMSA MSGBOXPARAMS; +alias HIGHCONTRASTA HIGHCONTRAST; +alias SERIALKEYSA SERIALKEYS; +alias SOUNDSENTRYA SOUNDSENTRY; +alias CREATESTRUCTA CREATESTRUCT; +alias CBT_CREATEWNDA CBT_CREATEWND; +alias MDICREATESTRUCTA MDICREATESTRUCT; +alias MULTIKEYHELPA MULTIKEYHELP; +alias MONITORINFOEXA MONITORINFOEX; +alias ICONMETRICSA ICONMETRICS; +alias NONCLIENTMETRICSA NONCLIENTMETRICS; + +alias AppendMenuA AppendMenu; +alias BroadcastSystemMessageA BroadcastSystemMessage; +static if (_WIN32_WINNT >= 0x501) { +alias BroadcastSystemMessageExA BroadcastSystemMessageEx; +} +alias CallMsgFilterA CallMsgFilter; +alias CallWindowProcA CallWindowProc; +alias ChangeMenuA ChangeMenu; +alias CharLowerA CharLower; +alias CharLowerBuffA CharLowerBuff; +alias CharNextA CharNext; +alias CharNextExA CharNextEx; +alias CharPrevA CharPrev; +alias CharPrevExA CharPrevEx; +alias CharToOemA CharToOem; +alias CharToOemBuffA CharToOemBuff; +alias CharUpperA CharUpper; +alias CharUpperBuffA CharUpperBuff; +alias CopyAcceleratorTableA CopyAcceleratorTable; +alias CreateAcceleratorTableA CreateAcceleratorTable; +alias CreateDialogA CreateDialog; +alias CreateDialogIndirectA CreateDialogIndirect; +alias CreateDialogIndirectParamA CreateDialogIndirectParam; +alias CreateDialogParamA CreateDialogParam; +alias CreateMDIWindowA CreateMDIWindow; +alias CreateWindowA CreateWindow; +alias CreateWindowExA CreateWindowEx; +alias CreateWindowStationA CreateWindowStation; +alias DefDlgProcA DefDlgProc; +alias DefFrameProcA DefFrameProc; +alias DefMDIChildProcA DefMDIChildProc; +alias DefWindowProcA DefWindowProc; +alias DialogBoxA DialogBox; +alias DialogBoxIndirectA DialogBoxIndirect; +alias DialogBoxIndirectParamA DialogBoxIndirectParam; +alias DialogBoxParamA DialogBoxParam; +alias DispatchMessageA DispatchMessage; +alias DlgDirListA DlgDirList; +alias DlgDirListComboBoxA DlgDirListComboBox; +alias DlgDirSelectComboBoxExA DlgDirSelectComboBoxEx; +alias DlgDirSelectExA DlgDirSelectEx; +alias DrawStateA DrawState; +alias DrawTextA DrawText; +alias DrawTextExA DrawTextEx; +alias EnumDesktopsA EnumDesktops; +alias EnumPropsA EnumProps; +alias EnumPropsExA EnumPropsEx; +alias EnumWindowStationsA EnumWindowStations; +alias FindWindowA FindWindow; +alias FindWindowExA FindWindowEx; +alias GetClassInfoA GetClassInfo; +alias GetClassInfoExA GetClassInfoEx; +alias GetClassLongA GetClassLong; +alias GetClassNameA GetClassName; +alias GetClipboardFormatNameA GetClipboardFormatName; +alias GetDlgItemTextA GetDlgItemText; +alias GetKeyboardLayoutNameA GetKeyboardLayoutName; +alias GetKeyNameTextA GetKeyNameText; +alias GetMenuItemInfoA GetMenuItemInfo; +alias GetMenuStringA GetMenuString; +alias GetMessageA GetMessage; +static if (WINVER >=0x410) { +alias GetMonitorInfoA GetMonitorInfo; +} +alias GetPropA GetProp; +static if (_WIN32_WINNT >= 0x501) { +alias GetRawInputDeviceInfoA GetRawInputDeviceInfo; +} +alias GetTabbedTextExtentA GetTabbedTextExtent; +alias GetUserObjectInformationA GetUserObjectInformation; +alias GetWindowLongA GetWindowLong; +alias GetWindowLongPtrA GetWindowLongPtr; +alias GetWindowTextA GetWindowText; +alias GetWindowTextLengthA GetWindowTextLength; +alias GetAltTabInfoA GetAltTabInfo; +alias GetWindowModuleFileNameA GetWindowModuleFileName; +alias GrayStringA GrayString; +alias InsertMenuA InsertMenu; +alias InsertMenuItemA InsertMenuItem; +alias IsCharAlphaA IsCharAlpha; +alias IsCharAlphaNumericA IsCharAlphaNumeric; +alias IsCharLowerA IsCharLower; +alias IsCharUpperA IsCharUpper; +alias IsDialogMessageA IsDialogMessage; +alias LoadAcceleratorsA LoadAccelerators; +alias LoadBitmapA LoadBitmap; +alias LoadCursorA LoadCursor; +alias LoadIconA LoadIcon; +alias LoadCursorFromFileA LoadCursorFromFile; +alias LoadImageA LoadImage; +alias LoadKeyboardLayoutA LoadKeyboardLayout; +alias LoadMenuA LoadMenu; +alias LoadMenuIndirectA LoadMenuIndirect; +alias LoadStringA LoadString; +alias MapVirtualKeyA MapVirtualKey; +alias MapVirtualKeyExA MapVirtualKeyEx; +alias MessageBoxA MessageBox; +alias MessageBoxExA MessageBoxEx; +alias MessageBoxIndirectA MessageBoxIndirect; +alias ModifyMenuA ModifyMenu; +alias OemToCharA OemToChar; +alias OemToCharBuffA OemToCharBuff; +alias OpenDesktopA OpenDesktop; +alias OpenWindowStationA OpenWindowStation; +alias PeekMessageA PeekMessage; +alias PostMessageA PostMessage; +alias PostThreadMessageA PostThreadMessage; +alias RealGetWindowClassA RealGetWindowClass; +alias RegisterClassA RegisterClass; +alias RegisterClassExA RegisterClassEx; +alias RegisterClipboardFormatA RegisterClipboardFormat; +static if (WINVER >= 0x500) { +alias RegisterDeviceNotificationA RegisterDeviceNotification; +} +alias RegisterWindowMessageA RegisterWindowMessage; +alias RemovePropA RemoveProp; +alias SendDlgItemMessageA SendDlgItemMessage; +alias SendMessageA SendMessage; +alias SendMessageCallbackA SendMessageCallback; +alias SendMessageTimeoutA SendMessageTimeout; +alias SendNotifyMessageA SendNotifyMessage; +alias SetClassLongA SetClassLong; +alias SetDlgItemTextA SetDlgItemText; +alias SetMenuItemInfoA SetMenuItemInfo; +alias SetPropA SetProp; +alias SetUserObjectInformationA SetUserObjectInformation; +alias SetWindowLongA SetWindowLong; +alias SetWindowLongPtrA SetWindowLongPtr; +alias SetWindowsHookA SetWindowsHook; +alias SetWindowsHookExA SetWindowsHookEx; +alias SetWindowTextA SetWindowText; +alias SystemParametersInfoA SystemParametersInfo; +alias TabbedTextOutA TabbedTextOut; +alias TranslateAcceleratorA TranslateAccelerator; +alias UnregisterClassA UnregisterClass; +alias VkKeyScanA VkKeyScan; +alias VkKeyScanExA VkKeyScanEx; +alias WinHelpA WinHelp; +alias wsprintfA wsprintf; +alias wvsprintfA wvsprintf; + +alias ChangeDisplaySettingsA ChangeDisplaySettings; +alias ChangeDisplaySettingsExA ChangeDisplaySettingsEx; +alias CreateDesktopA CreateDesktop; +alias EnumDisplaySettingsA EnumDisplaySettings; +static if ((_WIN32_WINNT >= 0x500) || (_WIN32_WINDOWS >= 0x410)) { + alias EnumDisplaySettingsExA EnumDisplaySettingsEx; +} + alias EnumDisplayDevicesA EnumDisplayDevices; +} + + +alias WNDCLASS* LPWNDCLASS, PWNDCLASS; +alias WNDCLASSEX* LPWNDCLASSEX, PWNDCLASSEX; +alias MENUITEMINFO* LPMENUITEMINFO; +alias MSGBOXPARAMS* PMSGBOXPARAMS, LPMSGBOXPARAMS; +alias HIGHCONTRAST* LPHIGHCONTRAST; +alias SERIALKEYS* LPSERIALKEYS; +alias SOUNDSENTRY* LPSOUNDSENTRY; +alias CREATESTRUCT* LPCREATESTRUCT; +alias CBT_CREATEWND* LPCBT_CREATEWND; +alias MDICREATESTRUCT* LPMDICREATESTRUCT; +alias MULTIKEYHELP* PMULTIKEYHELP, LPMULTIKEYHELP; +alias MONITORINFOEX* LPMONITORINFOEX; +alias ICONMETRICS* LPICONMETRICS; +alias NONCLIENTMETRICS* LPNONCLIENTMETRICS; diff -r 586e4a649642 -r 4a9dcbd9e54f win32/winver.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/winver.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,171 @@ +/***********************************************************************\ +* winver.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* by Stewart Gordon * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.winver; + +private import win32.windef; + +// FIXME: type weirdness +enum { + VS_FILE_INFO = 16, + VS_VERSION_INFO = 1, + VS_USER_DEFINED = 100 +} + +enum { + VS_FFI_SIGNATURE = 0xFEEF04BD, + VS_FFI_STRUCVERSION = 0x10000, + VS_FFI_FILEFLAGSMASK = 0x3F +} + +enum { + VS_FF_DEBUG = 1, + VS_FF_PRERELEASE = 2, + VS_FF_PATCHED = 4, + VS_FF_PRIVATEBUILD = 8, + VS_FF_INFOINFERRED = 16, + VS_FF_SPECIALBUILD = 32 +} + +enum { + VOS_UNKNOWN = 0, + VOS_DOS = 0x10000, + VOS_OS216 = 0x20000, + VOS_OS232 = 0x30000, + VOS_NT = 0x40000, + VOS__BASE = 0, + VOS__WINDOWS16 = 1, + VOS__PM16 = 2, + VOS__PM32 = 3, + VOS__WINDOWS32 = 4, + VOS_DOS_WINDOWS16 = 0x10001, + VOS_DOS_WINDOWS32 = 0x10004, + VOS_OS216_PM16 = 0x20002, + VOS_OS232_PM32 = 0x30003, + VOS_NT_WINDOWS32 = 0x40004 +} + +enum { + VFT_UNKNOWN = 0, + VFT_APP = 1, + VFT_DLL = 2, + VFT_DRV = 3, + VFT_FONT = 4, + VFT_VXD = 5, + VFT_STATIC_LIB = 7 +} + +enum { + VFT2_UNKNOWN = 0, + VFT2_DRV_PRINTER = 1, + VFT2_DRV_KEYBOARD = 2, + VFT2_DRV_LANGUAGE = 3, + VFT2_DRV_DISPLAY = 4, + VFT2_DRV_MOUSE = 5, + VFT2_DRV_NETWORK = 6, + VFT2_DRV_SYSTEM = 7, + VFT2_DRV_INSTALLABLE = 8, + VFT2_DRV_SOUND = 9, + VFT2_DRV_COMM = 10, + VFT2_DRV_INPUTMETHOD = 11, + VFT2_FONT_RASTER = 1, + VFT2_FONT_VECTOR = 2, + VFT2_FONT_TRUETYPE = 3 +} + +enum : DWORD { + VFFF_ISSHAREDFILE = 1 +} + +enum : DWORD { + VFF_CURNEDEST = 1, + VFF_FILEINUSE = 2, + VFF_BUFFTOOSMALL = 4 +} + +enum : DWORD { + VIFF_FORCEINSTALL = 1, + VIFF_DONTDELETEOLD +} + +enum { + VIF_TEMPFILE = 0x00001, + VIF_MISMATCH = 0x00002, + VIF_SRCOLD = 0x00004, + VIF_DIFFLANG = 0x00008, + VIF_DIFFCODEPG = 0x00010, + VIF_DIFFTYPE = 0x00020, + VIF_WRITEPROT = 0x00040, + VIF_FILEINUSE = 0x00080, + VIF_OUTOFSPACE = 0x00100, + VIF_ACCESSVIOLATION = 0x00200, + VIF_SHARINGVIOLATION = 0x00400, + VIF_CANNOTCREATE = 0x00800, + VIF_CANNOTDELETE = 0x01000, + VIF_CANNOTRENAME = 0x02000, + VIF_CANNOTDELETECUR = 0x04000, + VIF_OUTOFMEMORY = 0x08000, + VIF_CANNOTREADSRC = 0x10000, + VIF_CANNOTREADDST = 0x20000, + VIF_BUFFTOOSMALL = 0x40000 +} + +struct VS_FIXEDFILEINFO { + DWORD dwSignature; + DWORD dwStrucVersion; + DWORD dwFileVersionMS; + DWORD dwFileVersionLS; + DWORD dwProductVersionMS; + DWORD dwProductVersionLS; + DWORD dwFileFlagsMask; + DWORD dwFileFlags; + DWORD dwFileOS; + DWORD dwFileType; + DWORD dwFileSubtype; + DWORD dwFileDateMS; + DWORD dwFileDateLS; +} + +extern (Windows) { + DWORD VerFindFileA(DWORD, LPSTR, LPSTR, LPSTR, LPSTR, PUINT, LPSTR, + PUINT); + DWORD VerFindFileW(DWORD, LPWSTR, LPWSTR, LPWSTR, LPWSTR, PUINT, LPWSTR, + PUINT); + DWORD VerInstallFileA(DWORD, LPSTR, LPSTR, LPSTR, LPSTR, LPSTR, LPSTR, + PUINT); + DWORD VerInstallFileW(DWORD, LPWSTR, LPWSTR, LPWSTR, LPWSTR, LPWSTR, + LPWSTR, PUINT); + DWORD GetFileVersionInfoSizeA(LPSTR, PDWORD); + DWORD GetFileVersionInfoSizeW(LPWSTR, PDWORD); + BOOL GetFileVersionInfoA(LPSTR, DWORD, DWORD, PVOID); + BOOL GetFileVersionInfoW(LPWSTR, DWORD, DWORD, PVOID); + DWORD VerLanguageNameA(DWORD, LPSTR, DWORD); + DWORD VerLanguageNameW(DWORD, LPWSTR, DWORD); + BOOL VerQueryValueA(LPVOID, LPSTR, LPVOID*, PUINT); + BOOL VerQueryValueW(LPVOID, LPWSTR, LPVOID*, PUINT); +} + +version (Unicode) { + alias VerFindFileW VerFindFile; + alias VerQueryValueW VerQueryValue; + alias VerInstallFileW VerInstallFile; + alias GetFileVersionInfoSizeW GetFileVersionInfoSize; + alias GetFileVersionInfoW GetFileVersionInfo; + alias VerLanguageNameW VerLanguageName; + alias VerQueryValueW VerQueryValue; +} else { + alias VerQueryValueA VerQueryValue; + alias VerFindFileA VerFindFile; + alias VerInstallFileA VerInstallFile; + alias GetFileVersionInfoSizeA GetFileVersionInfoSize; + alias GetFileVersionInfoA GetFileVersionInfo; + alias VerLanguageNameA VerLanguageName; + alias VerQueryValueA VerQueryValue; +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/ws2tcpip.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/ws2tcpip.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,281 @@ +/***********************************************************************\ +* ws2tcpip.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ + +module win32.ws2tcpip; + +import win32.w32api; +//import win32.winbase; +import win32.windef; +//import win32.basetyps; +import win32.winsock2; + +enum { + IP_OPTIONS = 1, + + IP_HDRINCL = 2, + IP_TOS = 3, + IP_TTL = 4, + IP_MULTICAST_IF = 9, + IP_MULTICAST_TTL = 10, + IP_MULTICAST_LOOP = 11, + IP_ADD_MEMBERSHIP = 12, + IP_DROP_MEMBERSHIP = 13, + IP_DONTFRAGMENT = 14, + IP_ADD_SOURCE_MEMBERSHIP = 15, + IP_DROP_SOURCE_MEMBERSHIP = 16, + IP_BLOCK_SOURCE = 17, + IP_UNBLOCK_SOURCE = 18, + IP_PKTINFO = 19 +} + +enum { + IPV6_UNICAST_HOPS = 4, + IPV6_MULTICAST_IF = 9, + IPV6_MULTICAST_HOPS = 10, + IPV6_MULTICAST_LOOP = 11, + IPV6_ADD_MEMBERSHIP = 12, + IPV6_DROP_MEMBERSHIP = 13, + IPV6_JOIN_GROUP = IPV6_ADD_MEMBERSHIP, + IPV6_LEAVE_GROUP = IPV6_DROP_MEMBERSHIP, + IPV6_PKTINFO = 19 +} + +const IP_DEFAULT_MULTICAST_TTL = 1; +const IP_DEFAULT_MULTICAST_LOOP = 1; +const IP_MAX_MEMBERSHIPS = 20; + +const TCP_EXPEDITED_1122 = 2; + +const UDP_NOCHECKSUM = 1; + +enum { + IFF_UP = 1, + IFF_BROADCAST = 2, + IFF_LOOPBACK = 4, + IFF_POINTTOPOINT = 8, + IFF_MULTICAST = 16 +} + +const SIO_GET_INTERFACE_LIST = _IOR!('t', 127, u_long); + +const INET_ADDRSTRLEN = 16; +const INET6_ADDRSTRLEN = 46; + +const NI_MAXHOST = 1025; +const NI_MAXSERV = 32; + +const NI_NOFQDN = 0x01; +const NI_NUMERICHOST = 0x02; +const NI_NAMEREQD = 0x04; +const NI_NUMERICSERV = 0x08; +const NI_DGRAM = 0x10; + +const AI_PASSIVE = 1; +const AI_CANONNAME = 2; +const AI_NUMERICHOST = 4; + +const EAI_AGAIN = WSATRY_AGAIN; +const EAI_BADFLAGS = WSAEINVAL; +const EAI_FAIL = WSANO_RECOVERY; +const EAI_FAMILY = WSAEAFNOSUPPORT; +const EAI_MEMORY = WSA_NOT_ENOUGH_MEMORY; +const EAI_NODATA = WSANO_DATA; +const EAI_NONAME = WSAHOST_NOT_FOUND; +const EAI_SERVICE = WSATYPE_NOT_FOUND; +const EAI_SOCKTYPE = WSAESOCKTNOSUPPORT; + +struct ip_mreq { + IN_ADDR imr_multiaddr; + IN_ADDR imr_interface; +} + +struct ip_mreq_source { + IN_ADDR imr_multiaddr; + IN_ADDR imr_sourceaddr; + IN_ADDR imr_interface; +} + +struct ip_msfilter { + IN_ADDR imsf_multiaddr; + IN_ADDR imsf_interface; + u_long imsf_fmode; + u_long imsf_numsrc; + IN_ADDR[1] imsf_slist; +} + +template IP_MSFILTER_SIZE(ULONG numsrc) { + const DWORD IP_MSFILTER_SIZE = ip_msfilter.sizeof - IN_ADDR.sizeof + numsrc * IN_ADDR.sizeof; +} + +struct IN_PKTINFO { + IN_ADDR ipi_addr; + UINT ipi_ifindex; +} + +struct IN6_ADDR { + union { + u_char[16] _S6_u8; + u_short[8] _S6_u16; + u_long[4] _S6_u32; + } +} +alias IN6_ADDR* PIN6_ADDR, LPIN6_ADDR; + +struct SOCKADDR_IN6 { + short sin6_family; + u_short sin6_port; + u_long sin6_flowinfo; + IN6_ADDR sin6_addr; + u_long sin6_scope_id; +}; +alias SOCKADDR_IN6* PSOCKADDR_IN6, LPSOCKADDR_IN6; + +extern IN6_ADDR in6addr_any; +extern IN6_ADDR in6addr_loopback; + +/+ TODO: +#define IN6_ARE_ADDR_EQUAL(a, b) \ + (memcmp ((void*)(a), (void*)(b), sizeof (struct in6_addr)) == 0) + +#define IN6_IS_ADDR_UNSPECIFIED(_addr) \ + ( (((const u_long *)(_addr))[0] == 0) \ + && (((const u_long *)(_addr))[1] == 0) \ + && (((const u_long *)(_addr))[2] == 0) \ + && (((const u_long *)(_addr))[3] == 0)) + +#define IN6_IS_ADDR_LOOPBACK(_addr) \ + ( (((const u_long *)(_addr))[0] == 0) \ + && (((const u_long *)(_addr))[1] == 0) \ + && (((const u_long *)(_addr))[2] == 0) \ + && (((const u_long *)(_addr))[3] == 0x01000000)) + +#define IN6_IS_ADDR_MULTICAST(_addr) (((const u_char *) (_addr))[0] == 0xff) + +#define IN6_IS_ADDR_LINKLOCAL(_addr) \ + ( (((const u_char *)(_addr))[0] == 0xfe) \ + && ((((const u_char *)(_addr))[1] & 0xc0) == 0x80)) + +#define IN6_IS_ADDR_SITELOCAL(_addr) \ + ( (((const u_char *)(_addr))[0] == 0xfe) \ + && ((((const u_char *)(_addr))[1] & 0xc0) == 0xc0)) + +#define IN6_IS_ADDR_V4MAPPED(_addr) \ + ( (((const u_long *)(_addr))[0] == 0) \ + && (((const u_long *)(_addr))[1] == 0) \ + && (((const u_long *)(_addr))[2] == 0xffff0000)) + +#define IN6_IS_ADDR_V4COMPAT(_addr) \ + ( (((const u_long *)(_addr))[0] == 0) \ + && (((const u_long *)(_addr))[1] == 0) \ + && (((const u_long *)(_addr))[2] == 0) \ + && (((const u_long *)(_addr))[3] != 0) \ + && (((const u_long *)(_addr))[3] != 0x01000000)) + +#define IN6_IS_ADDR_MC_NODELOCAL(_addr) \ + ( IN6_IS_ADDR_MULTICAST(_addr) \ + && ((((const u_char *)(_addr))[1] & 0xf) == 0x1)) + +#define IN6_IS_ADDR_MC_LINKLOCAL(_addr) \ + ( IN6_IS_ADDR_MULTICAST (_addr) \ + && ((((const u_char *)(_addr))[1] & 0xf) == 0x2)) + +#define IN6_IS_ADDR_MC_SITELOCAL(_addr) \ + ( IN6_IS_ADDR_MULTICAST(_addr) \ + && ((((const u_char *)(_addr))[1] & 0xf) == 0x5)) + +#define IN6_IS_ADDR_MC_ORGLOCAL(_addr) \ + ( IN6_IS_ADDR_MULTICAST(_addr) \ + && ((((const u_char *)(_addr))[1] & 0xf) == 0x8)) + +#define IN6_IS_ADDR_MC_GLOBAL(_addr) \ + ( IN6_IS_ADDR_MULTICAST(_addr) \ + && ((((const u_char *)(_addr))[1] & 0xf) == 0xe)) ++/ + +alias int socklen_t; + +struct IPV6_MREG { + IN6_ADDR ipv6mr_multiaddr; + uint ipv6mr_interface; +} + +struct IN6_PKTINFO { + IN6_ADDR ipi6_addr; + UINT ipi6_ifindex; +} + +struct addrinfo { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + size_t ai_addrlen; + char* ai_canonname; + SOCKADDR* ai_addr; + addrinfo* ai_next; +} + +extern(Windows) { + static if (_WIN32_WINNT >= 0x0501) { + void freeaddrinfo(addrinfo*); + int getaddrinfo (char*, char*, addrinfo*, addrinfo**); + int getnameinfo(SOCKADDR*, socklen_t, char*, DWORD, char*, DWORD, int); + } +} + +/+ TODO +static __inline char* +gai_strerrorA(int ecode) +{ + static char message[1024+1]; + DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_IGNORE_INSERTS + | FORMAT_MESSAGE_MAX_WIDTH_MASK; + DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT); + FormatMessageA(dwFlags, NULL, ecode, dwLanguageId, (LPSTR)message, 1024, NULL); + return message; +} +static __inline WCHAR* +gai_strerrorW(int ecode) +{ + static WCHAR message[1024+1]; + DWORD dwFlags = FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_IGNORE_INSERTS + | FORMAT_MESSAGE_MAX_WIDTH_MASK; + DWORD dwLanguageId = MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT); + FormatMessageW(dwFlags, NULL, ecode, dwLanguageId, (LPWSTR)message, 1024, NULL); + return message; +} +#ifdef UNICODE +#define gai_strerror gai_strerrorW +#else +#define gai_strerror gai_strerrorA +#endif ++/ + +extern(Windows) { + INT getnameinfo(SOCKADDR* pSockaddr, socklen_t SockaddrLength, + PCHAR pNodeBuffer, DWORD NodeBufferSize, PCHAR pServiceBuffer, + DWORD ServiceBufferSize, INT Flags); + + static if (_WIN32_WINNT >= 0x0502) { + INT GetNameInfoW(SOCKADDR* pSockaddr, socklen_t SockaddrLength, + PWCHAR pNodeBuffer, DWORD NodeBufferSize, PWCHAR pServiceBuffer, + DWORD ServiceBufferSize, INT Flags); + + alias getnameinfo GetNameInfoA; + + version(Unicode) { + alias GetNameInfoW GetNameInfo; + } else { + alias GetNameInfoA GetNameInfo; + } + } +} diff -r 586e4a649642 -r 4a9dcbd9e54f win32/wtypes.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/win32/wtypes.d Tue Apr 05 20:44:01 2011 +0200 @@ -0,0 +1,231 @@ +/***********************************************************************\ +* wtypes.d * +* * +* Windows API header module * +* * +* Translated from MinGW Windows headers * +* * +* Placed into public domain * +\***********************************************************************/ +module win32.wtypes; + +import win32.rpc, win32.rpcndr; +private import win32.windef; +private import win32.uuid; // for GUID_NULL + +alias GUID_NULL IID_NULL, CLSID_NULL; + +const ROTFLAGS_REGISTRATIONKEEPSALIVE = 0x01; +const ROTFLAGS_ALLOWANYCLIENT = 0x02; + +// also in winsock2.h +struct BLOB { + ULONG cbSize; + BYTE* pBlobData; +} +alias BLOB* PBLOB, LPBLOB; + +enum DVASPECT { + DVASPECT_CONTENT = 1, + DVASPECT_THUMBNAIL = 2, + DVASPECT_ICON = 4, + DVASPECT_DOCPRINT = 8 +} + +enum DVASPECT2 { + DVASPECT_OPAQUE = 16, + DVASPECT_TRANSPARENT = 32 +} + +enum STATFLAG { + STATFLAG_DEFAULT = 0, + STATFLAG_NONAME = 1 +} + +enum MEMCTX { + MEMCTX_LOCAL = 0, + MEMCTX_TASK, + MEMCTX_SHARED, + MEMCTX_MACSYSTEM, + MEMCTX_UNKNOWN = -1, + MEMCTX_SAME = -2 +} + +enum MSHCTX { + MSHCTX_LOCAL = 0, + MSHCTX_NOSHAREDMEM, + MSHCTX_DIFFERENTMACHINE, + MSHCTX_INPROC, + MSHCTX_CROSSCTX +} + +enum CLSCTX { + CLSCTX_INPROC_SERVER = 1, + CLSCTX_INPROC_HANDLER = 2, + CLSCTX_LOCAL_SERVER = 4, + CLSCTX_INPROC_SERVER16 = 8, + CLSCTX_REMOTE_SERVER = 16 +} + +enum MSHLFLAGS { + MSHLFLAGS_NORMAL, + MSHLFLAGS_TABLESTRONG, + MSHLFLAGS_TABLEWEAK +} + +struct FLAGGED_WORD_BLOB { + uint fFlags; + uint clSize; + ushort asData[1]; +} + +alias WCHAR OLECHAR; +alias LPWSTR LPOLESTR; +alias LPCWSTR LPCOLESTR; + +alias ushort VARTYPE; +alias short VARIANT_BOOL; +alias VARIANT_BOOL _VARIANT_BOOL; +const VARIANT_BOOL VARIANT_TRUE = -1; // 0xffff; +const VARIANT_BOOL VARIANT_FALSE = 0; + +alias OLECHAR* BSTR; +alias FLAGGED_WORD_BLOB* wireBSTR; +alias BSTR* LPBSTR; +//alias LONG SCODE; // also in winerror +alias HANDLE HCONTEXT, HMETAFILEPICT; + +union CY { + struct { + uint Lo; + int Hi; + } + LONGLONG int64; +} + +alias double DATE; +struct BSTRBLOB { + ULONG cbSize; + PBYTE pData; +} +alias BSTRBLOB* LPBSTRBLOB; + +// Used only in the PROPVARIANT structure +// According to the 2003 SDK, this should be in propidl.h, not here. +struct CLIPDATA { + ULONG cbSize; + int ulClipFmt; + PBYTE pClipData; +} + +enum STGC { + STGC_DEFAULT, + STGC_OVERWRITE, + STGC_ONLYIFCURRENT, + STGC_DANGEROUSLYCOMMITMERELYTODISKCACHE +} + +enum STGMOVE { + STGMOVE_MOVE, + STGMOVE_COPY, + STGMOVE_SHALLOWCOPY +} + +enum VARENUM { + VT_EMPTY, + VT_NULL, + VT_I2, + VT_I4, + VT_R4, + VT_R8, + VT_CY, + VT_DATE, + VT_BSTR, + VT_DISPATCH, + VT_ERROR, + VT_BOOL, + VT_VARIANT, + VT_UNKNOWN, + VT_DECIMAL, + VT_I1 = 16, + VT_UI1, + VT_UI2, + VT_UI4, + VT_I8, + VT_UI8, + VT_INT, + VT_UINT, + VT_VOID, + VT_HRESULT, + VT_PTR, + VT_SAFEARRAY, + VT_CARRAY, + VT_USERDEFINED, + VT_LPSTR, + VT_LPWSTR, + VT_RECORD = 36, + VT_INT_PTR = 37, + VT_UINT_PTR = 38, + VT_FILETIME = 64, + VT_BLOB, + VT_STREAM, + VT_STORAGE, + VT_STREAMED_OBJECT, + VT_STORED_OBJECT, + VT_BLOB_OBJECT, + VT_CF, + VT_CLSID, + VT_BSTR_BLOB = 0xfff, + VT_VECTOR = 0x1000, + VT_ARRAY = 0x2000, + VT_BYREF = 0x4000, + VT_RESERVED = 0x8000, + VT_ILLEGAL = 0xffff, + VT_ILLEGALMASKED = 0xfff, + VT_TYPEMASK = 0xfff +}; + +struct BYTE_SIZEDARR { + uint clSize; + byte* pData; +} + +struct WORD_SIZEDARR { + uint clSize; + ushort* pData; +} + +struct DWORD_SIZEDARR { +uint clSize; +uint* pData; +} + +struct HYPER_SIZEDARR { + uint clSize; + hyper* pData; +} + +alias double DOUBLE; + + +struct DECIMAL { + USHORT wReserved; + union { + struct { + ubyte scale; // valid values are 0 to 28 + ubyte sign; // 0 for positive, DECIMAL_NEG for negatives. + const ubyte DECIMAL_NEG = 0x80; + } + USHORT signscale; + } + ULONG Hi32; + union { + struct { + ULONG Lo32; + ULONG Mid32; + } + ULONGLONG Lo64; + } + // #define DECIMAL_SETZERO(d) {(d).Lo64=(d).Hi32=(d).signscale=0;} + void setZero() { Lo64 = 0; Hi32 = 0; signscale = 0; } +}